diff options
318 files changed, 4807 insertions, 4396 deletions
diff --git a/apps/comments/l10n/zh_CN.js b/apps/comments/l10n/zh_CN.js index 9a459c92b6e..336636e2bf1 100644 --- a/apps/comments/l10n/zh_CN.js +++ b/apps/comments/l10n/zh_CN.js @@ -16,16 +16,16 @@ OC.L10N.register( "Error occurred while retrieving comment with id {id}" : "检索 id 为 {id} 的评论出错", "Error occurred while updating comment with id {id}" : "更新 id 为 {id} 的评论出错", "Error occurred while posting comment" : "发布评论出错", - "_%n unread comment_::_%n unread comments_" : ["%n 未读评论"], + "_%n unread comment_::_%n unread comments_" : ["%n 未读评论"], "Comment" : "评论", "You commented" : "您的评论", "%1$s commented" : "%1$s 已评论", - "{author} commented" : "{author} 评论了", - "You commented on %1$s" : "您在 %1$s 的评论", + "{author} commented" : "{author} 评论了", + "You commented on %1$s" : "您在 %1$s 的评论", "You commented on {file}" : "您对 {file} 的评论", "%1$s commented on %2$s" : "%1$s 评论了 %2$s", "{author} commented on {file}" : "{author} 对 {file} 的评论", - "<strong>Comments</strong> for files" : "文件的<strong>评论</strong>", + "<strong>Comments</strong> for files" : "文件的<strong>评论</strong>", "A (now) deleted user mentioned you in a comment on “%s”" : "一个(已)被删除的用户在 “%s” 的评论中提到了您", "A (now) deleted user mentioned you in a comment on “{file}”" : "一个(已)被删除的用户在 “{file}” 的评论中提到了您", "%1$s mentioned you in a comment on “%2$s”" : "%1$s 在 “%2$s” 的评论中提到了您", diff --git a/apps/comments/l10n/zh_CN.json b/apps/comments/l10n/zh_CN.json index be867c5b856..676ec612d8e 100644 --- a/apps/comments/l10n/zh_CN.json +++ b/apps/comments/l10n/zh_CN.json @@ -14,16 +14,16 @@ "Error occurred while retrieving comment with id {id}" : "检索 id 为 {id} 的评论出错", "Error occurred while updating comment with id {id}" : "更新 id 为 {id} 的评论出错", "Error occurred while posting comment" : "发布评论出错", - "_%n unread comment_::_%n unread comments_" : ["%n 未读评论"], + "_%n unread comment_::_%n unread comments_" : ["%n 未读评论"], "Comment" : "评论", "You commented" : "您的评论", "%1$s commented" : "%1$s 已评论", - "{author} commented" : "{author} 评论了", - "You commented on %1$s" : "您在 %1$s 的评论", + "{author} commented" : "{author} 评论了", + "You commented on %1$s" : "您在 %1$s 的评论", "You commented on {file}" : "您对 {file} 的评论", "%1$s commented on %2$s" : "%1$s 评论了 %2$s", "{author} commented on {file}" : "{author} 对 {file} 的评论", - "<strong>Comments</strong> for files" : "文件的<strong>评论</strong>", + "<strong>Comments</strong> for files" : "文件的<strong>评论</strong>", "A (now) deleted user mentioned you in a comment on “%s”" : "一个(已)被删除的用户在 “%s” 的评论中提到了您", "A (now) deleted user mentioned you in a comment on “{file}”" : "一个(已)被删除的用户在 “{file}” 的评论中提到了您", "%1$s mentioned you in a comment on “%2$s”" : "%1$s 在 “%2$s” 的评论中提到了您", diff --git a/apps/dav/lib/CardDAV/CardDavBackend.php b/apps/dav/lib/CardDAV/CardDavBackend.php index a320984c1fe..b71c6380a91 100644 --- a/apps/dav/lib/CardDAV/CardDavBackend.php +++ b/apps/dav/lib/CardDAV/CardDavBackend.php @@ -180,7 +180,7 @@ class CardDavBackend implements BackendInterface, SyncSupport { $addressBooks[$row['id']] = [ 'id' => $row['id'], 'uri' => $uri, - 'principaluri' => $principalUri, + 'principaluri' => $principalUriOriginal, '{DAV:}displayname' => $displayName, '{' . Plugin::NS_CARDDAV . '}addressbook-description' => $row['description'], '{http://calendarserver.org/ns/}getctag' => $row['synctoken'], @@ -195,6 +195,33 @@ class CardDavBackend implements BackendInterface, SyncSupport { return array_values($addressBooks); } + public function getUsersOwnAddressBooks($principalUri) { + $principalUriOriginal = $principalUri; + $principalUri = $this->convertPrincipal($principalUri, true); + $query = $this->db->getQueryBuilder(); + $query->select(['id', 'uri', 'displayname', 'principaluri', 'description', 'synctoken']) + ->from('addressbooks') + ->where($query->expr()->eq('principaluri', $query->createNamedParameter($principalUri))); + + $addressBooks = []; + + $result = $query->execute(); + while($row = $result->fetch()) { + $addressBooks[$row['id']] = [ + 'id' => $row['id'], + 'uri' => $row['uri'], + 'principaluri' => $this->convertPrincipal($row['principaluri'], false), + '{DAV:}displayname' => $row['displayname'], + '{' . Plugin::NS_CARDDAV . '}addressbook-description' => $row['description'], + '{http://calendarserver.org/ns/}getctag' => $row['synctoken'], + '{http://sabredav.org/ns}sync-token' => $row['synctoken']?$row['synctoken']:'0', + ]; + } + $result->closeCursor(); + + return array_values($addressBooks); + } + private function getUserDisplayName($uid) { if (!isset($this->userDisplayNames[$uid])) { $user = $this->userManager->get($uid); diff --git a/apps/dav/lib/Connector/Sabre/MaintenancePlugin.php b/apps/dav/lib/Connector/Sabre/MaintenancePlugin.php index 57284b22445..c305fa63f69 100644 --- a/apps/dav/lib/Connector/Sabre/MaintenancePlugin.php +++ b/apps/dav/lib/Connector/Sabre/MaintenancePlugin.php @@ -78,9 +78,6 @@ class MaintenancePlugin extends ServerPlugin { * @return bool */ public function checkMaintenanceMode() { - if ($this->config->getSystemValue('singleuser', false)) { - throw new ServiceUnavailable('System in single user mode.'); - } if ($this->config->getSystemValue('maintenance', false)) { throw new ServiceUnavailable('System in maintenance mode.'); } diff --git a/apps/dav/lib/HookManager.php b/apps/dav/lib/HookManager.php index 26f3895a459..8148df2d37b 100644 --- a/apps/dav/lib/HookManager.php +++ b/apps/dav/lib/HookManager.php @@ -96,7 +96,7 @@ class HookManager { $uid = $params['uid']; $this->usersToDelete[$uid] = $this->userManager->get($uid); $this->calendarsToDelete = $this->calDav->getUsersOwnCalendars('principals/users/' . $uid); - $this->addressBooksToDelete = $this->cardDav->getAddressBooksForUser('principals/users/' . $uid); + $this->addressBooksToDelete = $this->cardDav->getUsersOwnAddressBooks('principals/users/' . $uid); } public function postDeleteUser($params) { diff --git a/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php b/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php index f4c321fa6d0..a4445217469 100644 --- a/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php +++ b/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php @@ -273,7 +273,7 @@ class CardDavBackendTest extends TestCase { // create a new address book $this->backend->createAddressBook(self::UNIT_TEST_USER, 'Example', []); - $books = $this->backend->getAddressBooksForUser(self::UNIT_TEST_USER); + $books = $this->backend->getUsersOwnAddressBooks(self::UNIT_TEST_USER); $this->assertEquals(1, count($books)); $bookId = $books[0]['id']; diff --git a/apps/dav/tests/unit/Connector/Sabre/MaintenancePluginTest.php b/apps/dav/tests/unit/Connector/Sabre/MaintenancePluginTest.php index 56306e87136..43c32299523 100644 --- a/apps/dav/tests/unit/Connector/Sabre/MaintenancePluginTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/MaintenancePluginTest.php @@ -48,27 +48,13 @@ class MaintenancePluginTest extends TestCase { /** * @expectedException \Sabre\DAV\Exception\ServiceUnavailable - * @expectedExceptionMessage System in single user mode. - */ - public function testSingleUserMode() { - $this->config - ->expects($this->once()) - ->method('getSystemValue') - ->with('singleuser', false) - ->will($this->returnValue(true)); - - $this->maintenancePlugin->checkMaintenanceMode(); - } - - /** - * @expectedException \Sabre\DAV\Exception\ServiceUnavailable - * @expectedExceptionMessage System in single user mode. + * @expectedExceptionMessage System in maintenance mode. */ public function testMaintenanceMode() { $this->config ->expects($this->exactly(1)) ->method('getSystemValue') - ->will($this->onConsecutiveCalls([false, true])); + ->will($this->returnValue(true)); $this->maintenancePlugin->checkMaintenanceMode(); } diff --git a/apps/dav/tests/unit/DAV/HookManagerTest.php b/apps/dav/tests/unit/DAV/HookManagerTest.php index 9579ce1c6d3..375bda9f3c2 100644 --- a/apps/dav/tests/unit/DAV/HookManagerTest.php +++ b/apps/dav/tests/unit/DAV/HookManagerTest.php @@ -195,7 +195,7 @@ class HookManagerTest extends TestCase { $card = $this->getMockBuilder(CardDavBackend::class) ->disableOriginalConstructor() ->getMock(); - $card->expects($this->once())->method('getAddressBooksForUser')->willReturn([ + $card->expects($this->once())->method('getUsersOwnAddressBooks')->willReturn([ ['id' => 'personal'] ]); $card->expects($this->once())->method('deleteAddressBook'); diff --git a/apps/federatedfilesharing/l10n/sq.js b/apps/federatedfilesharing/l10n/sq.js index 2bbf90d42c0..edf1362df9d 100644 --- a/apps/federatedfilesharing/l10n/sq.js +++ b/apps/federatedfilesharing/l10n/sq.js @@ -13,6 +13,9 @@ OC.L10N.register( "Press Ctrl-C to copy." : "Shtypni Ctrl-C për të kopjuar", "Invalid Federated Cloud ID" : "ID Federated Cloud e pavlefshme", "Server to server sharing is not enabled on this server" : "Shpërndarja server në server nuk është e mundësuar në këtë server", + "Couldn't establish a federated share." : "Nuk mund të vendosni një shpërndarje të federuar", + "Couldn't establish a federated share, maybe the password was wrong." : "Nuk mund të vendoset një shpërndarje e federuar, ndoshta fjalëkalimi ishte gabim.", + "Federated Share request was successful, you will receive a invitation. Check your notifications." : "Kërkesa për shpërndarje te federuar ishte e suksesshme, ju do të merrni një ftesë. Kontrolloni njoftimet tuaja.", "Not allowed to create a federated share with the owner." : "Nuk lejohet te krijoni një shpërndarje të federuar me zotëruesin", "Invalid or untrusted SSL certificate" : "Çertifikatë SSL e pavlefshme ose e dyshimtë", "Storage not valid" : "memorja nuk është e vlefshme", diff --git a/apps/federatedfilesharing/l10n/sq.json b/apps/federatedfilesharing/l10n/sq.json index d1828c95eef..4747db18be1 100644 --- a/apps/federatedfilesharing/l10n/sq.json +++ b/apps/federatedfilesharing/l10n/sq.json @@ -11,6 +11,9 @@ "Press Ctrl-C to copy." : "Shtypni Ctrl-C për të kopjuar", "Invalid Federated Cloud ID" : "ID Federated Cloud e pavlefshme", "Server to server sharing is not enabled on this server" : "Shpërndarja server në server nuk është e mundësuar në këtë server", + "Couldn't establish a federated share." : "Nuk mund të vendosni një shpërndarje të federuar", + "Couldn't establish a federated share, maybe the password was wrong." : "Nuk mund të vendoset një shpërndarje e federuar, ndoshta fjalëkalimi ishte gabim.", + "Federated Share request was successful, you will receive a invitation. Check your notifications." : "Kërkesa për shpërndarje te federuar ishte e suksesshme, ju do të merrni një ftesë. Kontrolloni njoftimet tuaja.", "Not allowed to create a federated share with the owner." : "Nuk lejohet te krijoni një shpërndarje të federuar me zotëruesin", "Invalid or untrusted SSL certificate" : "Çertifikatë SSL e pavlefshme ose e dyshimtë", "Storage not valid" : "memorja nuk është e vlefshme", diff --git a/apps/federatedfilesharing/l10n/zh_CN.js b/apps/federatedfilesharing/l10n/zh_CN.js index 03f94122a9b..68f76fe0c16 100644 --- a/apps/federatedfilesharing/l10n/zh_CN.js +++ b/apps/federatedfilesharing/l10n/zh_CN.js @@ -27,6 +27,7 @@ OC.L10N.register( "Sharing %s failed, because this item is already shared with %s" : "共享 %s 失败,因为它已经共享给 %s", "Not allowed to create a federated share with the same user" : "不能给你自己分享文件", "File is already shared with %s" : "文件已经共享与 %s", + "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "共享 %s 失败, 无法找到 %s, 可能该服务器当前无法访问或者使用自签名证书.", "Could not find share" : "没有发现共享", "Accept" : "接受", "Decline" : "拒绝", @@ -41,6 +42,8 @@ OC.L10N.register( "Add to your website" : "添加到您的网站", "Share with me via Nextcloud" : "通过联合云与我共享", "HTML Code:" : "HTML 代码:", - "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "共享 %s 失败,联合云无法找到 %s,请检查设置或联系管理员。" + "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "共享 %s 失败,联合云无法找到 %s,请检查设置或联系管理员。", + "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "你接收到 \"/%3$s\" 做为远程共享来自于 %1$s (代表 %2$s)", + "You received \"/%3$s\" as a remote share from %1$s" : "你接收到 \"/%3$s\" 做为远程共享来自于 %1$s" }, "nplurals=1; plural=0;"); diff --git a/apps/federatedfilesharing/l10n/zh_CN.json b/apps/federatedfilesharing/l10n/zh_CN.json index 2972c8ba96f..640acad07a1 100644 --- a/apps/federatedfilesharing/l10n/zh_CN.json +++ b/apps/federatedfilesharing/l10n/zh_CN.json @@ -25,6 +25,7 @@ "Sharing %s failed, because this item is already shared with %s" : "共享 %s 失败,因为它已经共享给 %s", "Not allowed to create a federated share with the same user" : "不能给你自己分享文件", "File is already shared with %s" : "文件已经共享与 %s", + "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "共享 %s 失败, 无法找到 %s, 可能该服务器当前无法访问或者使用自签名证书.", "Could not find share" : "没有发现共享", "Accept" : "接受", "Decline" : "拒绝", @@ -39,6 +40,8 @@ "Add to your website" : "添加到您的网站", "Share with me via Nextcloud" : "通过联合云与我共享", "HTML Code:" : "HTML 代码:", - "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "共享 %s 失败,联合云无法找到 %s,请检查设置或联系管理员。" + "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "共享 %s 失败,联合云无法找到 %s,请检查设置或联系管理员。", + "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "你接收到 \"/%3$s\" 做为远程共享来自于 %1$s (代表 %2$s)", + "You received \"/%3$s\" as a remote share from %1$s" : "你接收到 \"/%3$s\" 做为远程共享来自于 %1$s" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/federation/l10n/ja.js b/apps/federation/l10n/ja.js index 88b82a32c43..74939d210b0 100644 --- a/apps/federation/l10n/ja.js +++ b/apps/federation/l10n/ja.js @@ -2,14 +2,14 @@ OC.L10N.register( "federation", { "Added to the list of trusted servers" : "信頼済サーバーとしてリストに登録済", - "Server is already in the list of trusted servers." : "信頼済サイトとして既に登録されています。", + "Server is already in the list of trusted servers." : "信頼済サーバーとして既に登録されています。", "No server to federate with found" : "Nextcloud 連携サーバーはありません。", "Could not add server" : "サーバーを追加できませんでした", "Federation" : "連携", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "ownCloud 連携では他の信頼済サーバーとユーザーリストをやり取りすること許可します。例えば、連携共有時で他のサーバーのユーザーのIDを自動補完します。", + "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "連携では他の信頼済サーバーとユーザーリストをやり取りすること許可します。例えば、連携共有時で他のサーバーのユーザーのIDを自動補完します。", "Add server automatically once a federated share was created successfully" : "追加するサーバは自動的に統合され、共有が追加されました", "Trusted servers" : "信頼済サーバー", - "+ Add trusted server" : "+ 信頼するサーバーに追加", + "+ Add trusted server" : "+ 信頼済サーバーに追加", "Trusted server" : "信頼済サーバー", "Add" : "追加", "Trusted Servers" : "信頼済サーバー", diff --git a/apps/federation/l10n/ja.json b/apps/federation/l10n/ja.json index ff7b0faedd3..4fbffc8d573 100644 --- a/apps/federation/l10n/ja.json +++ b/apps/federation/l10n/ja.json @@ -1,13 +1,13 @@ { "translations": { "Added to the list of trusted servers" : "信頼済サーバーとしてリストに登録済", - "Server is already in the list of trusted servers." : "信頼済サイトとして既に登録されています。", + "Server is already in the list of trusted servers." : "信頼済サーバーとして既に登録されています。", "No server to federate with found" : "Nextcloud 連携サーバーはありません。", "Could not add server" : "サーバーを追加できませんでした", "Federation" : "連携", - "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "ownCloud 連携では他の信頼済サーバーとユーザーリストをやり取りすること許可します。例えば、連携共有時で他のサーバーのユーザーのIDを自動補完します。", + "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "連携では他の信頼済サーバーとユーザーリストをやり取りすること許可します。例えば、連携共有時で他のサーバーのユーザーのIDを自動補完します。", "Add server automatically once a federated share was created successfully" : "追加するサーバは自動的に統合され、共有が追加されました", "Trusted servers" : "信頼済サーバー", - "+ Add trusted server" : "+ 信頼するサーバーに追加", + "+ Add trusted server" : "+ 信頼済サーバーに追加", "Trusted server" : "信頼済サーバー", "Add" : "追加", "Trusted Servers" : "信頼済サーバー", diff --git a/apps/federation/l10n/tr.js b/apps/federation/l10n/tr.js index e6ae7033bbc..1786aa0c0d5 100644 --- a/apps/federation/l10n/tr.js +++ b/apps/federation/l10n/tr.js @@ -8,12 +8,12 @@ OC.L10N.register( "Federation" : "Birleşim", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Birleşim, diğer güvenilir sunucularla dosya/klasör paylaşımı yapılmasını sağlar. Örneğin, bu işlem birleştirilmiş paylaşım için dış kullanıcıların otomatik olarak tamamlanmasını sağlar.", "Add server automatically once a federated share was created successfully" : "Bir birleşik paylaşım eklendiğinde sunucu otomatik olarak eklensin", + "Trusted servers" : "Güvenilen sunucular", + "+ Add trusted server" : "+ Güvenilir sunucuya ekle", + "Trusted server" : "Güvenilen sunucular", + "Add" : "Ekle", "Trusted Servers" : "Güvenilir Sunucular", "+ Add Nextcloud server" : "+ Nextcloud sunucusu ekle", - "Nextcloud Server" : "Nextcloud Sunucusu", - "Server added to the list of trusted Nextclouds" : "Sunucu güvenilen Nexcloud sunucuları arasına eklendi", - "No Nextcloud server found" : "Herhangi bir Nextcloud sunucusu bulunamadı", - "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Nextcloud Birleşimi, kullanıcı dizinin diğer güvenilir Nextcloud sunucuları ile paylaşılmasını sağlar. Örneğin, bu işlem birleştirilmiş paylaşım için dış kullanıcıların otomatik olarak tamamlanmasını sağlar.", - "Trusted Nextcloud Servers" : "Güvenilen NextCloud Sunucuları" + "Nextcloud Server" : "Nextcloud Sunucusu" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/federation/l10n/tr.json b/apps/federation/l10n/tr.json index d31e033cae0..0e18ba70b67 100644 --- a/apps/federation/l10n/tr.json +++ b/apps/federation/l10n/tr.json @@ -6,12 +6,12 @@ "Federation" : "Birleşim", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Birleşim, diğer güvenilir sunucularla dosya/klasör paylaşımı yapılmasını sağlar. Örneğin, bu işlem birleştirilmiş paylaşım için dış kullanıcıların otomatik olarak tamamlanmasını sağlar.", "Add server automatically once a federated share was created successfully" : "Bir birleşik paylaşım eklendiğinde sunucu otomatik olarak eklensin", + "Trusted servers" : "Güvenilen sunucular", + "+ Add trusted server" : "+ Güvenilir sunucuya ekle", + "Trusted server" : "Güvenilen sunucular", + "Add" : "Ekle", "Trusted Servers" : "Güvenilir Sunucular", "+ Add Nextcloud server" : "+ Nextcloud sunucusu ekle", - "Nextcloud Server" : "Nextcloud Sunucusu", - "Server added to the list of trusted Nextclouds" : "Sunucu güvenilen Nexcloud sunucuları arasına eklendi", - "No Nextcloud server found" : "Herhangi bir Nextcloud sunucusu bulunamadı", - "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Nextcloud Birleşimi, kullanıcı dizinin diğer güvenilir Nextcloud sunucuları ile paylaşılmasını sağlar. Örneğin, bu işlem birleştirilmiş paylaşım için dış kullanıcıların otomatik olarak tamamlanmasını sağlar.", - "Trusted Nextcloud Servers" : "Güvenilen NextCloud Sunucuları" + "Nextcloud Server" : "Nextcloud Sunucusu" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/files/css/files.css b/apps/files/css/files.css index 05b8e58cbe4..54ed05385fa 100644 --- a/apps/files/css/files.css +++ b/apps/files/css/files.css @@ -759,10 +759,6 @@ table.dragshadow td.size { opacity: 0; } -#fileList .popovermenu a.action img { - padding: initial; -} - html.ie8 #controls .button.new { padding-right: 0; } diff --git a/apps/files/js/search.js b/apps/files/js/search.js index fa79d695165..140a66e346d 100644 --- a/apps/files/js/search.js +++ b/apps/files/js/search.js @@ -63,7 +63,7 @@ show size and last modified date on the right */ this.updateLegacyMimetype(result); - var $pathDiv = $('<div class="path"></div>').text(result.path.substr(1)); + var $pathDiv = $('<div class="path"></div>').text(result.path.substr(1, result.path.lastIndexOf("/"))); $row.find('td.info div.name').after($pathDiv).text(result.name); $row.find('td.result a').attr('href', result.link); @@ -80,7 +80,7 @@ show size and last modified date on the right */ this.updateLegacyMimetype(result); - var $pathDiv = $('<div class="path"></div>').text(result.path.substr(1)); + var $pathDiv = $('<div class="path"></div>').text(result.path.substr(1, result.path.lastIndexOf("/"))); $row.find('td.info div.name').after($pathDiv).text(result.name); $row.find('td.result a').attr('href', result.link); diff --git a/apps/files/l10n/eu.js b/apps/files/l10n/eu.js index 5c1251d5c69..e5e2ee47f0e 100644 --- a/apps/files/l10n/eu.js +++ b/apps/files/l10n/eu.js @@ -1,86 +1,120 @@ OC.L10N.register( "files", { - "Storage not available" : "Biltegia ez dago eskuragarri", + "Storage is temporarily not available" : "Biltegiratzea ez dago erabilgarri une honetan", "Storage invalid" : "Biltegi bliogabea", "Unknown error" : "Errore ezezaguna", - "Unable to set upload directory." : "Ezin da igoera direktorioa ezarri.", - "Invalid Token" : "Lekuko baliogabea", - "No file was uploaded. Unknown error" : "Ez da fitxategirik igo. Errore ezezaguna", - "There is no error, the file uploaded with success" : "Ez da errorerik egon, fitxategia ongi igo da", - "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Igotako fitxategiak php.ini fitxategian ezarritako upload_max_filesize muga gainditu du:", - "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Igotako fitxategia HTML formularioan zehaztutako MAX_FILE_SIZE direktiba baino handidagoa da.", - "The uploaded file was only partially uploaded" : "Igotako fitxategiaren zati bat bakarrik igo da", - "No file was uploaded" : "Ez da fitxategirik igo", - "Missing a temporary folder" : "Aldi bateko karpeta falta da", - "Failed to write to disk" : "Errore bat izan da diskoan idazterakoan", - "Not enough storage available" : "Ez dago behar aina leku erabilgarri,", - "The target folder has been moved or deleted." : "Jatorrizko karpeta mugitu edo ezabatu da.", - "Upload failed. Could not find uploaded file" : "Igoerak huts egin du. Ezin izan da igotako fitxategia aurkitu", - "Upload failed. Could not get file info." : "Igoerak huts egin du. Ezin izan da fitxategiaren informazioa eskuratu.", - "Invalid directory." : "Baliogabeko karpeta.", - "Files" : "Fitxategiak", "All files" : "Fitxategi guztiak", + "Recent" : "Duela gutxi", + "File could not be found" : "Fitxategia ezin izan da aurkitu", "Home" : "Etxekoa", "Close" : "Itxi", "Favorites" : "Gogokoak", + "Could not create folder \"{dir}\"" : "Ezin izan da \"{dir}\" karpeta sortu", "Upload cancelled." : "Igoera ezeztatuta", "Unable to upload {filename} as it is a directory or has 0 bytes" : "Ezin da {filename} igo karpeta bat delako edo 0 byte dituelako", - "Total file size {size1} exceeds upload limit {size2}" : "Fitxategiaren tamainak {size1} igotzeko muga {size2} gainditzen du", "Not enough free space, you are uploading {size1} but only {size2} is left" : "Ez dago leku nahikorik, zu {size1} igotzen ari zara baina bakarrik {size2} libre dago", - "Could not get result from server." : "Ezin da zerbitzaritik emaitzik lortu", + "Target folder \"{dir}\" does not exist any more" : "\"{dir}\" karpeta ez du gehiago existitzen", + "Not enough free space" : "Ez dago nahiko leku librea", "Uploading..." : "Igotzen...", "..." : "...", - "File upload is in progress. Leaving the page now will cancel the upload." : "Fitxategien igoera martxan da. Orria orain uzteak igoera ezeztatutko du.", + "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} of {totalSize} ({bitrate})", "Actions" : "Ekintzak", "Download" : "Deskargatu", "Rename" : "Berrizendatu", + "Move" : "Mugitu", + "Target folder" : "Xede karpeta", "Delete" : "Ezabatu", "Disconnect storage" : "Deskonektatu biltegia", "Unshare" : "Ez elkarbanatu", + "Could not load info for file \"{file}\"" : "Ezin izan da \"{file}\" fitxategiaren informazioa kargatu", + "Files" : "Fitxategiak", "Details" : "Xehetasunak", "Select" : "hautatu", "Pending" : "Zain", "Unable to determine date" : "Ezin izan da data zehaztu", - "No entries in this folder match '{filter}'" : "Karpeta honetan ez dago sarrerarik '{filter}' iragazkiarekin bat egiten dutenak", + "This operation is forbidden" : "Eragiketa hau debekatuta dago", + "This directory is unavailable, please check the logs or contact the administrator" : "Direktorio hau ez dago erabilgarri, begira itzazu erregistroa edo administratzailearekin harremanetan jarri", + "Could not move \"{file}\", target exists" : "Ezin da \"{file}\" mugitu, helburuan existitzen da jadanik", + "Could not move \"{file}\"" : "Ezin da mugitu \"{file}\"", + "{newName} already exists" : "{newName} existitzen da dagoeneko", + "Could not rename \"{fileName}\", it does not exist any more" : "Ezin izan da \"{fileName}\" berrizendatu, ez da existitzen", + "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "\"{targetName}\" izena dagoeneko dago erabilita \"{dir}\" karpetan. Mesedez, beste bat aukeratu.", + "Could not rename \"{fileName}\"" : "Ezin izan da \"{fileName}\" berrizendatu ", + "Could not create file \"{file}\"" : "Ezin izan da \"{file}\" fitxategia sortu", + "Could not create file \"{file}\" because it already exists" : "Ezin izan da \"{file}\" fitxategia sortu, dagoeneko existitzen delako", + "Could not create folder \"{dir}\" because it already exists" : "Ezin izan da \"{dir}\" karpeta sortu, dagoeneko existitzen delako", + "Error deleting file \"{fileName}\"." : "Akatsa \"{fileName}\" fitxategia ezabatzerakoan.", + "No search results in other folders for '{tag}{filter}{endtag}'" : "Ez da '{tag}{filter}{endtag}' bilaketarako emaitzik aurkitu beste karpetetan", "Name" : "Izena", "Size" : "Tamaina", "Modified" : "Aldatuta", "_%n folder_::_%n folders_" : ["karpeta %n","%n karpeta"], "_%n file_::_%n files_" : ["fitxategi %n","%n fitxategi"], "{dirs} and {files}" : "{dirs} eta {files}", + "_including %n hidden_::_including %n hidden_" : ["including %n hidden","including %n hidden"], "You don’t have permission to upload or create files here" : "Ez duzu fitxategiak hona igotzeko edo hemen sortzeko baimenik", "_Uploading %n file_::_Uploading %n files_" : ["Fitxategi %n igotzen","%n fitxategi igotzen"], "New" : "Berria", "\"{name}\" is an invalid file name." : "\"{name}\" ez da fitxategi izen baliogarria.", "File name cannot be empty." : "Fitxategi izena ezin da hutsa izan.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} -en biltegiratzea beteta dago, artxiboak ezin dira eguneratu edo sinkronizatu jada!", "Your storage is full, files can not be updated or synced anymore!" : "Zure biltegiratzea beterik dago, ezingo duzu aurrerantzean fitxategirik igo edo sinkronizatu!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} -en biltegiratzea ia beteta dago ({usedSpacePercent}%)", "Your storage is almost full ({usedSpacePercent}%)" : "Zure biltegiratzea nahiko beterik dago (%{usedSpacePercent})", + "_matches '{filter}'_::_match '{filter}'_" : ["matches '{filter}'","match '{filter}'"], + "View in folder" : "karpetan ikusi", + "Path" : "Path", + "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"], "Favorited" : "Gogokoa", "Favorite" : "Gogokoa", + "Copy local link" : "Kopiatu tokiko esteka", "Folder" : "Karpeta", "New folder" : "Karpeta berria", "Upload" : "Igo", + "An error occurred while trying to update the tags" : "Errore bat gertatu da etiketak eguneratzerakoan", + "Added to favorites" : "Gogokoetan gehitu da", + "Removed from favorites" : "Gogokoetatik kendu da", + "You added {file} to your favorites" : "{file} gehitu duzu gogokoetara", + "You removed {file} from your favorites" : "{file} kendu duzu gogokoetatik", + "File changes" : "Fitxategi aldaketak", + "Created by {user}" : "{user} erabiltzaileak sortua", + "Changed by {user}" : "{user} -k aldatuta", + "Deleted by {user}" : "{user} -k ezabatuta", + "Restored by {user}" : "{user} -k zaharberrituta", + "Renamed by {user}" : "{user} -k berrizendatuta", + "Moved by {user}" : "{user} -k mugituta", + "You created {file}" : "Sortu duzu {file}", + "{user} created {file}" : "{user} {file} sortu du", + "{file} was created in a public folder" : "{file} fitxategi publiko batean sortu da", + "You changed {file}" : "Zuk {file} aldatu duzu", + "{user} changed {file}" : "{user} {file} aldatu du", + "You deleted {file}" : "{file} ezabatu duzu", + "{user} deleted {file}" : "{user} {file} ezabatu du", + "You restored {file}" : "Zuk {file} zaharberritu duzu", + "{user} restored {file}" : "{user} {file} zaharberritu du", + "You renamed {oldfile} to {newfile}" : "You renamed {oldfile} to {newfile}", + "{user} renamed {oldfile} to {newfile}" : "{user} renamed {oldfile} to {newfile}", + "You moved {oldfile} to {newfile}" : "{oldfile} mugitu duzu hona {newfile}", + "{user} moved {oldfile} to {newfile}" : "{user} moved {oldfile} to {newfile}", + "A file has been added to or removed from your <strong>favorites</strong>" : "Fitxategi bat gehitu edo kendu da zure <strong>gogokoetatik</strong>", + "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>", "A new file or folder has been <strong>created</strong>" : "Fitxategi edo karpeta berri bat <strong>sortu da</strong>", - "A file or folder has been <strong>changed</strong>" : "Fitxategi edo karpeta bat <strong>aldatu da</strong>", - "A file or folder has been <strong>deleted</strong>" : "Fitxategi edo karpeta bat <strong>ezabatu da</strong>", - "A file or folder has been <strong>restored</strong>" : "Fitxategia edo karpeta <strong>berrezarri</strong> da", - "You created %1$s" : "Zuk sortua %1$s", - "%2$s created %1$s" : "%2$sk sortua %1$s", - "%1$s was created in a public folder" : "%1$s sortu da karpeta publiko batean", - "You changed %1$s" : "%1$s aldatu duzu", - "%2$s changed %1$s" : "%2$sk aldatuta %1$s", - "You deleted %1$s" : "%1$s ezabatu duzu", - "%2$s deleted %1$s" : "%2$sk ezabatuta %1$s", - "You restored %1$s" : "Zuk %1$s berrezarri duzu", - "%2$s restored %1$s" : "%2$sk %1$s berrezarri du", + "A new file or folder has been <strong>deleted</strong>" : "A new file or folder has been <strong>deleted</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>", + "A new file or folder has been <strong>restored</strong>" : "A new file or folder has been <strong>restored</strong>", "Upload (max. %s)" : "Igo (max. %s)", "File handling" : "Fitxategien kudeaketa", "Maximum upload size" : "Igo daitekeen gehienezko tamaina", "max. possible: " : "max, posiblea:", "Save" : "Gorde", + "With PHP-FPM it might take 5 minutes for changes to be applied." : "PHP-FPM-rekin 5 minutu pasa daiteke aldaketak aplikatu ahal izateko.", + "Missing permissions to edit from here." : "Missing permissions to edit from here.", "Settings" : "Ezarpenak", + "Show hidden files" : "Erakutsi ezkutuko fitxategiak", "WebDAV" : "WebDAV", + "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Erabili helbide hau <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">WebDAV bidez zure fitxategietara sartzeko </a> ", + "No files in here" : "Ez dago fitxategirik hemen", "Upload some content or sync with your devices!" : "Igo edukiren bat edo sinkronizatu zure gailuekin!", "No entries found in this folder" : "Ez da sarrerarik aurkitu karpeta honetan", "Select all" : "Hautatu dena", @@ -88,6 +122,61 @@ OC.L10N.register( "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Igotzen saiatzen ari zaren fitxategiak zerbitzari honek igotzeko onartzen duena baino handiagoak dira.", "No favorites" : "Gogokorik ez", "Files and folders you mark as favorite will show up here" : "Gogokotzat markatutako fitxategi eta karpeta hemen agertuko dira", - "Text file" : "Testu fitxategia" + "Shared with you" : "Zurekin partekatuta", + "Shared with others" : "Besteekin partekatuta", + "Shared by link" : "Partekatua link bidez", + "Tags" : "Etiketak", + "Deleted files" : "Ezabatutako fitxategiak", + "Text file" : "Testu fitxategia", + "New text file.txt" : ".txt testu fitxategi berria", + "Storage not available" : "Biltegia ez dago eskuragarri", + "Unable to set upload directory." : "Ezin da igoera direktorioa ezarri.", + "Invalid Token" : "Lekuko baliogabea", + "No file was uploaded. Unknown error" : "Ez da fitxategirik igo. Errore ezezaguna", + "There is no error, the file uploaded with success" : "Ez da errorerik egon, fitxategia ongi igo da", + "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Igotako fitxategiak php.ini fitxategian ezarritako upload_max_filesize muga gainditu du:", + "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Igotako fitxategia HTML formularioan zehaztutako MAX_FILE_SIZE direktiba baino handidagoa da.", + "The uploaded file was only partially uploaded" : "Igotako fitxategiaren zati bat bakarrik igo da", + "No file was uploaded" : "Ez da fitxategirik igo", + "Missing a temporary folder" : "Aldi bateko karpeta falta da", + "Failed to write to disk" : "Errore bat izan da diskoan idazterakoan", + "Not enough storage available" : "Ez dago behar aina leku erabilgarri,", + "The target folder has been moved or deleted." : "Jatorrizko karpeta mugitu edo ezabatu da.", + "Upload failed. Could not find uploaded file" : "Igoerak huts egin du. Ezin izan da igotako fitxategia aurkitu", + "Upload failed. Could not get file info." : "Igoerak huts egin du. Ezin izan da fitxategiaren informazioa eskuratu.", + "Invalid directory." : "Baliogabeko karpeta.", + "Total file size {size1} exceeds upload limit {size2}" : "Fitxategiaren tamainak {size1} igotzeko muga {size2} gainditzen du", + "Error uploading file \"{fileName}\": {message}" : "Akatsa \"{fileName}\" fitxategia igotzerakoan: {mezua}", + "Could not get result from server." : "Ezin da zerbitzaritik emaitzik lortu", + "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} hour{plural_s} left", + "{hours}:{minutes}h" : "{hours}:{minutes}h", + "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minute{plural_s} left", + "{minutes}:{seconds}m" : "{minutes}:{seconds}m", + "{seconds} second{plural_s} left" : "{seconds} second{plural_s} left", + "{seconds}s" : "{seconds}s", + "Any moment now..." : "Edozein unean...", + "Soon..." : "Laster...", + "File upload is in progress. Leaving the page now will cancel the upload." : "Fitxategien igoera martxan da. Orria orain uzteak igoera ezeztatutko du.", + "No entries in this folder match '{filter}'" : "Karpeta honetan ez dago sarrerarik '{filter}' iragazkiarekin bat egiten dutenak", + "Local link" : "Tokiko esteka", + "{newname} already exists" : "{newname} existitzen da dagoeneko", + "A file or folder has been <strong>changed</strong>" : "Fitxategi edo karpeta bat <strong>aldatu da</strong>", + "A file or folder has been <strong>deleted</strong>" : "Fitxategi edo karpeta bat <strong>ezabatu da</strong>", + "A file or folder has been <strong>restored</strong>" : "Fitxategia edo karpeta <strong>berrezarri</strong> da", + "You created %1$s" : "Zuk sortua %1$s", + "%2$s created %1$s" : "%2$sk sortua %1$s", + "%1$s was created in a public folder" : "%1$s sortu da karpeta publiko batean", + "You changed %1$s" : "%1$s aldatu duzu", + "%2$s changed %1$s" : "%2$sk aldatuta %1$s", + "You deleted %1$s" : "%1$s ezabatu duzu", + "%2$s deleted %1$s" : "%2$sk ezabatuta %1$s", + "You restored %1$s" : "Zuk %1$s berrezarri duzu", + "%2$s restored %1$s" : "%2$sk %1$s berrezarri du", + "Changed by %2$s" : "%2$s -k aldatuta", + "Deleted by %2$s" : "%2$s -k ezabatuta", + "Restored by %2$s" : "%2$s -k zaharberrituta", + "_{hours}:{minutes}:{seconds} hour left_::_{hours}:{minutes}:{seconds} hours left_" : ["Ordu {hours}:{minutes}:{seconds} geratzen da","{hours}:{minutes}:{seconds} ordu geratzen dira"], + "_{minutes}:{seconds} minute left_::_{minutes}:{seconds} minutes left_" : ["Minutu {minutes}:{seconds} geratzen da","{minutes}:{seconds} minutu geratzen dira"], + "_{seconds} second left_::_{seconds} seconds left_" : ["Segundu {seconds} geratzen da","{seconds} segundu geratzen dira"] }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/eu.json b/apps/files/l10n/eu.json index 4872c60e457..d2312ef845e 100644 --- a/apps/files/l10n/eu.json +++ b/apps/files/l10n/eu.json @@ -1,84 +1,118 @@ { "translations": { - "Storage not available" : "Biltegia ez dago eskuragarri", + "Storage is temporarily not available" : "Biltegiratzea ez dago erabilgarri une honetan", "Storage invalid" : "Biltegi bliogabea", "Unknown error" : "Errore ezezaguna", - "Unable to set upload directory." : "Ezin da igoera direktorioa ezarri.", - "Invalid Token" : "Lekuko baliogabea", - "No file was uploaded. Unknown error" : "Ez da fitxategirik igo. Errore ezezaguna", - "There is no error, the file uploaded with success" : "Ez da errorerik egon, fitxategia ongi igo da", - "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Igotako fitxategiak php.ini fitxategian ezarritako upload_max_filesize muga gainditu du:", - "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Igotako fitxategia HTML formularioan zehaztutako MAX_FILE_SIZE direktiba baino handidagoa da.", - "The uploaded file was only partially uploaded" : "Igotako fitxategiaren zati bat bakarrik igo da", - "No file was uploaded" : "Ez da fitxategirik igo", - "Missing a temporary folder" : "Aldi bateko karpeta falta da", - "Failed to write to disk" : "Errore bat izan da diskoan idazterakoan", - "Not enough storage available" : "Ez dago behar aina leku erabilgarri,", - "The target folder has been moved or deleted." : "Jatorrizko karpeta mugitu edo ezabatu da.", - "Upload failed. Could not find uploaded file" : "Igoerak huts egin du. Ezin izan da igotako fitxategia aurkitu", - "Upload failed. Could not get file info." : "Igoerak huts egin du. Ezin izan da fitxategiaren informazioa eskuratu.", - "Invalid directory." : "Baliogabeko karpeta.", - "Files" : "Fitxategiak", "All files" : "Fitxategi guztiak", + "Recent" : "Duela gutxi", + "File could not be found" : "Fitxategia ezin izan da aurkitu", "Home" : "Etxekoa", "Close" : "Itxi", "Favorites" : "Gogokoak", + "Could not create folder \"{dir}\"" : "Ezin izan da \"{dir}\" karpeta sortu", "Upload cancelled." : "Igoera ezeztatuta", "Unable to upload {filename} as it is a directory or has 0 bytes" : "Ezin da {filename} igo karpeta bat delako edo 0 byte dituelako", - "Total file size {size1} exceeds upload limit {size2}" : "Fitxategiaren tamainak {size1} igotzeko muga {size2} gainditzen du", "Not enough free space, you are uploading {size1} but only {size2} is left" : "Ez dago leku nahikorik, zu {size1} igotzen ari zara baina bakarrik {size2} libre dago", - "Could not get result from server." : "Ezin da zerbitzaritik emaitzik lortu", + "Target folder \"{dir}\" does not exist any more" : "\"{dir}\" karpeta ez du gehiago existitzen", + "Not enough free space" : "Ez dago nahiko leku librea", "Uploading..." : "Igotzen...", "..." : "...", - "File upload is in progress. Leaving the page now will cancel the upload." : "Fitxategien igoera martxan da. Orria orain uzteak igoera ezeztatutko du.", + "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} of {totalSize} ({bitrate})", "Actions" : "Ekintzak", "Download" : "Deskargatu", "Rename" : "Berrizendatu", + "Move" : "Mugitu", + "Target folder" : "Xede karpeta", "Delete" : "Ezabatu", "Disconnect storage" : "Deskonektatu biltegia", "Unshare" : "Ez elkarbanatu", + "Could not load info for file \"{file}\"" : "Ezin izan da \"{file}\" fitxategiaren informazioa kargatu", + "Files" : "Fitxategiak", "Details" : "Xehetasunak", "Select" : "hautatu", "Pending" : "Zain", "Unable to determine date" : "Ezin izan da data zehaztu", - "No entries in this folder match '{filter}'" : "Karpeta honetan ez dago sarrerarik '{filter}' iragazkiarekin bat egiten dutenak", + "This operation is forbidden" : "Eragiketa hau debekatuta dago", + "This directory is unavailable, please check the logs or contact the administrator" : "Direktorio hau ez dago erabilgarri, begira itzazu erregistroa edo administratzailearekin harremanetan jarri", + "Could not move \"{file}\", target exists" : "Ezin da \"{file}\" mugitu, helburuan existitzen da jadanik", + "Could not move \"{file}\"" : "Ezin da mugitu \"{file}\"", + "{newName} already exists" : "{newName} existitzen da dagoeneko", + "Could not rename \"{fileName}\", it does not exist any more" : "Ezin izan da \"{fileName}\" berrizendatu, ez da existitzen", + "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "\"{targetName}\" izena dagoeneko dago erabilita \"{dir}\" karpetan. Mesedez, beste bat aukeratu.", + "Could not rename \"{fileName}\"" : "Ezin izan da \"{fileName}\" berrizendatu ", + "Could not create file \"{file}\"" : "Ezin izan da \"{file}\" fitxategia sortu", + "Could not create file \"{file}\" because it already exists" : "Ezin izan da \"{file}\" fitxategia sortu, dagoeneko existitzen delako", + "Could not create folder \"{dir}\" because it already exists" : "Ezin izan da \"{dir}\" karpeta sortu, dagoeneko existitzen delako", + "Error deleting file \"{fileName}\"." : "Akatsa \"{fileName}\" fitxategia ezabatzerakoan.", + "No search results in other folders for '{tag}{filter}{endtag}'" : "Ez da '{tag}{filter}{endtag}' bilaketarako emaitzik aurkitu beste karpetetan", "Name" : "Izena", "Size" : "Tamaina", "Modified" : "Aldatuta", "_%n folder_::_%n folders_" : ["karpeta %n","%n karpeta"], "_%n file_::_%n files_" : ["fitxategi %n","%n fitxategi"], "{dirs} and {files}" : "{dirs} eta {files}", + "_including %n hidden_::_including %n hidden_" : ["including %n hidden","including %n hidden"], "You don’t have permission to upload or create files here" : "Ez duzu fitxategiak hona igotzeko edo hemen sortzeko baimenik", "_Uploading %n file_::_Uploading %n files_" : ["Fitxategi %n igotzen","%n fitxategi igotzen"], "New" : "Berria", "\"{name}\" is an invalid file name." : "\"{name}\" ez da fitxategi izen baliogarria.", "File name cannot be empty." : "Fitxategi izena ezin da hutsa izan.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} -en biltegiratzea beteta dago, artxiboak ezin dira eguneratu edo sinkronizatu jada!", "Your storage is full, files can not be updated or synced anymore!" : "Zure biltegiratzea beterik dago, ezingo duzu aurrerantzean fitxategirik igo edo sinkronizatu!", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} -en biltegiratzea ia beteta dago ({usedSpacePercent}%)", "Your storage is almost full ({usedSpacePercent}%)" : "Zure biltegiratzea nahiko beterik dago (%{usedSpacePercent})", + "_matches '{filter}'_::_match '{filter}'_" : ["matches '{filter}'","match '{filter}'"], + "View in folder" : "karpetan ikusi", + "Path" : "Path", + "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"], "Favorited" : "Gogokoa", "Favorite" : "Gogokoa", + "Copy local link" : "Kopiatu tokiko esteka", "Folder" : "Karpeta", "New folder" : "Karpeta berria", "Upload" : "Igo", + "An error occurred while trying to update the tags" : "Errore bat gertatu da etiketak eguneratzerakoan", + "Added to favorites" : "Gogokoetan gehitu da", + "Removed from favorites" : "Gogokoetatik kendu da", + "You added {file} to your favorites" : "{file} gehitu duzu gogokoetara", + "You removed {file} from your favorites" : "{file} kendu duzu gogokoetatik", + "File changes" : "Fitxategi aldaketak", + "Created by {user}" : "{user} erabiltzaileak sortua", + "Changed by {user}" : "{user} -k aldatuta", + "Deleted by {user}" : "{user} -k ezabatuta", + "Restored by {user}" : "{user} -k zaharberrituta", + "Renamed by {user}" : "{user} -k berrizendatuta", + "Moved by {user}" : "{user} -k mugituta", + "You created {file}" : "Sortu duzu {file}", + "{user} created {file}" : "{user} {file} sortu du", + "{file} was created in a public folder" : "{file} fitxategi publiko batean sortu da", + "You changed {file}" : "Zuk {file} aldatu duzu", + "{user} changed {file}" : "{user} {file} aldatu du", + "You deleted {file}" : "{file} ezabatu duzu", + "{user} deleted {file}" : "{user} {file} ezabatu du", + "You restored {file}" : "Zuk {file} zaharberritu duzu", + "{user} restored {file}" : "{user} {file} zaharberritu du", + "You renamed {oldfile} to {newfile}" : "You renamed {oldfile} to {newfile}", + "{user} renamed {oldfile} to {newfile}" : "{user} renamed {oldfile} to {newfile}", + "You moved {oldfile} to {newfile}" : "{oldfile} mugitu duzu hona {newfile}", + "{user} moved {oldfile} to {newfile}" : "{user} moved {oldfile} to {newfile}", + "A file has been added to or removed from your <strong>favorites</strong>" : "Fitxategi bat gehitu edo kendu da zure <strong>gogokoetatik</strong>", + "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>", "A new file or folder has been <strong>created</strong>" : "Fitxategi edo karpeta berri bat <strong>sortu da</strong>", - "A file or folder has been <strong>changed</strong>" : "Fitxategi edo karpeta bat <strong>aldatu da</strong>", - "A file or folder has been <strong>deleted</strong>" : "Fitxategi edo karpeta bat <strong>ezabatu da</strong>", - "A file or folder has been <strong>restored</strong>" : "Fitxategia edo karpeta <strong>berrezarri</strong> da", - "You created %1$s" : "Zuk sortua %1$s", - "%2$s created %1$s" : "%2$sk sortua %1$s", - "%1$s was created in a public folder" : "%1$s sortu da karpeta publiko batean", - "You changed %1$s" : "%1$s aldatu duzu", - "%2$s changed %1$s" : "%2$sk aldatuta %1$s", - "You deleted %1$s" : "%1$s ezabatu duzu", - "%2$s deleted %1$s" : "%2$sk ezabatuta %1$s", - "You restored %1$s" : "Zuk %1$s berrezarri duzu", - "%2$s restored %1$s" : "%2$sk %1$s berrezarri du", + "A new file or folder has been <strong>deleted</strong>" : "A new file or folder has been <strong>deleted</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>", + "A new file or folder has been <strong>restored</strong>" : "A new file or folder has been <strong>restored</strong>", "Upload (max. %s)" : "Igo (max. %s)", "File handling" : "Fitxategien kudeaketa", "Maximum upload size" : "Igo daitekeen gehienezko tamaina", "max. possible: " : "max, posiblea:", "Save" : "Gorde", + "With PHP-FPM it might take 5 minutes for changes to be applied." : "PHP-FPM-rekin 5 minutu pasa daiteke aldaketak aplikatu ahal izateko.", + "Missing permissions to edit from here." : "Missing permissions to edit from here.", "Settings" : "Ezarpenak", + "Show hidden files" : "Erakutsi ezkutuko fitxategiak", "WebDAV" : "WebDAV", + "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Erabili helbide hau <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">WebDAV bidez zure fitxategietara sartzeko </a> ", + "No files in here" : "Ez dago fitxategirik hemen", "Upload some content or sync with your devices!" : "Igo edukiren bat edo sinkronizatu zure gailuekin!", "No entries found in this folder" : "Ez da sarrerarik aurkitu karpeta honetan", "Select all" : "Hautatu dena", @@ -86,6 +120,61 @@ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Igotzen saiatzen ari zaren fitxategiak zerbitzari honek igotzeko onartzen duena baino handiagoak dira.", "No favorites" : "Gogokorik ez", "Files and folders you mark as favorite will show up here" : "Gogokotzat markatutako fitxategi eta karpeta hemen agertuko dira", - "Text file" : "Testu fitxategia" + "Shared with you" : "Zurekin partekatuta", + "Shared with others" : "Besteekin partekatuta", + "Shared by link" : "Partekatua link bidez", + "Tags" : "Etiketak", + "Deleted files" : "Ezabatutako fitxategiak", + "Text file" : "Testu fitxategia", + "New text file.txt" : ".txt testu fitxategi berria", + "Storage not available" : "Biltegia ez dago eskuragarri", + "Unable to set upload directory." : "Ezin da igoera direktorioa ezarri.", + "Invalid Token" : "Lekuko baliogabea", + "No file was uploaded. Unknown error" : "Ez da fitxategirik igo. Errore ezezaguna", + "There is no error, the file uploaded with success" : "Ez da errorerik egon, fitxategia ongi igo da", + "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Igotako fitxategiak php.ini fitxategian ezarritako upload_max_filesize muga gainditu du:", + "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Igotako fitxategia HTML formularioan zehaztutako MAX_FILE_SIZE direktiba baino handidagoa da.", + "The uploaded file was only partially uploaded" : "Igotako fitxategiaren zati bat bakarrik igo da", + "No file was uploaded" : "Ez da fitxategirik igo", + "Missing a temporary folder" : "Aldi bateko karpeta falta da", + "Failed to write to disk" : "Errore bat izan da diskoan idazterakoan", + "Not enough storage available" : "Ez dago behar aina leku erabilgarri,", + "The target folder has been moved or deleted." : "Jatorrizko karpeta mugitu edo ezabatu da.", + "Upload failed. Could not find uploaded file" : "Igoerak huts egin du. Ezin izan da igotako fitxategia aurkitu", + "Upload failed. Could not get file info." : "Igoerak huts egin du. Ezin izan da fitxategiaren informazioa eskuratu.", + "Invalid directory." : "Baliogabeko karpeta.", + "Total file size {size1} exceeds upload limit {size2}" : "Fitxategiaren tamainak {size1} igotzeko muga {size2} gainditzen du", + "Error uploading file \"{fileName}\": {message}" : "Akatsa \"{fileName}\" fitxategia igotzerakoan: {mezua}", + "Could not get result from server." : "Ezin da zerbitzaritik emaitzik lortu", + "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} hour{plural_s} left", + "{hours}:{minutes}h" : "{hours}:{minutes}h", + "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minute{plural_s} left", + "{minutes}:{seconds}m" : "{minutes}:{seconds}m", + "{seconds} second{plural_s} left" : "{seconds} second{plural_s} left", + "{seconds}s" : "{seconds}s", + "Any moment now..." : "Edozein unean...", + "Soon..." : "Laster...", + "File upload is in progress. Leaving the page now will cancel the upload." : "Fitxategien igoera martxan da. Orria orain uzteak igoera ezeztatutko du.", + "No entries in this folder match '{filter}'" : "Karpeta honetan ez dago sarrerarik '{filter}' iragazkiarekin bat egiten dutenak", + "Local link" : "Tokiko esteka", + "{newname} already exists" : "{newname} existitzen da dagoeneko", + "A file or folder has been <strong>changed</strong>" : "Fitxategi edo karpeta bat <strong>aldatu da</strong>", + "A file or folder has been <strong>deleted</strong>" : "Fitxategi edo karpeta bat <strong>ezabatu da</strong>", + "A file or folder has been <strong>restored</strong>" : "Fitxategia edo karpeta <strong>berrezarri</strong> da", + "You created %1$s" : "Zuk sortua %1$s", + "%2$s created %1$s" : "%2$sk sortua %1$s", + "%1$s was created in a public folder" : "%1$s sortu da karpeta publiko batean", + "You changed %1$s" : "%1$s aldatu duzu", + "%2$s changed %1$s" : "%2$sk aldatuta %1$s", + "You deleted %1$s" : "%1$s ezabatu duzu", + "%2$s deleted %1$s" : "%2$sk ezabatuta %1$s", + "You restored %1$s" : "Zuk %1$s berrezarri duzu", + "%2$s restored %1$s" : "%2$sk %1$s berrezarri du", + "Changed by %2$s" : "%2$s -k aldatuta", + "Deleted by %2$s" : "%2$s -k ezabatuta", + "Restored by %2$s" : "%2$s -k zaharberrituta", + "_{hours}:{minutes}:{seconds} hour left_::_{hours}:{minutes}:{seconds} hours left_" : ["Ordu {hours}:{minutes}:{seconds} geratzen da","{hours}:{minutes}:{seconds} ordu geratzen dira"], + "_{minutes}:{seconds} minute left_::_{minutes}:{seconds} minutes left_" : ["Minutu {minutes}:{seconds} geratzen da","{minutes}:{seconds} minutu geratzen dira"], + "_{seconds} second left_::_{seconds} seconds left_" : ["Segundu {seconds} geratzen da","{seconds} segundu geratzen dira"] },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/ia.js b/apps/files/l10n/ia.js index 9a6e177aba9..3e7f9ecc8a5 100644 --- a/apps/files/l10n/ia.js +++ b/apps/files/l10n/ia.js @@ -30,7 +30,7 @@ OC.L10N.register( "Could not load info for file \"{file}\"" : "Impossibile cargar informationes pro file \"{file}\"", "Files" : "Files", "Details" : "Detalios", - "Select" : "Seliger", + "Select" : "Selectionar", "Pending" : "Pendente", "Unable to determine date" : "Impossibile determinar data", "This operation is forbidden" : "Iste operation es prohibite", @@ -39,7 +39,7 @@ OC.L10N.register( "Could not move \"{file}\"" : "Impossibile displaciar \"{file}\"", "{newName} already exists" : "{newName} ja existe", "Could not rename \"{fileName}\", it does not exist any more" : "Impossibile renominar \"{fileName}\": illo non existe plus", - "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Le nomine \"{targetName}\" es ja usate in le dossier \"{dir}\". Per favor, selige un nomine differente.", + "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Le nomine \"{targetName}\" es ja usate in le dossier \"{dir}\". Per favor, selectiona un nomine differente.", "Could not rename \"{fileName}\"" : "Impossibile renominar \"{fileName}\"", "Could not create file \"{file}\"" : "Impossibile crear file \"{file}\"", "Could not create file \"{file}\" because it already exists" : "Impossibile crear file \"{file}\" proque illo ja existe", @@ -117,7 +117,7 @@ OC.L10N.register( "No files in here" : "Nulle files ci", "Upload some content or sync with your devices!" : "Incarga alcun contento o synchronisa con tu apparatos!", "No entries found in this folder" : "Nulle entratas trovate in iste dossier", - "Select all" : "Seliger toto", + "Select all" : "Selectionar toto", "Upload too large" : "Incarga troppo grande", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Le files que tu tenta incargar excede le dimension maxime pro incarga de files in iste servitor.", "No favorites" : "Nulle favoritos", diff --git a/apps/files/l10n/ia.json b/apps/files/l10n/ia.json index 515cfb51f13..1fb2b87b83d 100644 --- a/apps/files/l10n/ia.json +++ b/apps/files/l10n/ia.json @@ -28,7 +28,7 @@ "Could not load info for file \"{file}\"" : "Impossibile cargar informationes pro file \"{file}\"", "Files" : "Files", "Details" : "Detalios", - "Select" : "Seliger", + "Select" : "Selectionar", "Pending" : "Pendente", "Unable to determine date" : "Impossibile determinar data", "This operation is forbidden" : "Iste operation es prohibite", @@ -37,7 +37,7 @@ "Could not move \"{file}\"" : "Impossibile displaciar \"{file}\"", "{newName} already exists" : "{newName} ja existe", "Could not rename \"{fileName}\", it does not exist any more" : "Impossibile renominar \"{fileName}\": illo non existe plus", - "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Le nomine \"{targetName}\" es ja usate in le dossier \"{dir}\". Per favor, selige un nomine differente.", + "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Le nomine \"{targetName}\" es ja usate in le dossier \"{dir}\". Per favor, selectiona un nomine differente.", "Could not rename \"{fileName}\"" : "Impossibile renominar \"{fileName}\"", "Could not create file \"{file}\"" : "Impossibile crear file \"{file}\"", "Could not create file \"{file}\" because it already exists" : "Impossibile crear file \"{file}\" proque illo ja existe", @@ -115,7 +115,7 @@ "No files in here" : "Nulle files ci", "Upload some content or sync with your devices!" : "Incarga alcun contento o synchronisa con tu apparatos!", "No entries found in this folder" : "Nulle entratas trovate in iste dossier", - "Select all" : "Seliger toto", + "Select all" : "Selectionar toto", "Upload too large" : "Incarga troppo grande", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Le files que tu tenta incargar excede le dimension maxime pro incarga de files in iste servitor.", "No favorites" : "Nulle favoritos", diff --git a/apps/files/l10n/lt_LT.js b/apps/files/l10n/lt_LT.js index d6ac55cfe89..a70a8286e99 100644 --- a/apps/files/l10n/lt_LT.js +++ b/apps/files/l10n/lt_LT.js @@ -3,7 +3,7 @@ OC.L10N.register( { "Storage is temporarily not available" : "Saugykla yra laikinai neprieinama", "Storage invalid" : "Saugykla neteisinga", - "Unknown error" : "Neatpažinta klaida", + "Unknown error" : "Nežinoma klaida", "All files" : "Visi failai", "Recent" : "Naujausi", "File could not be found" : "Nepavyko rasti failo", @@ -12,7 +12,7 @@ OC.L10N.register( "Favorites" : "Mėgstamiausi", "Could not create folder \"{dir}\"" : "Nepavyko sukurti aplanko \"{dir}\"", "Upload cancelled." : "Įkėlimo atsisakyta.", - "Unable to upload {filename} as it is a directory or has 0 bytes" : "Nepavyksta įkelti {filename}, nes tai yra katalogas, arba šio failo dydis yra 0 baitų", + "Unable to upload {filename} as it is a directory or has 0 bytes" : "Nepavyksta įkelti {filename}, nes tai yra katalogas arba šio failo dydis yra 0 baitų", "Not enough free space, you are uploading {size1} but only {size2} is left" : "Nepakanka laisvos vietos. Keliate {size1}, bet tik {size2} yra likę", "Target folder \"{dir}\" does not exist any more" : "Paskirties aplanko \"{dir}\" daugiau nebėra", "Not enough free space" : "Trūksta laisvos vietos", @@ -37,7 +37,7 @@ OC.L10N.register( "This directory is unavailable, please check the logs or contact the administrator" : "Katalogas neprieinamas, prašome peržiūrėti žurnalo įrašus arba susisiekti su administratoriumi", "Could not move \"{file}\", target exists" : "Nepavyko perkelti \"{file}\", toks jau egzistuoja", "Could not move \"{file}\"" : "Nepavyko perkelti \"{file}\"", - "{newName} already exists" : "{newName} jau egzistuoja", + "{newName} already exists" : "{newName} jau yra", "Could not rename \"{fileName}\", it does not exist any more" : "Nepavyko pervadinti failo \"{fileName}\", nes jis jau nebeegzistuoja", "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Pavadinimas \"{targetName}\" jau naudojamas aplanke \"{dir}\". Prašome pasirinkti kitokį pavadinimą.", "Could not rename \"{fileName}\"" : "Nepavyko pervadinti failo \"{fileName}\"", @@ -52,7 +52,7 @@ OC.L10N.register( "_%n folder_::_%n folders_" : ["%n aplankas","%n aplankai","%n aplankų"], "_%n file_::_%n files_" : ["%n failas","%n failai","%n failų"], "{dirs} and {files}" : "{dirs} ir {files}", - "_including %n hidden_::_including %n hidden_" : ["įtraukiant %n paslėptą","įtraukiant %n paslėptų","įtraukiant %n paslėptų"], + "_including %n hidden_::_including %n hidden_" : ["įskaitant %n paslėptą","įskaitant %n paslėptus","įskaitant %n paslėptų"], "You don’t have permission to upload or create files here" : "Jūs neturite leidimo čia įkelti arba kurti failus", "_Uploading %n file_::_Uploading %n files_" : ["Įkeliamas %n failas","Įkeliami %n failai","Įkeliama %n failų"], "New" : "Naujas", @@ -69,7 +69,7 @@ OC.L10N.register( "Favorited" : "Pažymėta mėgstamu", "Favorite" : "Mėgiamas", "Copy local link" : "Kopijuoti vietinę nuorodą", - "Folder" : "Katalogas", + "Folder" : "Aplankas", "New folder" : "Naujas aplankas", "Upload" : "Įkelti", "An error occurred while trying to update the tags" : "Bandant atnaujinti žymes įvyko klaida", @@ -86,7 +86,7 @@ OC.L10N.register( "Moved by {user}" : "Perkėlė {user}", "You created {file}" : "Jūs sukūrėte {file}", "{user} created {file}" : "{user} sukūrė {file}", - "{file} was created in a public folder" : "{file} buvo sukurtas viešame aplanke", + "{file} was created in a public folder" : "{file} buvo sukurtas viešajame aplanke", "You changed {file}" : "Jūs pakeitėte {file}", "{user} changed {file}" : "{user} pakeitė {file}", "You deleted {file}" : "Jūs ištrynėte {file}", @@ -127,18 +127,18 @@ OC.L10N.register( "Shared by link" : "Bendrinama nuoroda", "Tags" : "Žymės", "Deleted files" : "Ištrinti failai", - "Text file" : "Teksto failas", - "New text file.txt" : "Naujas tekstas file.txt", + "Text file" : "Tekstinis failas", + "New text file.txt" : "Naujas tekstinis failas.txt", "Storage not available" : "Saugykla neprieinama", "Unable to set upload directory." : "Nepavyksta nustatyti įkėlimų katalogo.", - "Invalid Token" : "Netinkamas ženklas", + "Invalid Token" : "Neteisingas prieigos raktas", "No file was uploaded. Unknown error" : "Failai nebuvo įkelti dėl nežinomos priežasties", "There is no error, the file uploaded with success" : "Failas įkeltas sėkmingai, be klaidų", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Įkeliamas failas yra didesnis nei leidžia upload_max_filesize php.ini faile:", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Įkeliamo failo dydis viršija MAX_FILE_SIZE nustatymą, kuris naudojamas HTML formoje.", "The uploaded file was only partially uploaded" : "Failas buvo įkeltas tik dalinai", "No file was uploaded" : "Nebuvo įkeltas joks failas", - "Missing a temporary folder" : "Nėra laikinojo katalogo", + "Missing a temporary folder" : "Nėra laikinojo aplanko", "Failed to write to disk" : "Nepavyko įrašyti į diską", "Not enough storage available" : "Nepakanka vietos serveryje", "The target folder has been moved or deleted." : "Tikslo aplankas buvo perkeltas ar ištrintas.", @@ -154,12 +154,12 @@ OC.L10N.register( "{minutes}:{seconds}m" : "{minutes}:{seconds}min", "{seconds} second{plural_s} left" : "Liko {seconds} sekundžių", "{seconds}s" : "{seconds}s", - "Any moment now..." : "Bet kuriuo momentu...", - "Soon..." : "Greitai...", + "Any moment now..." : "Bet kuriuo metu...", + "Soon..." : "Netrukus...", "File upload is in progress. Leaving the page now will cancel the upload." : "Failo įkėlimas yra eigoje. Jei išeisite iš šio puslapio, įkėlimo bus atsisakyta.", "No entries in this folder match '{filter}'" : "Nėra įrašų šiame aplanko atitikmeniui „{filter}“", "Local link" : "Vietinė nuoroda", - "{newname} already exists" : "{newname} jau egzistuoja", + "{newname} already exists" : "{newname} jau yra", "A file or folder has been <strong>changed</strong>" : "Buvo <strong>pakeistas</strong> failas ar aplankas", "A file or folder has been <strong>deleted</strong>" : "Buvo <strong>ištrintas</strong> failas ar aplankas", "A file or folder has been <strong>restored</strong>" : "Failas ar aplankas buvo <strong>atkurtas</strong>", @@ -171,12 +171,12 @@ OC.L10N.register( "You deleted %1$s" : "Jūs ištrynėte %1$s", "%2$s deleted %1$s" : "%2$s ištrynė %1$s", "You restored %1$s" : "Jūs atkūrėte %1$s", - "%2$s restored %1$s" : "%2$s atkurta %1$s", + "%2$s restored %1$s" : "%2$s atkūrė %1$s", "Changed by %2$s" : "Pakeitė %2$s", "Deleted by %2$s" : "Ištrynė %2$s", "Restored by %2$s" : "Atkūrė %2$s", "_{hours}:{minutes}:{seconds} hour left_::_{hours}:{minutes}:{seconds} hours left_" : ["Liko {hours}:{minutes}:{seconds} valanda","Liko {hours}:{minutes}:{seconds} valandų","Liko {hours}:{minutes}:{seconds} valandų"], - "_{minutes}:{seconds} minute left_::_{minutes}:{seconds} minutes left_" : ["liko {minutes}:{seconds} minutė","liko {minutes}:{seconds} minučių","Liko {minutes}:{seconds} minučių"], - "_{seconds} second left_::_{seconds} seconds left_" : ["liko {seconds} sekundė","liko {seconds} sekundžių","Liko {seconds} sekundžių"] + "_{minutes}:{seconds} minute left_::_{minutes}:{seconds} minutes left_" : ["Liko {minutes}:{seconds} minutė","Liko {minutes}:{seconds} minutės","Liko {minutes}:{seconds} minučių"], + "_{seconds} second left_::_{seconds} seconds left_" : ["Liko {seconds} sekundė","Liko {seconds} sekundės","Liko {seconds} sekundžių"] }, "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);"); diff --git a/apps/files/l10n/lt_LT.json b/apps/files/l10n/lt_LT.json index 80ee1a57b3a..5abb29f5248 100644 --- a/apps/files/l10n/lt_LT.json +++ b/apps/files/l10n/lt_LT.json @@ -1,7 +1,7 @@ { "translations": { "Storage is temporarily not available" : "Saugykla yra laikinai neprieinama", "Storage invalid" : "Saugykla neteisinga", - "Unknown error" : "Neatpažinta klaida", + "Unknown error" : "Nežinoma klaida", "All files" : "Visi failai", "Recent" : "Naujausi", "File could not be found" : "Nepavyko rasti failo", @@ -10,7 +10,7 @@ "Favorites" : "Mėgstamiausi", "Could not create folder \"{dir}\"" : "Nepavyko sukurti aplanko \"{dir}\"", "Upload cancelled." : "Įkėlimo atsisakyta.", - "Unable to upload {filename} as it is a directory or has 0 bytes" : "Nepavyksta įkelti {filename}, nes tai yra katalogas, arba šio failo dydis yra 0 baitų", + "Unable to upload {filename} as it is a directory or has 0 bytes" : "Nepavyksta įkelti {filename}, nes tai yra katalogas arba šio failo dydis yra 0 baitų", "Not enough free space, you are uploading {size1} but only {size2} is left" : "Nepakanka laisvos vietos. Keliate {size1}, bet tik {size2} yra likę", "Target folder \"{dir}\" does not exist any more" : "Paskirties aplanko \"{dir}\" daugiau nebėra", "Not enough free space" : "Trūksta laisvos vietos", @@ -35,7 +35,7 @@ "This directory is unavailable, please check the logs or contact the administrator" : "Katalogas neprieinamas, prašome peržiūrėti žurnalo įrašus arba susisiekti su administratoriumi", "Could not move \"{file}\", target exists" : "Nepavyko perkelti \"{file}\", toks jau egzistuoja", "Could not move \"{file}\"" : "Nepavyko perkelti \"{file}\"", - "{newName} already exists" : "{newName} jau egzistuoja", + "{newName} already exists" : "{newName} jau yra", "Could not rename \"{fileName}\", it does not exist any more" : "Nepavyko pervadinti failo \"{fileName}\", nes jis jau nebeegzistuoja", "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Pavadinimas \"{targetName}\" jau naudojamas aplanke \"{dir}\". Prašome pasirinkti kitokį pavadinimą.", "Could not rename \"{fileName}\"" : "Nepavyko pervadinti failo \"{fileName}\"", @@ -50,7 +50,7 @@ "_%n folder_::_%n folders_" : ["%n aplankas","%n aplankai","%n aplankų"], "_%n file_::_%n files_" : ["%n failas","%n failai","%n failų"], "{dirs} and {files}" : "{dirs} ir {files}", - "_including %n hidden_::_including %n hidden_" : ["įtraukiant %n paslėptą","įtraukiant %n paslėptų","įtraukiant %n paslėptų"], + "_including %n hidden_::_including %n hidden_" : ["įskaitant %n paslėptą","įskaitant %n paslėptus","įskaitant %n paslėptų"], "You don’t have permission to upload or create files here" : "Jūs neturite leidimo čia įkelti arba kurti failus", "_Uploading %n file_::_Uploading %n files_" : ["Įkeliamas %n failas","Įkeliami %n failai","Įkeliama %n failų"], "New" : "Naujas", @@ -67,7 +67,7 @@ "Favorited" : "Pažymėta mėgstamu", "Favorite" : "Mėgiamas", "Copy local link" : "Kopijuoti vietinę nuorodą", - "Folder" : "Katalogas", + "Folder" : "Aplankas", "New folder" : "Naujas aplankas", "Upload" : "Įkelti", "An error occurred while trying to update the tags" : "Bandant atnaujinti žymes įvyko klaida", @@ -84,7 +84,7 @@ "Moved by {user}" : "Perkėlė {user}", "You created {file}" : "Jūs sukūrėte {file}", "{user} created {file}" : "{user} sukūrė {file}", - "{file} was created in a public folder" : "{file} buvo sukurtas viešame aplanke", + "{file} was created in a public folder" : "{file} buvo sukurtas viešajame aplanke", "You changed {file}" : "Jūs pakeitėte {file}", "{user} changed {file}" : "{user} pakeitė {file}", "You deleted {file}" : "Jūs ištrynėte {file}", @@ -125,18 +125,18 @@ "Shared by link" : "Bendrinama nuoroda", "Tags" : "Žymės", "Deleted files" : "Ištrinti failai", - "Text file" : "Teksto failas", - "New text file.txt" : "Naujas tekstas file.txt", + "Text file" : "Tekstinis failas", + "New text file.txt" : "Naujas tekstinis failas.txt", "Storage not available" : "Saugykla neprieinama", "Unable to set upload directory." : "Nepavyksta nustatyti įkėlimų katalogo.", - "Invalid Token" : "Netinkamas ženklas", + "Invalid Token" : "Neteisingas prieigos raktas", "No file was uploaded. Unknown error" : "Failai nebuvo įkelti dėl nežinomos priežasties", "There is no error, the file uploaded with success" : "Failas įkeltas sėkmingai, be klaidų", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Įkeliamas failas yra didesnis nei leidžia upload_max_filesize php.ini faile:", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Įkeliamo failo dydis viršija MAX_FILE_SIZE nustatymą, kuris naudojamas HTML formoje.", "The uploaded file was only partially uploaded" : "Failas buvo įkeltas tik dalinai", "No file was uploaded" : "Nebuvo įkeltas joks failas", - "Missing a temporary folder" : "Nėra laikinojo katalogo", + "Missing a temporary folder" : "Nėra laikinojo aplanko", "Failed to write to disk" : "Nepavyko įrašyti į diską", "Not enough storage available" : "Nepakanka vietos serveryje", "The target folder has been moved or deleted." : "Tikslo aplankas buvo perkeltas ar ištrintas.", @@ -152,12 +152,12 @@ "{minutes}:{seconds}m" : "{minutes}:{seconds}min", "{seconds} second{plural_s} left" : "Liko {seconds} sekundžių", "{seconds}s" : "{seconds}s", - "Any moment now..." : "Bet kuriuo momentu...", - "Soon..." : "Greitai...", + "Any moment now..." : "Bet kuriuo metu...", + "Soon..." : "Netrukus...", "File upload is in progress. Leaving the page now will cancel the upload." : "Failo įkėlimas yra eigoje. Jei išeisite iš šio puslapio, įkėlimo bus atsisakyta.", "No entries in this folder match '{filter}'" : "Nėra įrašų šiame aplanko atitikmeniui „{filter}“", "Local link" : "Vietinė nuoroda", - "{newname} already exists" : "{newname} jau egzistuoja", + "{newname} already exists" : "{newname} jau yra", "A file or folder has been <strong>changed</strong>" : "Buvo <strong>pakeistas</strong> failas ar aplankas", "A file or folder has been <strong>deleted</strong>" : "Buvo <strong>ištrintas</strong> failas ar aplankas", "A file or folder has been <strong>restored</strong>" : "Failas ar aplankas buvo <strong>atkurtas</strong>", @@ -169,12 +169,12 @@ "You deleted %1$s" : "Jūs ištrynėte %1$s", "%2$s deleted %1$s" : "%2$s ištrynė %1$s", "You restored %1$s" : "Jūs atkūrėte %1$s", - "%2$s restored %1$s" : "%2$s atkurta %1$s", + "%2$s restored %1$s" : "%2$s atkūrė %1$s", "Changed by %2$s" : "Pakeitė %2$s", "Deleted by %2$s" : "Ištrynė %2$s", "Restored by %2$s" : "Atkūrė %2$s", "_{hours}:{minutes}:{seconds} hour left_::_{hours}:{minutes}:{seconds} hours left_" : ["Liko {hours}:{minutes}:{seconds} valanda","Liko {hours}:{minutes}:{seconds} valandų","Liko {hours}:{minutes}:{seconds} valandų"], - "_{minutes}:{seconds} minute left_::_{minutes}:{seconds} minutes left_" : ["liko {minutes}:{seconds} minutė","liko {minutes}:{seconds} minučių","Liko {minutes}:{seconds} minučių"], - "_{seconds} second left_::_{seconds} seconds left_" : ["liko {seconds} sekundė","liko {seconds} sekundžių","Liko {seconds} sekundžių"] + "_{minutes}:{seconds} minute left_::_{minutes}:{seconds} minutes left_" : ["Liko {minutes}:{seconds} minutė","Liko {minutes}:{seconds} minutės","Liko {minutes}:{seconds} minučių"], + "_{seconds} second left_::_{seconds} seconds left_" : ["Liko {seconds} sekundė","Liko {seconds} sekundės","Liko {seconds} sekundžių"] },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);" }
\ No newline at end of file diff --git a/apps/files/l10n/lv.js b/apps/files/l10n/lv.js index c19df9fb5f3..6a595a94239 100644 --- a/apps/files/l10n/lv.js +++ b/apps/files/l10n/lv.js @@ -174,6 +174,9 @@ OC.L10N.register( "%2$s restored %1$s" : "%2$s atjaunoja %1$s", "Changed by %2$s" : "Izmainīja %2$s", "Deleted by %2$s" : "Dzēsa %2$s", - "Restored by %2$s" : "Atjaunoja %2$s" + "Restored by %2$s" : "Atjaunoja %2$s", + "_{hours}:{minutes}:{seconds} hour left_::_{hours}:{minutes}:{seconds} hours left_" : ["{hours}:{minutes}:{seconds} stundas atlicis","{hours}:{minutes}:{seconds} stundas atlicis","{hours}:{minutes}:{seconds} stundas atlikušas"], + "_{minutes}:{seconds} minute left_::_{minutes}:{seconds} minutes left_" : ["{minutes}:{seconds} minūtes atlikušas","{minutes}:{seconds} minūtes atlikušas","{minutes}:{seconds} minūtes atlikušas"], + "_{seconds} second left_::_{seconds} seconds left_" : ["{seconds} sekundes atlikušas","{seconds} sekundes atlikušas","{seconds} sekundes atlikušas"] }, "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"); diff --git a/apps/files/l10n/lv.json b/apps/files/l10n/lv.json index 7e27a04d4c7..8c1a244c30e 100644 --- a/apps/files/l10n/lv.json +++ b/apps/files/l10n/lv.json @@ -172,6 +172,9 @@ "%2$s restored %1$s" : "%2$s atjaunoja %1$s", "Changed by %2$s" : "Izmainīja %2$s", "Deleted by %2$s" : "Dzēsa %2$s", - "Restored by %2$s" : "Atjaunoja %2$s" + "Restored by %2$s" : "Atjaunoja %2$s", + "_{hours}:{minutes}:{seconds} hour left_::_{hours}:{minutes}:{seconds} hours left_" : ["{hours}:{minutes}:{seconds} stundas atlicis","{hours}:{minutes}:{seconds} stundas atlicis","{hours}:{minutes}:{seconds} stundas atlikušas"], + "_{minutes}:{seconds} minute left_::_{minutes}:{seconds} minutes left_" : ["{minutes}:{seconds} minūtes atlikušas","{minutes}:{seconds} minūtes atlikušas","{minutes}:{seconds} minūtes atlikušas"], + "_{seconds} second left_::_{seconds} seconds left_" : ["{seconds} sekundes atlikušas","{seconds} sekundes atlikušas","{seconds} sekundes atlikušas"] },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);" }
\ No newline at end of file diff --git a/apps/files/l10n/tr.js b/apps/files/l10n/tr.js index c41250c07f5..e46a11abb6c 100644 --- a/apps/files/l10n/tr.js +++ b/apps/files/l10n/tr.js @@ -81,7 +81,10 @@ OC.L10N.register( "Restored by {user}" : "{user} tarafından geri alindi", "Renamed by {user}" : "{user} tarafından ismi değiştirildi", "Moved by {user}" : "{user} tarafından taşındı", + "You created {file}" : "Siz {file} dosyasını oluşturdunuz", "{user} created {file}" : "{user} tarafından {file} oluşturuldu", + "You changed {file}" : "Siz {file} dosyasını değiştirdiniz", + "You deleted {file}" : "Siz {file} dosyasını sildiniz", "A new file or folder has been <strong>created</strong>" : "Yeni bir dosya veya klasör <strong>oluşturuldu</strong>", "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "<strong>Sık kullanılan dosyalarınızın</strong> oluşturulma ve değiştirilme hakkındaki bildirimlerini sınırla <em>(Sadece akışta)</em>", "Upload (max. %s)" : "Yükle (azami: %s)", diff --git a/apps/files/l10n/tr.json b/apps/files/l10n/tr.json index b612817deab..d5b70fa9b58 100644 --- a/apps/files/l10n/tr.json +++ b/apps/files/l10n/tr.json @@ -79,7 +79,10 @@ "Restored by {user}" : "{user} tarafından geri alindi", "Renamed by {user}" : "{user} tarafından ismi değiştirildi", "Moved by {user}" : "{user} tarafından taşındı", + "You created {file}" : "Siz {file} dosyasını oluşturdunuz", "{user} created {file}" : "{user} tarafından {file} oluşturuldu", + "You changed {file}" : "Siz {file} dosyasını değiştirdiniz", + "You deleted {file}" : "Siz {file} dosyasını sildiniz", "A new file or folder has been <strong>created</strong>" : "Yeni bir dosya veya klasör <strong>oluşturuldu</strong>", "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "<strong>Sık kullanılan dosyalarınızın</strong> oluşturulma ve değiştirilme hakkındaki bildirimlerini sınırla <em>(Sadece akışta)</em>", "Upload (max. %s)" : "Yükle (azami: %s)", diff --git a/apps/files/lib/AppInfo/Application.php b/apps/files/lib/AppInfo/Application.php index 4e5ec03eecf..43c977655c3 100644 --- a/apps/files/lib/AppInfo/Application.php +++ b/apps/files/lib/AppInfo/Application.php @@ -57,7 +57,6 @@ class Application extends App { $c->query('AppName'), $c->query('Request'), $server->getURLGenerator(), - $server->getNavigationManager(), $c->query('L10N'), $server->getConfig(), $server->getEventDispatcher(), diff --git a/apps/files/lib/Controller/ViewController.php b/apps/files/lib/Controller/ViewController.php index 6f74fec861f..788840ff1cc 100644 --- a/apps/files/lib/Controller/ViewController.php +++ b/apps/files/lib/Controller/ViewController.php @@ -55,8 +55,6 @@ class ViewController extends Controller { protected $request; /** @var IURLGenerator */ protected $urlGenerator; - /** @var INavigationManager */ - protected $navigationManager; /** @var IL10N */ protected $l10n; /** @var IConfig */ @@ -74,7 +72,6 @@ class ViewController extends Controller { * @param string $appName * @param IRequest $request * @param IURLGenerator $urlGenerator - * @param INavigationManager $navigationManager * @param IL10N $l10n * @param IConfig $config * @param EventDispatcherInterface $eventDispatcherInterface @@ -85,7 +82,6 @@ class ViewController extends Controller { public function __construct($appName, IRequest $request, IURLGenerator $urlGenerator, - INavigationManager $navigationManager, IL10N $l10n, IConfig $config, EventDispatcherInterface $eventDispatcherInterface, @@ -97,7 +93,6 @@ class ViewController extends Controller { $this->appName = $appName; $this->request = $request; $this->urlGenerator = $urlGenerator; - $this->navigationManager = $navigationManager; $this->l10n = $l10n; $this->config = $config; $this->eventDispatcher = $eventDispatcherInterface; @@ -244,7 +239,6 @@ class ViewController extends Controller { $params['fileNotFound'] = $fileNotFound ? 1 : 0; $params['appNavigation'] = $nav; $params['appContents'] = $contentItems; - $this->navigationManager->setActiveEntry('files_index'); $response = new TemplateResponse( $this->appName, diff --git a/apps/files/tests/Controller/ViewControllerTest.php b/apps/files/tests/Controller/ViewControllerTest.php index 25445567ea9..1d8c2956551 100644 --- a/apps/files/tests/Controller/ViewControllerTest.php +++ b/apps/files/tests/Controller/ViewControllerTest.php @@ -33,8 +33,6 @@ use OCP\Template; use Test\TestCase; use OCP\IRequest; use OCP\IURLGenerator; -use OCP\AppFramework\Http\RedirectResponse; -use OCP\INavigationManager; use OCP\IL10N; use OCP\IConfig; use OCP\IUserSession; @@ -51,8 +49,6 @@ class ViewControllerTest extends TestCase { private $request; /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */ private $urlGenerator; - /** @var INavigationManager */ - private $navigationManager; /** @var IL10N */ private $l10n; /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */ @@ -74,7 +70,6 @@ class ViewControllerTest extends TestCase { parent::setUp(); $this->request = $this->getMockBuilder('\OCP\IRequest')->getMock(); $this->urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')->getMock(); - $this->navigationManager = $this->getMockBuilder('\OCP\INavigationManager')->getMock(); $this->l10n = $this->getMockBuilder('\OCP\IL10N')->getMock(); $this->config = $this->getMockBuilder('\OCP\IConfig')->getMock(); $this->eventDispatcher = $this->getMockBuilder('\Symfony\Component\EventDispatcher\EventDispatcherInterface')->getMock(); @@ -93,7 +88,6 @@ class ViewControllerTest extends TestCase { 'files', $this->request, $this->urlGenerator, - $this->navigationManager, $this->l10n, $this->config, $this->eventDispatcher, diff --git a/apps/files_external/lib/Command/Notify.php b/apps/files_external/lib/Command/Notify.php index a55b16a45c4..6bb56373d33 100644 --- a/apps/files_external/lib/Command/Notify.php +++ b/apps/files_external/lib/Command/Notify.php @@ -184,19 +184,24 @@ class Notify extends Base { $storage->file_put_contents('/.nc_test_file.txt', 'test content'); $storage->mkdir('/.nc_test_folder'); $storage->file_put_contents('/.nc_test_folder/subfile.txt', 'test content'); + + usleep(100 * 1000); //time for all changes to be processed + $changes = $notifyHandler->getChanges(); + $storage->unlink('/.nc_test_file.txt'); $storage->unlink('/.nc_test_folder/subfile.txt'); $storage->rmdir('/.nc_test_folder'); + usleep(100 * 1000); //time for all changes to be processed + $notifyHandler->getChanges(); // flush $foundRootChange = false; $foundSubfolderChange = false; - $changes = $notifyHandler->getChanges(); foreach ($changes as $change) { - if ($change->getPath() === '/.nc_test_file.txt') { + if ($change->getPath() === '/.nc_test_file.txt' || $change->getPath() === '.nc_test_file.txt') { $foundRootChange = true; - } else if ($change->getPath() === '/.nc_test_folder/subfile.txt') { + } else if ($change->getPath() === '/.nc_test_folder/subfile.txt' || $change->getPath() === '.nc_test_folder/subfile.txt') { $foundSubfolderChange = true; } } diff --git a/apps/files_sharing/css/sharetabview.css b/apps/files_sharing/css/sharetabview.css index 979ef01c030..4738f8b7802 100644 --- a/apps/files_sharing/css/sharetabview.css +++ b/apps/files_sharing/css/sharetabview.css @@ -9,8 +9,8 @@ .shareTabView .shareWithLoading { padding-left: 10px; - right: 30px; - top: 2px; + right: 35px; + top: 0px; } .shareTabView .shareWithRemoteInfo, diff --git a/apps/files_sharing/l10n/cs_CZ.js b/apps/files_sharing/l10n/cs_CZ.js index fa39551879f..6964eb5eabc 100644 --- a/apps/files_sharing/l10n/cs_CZ.js +++ b/apps/files_sharing/l10n/cs_CZ.js @@ -36,10 +36,13 @@ OC.L10N.register( "Public link expired" : "Veřejný odkaz vypršel", "{actor} shared as public link" : "{actor} sdílel(a) jako veřejný odkaz", "{actor} removed public link" : "{actor} odstranil(a) veřejný odkaz", + "Public link of {actor} expired" : "Veřejný odkaz {actor} vypršel", "You shared {file} as public link" : "Sdílel(a) jste {file} jako veřejný odkaz", "You removed public link for {file}" : "Odstranil(a) jste veřejný odkaz pro {file}", + "Public link expired for {file}" : "Veřený odkaz pro {file} vypršel", "{actor} shared {file} as public link" : "{actor} sdílel(a) {file} jako veřejný odkaz", "{actor} removed public link for {file}" : "{actor} odstranil(a) veřejný odkaz pro {file}", + "Public link of {actor} for {file} expired" : "Veřejný odkaz {actor} pro {file} vypršel", "{user} accepted the remote share" : "{user} přijal(a) vzdálené sdílení", "{user} declined the remote share" : "{user} odmítl vzdálené sdílení", "You received a new remote share {file} from {user}" : "Obdržel(a) jste nové vzdálené sdílení souboru {file} od {user}", diff --git a/apps/files_sharing/l10n/cs_CZ.json b/apps/files_sharing/l10n/cs_CZ.json index d5902c41c97..2ee5d1fc0eb 100644 --- a/apps/files_sharing/l10n/cs_CZ.json +++ b/apps/files_sharing/l10n/cs_CZ.json @@ -34,10 +34,13 @@ "Public link expired" : "Veřejný odkaz vypršel", "{actor} shared as public link" : "{actor} sdílel(a) jako veřejný odkaz", "{actor} removed public link" : "{actor} odstranil(a) veřejný odkaz", + "Public link of {actor} expired" : "Veřejný odkaz {actor} vypršel", "You shared {file} as public link" : "Sdílel(a) jste {file} jako veřejný odkaz", "You removed public link for {file}" : "Odstranil(a) jste veřejný odkaz pro {file}", + "Public link expired for {file}" : "Veřený odkaz pro {file} vypršel", "{actor} shared {file} as public link" : "{actor} sdílel(a) {file} jako veřejný odkaz", "{actor} removed public link for {file}" : "{actor} odstranil(a) veřejný odkaz pro {file}", + "Public link of {actor} for {file} expired" : "Veřejný odkaz {actor} pro {file} vypršel", "{user} accepted the remote share" : "{user} přijal(a) vzdálené sdílení", "{user} declined the remote share" : "{user} odmítl vzdálené sdílení", "You received a new remote share {file} from {user}" : "Obdržel(a) jste nové vzdálené sdílení souboru {file} od {user}", diff --git a/apps/files_sharing/l10n/is.js b/apps/files_sharing/l10n/is.js index 0e09ea36130..d0e5a00b4cc 100644 --- a/apps/files_sharing/l10n/is.js +++ b/apps/files_sharing/l10n/is.js @@ -61,7 +61,7 @@ OC.L10N.register( "{actor} shared {file} with you" : "{actor} deildi {file} með þér", "{actor} removed you from {file}" : "{actor} fjarlægði þig af {file}", "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Skrá eða mappa sem deilt var með tölvupósti eða almenningstengli var <strong>sótt</strong>", - "A file or folder was shared from <strong>another server</strong>" : "Skjali eð möppu hefur verið deilt <strong>frá öðrum þjóni</strong>", + "A file or folder was shared from <strong>another server</strong>" : "Skjali eða möppu hefur verið deilt <strong>frá öðrum þjóni</strong>", "A file or folder has been <strong>shared</strong>" : "Skjali eða möppu hefur verið <strong>deilt</strong>", "Wrong share ID, share doesn't exist" : "Rangt auðkenni sameignar, sameign er ekki til", "could not delete share" : "tókst ekki að eyða sameign", diff --git a/apps/files_sharing/l10n/is.json b/apps/files_sharing/l10n/is.json index 3025d47a1d1..8f2e238b46d 100644 --- a/apps/files_sharing/l10n/is.json +++ b/apps/files_sharing/l10n/is.json @@ -59,7 +59,7 @@ "{actor} shared {file} with you" : "{actor} deildi {file} með þér", "{actor} removed you from {file}" : "{actor} fjarlægði þig af {file}", "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Skrá eða mappa sem deilt var með tölvupósti eða almenningstengli var <strong>sótt</strong>", - "A file or folder was shared from <strong>another server</strong>" : "Skjali eð möppu hefur verið deilt <strong>frá öðrum þjóni</strong>", + "A file or folder was shared from <strong>another server</strong>" : "Skjali eða möppu hefur verið deilt <strong>frá öðrum þjóni</strong>", "A file or folder has been <strong>shared</strong>" : "Skjali eða möppu hefur verið <strong>deilt</strong>", "Wrong share ID, share doesn't exist" : "Rangt auðkenni sameignar, sameign er ekki til", "could not delete share" : "tókst ekki að eyða sameign", diff --git a/apps/files_sharing/l10n/zh_CN.js b/apps/files_sharing/l10n/zh_CN.js index 2dcf3d54abe..41fd4fd043f 100644 --- a/apps/files_sharing/l10n/zh_CN.js +++ b/apps/files_sharing/l10n/zh_CN.js @@ -26,6 +26,7 @@ OC.L10N.register( "Shared with group {group}" : "分享到群组 {group}", "Removed share for group {group}" : "到群组 {group} 的分享已被移除 ", "{actor} shared with group {group}" : "{actor} 被分享到群组 {group}", + "You removed group {group} from {file}" : "已移除组 {group} 从 {file}", "Shared as public link" : "共享为公开链接", "Removed public link" : "移除公开链接", "Public link expired" : "公开链接已过期", @@ -37,6 +38,7 @@ OC.L10N.register( "Shared with {user}" : "与 {user} 分享", "Removed share for {user}" : "移除给 {user} 的共享", "Shared by {actor}" : "由 {actor} 共享", + "{actor} removed share" : "{actor} 移除共享", "{actor} removed {user} from {file}" : "{actor} 移除 {user} 从 {file}", "A file or folder was shared from <strong>another server</strong>" : "<strong>其它服务器</strong> 中一个文件或者文件夹被共享 ", "A file or folder has been <strong>shared</strong>" : "一个文件或文件夹已<strong>共享</strong>。", diff --git a/apps/files_sharing/l10n/zh_CN.json b/apps/files_sharing/l10n/zh_CN.json index 095c332c2ed..43679194092 100644 --- a/apps/files_sharing/l10n/zh_CN.json +++ b/apps/files_sharing/l10n/zh_CN.json @@ -24,6 +24,7 @@ "Shared with group {group}" : "分享到群组 {group}", "Removed share for group {group}" : "到群组 {group} 的分享已被移除 ", "{actor} shared with group {group}" : "{actor} 被分享到群组 {group}", + "You removed group {group} from {file}" : "已移除组 {group} 从 {file}", "Shared as public link" : "共享为公开链接", "Removed public link" : "移除公开链接", "Public link expired" : "公开链接已过期", @@ -35,6 +36,7 @@ "Shared with {user}" : "与 {user} 分享", "Removed share for {user}" : "移除给 {user} 的共享", "Shared by {actor}" : "由 {actor} 共享", + "{actor} removed share" : "{actor} 移除共享", "{actor} removed {user} from {file}" : "{actor} 移除 {user} 从 {file}", "A file or folder was shared from <strong>another server</strong>" : "<strong>其它服务器</strong> 中一个文件或者文件夹被共享 ", "A file or folder has been <strong>shared</strong>" : "一个文件或文件夹已<strong>共享</strong>。", diff --git a/apps/files_sharing/lib/Controller/ShareesAPIController.php b/apps/files_sharing/lib/Controller/ShareesAPIController.php index 40a9b272bc8..e4b5b0ce19c 100644 --- a/apps/files_sharing/lib/Controller/ShareesAPIController.php +++ b/apps/files_sharing/lib/Controller/ShareesAPIController.php @@ -24,7 +24,7 @@ */ namespace OCA\Files_Sharing\Controller; -use OCP\AppFramework\Http; +use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\OCS\OCSBadRequestException; use OCP\AppFramework\OCSController; use OCP\Contacts\IManager; @@ -409,10 +409,22 @@ class ShareesAPIController extends OCSController { * @param int $perPage * @param int|int[] $shareType * @param bool $lookup - * @return Http\DataResponse + * @return DataResponse * @throws OCSBadRequestException */ public function search($search = '', $itemType = null, $page = 1, $perPage = 200, $shareType = null, $lookup = true) { + + // only search for string larger than a given threshold + $threshold = (int)$this->config->getSystemValue('sharing.minSearchStringLength', 0); + if (strlen($search) < $threshold) { + return new DataResponse($this->result); + } + + // never return more than the max. number of results configured in the config.php + $maxResults = (int)$this->config->getSystemValue('sharing.maxAutocompleteResults', 0); + if ($maxResults > 0) { + $perPage = min($perPage, $maxResults); + } if ($perPage <= 0) { throw new OCSBadRequestException('Invalid perPage argument'); } @@ -481,7 +493,7 @@ class ShareesAPIController extends OCSController { * @param int $page * @param int $perPage * @param bool $lookup - * @return Http\DataResponse + * @return DataResponse * @throws OCSBadRequestException */ protected function searchSharees($search, $itemType, array $shareTypes, $page, $perPage, $lookup) { @@ -533,7 +545,7 @@ class ShareesAPIController extends OCSController { $this->result['exact']['emails'] = $mailResults['exact']; } - $response = new Http\DataResponse($this->result); + $response = new DataResponse($this->result); if (sizeof($this->reachedEndFor) < 3) { $response->addHeader('Link', $this->getPaginationLink($page, [ diff --git a/apps/files_sharing/lib/SharedMount.php b/apps/files_sharing/lib/SharedMount.php index 2ef5e15b778..d5ae303390f 100644 --- a/apps/files_sharing/lib/SharedMount.php +++ b/apps/files_sharing/lib/SharedMount.php @@ -253,7 +253,7 @@ class SharedMount extends MountPoint implements MoveableMount { $row = $result->fetch(); $result->closeCursor(); if ($row) { - return $row['storage']; + return (int)$row['storage']; } return -1; } diff --git a/apps/files_trashbin/l10n/ia.js b/apps/files_trashbin/l10n/ia.js index 624cb635dae..804989e3918 100644 --- a/apps/files_trashbin/l10n/ia.js +++ b/apps/files_trashbin/l10n/ia.js @@ -14,7 +14,7 @@ OC.L10N.register( "No deleted files" : "Nulle files delite", "You will be able to recover deleted files from here" : "Tu potera recuperar files delite desde ci", "No entries found in this folder" : "Nulle entratas trovate in iste dossier", - "Select all" : "Seliger toto", + "Select all" : "Selectionar toto", "Name" : "Nomine", "Deleted" : "Delite" }, diff --git a/apps/files_trashbin/l10n/ia.json b/apps/files_trashbin/l10n/ia.json index b3e7af84df0..51e4f4e4b89 100644 --- a/apps/files_trashbin/l10n/ia.json +++ b/apps/files_trashbin/l10n/ia.json @@ -12,7 +12,7 @@ "No deleted files" : "Nulle files delite", "You will be able to recover deleted files from here" : "Tu potera recuperar files delite desde ci", "No entries found in this folder" : "Nulle entratas trovate in iste dossier", - "Select all" : "Seliger toto", + "Select all" : "Selectionar toto", "Name" : "Nomine", "Deleted" : "Delite" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/provisioning_api/lib/Controller/UsersController.php b/apps/provisioning_api/lib/Controller/UsersController.php index 1e8a767b33a..766775dfdbe 100644 --- a/apps/provisioning_api/lib/Controller/UsersController.php +++ b/apps/provisioning_api/lib/Controller/UsersController.php @@ -252,6 +252,11 @@ class UsersController extends OCSController { } $userAccount = $this->accountManager->getUser($targetUserObject); + $groups = $this->groupManager->getUserGroups($targetUserObject); + $gids = []; + foreach ($groups as $group) { + $gids[] = $group->getDisplayName(); + } // Find the data $data['id'] = $targetUserObject->getUID(); @@ -262,6 +267,7 @@ class UsersController extends OCSController { $data['address'] = $userAccount[\OC\Accounts\AccountManager::PROPERTY_ADDRESS]['value']; $data['webpage'] = $userAccount[\OC\Accounts\AccountManager::PROPERTY_WEBSITE]['value']; $data['twitter'] = $userAccount[\OC\Accounts\AccountManager::PROPERTY_TWITTER]['value']; + $data['groups'] = $gids; return $data; } diff --git a/apps/provisioning_api/tests/Controller/UsersControllerTest.php b/apps/provisioning_api/tests/Controller/UsersControllerTest.php index a3e5bf6fde6..a049b15bf03 100644 --- a/apps/provisioning_api/tests/Controller/UsersControllerTest.php +++ b/apps/provisioning_api/tests/Controller/UsersControllerTest.php @@ -635,6 +635,9 @@ class UsersControllerTest extends OriginalTest { } public function testGetUserDataAsAdmin() { + $group = $this->getMockBuilder(IGroup::class) + ->disableOriginalConstructor() + ->getMock(); $loggedInUser = $this->getMockBuilder('OCP\IUser') ->disableOriginalConstructor() ->getMock(); @@ -662,6 +665,19 @@ class UsersControllerTest extends OriginalTest { ->method('isAdmin') ->with('admin') ->will($this->returnValue(true)); + $this->groupManager + ->expects($this->any()) + ->method('getUserGroups') + ->willReturn([$group, $group, $group]); + $group->expects($this->at(0)) + ->method('getDisplayName') + ->willReturn('group0'); + $group->expects($this->at(1)) + ->method('getDisplayName') + ->willReturn('group1'); + $group->expects($this->at(2)) + ->method('getDisplayName') + ->willReturn('group2'); $this->accountManager->expects($this->any())->method('getUser') ->with($targetUser) ->willReturn( @@ -700,7 +716,8 @@ class UsersControllerTest extends OriginalTest { 'phone' => 'phone', 'address' => 'address', 'webpage' => 'website', - 'twitter' => 'twitter' + 'twitter' => 'twitter', + 'groups' => ['group0', 'group1', 'group2'] ]; $this->assertEquals($expected, $this->invokePrivate($this->api, 'getUserData', ['UserToGet'])); } @@ -734,6 +751,10 @@ class UsersControllerTest extends OriginalTest { ->method('isAdmin') ->with('subadmin') ->will($this->returnValue(false)); + $this->groupManager + ->expects($this->any()) + ->method('getUserGroups') + ->willReturn([]); $subAdminManager = $this->getMockBuilder('OC\SubAdmin') ->disableOriginalConstructor() ->getMock(); @@ -784,7 +805,8 @@ class UsersControllerTest extends OriginalTest { 'phone' => 'phone', 'address' => 'address', 'webpage' => 'website', - 'twitter' => 'twitter' + 'twitter' => 'twitter', + 'groups' => [] ]; $this->assertEquals($expected, $this->invokePrivate($this->api, 'getUserData', ['UserToGet'])); } @@ -872,6 +894,10 @@ class UsersControllerTest extends OriginalTest { ->expects($this->once()) ->method('getSubAdmin') ->will($this->returnValue($subAdminManager)); + $this->groupManager + ->expects($this->any()) + ->method('getUserGroups') + ->willReturn([]); $this->api ->expects($this->once()) ->method('fillStorageInfo') @@ -908,7 +934,8 @@ class UsersControllerTest extends OriginalTest { 'phone' => 'phone', 'address' => 'address', 'webpage' => 'website', - 'twitter' => 'twitter' + 'twitter' => 'twitter', + 'groups' => [] ]; $this->assertEquals($expected, $this->invokePrivate($this->api, 'getUserData', ['subadmin'])); } diff --git a/apps/sharebymail/l10n/cs_CZ.js b/apps/sharebymail/l10n/cs_CZ.js new file mode 100644 index 00000000000..c24f35e3384 --- /dev/null +++ b/apps/sharebymail/l10n/cs_CZ.js @@ -0,0 +1,24 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with %1$s" : "Sdíleno s %1$s", + "Shared with {email}" : "Sdíleno s {email}", + "Shared with %1$s by %2$s" : "%2$s sdílí s %1$s", + "Shared with {email} by {actor}" : "{actor} sdílí s {email}", + "You shared %1$s with %2$s by mail" : "Sdílel(a) jste %1$s e-mailem s %2$s", + "You shared {file} with {email} by mail" : "E-mailem jste s {email} sdíleli {file}", + "%3$s shared %1$s with %2$s by mail" : "%3$s s %2$s sdílel e-mailem %1$s", + "{actor} shared {file} with {email} by mail" : "{actor} sdílel(a) {file} e-mailem s {email}", + "Sharing %s failed, this item is already shared with %s" : "Sdílení %s selhalo, tato položka je již s %s sdílena", + "Failed to send share by E-mail" : "Odeslání sdílení E-mailem se nezdařilo", + "%s shared »%s« with you" : "%s s vámi sdílel(a) »%s»", + "%s shared »%s« with you on behalf of %s" : "%s s vámi sdílel »%s» místo %s", + "Failed to create the E-mail" : "Vytváření E-mailu se nezdařilo", + "Could not find share" : "Nelze nalézt sdílení", + "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Ahoj,\n\n%s s vámi sdílel(a) »%s» na místo %s\n\n%s", + "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Ahoj,\n\n\n%s s vámi sdílel »%s».\n\n%s", + "Cheers!" : "Mějte se!", + "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Ahoj,<br><br>%s s vámi sdílel(a) <a href=\"%s\">%s</a> namísto %s.<br><br>", + "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Nazdar,<br><br>%s s vámi sdílel(a) <a href=\"%s\">%s</a>.<br><br>" +}, +"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/apps/sharebymail/l10n/cs_CZ.json b/apps/sharebymail/l10n/cs_CZ.json new file mode 100644 index 00000000000..07a016c80d3 --- /dev/null +++ b/apps/sharebymail/l10n/cs_CZ.json @@ -0,0 +1,22 @@ +{ "translations": { + "Shared with %1$s" : "Sdíleno s %1$s", + "Shared with {email}" : "Sdíleno s {email}", + "Shared with %1$s by %2$s" : "%2$s sdílí s %1$s", + "Shared with {email} by {actor}" : "{actor} sdílí s {email}", + "You shared %1$s with %2$s by mail" : "Sdílel(a) jste %1$s e-mailem s %2$s", + "You shared {file} with {email} by mail" : "E-mailem jste s {email} sdíleli {file}", + "%3$s shared %1$s with %2$s by mail" : "%3$s s %2$s sdílel e-mailem %1$s", + "{actor} shared {file} with {email} by mail" : "{actor} sdílel(a) {file} e-mailem s {email}", + "Sharing %s failed, this item is already shared with %s" : "Sdílení %s selhalo, tato položka je již s %s sdílena", + "Failed to send share by E-mail" : "Odeslání sdílení E-mailem se nezdařilo", + "%s shared »%s« with you" : "%s s vámi sdílel(a) »%s»", + "%s shared »%s« with you on behalf of %s" : "%s s vámi sdílel »%s» místo %s", + "Failed to create the E-mail" : "Vytváření E-mailu se nezdařilo", + "Could not find share" : "Nelze nalézt sdílení", + "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Ahoj,\n\n%s s vámi sdílel(a) »%s» na místo %s\n\n%s", + "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Ahoj,\n\n\n%s s vámi sdílel »%s».\n\n%s", + "Cheers!" : "Mějte se!", + "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Ahoj,<br><br>%s s vámi sdílel(a) <a href=\"%s\">%s</a> namísto %s.<br><br>", + "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Nazdar,<br><br>%s s vámi sdílel(a) <a href=\"%s\">%s</a>.<br><br>" +},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/de_DE.js b/apps/sharebymail/l10n/de_DE.js index 68ec421c7e7..683bc539a23 100644 --- a/apps/sharebymail/l10n/de_DE.js +++ b/apps/sharebymail/l10n/de_DE.js @@ -16,7 +16,7 @@ OC.L10N.register( "Failed to create the E-mail" : "Erstellen der E-Mail fehlgeschlagen", "Could not find share" : "Freigabe konnte nicht gefunden werden", "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Hallo,\n\n%s hat »%s« im Auftrag von %s mit Ihnen geteilt.\n\n%s\n", - "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Hallo,\n\n%s hat »%s« mit Dir geteilt.\n\n%s\n", + "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Hallo,\n\n%s hat »%s« mit Ihnen geteilt.\n\n%s\n", "Cheers!" : "Noch einen schönen Tag!", "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Hallo,<br><br>%s hat <a href=\"%s\">%s</a> im Auftrag von %s mit Ihnen geteilt.<br><br>", "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Hallo,<br><br>%s hat <a href=\"%s\">%s</a> mit Ihnen geteilt.<br><br>" diff --git a/apps/sharebymail/l10n/de_DE.json b/apps/sharebymail/l10n/de_DE.json index 744813ac39c..9150dee8188 100644 --- a/apps/sharebymail/l10n/de_DE.json +++ b/apps/sharebymail/l10n/de_DE.json @@ -14,7 +14,7 @@ "Failed to create the E-mail" : "Erstellen der E-Mail fehlgeschlagen", "Could not find share" : "Freigabe konnte nicht gefunden werden", "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Hallo,\n\n%s hat »%s« im Auftrag von %s mit Ihnen geteilt.\n\n%s\n", - "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Hallo,\n\n%s hat »%s« mit Dir geteilt.\n\n%s\n", + "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Hallo,\n\n%s hat »%s« mit Ihnen geteilt.\n\n%s\n", "Cheers!" : "Noch einen schönen Tag!", "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Hallo,<br><br>%s hat <a href=\"%s\">%s</a> im Auftrag von %s mit Ihnen geteilt.<br><br>", "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Hallo,<br><br>%s hat <a href=\"%s\">%s</a> mit Ihnen geteilt.<br><br>" diff --git a/apps/sharebymail/l10n/is.js b/apps/sharebymail/l10n/is.js new file mode 100644 index 00000000000..48bba82928c --- /dev/null +++ b/apps/sharebymail/l10n/is.js @@ -0,0 +1,24 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with %1$s" : "Deilt með %1$s", + "Shared with {email}" : "Deilt með {email}", + "Shared with %1$s by %2$s" : "Deilt með %1$s af %2$s", + "Shared with {email} by {actor}" : "Deilt með {email} af {actor}", + "You shared %1$s with %2$s by mail" : "Þú deildir %1$s með %2$s með tölvupósti", + "You shared {file} with {email} by mail" : "Þú deildir {file} með {email} með tölvupósti", + "%3$s shared %1$s with %2$s by mail" : "%3$s deildi %1$s með %2$s með tölvupósti", + "{actor} shared {file} with {email} by mail" : "{actor} deildi {file} með {email} með tölvupósti", + "Sharing %s failed, this item is already shared with %s" : "Deiling %s mistókst, því þessu atriði er þegar deilt með %s", + "Failed to send share by E-mail" : "Gat ekki sent sameign með tölvupósti", + "%s shared »%s« with you" : "%s deildi »%s« með þér", + "%s shared »%s« with you on behalf of %s" : "%s deildi »%s« með þér fyrir hönd %s", + "Failed to create the E-mail" : "Mistókst að útbúa tölvupóstinn", + "Could not find share" : "Gat ekki fundið sameign", + "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Góðan daginn,\n\n%s deildi »%s« með þér fyrir hönd %s.\n\n%s\n\n", + "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Góðan daginn,\n\n%s deildi »%s« með þér.\n\n%s\n\n", + "Cheers!" : "Til hamingju!", + "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Góðan daginn,<br><br>%s deildi <a href=\"%s\">%s</a> með þér fyrir hönd %s.<br><br>", + "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Góðan daginn,<br><br>%s deildi <a href=\"%s\">%s</a> með þér.<br><br>" +}, +"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/apps/sharebymail/l10n/is.json b/apps/sharebymail/l10n/is.json new file mode 100644 index 00000000000..915c340c87c --- /dev/null +++ b/apps/sharebymail/l10n/is.json @@ -0,0 +1,22 @@ +{ "translations": { + "Shared with %1$s" : "Deilt með %1$s", + "Shared with {email}" : "Deilt með {email}", + "Shared with %1$s by %2$s" : "Deilt með %1$s af %2$s", + "Shared with {email} by {actor}" : "Deilt með {email} af {actor}", + "You shared %1$s with %2$s by mail" : "Þú deildir %1$s með %2$s með tölvupósti", + "You shared {file} with {email} by mail" : "Þú deildir {file} með {email} með tölvupósti", + "%3$s shared %1$s with %2$s by mail" : "%3$s deildi %1$s með %2$s með tölvupósti", + "{actor} shared {file} with {email} by mail" : "{actor} deildi {file} með {email} með tölvupósti", + "Sharing %s failed, this item is already shared with %s" : "Deiling %s mistókst, því þessu atriði er þegar deilt með %s", + "Failed to send share by E-mail" : "Gat ekki sent sameign með tölvupósti", + "%s shared »%s« with you" : "%s deildi »%s« með þér", + "%s shared »%s« with you on behalf of %s" : "%s deildi »%s« með þér fyrir hönd %s", + "Failed to create the E-mail" : "Mistókst að útbúa tölvupóstinn", + "Could not find share" : "Gat ekki fundið sameign", + "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Góðan daginn,\n\n%s deildi »%s« með þér fyrir hönd %s.\n\n%s\n\n", + "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Góðan daginn,\n\n%s deildi »%s« með þér.\n\n%s\n\n", + "Cheers!" : "Til hamingju!", + "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Góðan daginn,<br><br>%s deildi <a href=\"%s\">%s</a> með þér fyrir hönd %s.<br><br>", + "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Góðan daginn,<br><br>%s deildi <a href=\"%s\">%s</a> með þér.<br><br>" +},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/zh_CN.js b/apps/sharebymail/l10n/zh_CN.js new file mode 100644 index 00000000000..62a37921712 --- /dev/null +++ b/apps/sharebymail/l10n/zh_CN.js @@ -0,0 +1,24 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with %1$s" : "与 %1$s 分享", + "Shared with {email}" : "用 {email} 分享", + "Shared with %1$s by %2$s" : "由 %2$s 共享给 %1$s", + "Shared with {email} by {actor}" : "由 {actor} 通过 {email} 分享", + "You shared %1$s with %2$s by mail" : "您通过邮件把 %1$s 分享给了 %2$s", + "You shared {file} with {email} by mail" : "您通过邮件 {email} 分享了 {file} ", + "%3$s shared %1$s with %2$s by mail" : "%3$s 通过邮件将 %1$s 分享给了 %2$s", + "{actor} shared {file} with {email} by mail" : "{actor} 共享 {file} 于 {email} 通过邮件", + "Sharing %s failed, this item is already shared with %s" : "共享 %s 失败, 该项目已经共享于 %s", + "Failed to send share by E-mail" : "通过电子邮件发送共享失败", + "%s shared »%s« with you" : "%s 共享 »%s« 与你", + "%s shared »%s« with you on behalf of %s" : "%s 共享 »%s« 和你代表 %s", + "Failed to create the E-mail" : "创建电子邮件失败", + "Could not find share" : "没有发现共享", + "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "嘿那儿,\n\n%s 共享 »%s« 与你代表 %s.\n\n%s\n\n", + "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "嘿那儿,\n\n%s 共享 »%s« 与你.\n\n%s\n\n", + "Cheers!" : "干杯!", + "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "嘿那儿,<br><br>%s 共享 <a href=\"%s\">%s</a> 与你代表 %s.<br><br>", + "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "嘿那儿,<br><br>%s 共享 <a href=\"%s\">%s</a> 与你.<br><br>" +}, +"nplurals=1; plural=0;"); diff --git a/apps/sharebymail/l10n/zh_CN.json b/apps/sharebymail/l10n/zh_CN.json new file mode 100644 index 00000000000..e4cdb219608 --- /dev/null +++ b/apps/sharebymail/l10n/zh_CN.json @@ -0,0 +1,22 @@ +{ "translations": { + "Shared with %1$s" : "与 %1$s 分享", + "Shared with {email}" : "用 {email} 分享", + "Shared with %1$s by %2$s" : "由 %2$s 共享给 %1$s", + "Shared with {email} by {actor}" : "由 {actor} 通过 {email} 分享", + "You shared %1$s with %2$s by mail" : "您通过邮件把 %1$s 分享给了 %2$s", + "You shared {file} with {email} by mail" : "您通过邮件 {email} 分享了 {file} ", + "%3$s shared %1$s with %2$s by mail" : "%3$s 通过邮件将 %1$s 分享给了 %2$s", + "{actor} shared {file} with {email} by mail" : "{actor} 共享 {file} 于 {email} 通过邮件", + "Sharing %s failed, this item is already shared with %s" : "共享 %s 失败, 该项目已经共享于 %s", + "Failed to send share by E-mail" : "通过电子邮件发送共享失败", + "%s shared »%s« with you" : "%s 共享 »%s« 与你", + "%s shared »%s« with you on behalf of %s" : "%s 共享 »%s« 和你代表 %s", + "Failed to create the E-mail" : "创建电子邮件失败", + "Could not find share" : "没有发现共享", + "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "嘿那儿,\n\n%s 共享 »%s« 与你代表 %s.\n\n%s\n\n", + "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "嘿那儿,\n\n%s 共享 »%s« 与你.\n\n%s\n\n", + "Cheers!" : "干杯!", + "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "嘿那儿,<br><br>%s 共享 <a href=\"%s\">%s</a> 与你代表 %s.<br><br>", + "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "嘿那儿,<br><br>%s 共享 <a href=\"%s\">%s</a> 与你.<br><br>" +},"pluralForm" :"nplurals=1; plural=0;" +}
\ No newline at end of file diff --git a/apps/systemtags/l10n/ia.js b/apps/systemtags/l10n/ia.js index 46a0d7464b0..4b5e58c7bf9 100644 --- a/apps/systemtags/l10n/ia.js +++ b/apps/systemtags/l10n/ia.js @@ -2,8 +2,62 @@ OC.L10N.register( "systemtags", { "Tags" : "Etiquettas", + "Update" : "Actualisation", + "Create" : "Crear", + "Select tag…" : "Selectionar etiquetta...", + "Tagged files" : "Files etiquettate", + "Select tags to filter by" : "Selectionar etiquettas a filtrar per", + "No tags found" : "Nulle etiquettas trovate", + "Please select tags to filter by" : "Per favor, selectiona etiquettas a filtrar per", + "No files found for the selected tags" : "Nulle files trovate in correspondentia a le etiquettas selectionate", + "Added system tag %1$s" : "Etiquetta de systema %1$s addite", + "Added system tag {systemtag}" : "Etiquetta de systema {systemtag} addite", + "%1$s added system tag %2$s" : "%1$s addeva le etiquetta de systema %2$s", + "{actor} added system tag {systemtag}" : "{actor} addeva le etiquetta de systema {systemtag}", + "Removed system tag %1$s" : "Etiquetta de systema %1$s removite", + "Removed system tag {systemtag}" : "Etiquetta de systema {systemtag} removite", + "%1$s removed system tag %2$s" : "%1$s removeva le etiquetta de systema %2$s", + "{actor} removed system tag {systemtag}" : "{actor} removeva le etiquetta de systema {systemtag}", + "You created system tag %1$s" : "Tu creava le etiquetta de systema %1$s", + "You created system tag {systemtag}" : "Tu creava le etiquetta de systema {systemtag}", + "%1$s created system tag %2$s" : "%1$s creava le etiquetta de systema %2$s", + "{actor} created system tag {systemtag}" : "{actor} creava le etiquetta de systema {systemtag}", + "You deleted system tag %1$s" : "Tu deleva le etiquetta de systema %1$s", + "You deleted system tag {systemtag}" : "Tu deleva le etiquetta de systema {systemtag}", + "%1$s deleted system tag %2$s" : "%1$s deleva le etiquetta de systema %2$s", + "{actor} deleted system tag {systemtag}" : "{actor} deleva le etiquetta de systema {systemtag}", + "You updated system tag %2$s to %1$s" : "Tu actualisava le etiquetta de systema %2$s a %1$s", + "You updated system tag {oldsystemtag} to {newsystemtag}" : "Tu actualisava le etiquetta de systema {oldsystemtag} a {newsystemtag}", + "%1$s updated system tag %3$s to %2$s" : "%1$s actualisava le etiquetta de systema %3$s a %2$s", + "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} actualisava le etiquetta de systema {oldsystemtag} a {newsystemtag}", + "You added system tag %2$s to %1$s" : "Tu addeva le etiquetta de systema %2$s a %1$s", + "You added system tag {systemtag} to {file}" : "Tu addeva le etiquetta de systema {systemtag} a {file}", + "%1$s added system tag %3$s to %2$s" : "%1$s addeva le etiquetta de systema %3$s a %2$s", + "{actor} added system tag {systemtag} to {file}" : "{actor} addeva le etiquetta de systema {systemtag} a {file}", + "You removed system tag %2$s from %1$s" : "Tu removeva le etiquetta de systema %2$s de %1$s", + "You removed system tag {systemtag} from {file}" : "Tu removeva le etiquetta de systema {systemtag} de {file}", + "%1$s removed system tag %3$s from %2$s" : "%1$s removeva le etiquetta de systema %3$s de %2$s", + "{actor} removed system tag {systemtag} from {file}" : "{actor} removeva le etiquetta de systema {systemtag} de {file}", + "%s (restricted)" : "%s (restringite)", + "%s (invisible)" : "%s (invisibile)", + "<strong>System tags</strong> for a file have been modified" : "<strong>Le etiquettas de systema</strong> de un file esseva modificate", + "Collaborative tags" : "Etiquettas collaborative", "Name" : "Nomine", + "Delete" : "Deler", + "Public" : "Public", + "Restricted" : "Restringite", + "Invisible" : "Invisibile", + "Reset" : "Reinitialisar", + "No files in here" : "Nulle files ci", + "No entries found in this folder" : "Nulle entratas trovate in iste dossier", "Size" : "Dimension", - "Modified" : "Modificate" + "Modified" : "Modificate", + "You assigned system tag %3$s" : "Tu assignava le etiquetta de systema %3$s", + "%1$s assigned system tag %3$s" : "%1$s assignava le etiquetta de systema %3$s", + "You created system tag %2$s" : "Tu creava le etiquetta de systema %2$s", + "You deleted system tag %2$s" : "Tu deleva le etiquetta de systema %2$s", + "You updated system tag %3$s to %2$s" : "Tu actualisava le etiquetta de systema %3$s a %2$s", + "You assigned system tag %3$s to %2$s" : "Tu assignava le etiquetta de systema %3$s a %2$s", + "%1$s assigned system tag %3$s to %2$s" : "%1$s assignava le etiquetta de systema %3$s a %2$s" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/systemtags/l10n/ia.json b/apps/systemtags/l10n/ia.json index aacb98d037a..5734411121b 100644 --- a/apps/systemtags/l10n/ia.json +++ b/apps/systemtags/l10n/ia.json @@ -1,7 +1,61 @@ { "translations": { "Tags" : "Etiquettas", + "Update" : "Actualisation", + "Create" : "Crear", + "Select tag…" : "Selectionar etiquetta...", + "Tagged files" : "Files etiquettate", + "Select tags to filter by" : "Selectionar etiquettas a filtrar per", + "No tags found" : "Nulle etiquettas trovate", + "Please select tags to filter by" : "Per favor, selectiona etiquettas a filtrar per", + "No files found for the selected tags" : "Nulle files trovate in correspondentia a le etiquettas selectionate", + "Added system tag %1$s" : "Etiquetta de systema %1$s addite", + "Added system tag {systemtag}" : "Etiquetta de systema {systemtag} addite", + "%1$s added system tag %2$s" : "%1$s addeva le etiquetta de systema %2$s", + "{actor} added system tag {systemtag}" : "{actor} addeva le etiquetta de systema {systemtag}", + "Removed system tag %1$s" : "Etiquetta de systema %1$s removite", + "Removed system tag {systemtag}" : "Etiquetta de systema {systemtag} removite", + "%1$s removed system tag %2$s" : "%1$s removeva le etiquetta de systema %2$s", + "{actor} removed system tag {systemtag}" : "{actor} removeva le etiquetta de systema {systemtag}", + "You created system tag %1$s" : "Tu creava le etiquetta de systema %1$s", + "You created system tag {systemtag}" : "Tu creava le etiquetta de systema {systemtag}", + "%1$s created system tag %2$s" : "%1$s creava le etiquetta de systema %2$s", + "{actor} created system tag {systemtag}" : "{actor} creava le etiquetta de systema {systemtag}", + "You deleted system tag %1$s" : "Tu deleva le etiquetta de systema %1$s", + "You deleted system tag {systemtag}" : "Tu deleva le etiquetta de systema {systemtag}", + "%1$s deleted system tag %2$s" : "%1$s deleva le etiquetta de systema %2$s", + "{actor} deleted system tag {systemtag}" : "{actor} deleva le etiquetta de systema {systemtag}", + "You updated system tag %2$s to %1$s" : "Tu actualisava le etiquetta de systema %2$s a %1$s", + "You updated system tag {oldsystemtag} to {newsystemtag}" : "Tu actualisava le etiquetta de systema {oldsystemtag} a {newsystemtag}", + "%1$s updated system tag %3$s to %2$s" : "%1$s actualisava le etiquetta de systema %3$s a %2$s", + "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} actualisava le etiquetta de systema {oldsystemtag} a {newsystemtag}", + "You added system tag %2$s to %1$s" : "Tu addeva le etiquetta de systema %2$s a %1$s", + "You added system tag {systemtag} to {file}" : "Tu addeva le etiquetta de systema {systemtag} a {file}", + "%1$s added system tag %3$s to %2$s" : "%1$s addeva le etiquetta de systema %3$s a %2$s", + "{actor} added system tag {systemtag} to {file}" : "{actor} addeva le etiquetta de systema {systemtag} a {file}", + "You removed system tag %2$s from %1$s" : "Tu removeva le etiquetta de systema %2$s de %1$s", + "You removed system tag {systemtag} from {file}" : "Tu removeva le etiquetta de systema {systemtag} de {file}", + "%1$s removed system tag %3$s from %2$s" : "%1$s removeva le etiquetta de systema %3$s de %2$s", + "{actor} removed system tag {systemtag} from {file}" : "{actor} removeva le etiquetta de systema {systemtag} de {file}", + "%s (restricted)" : "%s (restringite)", + "%s (invisible)" : "%s (invisibile)", + "<strong>System tags</strong> for a file have been modified" : "<strong>Le etiquettas de systema</strong> de un file esseva modificate", + "Collaborative tags" : "Etiquettas collaborative", "Name" : "Nomine", + "Delete" : "Deler", + "Public" : "Public", + "Restricted" : "Restringite", + "Invisible" : "Invisibile", + "Reset" : "Reinitialisar", + "No files in here" : "Nulle files ci", + "No entries found in this folder" : "Nulle entratas trovate in iste dossier", "Size" : "Dimension", - "Modified" : "Modificate" + "Modified" : "Modificate", + "You assigned system tag %3$s" : "Tu assignava le etiquetta de systema %3$s", + "%1$s assigned system tag %3$s" : "%1$s assignava le etiquetta de systema %3$s", + "You created system tag %2$s" : "Tu creava le etiquetta de systema %2$s", + "You deleted system tag %2$s" : "Tu deleva le etiquetta de systema %2$s", + "You updated system tag %3$s to %2$s" : "Tu actualisava le etiquetta de systema %3$s a %2$s", + "You assigned system tag %3$s to %2$s" : "Tu assignava le etiquetta de systema %3$s a %2$s", + "%1$s assigned system tag %3$s to %2$s" : "%1$s assignava le etiquetta de systema %3$s a %2$s" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/systemtags/l10n/is.js b/apps/systemtags/l10n/is.js index 13836151e21..669a0792afa 100644 --- a/apps/systemtags/l10n/is.js +++ b/apps/systemtags/l10n/is.js @@ -7,17 +7,40 @@ OC.L10N.register( "Select tag…" : "Veldu merki...", "Tagged files" : "Merktar skrár", "Select tags to filter by" : "Veldu merki til að sía eftir", + "No tags found" : "Engin merki fundust", "Please select tags to filter by" : "Veldu merki til að sía eftir", "No files found for the selected tags" : "Engar skrár fundust með völdum merkjum", - "<strong>System tags</strong> for a file have been modified" : "<strong>Kerfismerkjum</strong> á skrá hefur verið breytt", - "You created system tag %2$s" : "Þú bjóst til kerfismerkið %2$s", - "%1$s created system tag %2$s" : "%1$s bjó til kerfismerki %2$s", - "You deleted system tag %2$s" : "Þú eyddir kerfismerkinu %2$s", - "%1$s deleted system tag %2$s" : "%1$s eyddi kerfismerki %2$s", - "You updated system tag %3$s to %2$s" : "Þú uppfærðir kerfismerki %3$s í %2$s", - "%1$s updated system tag %3$s to %2$s" : "%1$s uppfærði kerfismerki %3$s í %2$s", + "Added system tag %1$s" : "Bætti við kerfismerkinu %1$s", + "Added system tag {systemtag}" : "Bætti við kerfismerkinu {systemtag}", + "%1$s added system tag %2$s" : "%1$s bætti við kerfismerkinu %2$s", + "{actor} added system tag {systemtag}" : "{actor} bætti við kerfismerkinu {systemtag}", + "Removed system tag %1$s" : "Fjarlægði kerfismerkið %1$s", + "Removed system tag {systemtag}" : "Fjarlægði kerfismerkið {systemtag}", + "%1$s removed system tag %2$s" : "%1$s fjarlægði kerfismerkið %2$s", + "{actor} removed system tag {systemtag}" : "{actor} fjarlægði kerfismerkið {systemtag}", + "You created system tag %1$s" : "Þú bjóst til kerfismerkið %1$s", + "You created system tag {systemtag}" : "Þú bjóst til kerfismerkið {systemtag}", + "%1$s created system tag %2$s" : "%1$s bjó til kerfismerkið %2$s", + "{actor} created system tag {systemtag}" : "{actor} bjó til kerfismerkið {systemtag}", + "You deleted system tag %1$s" : "Þú eyddir kerfismerkinu %1$s", + "You deleted system tag {systemtag}" : "Þú eyddir kerfismerkinu {systemtag}", + "%1$s deleted system tag %2$s" : "%1$s eyddi kerfismerkinu %2$s", + "{actor} deleted system tag {systemtag}" : "{actor} eyddi kerfismerkinu {systemtag}", + "You updated system tag %2$s to %1$s" : "Þú uppfærðir kerfismerkið %1$s í %2$s", + "You updated system tag {oldsystemtag} to {newsystemtag}" : "Þú uppfærðir kerfismerkið {oldsystemtag} í {newsystemtag}", + "%1$s updated system tag %3$s to %2$s" : "%1$s uppfærði kerfismerkið %3$s í %2$s", + "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} uppfærði kerfismerkið {oldsystemtag} í {newsystemtag}", + "You added system tag %2$s to %1$s" : "Þú bættir við kerfismerkinu %1$s í %2$s", + "You added system tag {systemtag} to {file}" : "Þú bættir við kerfismerkinu {systemtag} í {file}", + "%1$s added system tag %3$s to %2$s" : "%1$s bætti við kerfismerkinu %3$s í %2$s", + "{actor} added system tag {systemtag} to {file}" : "{actor} bætti við kerfismerkinu {systemtag} í {file}", + "You removed system tag %2$s from %1$s" : "Þú fjarlægðir kerfismerkið %2$s af %1$s", + "You removed system tag {systemtag} from {file}" : "Þú fjarlægðir kerfismerkið {systemtag} af {file}", + "%1$s removed system tag %3$s from %2$s" : "%1$s fjarlægði kerfismerkið %3$s af %2$s", + "{actor} removed system tag {systemtag} from {file}" : "{actor} fjarlægði kerfismerkið {systemtag} af {file}", "%s (restricted)" : "%s (takmarkaður aðgangur)", "%s (invisible)" : "%s (ósýnilegt)", + "<strong>System tags</strong> for a file have been modified" : "<strong>Kerfismerkjum</strong> á skrá hefur verið breytt", "Collaborative tags" : "Samstarfsmerkingar", "Name" : "Heiti", "Delete" : "Eyða", @@ -33,10 +56,12 @@ OC.L10N.register( "%1$s assigned system tag %3$s" : "%1$s úthlutaði kerfismerki %3$s", "You unassigned system tag %3$s" : "Þú tókst af úthlutun kerfismerkisins %3$s", "%1$s unassigned system tag %3$s" : "%1$s tók af úthlutun kerfismerkis %3$s", + "You created system tag %2$s" : "Þú bjóst til kerfismerkið %2$s", + "You deleted system tag %2$s" : "Þú eyddir kerfismerkinu %2$s", + "You updated system tag %3$s to %2$s" : "Þú uppfærðir kerfismerki %3$s í %2$s", "You assigned system tag %3$s to %2$s" : "Þú úthlutaðir kerfismerki %3$s á %2$s", "%1$s assigned system tag %3$s to %2$s" : "%1$s úthlutaði kerfismerki %3$s á %2$s", "You unassigned system tag %3$s from %2$s" : "Þú tókst kerfismerkið %3$s af %2$s", - "%1$s unassigned system tag %3$s from %2$s" : "%1$s tók kerfismerki %3$s af %2$s", - "%s (not-assignable)" : "%s (ekki-úthlutanlegt)" + "%1$s unassigned system tag %3$s from %2$s" : "%1$s tók kerfismerki %3$s af %2$s" }, "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/apps/systemtags/l10n/is.json b/apps/systemtags/l10n/is.json index b2ad08cbc37..d6d3421ea79 100644 --- a/apps/systemtags/l10n/is.json +++ b/apps/systemtags/l10n/is.json @@ -5,17 +5,40 @@ "Select tag…" : "Veldu merki...", "Tagged files" : "Merktar skrár", "Select tags to filter by" : "Veldu merki til að sía eftir", + "No tags found" : "Engin merki fundust", "Please select tags to filter by" : "Veldu merki til að sía eftir", "No files found for the selected tags" : "Engar skrár fundust með völdum merkjum", - "<strong>System tags</strong> for a file have been modified" : "<strong>Kerfismerkjum</strong> á skrá hefur verið breytt", - "You created system tag %2$s" : "Þú bjóst til kerfismerkið %2$s", - "%1$s created system tag %2$s" : "%1$s bjó til kerfismerki %2$s", - "You deleted system tag %2$s" : "Þú eyddir kerfismerkinu %2$s", - "%1$s deleted system tag %2$s" : "%1$s eyddi kerfismerki %2$s", - "You updated system tag %3$s to %2$s" : "Þú uppfærðir kerfismerki %3$s í %2$s", - "%1$s updated system tag %3$s to %2$s" : "%1$s uppfærði kerfismerki %3$s í %2$s", + "Added system tag %1$s" : "Bætti við kerfismerkinu %1$s", + "Added system tag {systemtag}" : "Bætti við kerfismerkinu {systemtag}", + "%1$s added system tag %2$s" : "%1$s bætti við kerfismerkinu %2$s", + "{actor} added system tag {systemtag}" : "{actor} bætti við kerfismerkinu {systemtag}", + "Removed system tag %1$s" : "Fjarlægði kerfismerkið %1$s", + "Removed system tag {systemtag}" : "Fjarlægði kerfismerkið {systemtag}", + "%1$s removed system tag %2$s" : "%1$s fjarlægði kerfismerkið %2$s", + "{actor} removed system tag {systemtag}" : "{actor} fjarlægði kerfismerkið {systemtag}", + "You created system tag %1$s" : "Þú bjóst til kerfismerkið %1$s", + "You created system tag {systemtag}" : "Þú bjóst til kerfismerkið {systemtag}", + "%1$s created system tag %2$s" : "%1$s bjó til kerfismerkið %2$s", + "{actor} created system tag {systemtag}" : "{actor} bjó til kerfismerkið {systemtag}", + "You deleted system tag %1$s" : "Þú eyddir kerfismerkinu %1$s", + "You deleted system tag {systemtag}" : "Þú eyddir kerfismerkinu {systemtag}", + "%1$s deleted system tag %2$s" : "%1$s eyddi kerfismerkinu %2$s", + "{actor} deleted system tag {systemtag}" : "{actor} eyddi kerfismerkinu {systemtag}", + "You updated system tag %2$s to %1$s" : "Þú uppfærðir kerfismerkið %1$s í %2$s", + "You updated system tag {oldsystemtag} to {newsystemtag}" : "Þú uppfærðir kerfismerkið {oldsystemtag} í {newsystemtag}", + "%1$s updated system tag %3$s to %2$s" : "%1$s uppfærði kerfismerkið %3$s í %2$s", + "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} uppfærði kerfismerkið {oldsystemtag} í {newsystemtag}", + "You added system tag %2$s to %1$s" : "Þú bættir við kerfismerkinu %1$s í %2$s", + "You added system tag {systemtag} to {file}" : "Þú bættir við kerfismerkinu {systemtag} í {file}", + "%1$s added system tag %3$s to %2$s" : "%1$s bætti við kerfismerkinu %3$s í %2$s", + "{actor} added system tag {systemtag} to {file}" : "{actor} bætti við kerfismerkinu {systemtag} í {file}", + "You removed system tag %2$s from %1$s" : "Þú fjarlægðir kerfismerkið %2$s af %1$s", + "You removed system tag {systemtag} from {file}" : "Þú fjarlægðir kerfismerkið {systemtag} af {file}", + "%1$s removed system tag %3$s from %2$s" : "%1$s fjarlægði kerfismerkið %3$s af %2$s", + "{actor} removed system tag {systemtag} from {file}" : "{actor} fjarlægði kerfismerkið {systemtag} af {file}", "%s (restricted)" : "%s (takmarkaður aðgangur)", "%s (invisible)" : "%s (ósýnilegt)", + "<strong>System tags</strong> for a file have been modified" : "<strong>Kerfismerkjum</strong> á skrá hefur verið breytt", "Collaborative tags" : "Samstarfsmerkingar", "Name" : "Heiti", "Delete" : "Eyða", @@ -31,10 +54,12 @@ "%1$s assigned system tag %3$s" : "%1$s úthlutaði kerfismerki %3$s", "You unassigned system tag %3$s" : "Þú tókst af úthlutun kerfismerkisins %3$s", "%1$s unassigned system tag %3$s" : "%1$s tók af úthlutun kerfismerkis %3$s", + "You created system tag %2$s" : "Þú bjóst til kerfismerkið %2$s", + "You deleted system tag %2$s" : "Þú eyddir kerfismerkinu %2$s", + "You updated system tag %3$s to %2$s" : "Þú uppfærðir kerfismerki %3$s í %2$s", "You assigned system tag %3$s to %2$s" : "Þú úthlutaðir kerfismerki %3$s á %2$s", "%1$s assigned system tag %3$s to %2$s" : "%1$s úthlutaði kerfismerki %3$s á %2$s", "You unassigned system tag %3$s from %2$s" : "Þú tókst kerfismerkið %3$s af %2$s", - "%1$s unassigned system tag %3$s from %2$s" : "%1$s tók kerfismerki %3$s af %2$s", - "%s (not-assignable)" : "%s (ekki-úthlutanlegt)" + "%1$s unassigned system tag %3$s from %2$s" : "%1$s tók kerfismerki %3$s af %2$s" },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" }
\ No newline at end of file diff --git a/apps/systemtags/l10n/lv.js b/apps/systemtags/l10n/lv.js index 3afcc791bbc..4b673824b5f 100644 --- a/apps/systemtags/l10n/lv.js +++ b/apps/systemtags/l10n/lv.js @@ -1,10 +1,52 @@ OC.L10N.register( "systemtags", { - "Tags" : "Birkas", - "No entries found in this folder" : "Šajā mapē nekas nav atrasts", + "Tags" : "Atzīmes", + "Update" : "Atjaunināt", + "Create" : "Izveidot", + "Select tag…" : "Izvēlies atzīmi...", + "Tagged files" : "Atzīmētās datnes", + "Select tags to filter by" : "Izvēlies atzīmes pēc kā filtrēt", + "No tags found" : "Netika atrasta neviena atzīme", + "Please select tags to filter by" : "Lūdzu izvēlies atzīmes pēc kā filtrēt", + "No files found for the selected tags" : "Faili netika atrasti ar atlasītām atzīmēm", + "Added system tag %1$s" : "Pievienota sistēmas atzīme %1$s", + "Added system tag {systemtag}" : "Pievienota sistēmas atzīme {systemtag}", + "%1$s added system tag %2$s" : "%1$s pievienota sistēmas atzīme %2$s", + "{actor} added system tag {systemtag}" : "{actor} pievienota sistēmas atzīme {systemtag}", + "Removed system tag %1$s" : "Noņemta sistēmas atzīme %1$s", + "Removed system tag {systemtag}" : "Noņemta sistēmas atzīme {systemtag}", + "%1$s removed system tag %2$s" : "%1$s noņēma sistēmas atzīmi %2$s", + "{actor} removed system tag {systemtag}" : "{actor} noņēma sistēmas atzīmi {systemtag}", + "You created system tag %1$s" : "Tu izveidoji sistēmas atzīmi %1$s", + "You created system tag {systemtag}" : "Tu izveidoji sistēmas atzīmi {systemtag}", + "%1$s created system tag %2$s" : "%1$s izveidoja sistēmas atzīmi %2$s", + "{actor} created system tag {systemtag}" : "{actor} izveidoja sistēmas atzīmi {systemtag}", + "You deleted system tag %1$s" : "Tu izdzēsi sistēmas atzīmi %1$s", + "You deleted system tag {systemtag}" : "Tu izdzēsi sistēmas atzīmi {systemtag}", + "%1$s deleted system tag %2$s" : "%1$s izdzēsa sistēmas atzīmi %2$s", + "{actor} deleted system tag {systemtag}" : "{actor} izdzēsa sistēmas atzīmi {systemtag}", + "You updated system tag %2$s to %1$s" : "Tu atjaunoji sistēmas atzīmi %2$s uz %1$s", + "You updated system tag {oldsystemtag} to {newsystemtag}" : "Jūs atjaunināt sistēmas atzīmi {oldsystemtag} uz {newsystemtag}", + "You added system tag %2$s to %1$s" : "Tu pievienoji sistēmas atzīmi %2$s uz %1$s", + "{actor} added system tag {systemtag} to {file}" : "{actor} added system tag {systemtag} to {file}", + "You removed system tag %2$s from %1$s" : "Tu noņēmi sistēmas atzīmi %2$s no %1$s", + "You removed system tag {systemtag} from {file}" : "TU noņēmi sistēmas atzīmi {systemtag} no {file}", + "%s (restricted)" : "%s (ierobežots)", + "%s (invisible)" : "%s (neredzams)", + "Collaborative tags" : "Sadarbības atzīmes", "Name" : "Nosaukums", + "Delete" : "Dzēst", + "Public" : "Publisks", + "Restricted" : "Ierobežots", + "Invisible" : "Neredzams", + "Reset" : "Atiestatīt", + "No files in here" : "Šeit nav datņu", + "No entries found in this folder" : "Šajā mapē nekas nav atrasts", "Size" : "Izmērs", - "Modified" : "Mainīts" + "Modified" : "Mainīts", + "You created system tag %2$s" : "Tu izveidoji sistēmas atzīmi %2$s", + "You deleted system tag %2$s" : "Tu izdzēsi sistēmas atzīmi %2$s", + "You updated system tag %3$s to %2$s" : "Tu atjaunoji sistēmas atzīmi %3$s uz %2$s" }, "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"); diff --git a/apps/systemtags/l10n/lv.json b/apps/systemtags/l10n/lv.json index dbbb9142261..d64b142e892 100644 --- a/apps/systemtags/l10n/lv.json +++ b/apps/systemtags/l10n/lv.json @@ -1,8 +1,50 @@ { "translations": { - "Tags" : "Birkas", - "No entries found in this folder" : "Šajā mapē nekas nav atrasts", + "Tags" : "Atzīmes", + "Update" : "Atjaunināt", + "Create" : "Izveidot", + "Select tag…" : "Izvēlies atzīmi...", + "Tagged files" : "Atzīmētās datnes", + "Select tags to filter by" : "Izvēlies atzīmes pēc kā filtrēt", + "No tags found" : "Netika atrasta neviena atzīme", + "Please select tags to filter by" : "Lūdzu izvēlies atzīmes pēc kā filtrēt", + "No files found for the selected tags" : "Faili netika atrasti ar atlasītām atzīmēm", + "Added system tag %1$s" : "Pievienota sistēmas atzīme %1$s", + "Added system tag {systemtag}" : "Pievienota sistēmas atzīme {systemtag}", + "%1$s added system tag %2$s" : "%1$s pievienota sistēmas atzīme %2$s", + "{actor} added system tag {systemtag}" : "{actor} pievienota sistēmas atzīme {systemtag}", + "Removed system tag %1$s" : "Noņemta sistēmas atzīme %1$s", + "Removed system tag {systemtag}" : "Noņemta sistēmas atzīme {systemtag}", + "%1$s removed system tag %2$s" : "%1$s noņēma sistēmas atzīmi %2$s", + "{actor} removed system tag {systemtag}" : "{actor} noņēma sistēmas atzīmi {systemtag}", + "You created system tag %1$s" : "Tu izveidoji sistēmas atzīmi %1$s", + "You created system tag {systemtag}" : "Tu izveidoji sistēmas atzīmi {systemtag}", + "%1$s created system tag %2$s" : "%1$s izveidoja sistēmas atzīmi %2$s", + "{actor} created system tag {systemtag}" : "{actor} izveidoja sistēmas atzīmi {systemtag}", + "You deleted system tag %1$s" : "Tu izdzēsi sistēmas atzīmi %1$s", + "You deleted system tag {systemtag}" : "Tu izdzēsi sistēmas atzīmi {systemtag}", + "%1$s deleted system tag %2$s" : "%1$s izdzēsa sistēmas atzīmi %2$s", + "{actor} deleted system tag {systemtag}" : "{actor} izdzēsa sistēmas atzīmi {systemtag}", + "You updated system tag %2$s to %1$s" : "Tu atjaunoji sistēmas atzīmi %2$s uz %1$s", + "You updated system tag {oldsystemtag} to {newsystemtag}" : "Jūs atjaunināt sistēmas atzīmi {oldsystemtag} uz {newsystemtag}", + "You added system tag %2$s to %1$s" : "Tu pievienoji sistēmas atzīmi %2$s uz %1$s", + "{actor} added system tag {systemtag} to {file}" : "{actor} added system tag {systemtag} to {file}", + "You removed system tag %2$s from %1$s" : "Tu noņēmi sistēmas atzīmi %2$s no %1$s", + "You removed system tag {systemtag} from {file}" : "TU noņēmi sistēmas atzīmi {systemtag} no {file}", + "%s (restricted)" : "%s (ierobežots)", + "%s (invisible)" : "%s (neredzams)", + "Collaborative tags" : "Sadarbības atzīmes", "Name" : "Nosaukums", + "Delete" : "Dzēst", + "Public" : "Publisks", + "Restricted" : "Ierobežots", + "Invisible" : "Neredzams", + "Reset" : "Atiestatīt", + "No files in here" : "Šeit nav datņu", + "No entries found in this folder" : "Šajā mapē nekas nav atrasts", "Size" : "Izmērs", - "Modified" : "Mainīts" + "Modified" : "Mainīts", + "You created system tag %2$s" : "Tu izveidoji sistēmas atzīmi %2$s", + "You deleted system tag %2$s" : "Tu izdzēsi sistēmas atzīmi %2$s", + "You updated system tag %3$s to %2$s" : "Tu atjaunoji sistēmas atzīmi %3$s uz %2$s" },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);" }
\ No newline at end of file diff --git a/apps/theming/appinfo/info.xml b/apps/theming/appinfo/info.xml index 9ded5c89b87..13a0f161a47 100644 --- a/apps/theming/appinfo/info.xml +++ b/apps/theming/appinfo/info.xml @@ -5,7 +5,7 @@ <description>Adjust the Nextcloud theme</description> <licence>AGPL</licence> <author>Nextcloud</author> - <version>1.2.0</version> + <version>1.3.0</version> <namespace>Theming</namespace> <category>other</category> @@ -23,4 +23,10 @@ <admin>OCA\Theming\Settings\Admin</admin> <admin-section>OCA\Theming\Settings\Section</admin-section> </settings> + + <repair-steps> + <post-migration> + <step>OCA\Theming\Migration\ThemingImages</step> + </post-migration> + </repair-steps> </info> diff --git a/apps/theming/lib/Controller/ThemingController.php b/apps/theming/lib/Controller/ThemingController.php index 24ac1c7d8d5..2aa79df2464 100644 --- a/apps/theming/lib/Controller/ThemingController.php +++ b/apps/theming/lib/Controller/ThemingController.php @@ -31,12 +31,12 @@ use OCA\Theming\ThemingDefaults; use OCP\AppFramework\Controller; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataDownloadResponse; +use OCP\AppFramework\Http\FileDisplayResponse; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\Http\NotFoundResponse; -use OCP\AppFramework\Http\StreamResponse; use OCP\AppFramework\Utility\ITimeFactory; use OCP\Files\File; -use OCP\Files\IRootFolder; +use OCP\Files\IAppData; use OCP\Files\NotFoundException; use OCP\IConfig; use OCP\IL10N; @@ -62,10 +62,10 @@ class ThemingController extends Controller { private $l; /** @var IConfig */ private $config; - /** @var IRootFolder */ - private $rootFolder; /** @var ITempManager */ private $tempManager; + /** @var IAppData */ + private $appData; /** * ThemingController constructor. @@ -77,8 +77,8 @@ class ThemingController extends Controller { * @param Util $util * @param ITimeFactory $timeFactory * @param IL10N $l - * @param IRootFolder $rootFolder * @param ITempManager $tempManager + * @param IAppData $appData */ public function __construct( $appName, @@ -88,8 +88,8 @@ class ThemingController extends Controller { Util $util, ITimeFactory $timeFactory, IL10N $l, - IRootFolder $rootFolder, - ITempManager $tempManager + ITempManager $tempManager, + IAppData $appData ) { parent::__construct($appName, $request); @@ -98,8 +98,8 @@ class ThemingController extends Controller { $this->timeFactory = $timeFactory; $this->l = $l; $this->config = $config; - $this->rootFolder = $rootFolder; $this->tempManager = $tempManager; + $this->appData = $appData; } /** @@ -183,16 +183,22 @@ class ThemingController extends Controller { Http::STATUS_UNPROCESSABLE_ENTITY ); } + $name = ''; + try { + $folder = $this->appData->getFolder('images'); + } catch (NotFoundException $e) { + $folder = $this->appData->newFolder('images'); + } + if(!empty($newLogo)) { - $target = $this->rootFolder->newFile('themedinstancelogo'); - stream_copy_to_stream(fopen($newLogo['tmp_name'], 'r'), $target->fopen('w')); + $target = $folder->newFile('logo'); + $target->putContent(file_get_contents($newLogo['tmp_name'], 'r')); $this->template->set('logoMime', $newLogo['type']); $name = $newLogo['name']; } if(!empty($newBackgroundLogo)) { - $target = $this->rootFolder->newFile('themedbackgroundlogo'); - + $target = $folder->newFile('background'); $image = @imagecreatefromstring(file_get_contents($newBackgroundLogo['tmp_name'], 'r')); if($image === false) { return new DataResponse( @@ -219,7 +225,7 @@ class ThemingController extends Controller { imagejpeg($image, $tmpFile, 75); imagedestroy($image); - stream_copy_to_stream(fopen($tmpFile, 'r'), $target->fopen('w')); + $target->putContent(file_get_contents($tmpFile, 'r')); $this->template->set('backgroundMime', $newBackgroundLogo['type']); $name = $newBackgroundLogo['name']; } @@ -260,22 +266,24 @@ class ThemingController extends Controller { * @PublicPage * @NoCSRFRequired * - * @return StreamResponse|NotFoundResponse + * @return FileDisplayResponse|NotFoundResponse */ public function getLogo() { try { /** @var File $file */ - $file = $this->rootFolder->get('themedinstancelogo'); + $file = $this->appData->getFolder('images')->getFile('logo'); } catch (NotFoundException $e) { return new NotFoundResponse(); } - $response = new Http\StreamResponse($file->fopen('r')); + $response = new FileDisplayResponse($file); $response->cacheFor(3600); - $response->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime())); - $response->addHeader('Content-Disposition', 'attachment'); - $response->addHeader('Content-Type', $this->config->getAppValue($this->appName, 'logoMime', '')); + $expires = new \DateTime(); + $expires->setTimestamp($this->timeFactory->getTime()); + $expires->add(new \DateInterval('PT24H')); + $response->addHeader('Expires', $expires->format(\DateTime::RFC2822)); $response->addHeader('Pragma', 'cache'); + $response->addHeader('Content-Type', $this->config->getAppValue($this->appName, 'logoMime', '')); return $response; } @@ -283,22 +291,24 @@ class ThemingController extends Controller { * @PublicPage * @NoCSRFRequired * - * @return StreamResponse|NotFoundResponse + * @return FileDisplayResponse|NotFoundResponse */ public function getLoginBackground() { try { /** @var File $file */ - $file = $this->rootFolder->get('themedbackgroundlogo'); + $file = $this->appData->getFolder('images')->getFile('background'); } catch (NotFoundException $e) { return new NotFoundResponse(); } - $response = new StreamResponse($file->fopen('r')); + $response = new FileDisplayResponse($file); $response->cacheFor(3600); - $response->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime())); - $response->addHeader('Content-Disposition', 'attachment'); - $response->addHeader('Content-Type', $this->config->getAppValue($this->appName, 'backgroundMime', '')); + $expires = new \DateTime(); + $expires->setTimestamp($this->timeFactory->getTime()); + $expires->add(new \DateInterval('PT24H')); + $response->addHeader('Expires', $expires->format(\DateTime::RFC2822)); $response->addHeader('Pragma', 'cache'); + $response->addHeader('Content-Type', $this->config->getAppValue($this->appName, 'backgroundMime', '')); return $response; } diff --git a/apps/theming/lib/ImageManager.php b/apps/theming/lib/ImageManager.php index 4cd43e02054..88e456a2969 100644 --- a/apps/theming/lib/ImageManager.php +++ b/apps/theming/lib/ImageManager.php @@ -104,7 +104,7 @@ class ImageManager { $currentFolder = $this->getCacheFolder(); $folders = $this->appData->getDirectoryListing(); foreach ($folders as $folder) { - if ($folder->getName() !== $currentFolder->getName()) { + if ($folder->getName() !== 'images' && $folder->getName() !== $currentFolder->getName()) { $folder->delete(); } } diff --git a/apps/theming/lib/Migration/ThemingImages.php b/apps/theming/lib/Migration/ThemingImages.php new file mode 100644 index 00000000000..f6f484be8b5 --- /dev/null +++ b/apps/theming/lib/Migration/ThemingImages.php @@ -0,0 +1,77 @@ +<?php +/** + * @copyright Copyright (c) 2017 Julius Härtl <jus@bitgrid.net> + * + * @author Julius Härtl <jus@bitgrid.net> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + + +namespace OCA\Theming\Migration; + +use OCA\Theming\ThemingDefaults; +use OCP\Files\IAppData; +use OCP\Files\IRootFolder; +use OCP\Migration\IRepairStep; +use OCP\Migration\IOutput; +use OC\Files\Node\File; +use OCP\Files\NotFoundException; + +class ThemingImages implements IRepairStep { + + private $appData; + private $rootFolder; + + public function __construct(IAppData $appData, IRootFolder $rootFolder) { + $this->appData = $appData; + $this->rootFolder = $rootFolder; + } + + /* + * @inheritdoc + */ + public function getName() { + return 'Move theming files to AppData storage'; + } + + /** + * @inheritdoc + */ + public function run(IOutput $output) { + $folder = $this->appData->newFolder("images"); + /** @var File $file */ + $file = null; + try { + $file = $this->rootFolder->get('themedinstancelogo'); + $logo = $folder->newFile('logo'); + $logo->putContent($file->getContent()); + $file->delete(); + } catch (NotFoundException $e) { + $output->info('No theming logo image to migrate'); + } + + try { + $file = $this->rootFolder->get('themedbackgroundlogo'); + $background = $folder->newFile('background'); + $background->putContent($file->getContent()); + $file->delete(); + } catch (NotFoundException $e) { + $output->info('No theming background image to migrate'); + } + } +} diff --git a/apps/theming/tests/Controller/ThemingControllerTest.php b/apps/theming/tests/Controller/ThemingControllerTest.php index 97a5e985860..3afcdb847b6 100644 --- a/apps/theming/tests/Controller/ThemingControllerTest.php +++ b/apps/theming/tests/Controller/ThemingControllerTest.php @@ -24,14 +24,18 @@ */ namespace OCA\Theming\Tests\Controller; +use OC\L10N\L10N; use OCA\Theming\Controller\ThemingController; use OCA\Theming\Util; use OCP\App\IAppManager; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; -use OCP\Files\File; +use OCP\AppFramework\Utility\ITimeFactory; +use OCP\Files\IAppData; use OCP\Files\IRootFolder; use OCP\Files\NotFoundException; +use OCP\Files\SimpleFS\ISimpleFile; +use OCP\Files\SimpleFS\ISimpleFolder; use OCP\IConfig; use OCP\IL10N; use OCP\IRequest; @@ -58,25 +62,25 @@ class ThemingControllerTest extends TestCase { private $rootFolder; /** @var ITempManager */ private $tempManager; - /** @var IAppManager */ + /** @var IAppManager|\PHPUnit_Framework_MockObject_MockObject */ private $appManager; + /** @var IAppData|\PHPUnit_Framework_MockObject_MockObject */ + private $appData; public function setUp() { - $this->request = $this->getMockBuilder('OCP\IRequest')->getMock(); - $this->config = $this->getMockBuilder('OCP\IConfig')->getMock(); - $this->template = $this->getMockBuilder('OCA\Theming\ThemingDefaults') - ->disableOriginalConstructor()->getMock(); - $this->timeFactory = $this->getMockBuilder('OCP\AppFramework\Utility\ITimeFactory') - ->disableOriginalConstructor() - ->getMock(); - $this->l10n = $this->getMockBuilder('OCP\IL10N')->getMock(); - $this->rootFolder = $this->getMockBuilder('OCP\Files\IRootFolder')->getMock(); - $this->appManager = $this->getMockBuilder('OCP\App\IAppManager')->getMock(); + $this->request = $this->createMock(IRequest::class); + $this->config = $this->createMock(IConfig::class); + $this->template = $this->createMock(ThemingDefaults::class); + $this->timeFactory = $this->createMock(ITimeFactory::class); + $this->l10n = $this->createMock(L10N::class); + $this->rootFolder = $this->createMock(IRootFolder::class); + $this->appManager = $this->createMock(IAppManager::class); $this->util = new Util($this->config, $this->rootFolder, $this->appManager); $this->timeFactory->expects($this->any()) ->method('getTime') ->willReturn(123); $this->tempManager = \OC::$server->getTempManager(); + $this->appData = $this->createMock(IAppData::class); $this->themingController = new ThemingController( 'theming', @@ -86,8 +90,8 @@ class ThemingControllerTest extends TestCase { $this->util, $this->timeFactory, $this->l10n, - $this->rootFolder, - $this->tempManager + $this->tempManager, + $this->appData ); return parent::setUp(); @@ -167,7 +171,15 @@ class ThemingControllerTest extends TestCase { $this->assertEquals($expected, $this->themingController->updateLogo()); } - public function testUpdateLogoNormalLogoUpload() { + public function dataUpdateImages() { + return [ + [false], + [true] + ]; + } + + /** @dataProvider dataUpdateImages */ + public function testUpdateLogoNormalLogoUpload($folderExists) { $tmpLogo = \OC::$server->getTempManager()->getTemporaryFolder() . '/logo.svg'; $destination = \OC::$server->getTempManager()->getTemporaryFolder(); @@ -191,20 +203,32 @@ class ThemingControllerTest extends TestCase { ->method('t') ->with('Saved') ->willReturn('Saved'); - $file = $this->getMockBuilder('\\OCP\\Files\\File') - ->disableOriginalConstructor() - ->getMock(); - $this->rootFolder - ->expects($this->once()) + + + $file = $this->createMock(ISimpleFile::class); + $folder = $this->createMock(ISimpleFolder::class); + if($folderExists) { + $this->appData + ->expects($this->once()) + ->method('getFolder') + ->with('images') + ->willReturn($folder); + } else { + $this->appData + ->expects($this->at(0)) + ->method('getFolder') + ->with('images') + ->willThrowException(new NotFoundException()); + $this->appData + ->expects($this->at(1)) + ->method('newFolder') + ->with('images') + ->willReturn($folder); + } + $folder->expects($this->once()) ->method('newFile') - ->with('themedinstancelogo') + ->with('logo') ->willReturn($file); - $file - ->expects($this->once()) - ->method('fopen') - ->with('w') - ->willReturn(fopen($destination . '/themedinstancelogo', 'w')); - $expected = new DataResponse( [ 'data' => @@ -219,9 +243,9 @@ class ThemingControllerTest extends TestCase { $this->assertEquals($expected, $this->themingController->updateLogo()); } - public function testUpdateLogoLoginScreenUpload() { + /** @dataProvider dataUpdateImages */ + public function testUpdateLogoLoginScreenUpload($folderExists) { $tmpLogo = \OC::$server->getTempManager()->getTemporaryFolder() . '/logo.svg'; - $destination = \OC::$server->getTempManager()->getTemporaryFolder(); touch($tmpLogo); file_put_contents($tmpLogo, file_get_contents(__DIR__ . '/../../../../tests/data/desktopapp.png')); @@ -244,20 +268,31 @@ class ThemingControllerTest extends TestCase { ->method('t') ->with('Saved') ->willReturn('Saved'); - $file = $this->getMockBuilder('\\OCP\\Files\\File') - ->disableOriginalConstructor() - ->getMock(); - $this->rootFolder - ->expects($this->once()) + + $file = $this->createMock(ISimpleFile::class); + $folder = $this->createMock(ISimpleFolder::class); + if($folderExists) { + $this->appData + ->expects($this->once()) + ->method('getFolder') + ->with('images') + ->willReturn($folder); + } else { + $this->appData + ->expects($this->at(0)) + ->method('getFolder') + ->with('images') + ->willThrowException(new NotFoundException()); + $this->appData + ->expects($this->at(1)) + ->method('newFolder') + ->with('images') + ->willReturn($folder); + } + $folder->expects($this->once()) ->method('newFile') - ->with('themedbackgroundlogo') + ->with('background') ->willReturn($file); - $file - ->expects($this->once()) - ->method('fopen') - ->with('w') - ->willReturn(fopen($destination . '/themedbackgroundlogo', 'w')); - $expected = new DataResponse( [ @@ -274,7 +309,6 @@ class ThemingControllerTest extends TestCase { public function testUpdateLogoLoginScreenUploadWithInvalidImage() { $tmpLogo = \OC::$server->getTempManager()->getTemporaryFolder() . '/logo.svg'; - $destination = \OC::$server->getTempManager()->getTemporaryFolder(); touch($tmpLogo); file_put_contents($tmpLogo, file_get_contents(__DIR__ . '/../../../../tests/data/data.zip')); @@ -297,14 +331,14 @@ class ThemingControllerTest extends TestCase { ->method('t') ->with('Unsupported image type') ->willReturn('Unsupported image type'); - $file = $this->getMockBuilder('\\OCP\\Files\\File') - ->disableOriginalConstructor() - ->getMock(); - $this->rootFolder + + $folder = $this->createMock(ISimpleFolder::class); + $this->appData ->expects($this->once()) - ->method('newFile') - ->with('themedbackgroundlogo') - ->willReturn($file); + ->method('getFolder') + ->with('images') + ->willReturn($folder); + $expected = new DataResponse( [ 'data' => @@ -344,8 +378,8 @@ class ThemingControllerTest extends TestCase { } public function testGetLogoNotExistent() { - $this->rootFolder->method('get') - ->with($this->equalTo('themedinstancelogo')) + $this->appData->method('getFolder') + ->with($this->equalTo('images')) ->willThrowException(new NotFoundException()); $expected = new Http\NotFoundResponse(); @@ -353,13 +387,17 @@ class ThemingControllerTest extends TestCase { } public function testGetLogo() { - $file = $this->createMock(File::class); - $this->rootFolder->method('get') - ->with('themedinstancelogo') + $file = $this->createMock(ISimpleFile::class); + $folder = $this->createMock(ISimpleFolder::class); + $this->appData + ->expects($this->once()) + ->method('getFolder') + ->with('images') + ->willReturn($folder); + $folder->expects($this->once()) + ->method('getFile') + ->with('logo') ->willReturn($file); - $file->method('fopen') - ->with('r') - ->willReturn('mypath'); $this->config ->expects($this->once()) @@ -367,32 +405,38 @@ class ThemingControllerTest extends TestCase { ->with('theming', 'logoMime', '') ->willReturn('text/svg'); - @$expected = new Http\StreamResponse('mypath'); + @$expected = new Http\FileDisplayResponse($file); $expected->cacheFor(3600); - $expected->addHeader('Expires', date(\DateTime::RFC2822, 123)); - $expected->addHeader('Content-Disposition', 'attachment'); - $expected->addHeader('Content-Type', 'text/svg'); + $expires = new \DateTime(); + $expires->setTimestamp($this->timeFactory->getTime()); + $expires->add(new \DateInterval('PT24H')); + $expected->addHeader('Expires', $expires->format(\DateTime::RFC2822)); $expected->addHeader('Pragma', 'cache'); + $expected->addHeader('Content-Type', 'text/svg'); @$this->assertEquals($expected, $this->themingController->getLogo()); } public function testGetLoginBackgroundNotExistent() { - $this->rootFolder->method('get') - ->with('themedbackgroundlogo') + $this->appData->method('getFolder') + ->with($this->equalTo('images')) ->willThrowException(new NotFoundException()); $expected = new Http\NotFoundResponse(); $this->assertEquals($expected, $this->themingController->getLoginBackground()); } public function testGetLoginBackground() { - $file = $this->createMock(File::class); - $this->rootFolder->method('get') - ->with('themedbackgroundlogo') + $file = $this->createMock(ISimpleFile::class); + $folder = $this->createMock(ISimpleFolder::class); + $this->appData + ->expects($this->once()) + ->method('getFolder') + ->with('images') + ->willReturn($folder); + $folder->expects($this->once()) + ->method('getFile') + ->with('background') ->willReturn($file); - $file->method('fopen') - ->with('r') - ->willReturn('mypath'); $this->config ->expects($this->once()) @@ -400,12 +444,14 @@ class ThemingControllerTest extends TestCase { ->with('theming', 'backgroundMime', '') ->willReturn('image/png'); - @$expected = new Http\StreamResponse('mypath'); + @$expected = new Http\FileDisplayResponse($file); $expected->cacheFor(3600); - $expected->addHeader('Expires', date(\DateTime::RFC2822, 123)); - $expected->addHeader('Content-Disposition', 'attachment'); - $expected->addHeader('Content-Type', 'image/png'); + $expires = new \DateTime(); + $expires->setTimestamp($this->timeFactory->getTime()); + $expires->add(new \DateInterval('PT24H')); + $expected->addHeader('Expires', $expires->format(\DateTime::RFC2822)); $expected->addHeader('Pragma', 'cache'); + $expected->addHeader('Content-Type', 'image/png'); @$this->assertEquals($expected, $this->themingController->getLoginBackground()); } diff --git a/apps/theming/tests/Migration/ThemingImages.php b/apps/theming/tests/Migration/ThemingImages.php new file mode 100644 index 00000000000..e15d0fd1bbc --- /dev/null +++ b/apps/theming/tests/Migration/ThemingImages.php @@ -0,0 +1,139 @@ +<?php +/** + * @copyright Copyright (c) 2017 Julius Härtl <jus@bitgrid.net> + * + * @author Julius Härtl <jus@bitgrid.net> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\Theming\Tests\Migration; + +use OCP\Files\File; +use OCP\Files\NotFoundException; +use OCP\Files\SimpleFS\ISimpleFile; +use OCP\Files\SimpleFS\ISimpleFolder; +use OCP\Migration\IOutput; +use Test\TestCase; +use OCA\Theming\Migration\ThemingImages; +use OCP\Files\IAppData; +use OCP\Files\IRootFolder; + +class ThemingImagesTest extends TestCase { + /** @var ThemingImages */ + private $repairStep; + /** @var IAppData */ + private $appData; + /** @var IRootFolder */ + private $rootFolder; + /** @var ISimpleFolder */ + private $imageFolder; + /** @var IOutput */ + private $output; + + public function setUp() { + parent::setUp(); + $this->appData = $this->createMock(IAppData::class); + $this->rootFolder = $this->createMock(IRootFolder::class); + $this->repairStep = new ThemingImages($this->appData, $this->rootFolder); + $this->imageFolder = $this->createMock(ISimpleFolder::class); + $this->output = $this->createMock(IOutput::class); + } + + public function testGetName() { + $this->assertEquals( + 'Move theming files to AppData storage', + $this->repairStep->getName() + ); + } + + public function testRunNoImages() { + $this->appData->expects($this->once()) + ->method('newFolder') + ->willReturn($this->imageFolder); + $this->rootFolder->expects($this->any()) + ->method('get') + ->willThrowException(new NotFoundException()); + $this->imageFolder->expects($this->never()) + ->method('newFile'); + $this->output->expects($this->exactly(2)) + ->method('info'); + $this->repairStep->run($this->output); + } + + public function testRunLogo() { + $oldFile = $this->createMock(File::class); + $newFile = $this->createMock(ISimpleFile::class); + + $this->appData->expects($this->once()) + ->method('newFolder') + ->willReturn($this->imageFolder); + $this->rootFolder->expects($this->at(1)) + ->method('get') + ->with('themedbackgroundlogo') + ->willThrowException(new NotFoundException()); + $this->rootFolder->expects($this->at(0)) + ->method('get') + ->with('themedinstancelogo') + ->willReturn($oldFile); + $this->imageFolder->expects($this->once()) + ->method('newFile') + ->with('logo') + ->willReturn($newFile); + $oldFile->expects($this->once()) + ->method('getContent') + ->willReturn('data'); + $newFile->expects($this->once()) + ->method('putContent') + ->with('data'); + $oldFile->expects($this->once()) + ->method('delete'); + + $this->repairStep->run($this->output); + } + + public function testRunBackground() { + $oldFile = $this->createMock(File::class); + $newFile = $this->createMock(ISimpleFile::class); + + $this->appData->expects($this->once()) + ->method('newFolder') + ->willReturn($this->imageFolder); + $this->rootFolder->expects($this->at(1)) + ->method('get') + ->with('themedbackgroundlogo') + ->willReturn($oldFile); + $this->rootFolder->expects($this->at(0)) + ->method('get') + ->with('themedinstancelogo') + ->willThrowException(new NotFoundException()); + $this->imageFolder->expects($this->once()) + ->method('newFile') + ->with('background') + ->willReturn($newFile); + $oldFile->expects($this->once()) + ->method('getContent') + ->willReturn('data'); + $newFile->expects($this->once()) + ->method('putContent') + ->with('data'); + $oldFile->expects($this->once()) + ->method('delete'); + + $this->repairStep->run($this->output); + } +} diff --git a/apps/twofactor_backupcodes/js/settingsview.js b/apps/twofactor_backupcodes/js/settingsview.js index 76396023120..753644fb210 100644 --- a/apps/twofactor_backupcodes/js/settingsview.js +++ b/apps/twofactor_backupcodes/js/settingsview.js @@ -59,16 +59,16 @@ total: this._total, used: this._used, codes: this._codes, - download: this._getDownloadDataHref() + download: this._getDownloadData() })); }, - _getDownloadDataHref: function () { + _getDownloadData: function () { if (!this._codes) { return ''; } - return 'data:text/plain,' + encodeURIComponent(_.reduce(this._codes, function (prev, code) { - return prev + code + "\r\n"; - }, '')); + return _.reduce(this._codes, function (prev, code) { + return prev + code + "<br>"; + }, ''); }, _load: function () { this._loading = true; @@ -113,10 +113,12 @@ }); }, _onPrintBackupCodes: function () { - var url = this._getDownloadDataHref(); - window.open(url, t('twofactor_backupcodes', 'Nextcloud backup codes')); - window.print(); - window.close(); + var data = this._getDownloadData(); + var newTab = window.open('', t('twofactor_backupcodes', 'Nextcloud backup codes')); + newTab.document.write('<h1>' + t('twofactor_backupcodes', 'Nextcloud backup codes') + '</h1>'); + newTab.document.write(data); + newTab.print(); + newTab.close(); } }); diff --git a/apps/twofactor_backupcodes/l10n/lv.js b/apps/twofactor_backupcodes/l10n/lv.js index 0731fc56890..c064a35e5c3 100644 --- a/apps/twofactor_backupcodes/l10n/lv.js +++ b/apps/twofactor_backupcodes/l10n/lv.js @@ -15,6 +15,7 @@ OC.L10N.register( "A login attempt using two-factor authentication failed (%1$s)" : "Pieteikšanās mēģinājums, izmantojot divpakāpju autentifikāciju neizdevās (%1$s)", "You created two-factor backup codes for your account" : "Jūs izveidojāt divpakāpju dublējumu kodus savam kontam", "Backup code" : "Dublēšanas kods", - "Use backup code" : "Izmantojiet dublēšanas kodu" + "Use backup code" : "Izmantojiet dublēšanas kodu", + "Second-factor backup codes" : "Second-factor dublēšanas kodi" }, "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"); diff --git a/apps/twofactor_backupcodes/l10n/lv.json b/apps/twofactor_backupcodes/l10n/lv.json index c7a827cdda4..5e3fdedd80a 100644 --- a/apps/twofactor_backupcodes/l10n/lv.json +++ b/apps/twofactor_backupcodes/l10n/lv.json @@ -13,6 +13,7 @@ "A login attempt using two-factor authentication failed (%1$s)" : "Pieteikšanās mēģinājums, izmantojot divpakāpju autentifikāciju neizdevās (%1$s)", "You created two-factor backup codes for your account" : "Jūs izveidojāt divpakāpju dublējumu kodus savam kontam", "Backup code" : "Dublēšanas kods", - "Use backup code" : "Izmantojiet dublēšanas kodu" + "Use backup code" : "Izmantojiet dublēšanas kodu", + "Second-factor backup codes" : "Second-factor dublēšanas kodi" },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/ia.js b/apps/updatenotification/l10n/ia.js index 39d2a27431b..4c013870fd2 100644 --- a/apps/updatenotification/l10n/ia.js +++ b/apps/updatenotification/l10n/ia.js @@ -17,7 +17,7 @@ OC.L10N.register( "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Tu sempre pote actualisar a un version plus nove o a un canal experimental. Ma tu non potera jammais retrogradar a un canal plus stabile.", "Notify members of the following groups about available updates:" : "Notifica membros del gruppos sequente super actualisationes disponibile:", "Only notification for app updates are available." : "Notification es disponibile solmente pro actualisationes de applicationes.", - "The selected update channel makes dedicated notifications for the server obsolete." : "Le canal de actualisation seligite torna obsolete le notificationes dedicate al servitor.", + "The selected update channel makes dedicated notifications for the server obsolete." : "Le canal de actualisation selectionate face le notificationes dedicate al servitor esser obsolete.", "The selected update channel does not support updates of the server." : "Le canal de actualisation seligite non supporta actualisationes del servitor.", "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Tu es executante PHP %s. Pro permitter te a actualisar a Nextcloud 11 e a versiones major, tu debe executar al minus PHP 5.6. Quando tu actualisar tu version de PHP tu potera reciper notificationes de actualisation a iste versiones plus recente." }, diff --git a/apps/updatenotification/l10n/ia.json b/apps/updatenotification/l10n/ia.json index 65acbbc1674..2f4e0a815c4 100644 --- a/apps/updatenotification/l10n/ia.json +++ b/apps/updatenotification/l10n/ia.json @@ -15,7 +15,7 @@ "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Tu sempre pote actualisar a un version plus nove o a un canal experimental. Ma tu non potera jammais retrogradar a un canal plus stabile.", "Notify members of the following groups about available updates:" : "Notifica membros del gruppos sequente super actualisationes disponibile:", "Only notification for app updates are available." : "Notification es disponibile solmente pro actualisationes de applicationes.", - "The selected update channel makes dedicated notifications for the server obsolete." : "Le canal de actualisation seligite torna obsolete le notificationes dedicate al servitor.", + "The selected update channel makes dedicated notifications for the server obsolete." : "Le canal de actualisation selectionate face le notificationes dedicate al servitor esser obsolete.", "The selected update channel does not support updates of the server." : "Le canal de actualisation seligite non supporta actualisationes del servitor.", "You are running PHP %s. To allow you to upgrade to Nextcloud 11 and higher you need to run at least PHP 5.6. Once you upgraded your PHP version you will be able to receive update notifications for these newer versions." : "Tu es executante PHP %s. Pro permitter te a actualisar a Nextcloud 11 e a versiones major, tu debe executar al minus PHP 5.6. Quando tu actualisar tu version de PHP tu potera reciper notificationes de actualisation a iste versiones plus recente." },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/user_ldap/appinfo/info.xml b/apps/user_ldap/appinfo/info.xml index 7535790fa57..9794db30e2b 100644 --- a/apps/user_ldap/appinfo/info.xml +++ b/apps/user_ldap/appinfo/info.xml @@ -9,7 +9,7 @@ A user logs into ownCloud with their LDAP or AD credentials, and is granted acce </description> <licence>AGPL</licence> <author>Dominik Schmidt and Arthur Schiwon</author> - <version>1.2.0</version> + <version>1.2.1</version> <types> <authentication/> </types> @@ -32,4 +32,10 @@ A user logs into ownCloud with their LDAP or AD credentials, and is granted acce <admin>OCA\User_LDAP\Settings\Admin</admin> <admin-section>OCA\User_LDAP\Settings\Section</admin-section> </settings> + + <repair-steps> + <post-migration> + <step>OCA\User_LDAP\Migration\UUIDFixInsert</step> + </post-migration> + </repair-steps> </info> diff --git a/apps/user_ldap/l10n/ast.js b/apps/user_ldap/l10n/ast.js index 2f3d17d1101..6819476a4e4 100644 --- a/apps/user_ldap/l10n/ast.js +++ b/apps/user_ldap/l10n/ast.js @@ -91,7 +91,6 @@ OC.L10N.register( "Test Base DN" : "Probar Base DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita peticiones automátiques de LDAP. Meyor pa grandes configuraciones, pero rique mayor conocimientu de LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Inxerta manualmente los filtros de LDAP (recomendáu pa direutorios llargos)", - "%s access is limited to users meeting these criteria:" : "%s accesos llendaos a los usuarios que cumplan estos criterios:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Les clases d'oxetos más comunes pa los usuarios d'Internet son organizationalPerson, persona, usuariu y inetOrgPerson . Si nun ta seguro de qué clase d'oxetu escoyer, por favor consulte al so alministrador de directorios.", "The filter specifies which LDAP users shall have access to the %s instance." : "El filtru especifica qué usuarios LDAP puen tener accesu a %s.", "Verify settings and count users" : "Comprobar la configuración y usuarios de recuentu", diff --git a/apps/user_ldap/l10n/ast.json b/apps/user_ldap/l10n/ast.json index 8d00dbad5cf..0531ae4347a 100644 --- a/apps/user_ldap/l10n/ast.json +++ b/apps/user_ldap/l10n/ast.json @@ -89,7 +89,6 @@ "Test Base DN" : "Probar Base DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita peticiones automátiques de LDAP. Meyor pa grandes configuraciones, pero rique mayor conocimientu de LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Inxerta manualmente los filtros de LDAP (recomendáu pa direutorios llargos)", - "%s access is limited to users meeting these criteria:" : "%s accesos llendaos a los usuarios que cumplan estos criterios:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Les clases d'oxetos más comunes pa los usuarios d'Internet son organizationalPerson, persona, usuariu y inetOrgPerson . Si nun ta seguro de qué clase d'oxetu escoyer, por favor consulte al so alministrador de directorios.", "The filter specifies which LDAP users shall have access to the %s instance." : "El filtru especifica qué usuarios LDAP puen tener accesu a %s.", "Verify settings and count users" : "Comprobar la configuración y usuarios de recuentu", diff --git a/apps/user_ldap/l10n/cs_CZ.js b/apps/user_ldap/l10n/cs_CZ.js index c9fc3c62586..3e24f373e0b 100644 --- a/apps/user_ldap/l10n/cs_CZ.js +++ b/apps/user_ldap/l10n/cs_CZ.js @@ -94,7 +94,7 @@ OC.L10N.register( "Test Base DN" : "Test Base DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Zabraňuje automatickým LDAP požadavkům. Výhodné pro objemná nastavení, ale vyžaduje znalosti o LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Ručně vložit LDAP filtry (doporučeno pro obsáhlé adresáře)", - "%s access is limited to users meeting these criteria:" : "Přístup pro %s je omezen na uživatele odpovídající těmto kritériím:", + "Listing and searching for users is constrained by these criteria:" : "Získávání a vyhledávání uživatelů je omezeno následujícími kritérii:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Nejčastější třídy objektů pro uživatele jsou organizationalPerson, person, user a inetOrgPerson. Pokud si nejste jisti které třídy objektů zvolit, obraťte se na svého adresářového správce.", "The filter specifies which LDAP users shall have access to the %s instance." : "Filtr určuje, kteří uživatelé LDAP mají mít přístup k instanci %s.", "Verify settings and count users" : "Ověřit nastavení a spočítat uživatele", diff --git a/apps/user_ldap/l10n/cs_CZ.json b/apps/user_ldap/l10n/cs_CZ.json index 6f374d73d7f..fa7a9e932ad 100644 --- a/apps/user_ldap/l10n/cs_CZ.json +++ b/apps/user_ldap/l10n/cs_CZ.json @@ -92,7 +92,7 @@ "Test Base DN" : "Test Base DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Zabraňuje automatickým LDAP požadavkům. Výhodné pro objemná nastavení, ale vyžaduje znalosti o LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Ručně vložit LDAP filtry (doporučeno pro obsáhlé adresáře)", - "%s access is limited to users meeting these criteria:" : "Přístup pro %s je omezen na uživatele odpovídající těmto kritériím:", + "Listing and searching for users is constrained by these criteria:" : "Získávání a vyhledávání uživatelů je omezeno následujícími kritérii:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Nejčastější třídy objektů pro uživatele jsou organizationalPerson, person, user a inetOrgPerson. Pokud si nejste jisti které třídy objektů zvolit, obraťte se na svého adresářového správce.", "The filter specifies which LDAP users shall have access to the %s instance." : "Filtr určuje, kteří uživatelé LDAP mají mít přístup k instanci %s.", "Verify settings and count users" : "Ověřit nastavení a spočítat uživatele", diff --git a/apps/user_ldap/l10n/de.js b/apps/user_ldap/l10n/de.js index 9cc44cb3724..2284354faac 100644 --- a/apps/user_ldap/l10n/de.js +++ b/apps/user_ldap/l10n/de.js @@ -94,7 +94,7 @@ OC.L10N.register( "Test Base DN" : "Base DN testen", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Verhindert automatische LDAP-Anfragen. Besser geeignet für größere Installationen, benötigt aber erweiterte LDAP-Kenntnisse.", "Manually enter LDAP filters (recommended for large directories)" : "LDAP-Filter manuell eingeben (empfohlen für große Verzeichnisse)", - "%s access is limited to users meeting these criteria:" : "%s-Zugriff ist auf Benutzer, die den folgenden Kriterien entsprechen, beschränkt:", + "Listing and searching for users is constrained by these criteria:" : "Auflistung und Suche nach Nutzern ist eingeschränkt durch folgende Kriterien:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Die häufigsten Objektklassen für Benutzer sind organizationalPerson, person, user und inetOrgPerson. Wenn du nicht sicher bist, welche Objektklasse du wählen sollst, frage bitte deinen Verzeichnis-Admin.", "The filter specifies which LDAP users shall have access to the %s instance." : "Der Filter gibt an, welche LDAP-Benutzer Zugriff auf die %s-Instanz haben sollen.", "Verify settings and count users" : "Einstellungen überprüfen und Benutzer zählen", diff --git a/apps/user_ldap/l10n/de.json b/apps/user_ldap/l10n/de.json index 265c252579f..26432e7a62d 100644 --- a/apps/user_ldap/l10n/de.json +++ b/apps/user_ldap/l10n/de.json @@ -92,7 +92,7 @@ "Test Base DN" : "Base DN testen", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Verhindert automatische LDAP-Anfragen. Besser geeignet für größere Installationen, benötigt aber erweiterte LDAP-Kenntnisse.", "Manually enter LDAP filters (recommended for large directories)" : "LDAP-Filter manuell eingeben (empfohlen für große Verzeichnisse)", - "%s access is limited to users meeting these criteria:" : "%s-Zugriff ist auf Benutzer, die den folgenden Kriterien entsprechen, beschränkt:", + "Listing and searching for users is constrained by these criteria:" : "Auflistung und Suche nach Nutzern ist eingeschränkt durch folgende Kriterien:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Die häufigsten Objektklassen für Benutzer sind organizationalPerson, person, user und inetOrgPerson. Wenn du nicht sicher bist, welche Objektklasse du wählen sollst, frage bitte deinen Verzeichnis-Admin.", "The filter specifies which LDAP users shall have access to the %s instance." : "Der Filter gibt an, welche LDAP-Benutzer Zugriff auf die %s-Instanz haben sollen.", "Verify settings and count users" : "Einstellungen überprüfen und Benutzer zählen", diff --git a/apps/user_ldap/l10n/de_DE.js b/apps/user_ldap/l10n/de_DE.js index 3c0de5ea9a5..56efbbc7ea7 100644 --- a/apps/user_ldap/l10n/de_DE.js +++ b/apps/user_ldap/l10n/de_DE.js @@ -94,7 +94,7 @@ OC.L10N.register( "Test Base DN" : "Base DN testen", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Verhindert automatische LDAP-Anfragen. Besser geeignet für größere Installationen, benötigt aber erweiterte LDAP-Kenntnisse.", "Manually enter LDAP filters (recommended for large directories)" : "LDAP-Filter manuell eingeben (empfohlen für große Verzeichnisse)", - "%s access is limited to users meeting these criteria:" : "%s-Zugriff ist auf Benutzer, die den folgenden Kriterien entsprechen, beschränkt:", + "Listing and searching for users is constrained by these criteria:" : "Auflistung und Suche nach Nutzern ist eingeschränkt durch folgende Kriterien:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Die häufigsten Objektklassen für Benutzer sind organizationalPerson, person, user und inetOrgPerson. Wenn Sie nicht sicher, welche Objektklasse Sie wählen sollen, fragen Sie bitte Ihren Verzeichnis-Admin.", "The filter specifies which LDAP users shall have access to the %s instance." : "Der Filter gibt an, welche LDAP-Benutzer Zugriff auf die %s-Instanz haben sollen.", "Verify settings and count users" : "Einstellungen überprüfen und Benutzer zählen", diff --git a/apps/user_ldap/l10n/de_DE.json b/apps/user_ldap/l10n/de_DE.json index 2bee5da66de..17dfe772325 100644 --- a/apps/user_ldap/l10n/de_DE.json +++ b/apps/user_ldap/l10n/de_DE.json @@ -92,7 +92,7 @@ "Test Base DN" : "Base DN testen", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Verhindert automatische LDAP-Anfragen. Besser geeignet für größere Installationen, benötigt aber erweiterte LDAP-Kenntnisse.", "Manually enter LDAP filters (recommended for large directories)" : "LDAP-Filter manuell eingeben (empfohlen für große Verzeichnisse)", - "%s access is limited to users meeting these criteria:" : "%s-Zugriff ist auf Benutzer, die den folgenden Kriterien entsprechen, beschränkt:", + "Listing and searching for users is constrained by these criteria:" : "Auflistung und Suche nach Nutzern ist eingeschränkt durch folgende Kriterien:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Die häufigsten Objektklassen für Benutzer sind organizationalPerson, person, user und inetOrgPerson. Wenn Sie nicht sicher, welche Objektklasse Sie wählen sollen, fragen Sie bitte Ihren Verzeichnis-Admin.", "The filter specifies which LDAP users shall have access to the %s instance." : "Der Filter gibt an, welche LDAP-Benutzer Zugriff auf die %s-Instanz haben sollen.", "Verify settings and count users" : "Einstellungen überprüfen und Benutzer zählen", diff --git a/apps/user_ldap/l10n/en_GB.js b/apps/user_ldap/l10n/en_GB.js index 19dfa39b3a0..c4df3453766 100644 --- a/apps/user_ldap/l10n/en_GB.js +++ b/apps/user_ldap/l10n/en_GB.js @@ -91,7 +91,6 @@ OC.L10N.register( "Test Base DN" : "Test Base DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge.", "Manually enter LDAP filters (recommended for large directories)" : "Manually enter LDAP filters (recommended for large directories)", - "%s access is limited to users meeting these criteria:" : "%s access is limited to users meeting these criteria:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin.", "The filter specifies which LDAP users shall have access to the %s instance." : "The filter specifies which LDAP users shall have access to the %s instance.", "Verify settings and count users" : "Verify settings and count users", diff --git a/apps/user_ldap/l10n/en_GB.json b/apps/user_ldap/l10n/en_GB.json index b32fc2c9e9e..07fea61cd3d 100644 --- a/apps/user_ldap/l10n/en_GB.json +++ b/apps/user_ldap/l10n/en_GB.json @@ -89,7 +89,6 @@ "Test Base DN" : "Test Base DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge.", "Manually enter LDAP filters (recommended for large directories)" : "Manually enter LDAP filters (recommended for large directories)", - "%s access is limited to users meeting these criteria:" : "%s access is limited to users meeting these criteria:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin.", "The filter specifies which LDAP users shall have access to the %s instance." : "The filter specifies which LDAP users shall have access to the %s instance.", "Verify settings and count users" : "Verify settings and count users", diff --git a/apps/user_ldap/l10n/es.js b/apps/user_ldap/l10n/es.js index 5a6271b18bc..78b2f6516bc 100644 --- a/apps/user_ldap/l10n/es.js +++ b/apps/user_ldap/l10n/es.js @@ -94,7 +94,7 @@ OC.L10N.register( "Test Base DN" : "Probar Base DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita peticiones automáticas al LDAP. Mejor para grandes configuraciones, pero requiere cierto conocimiento de LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Ingrese manualmente los filtros LDAP (Recomendado para grandes directorios)", - "%s access is limited to users meeting these criteria:" : "Acceso limitado a %s a los usuarios que cumplan estos criterios:", + "Listing and searching for users is constrained by these criteria:" : "El listado y la búsqueda de usuarios es restringido por estos criterios:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Los objetos de clases más comunes para los usuarios son organizationalPerson, persona, usuario y inetOrgPerson. Si no está seguro de qué objeto de clase seleccionar, por favor, consulte con su administrador de directorio. ", "The filter specifies which LDAP users shall have access to the %s instance." : "El filtro especifica que usuarios LDAP pueden tener acceso a %s.", "Verify settings and count users" : "Verificar configuración y contar usuarios", diff --git a/apps/user_ldap/l10n/es.json b/apps/user_ldap/l10n/es.json index 7fc554ce122..07346cd2bab 100644 --- a/apps/user_ldap/l10n/es.json +++ b/apps/user_ldap/l10n/es.json @@ -92,7 +92,7 @@ "Test Base DN" : "Probar Base DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita peticiones automáticas al LDAP. Mejor para grandes configuraciones, pero requiere cierto conocimiento de LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Ingrese manualmente los filtros LDAP (Recomendado para grandes directorios)", - "%s access is limited to users meeting these criteria:" : "Acceso limitado a %s a los usuarios que cumplan estos criterios:", + "Listing and searching for users is constrained by these criteria:" : "El listado y la búsqueda de usuarios es restringido por estos criterios:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Los objetos de clases más comunes para los usuarios son organizationalPerson, persona, usuario y inetOrgPerson. Si no está seguro de qué objeto de clase seleccionar, por favor, consulte con su administrador de directorio. ", "The filter specifies which LDAP users shall have access to the %s instance." : "El filtro especifica que usuarios LDAP pueden tener acceso a %s.", "Verify settings and count users" : "Verificar configuración y contar usuarios", diff --git a/apps/user_ldap/l10n/fr.js b/apps/user_ldap/l10n/fr.js index 3f77a537d03..70ab8597a08 100644 --- a/apps/user_ldap/l10n/fr.js +++ b/apps/user_ldap/l10n/fr.js @@ -94,7 +94,7 @@ OC.L10N.register( "Test Base DN" : "Tester le DN de base", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Évite les requêtes LDAP automatiques. Mieux pour les installations de grande ampleur, mais demande des connaissances en LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Saisir les filtres LDAP manuellement (recommandé pour les annuaires de grande ampleur)", - "%s access is limited to users meeting these criteria:" : "L'accès à %s est limité aux utilisateurs validant ces critères :", + "Listing and searching for users is constrained by these criteria:" : "Rechercher et lister les utilisateurs qui respectent ces critères :", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Les classes d'objets fréquentes pour les utilisateurs sont : organizationalPerson, person, user et inetOrgPerson. Si vous n'êtes pas sûr de la classe à utiliser, demandez à l'administrateur de l'annuaire.", "The filter specifies which LDAP users shall have access to the %s instance." : "Le filtre spécifie quels utilisateurs LDAP auront accès à l'instance %s.", "Verify settings and count users" : "Vérifier les paramètres et compter les utilisateurs", diff --git a/apps/user_ldap/l10n/fr.json b/apps/user_ldap/l10n/fr.json index 7f402c10a50..3357fe0a635 100644 --- a/apps/user_ldap/l10n/fr.json +++ b/apps/user_ldap/l10n/fr.json @@ -92,7 +92,7 @@ "Test Base DN" : "Tester le DN de base", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Évite les requêtes LDAP automatiques. Mieux pour les installations de grande ampleur, mais demande des connaissances en LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Saisir les filtres LDAP manuellement (recommandé pour les annuaires de grande ampleur)", - "%s access is limited to users meeting these criteria:" : "L'accès à %s est limité aux utilisateurs validant ces critères :", + "Listing and searching for users is constrained by these criteria:" : "Rechercher et lister les utilisateurs qui respectent ces critères :", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Les classes d'objets fréquentes pour les utilisateurs sont : organizationalPerson, person, user et inetOrgPerson. Si vous n'êtes pas sûr de la classe à utiliser, demandez à l'administrateur de l'annuaire.", "The filter specifies which LDAP users shall have access to the %s instance." : "Le filtre spécifie quels utilisateurs LDAP auront accès à l'instance %s.", "Verify settings and count users" : "Vérifier les paramètres et compter les utilisateurs", diff --git a/apps/user_ldap/l10n/he.js b/apps/user_ldap/l10n/he.js index cd053463861..64ba7773422 100644 --- a/apps/user_ldap/l10n/he.js +++ b/apps/user_ldap/l10n/he.js @@ -91,7 +91,6 @@ OC.L10N.register( "Test Base DN" : "בדיקת DN בסיסי", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "נמנע מבקשות אוטומטיות של LDAP. מועדף עבור התקנות גדולות, אבל מחייב ידע מסויים של LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "הכנסת מסנני LDAP ידנית (מומלץ עבוק תיקיות גדולות)", - "%s access is limited to users meeting these criteria:" : "%s גישה מוגבלת למשתמשים שעונים על קריטריונים אלו:", "The filter specifies which LDAP users shall have access to the %s instance." : "הסינון קובע לאיזו משתמשי LDAP תהיה יכולת כניסה למקרה %s.", "Verify settings and count users" : "מאמת הגדרות וסופר משתמשים", "Saving" : "שמירה", diff --git a/apps/user_ldap/l10n/he.json b/apps/user_ldap/l10n/he.json index 53e2c2c5a8d..126c7a10224 100644 --- a/apps/user_ldap/l10n/he.json +++ b/apps/user_ldap/l10n/he.json @@ -89,7 +89,6 @@ "Test Base DN" : "בדיקת DN בסיסי", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "נמנע מבקשות אוטומטיות של LDAP. מועדף עבור התקנות גדולות, אבל מחייב ידע מסויים של LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "הכנסת מסנני LDAP ידנית (מומלץ עבוק תיקיות גדולות)", - "%s access is limited to users meeting these criteria:" : "%s גישה מוגבלת למשתמשים שעונים על קריטריונים אלו:", "The filter specifies which LDAP users shall have access to the %s instance." : "הסינון קובע לאיזו משתמשי LDAP תהיה יכולת כניסה למקרה %s.", "Verify settings and count users" : "מאמת הגדרות וסופר משתמשים", "Saving" : "שמירה", diff --git a/apps/user_ldap/l10n/id.js b/apps/user_ldap/l10n/id.js index 7f256c26649..e602e72b523 100644 --- a/apps/user_ldap/l10n/id.js +++ b/apps/user_ldap/l10n/id.js @@ -94,7 +94,6 @@ OC.L10N.register( "Test Base DN" : "Uji Base DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Mencegah permintaan LDAP otomatis. Berguna untuk setelan yang lebih besar, tapi memerlukan beberapa pengetahuan LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Masukkan penyaring LDAP secara manual (direkomendasikan untuk direktori yang besar)", - "%s access is limited to users meeting these criteria:" : "Akses %s terbatas bagi pengguna yang memenuhi kriteria:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Kelas obyek yang umum untuk pengguna adalah organizationalPerson, person, user, dan inetOrgPerson. Jika Anda tidak yakin kelas obyek mana yang akan dipilih, silakan konsultasi dengan admin direktori Anda.", "The filter specifies which LDAP users shall have access to the %s instance." : "Penyaring menentukan pengguna LDAP mana yang memiliki akses ke %s.", "Verify settings and count users" : "Verifikasi setelan dan jumlah pengguna", diff --git a/apps/user_ldap/l10n/id.json b/apps/user_ldap/l10n/id.json index 7fc32321558..cb8c0b98441 100644 --- a/apps/user_ldap/l10n/id.json +++ b/apps/user_ldap/l10n/id.json @@ -92,7 +92,6 @@ "Test Base DN" : "Uji Base DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Mencegah permintaan LDAP otomatis. Berguna untuk setelan yang lebih besar, tapi memerlukan beberapa pengetahuan LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Masukkan penyaring LDAP secara manual (direkomendasikan untuk direktori yang besar)", - "%s access is limited to users meeting these criteria:" : "Akses %s terbatas bagi pengguna yang memenuhi kriteria:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Kelas obyek yang umum untuk pengguna adalah organizationalPerson, person, user, dan inetOrgPerson. Jika Anda tidak yakin kelas obyek mana yang akan dipilih, silakan konsultasi dengan admin direktori Anda.", "The filter specifies which LDAP users shall have access to the %s instance." : "Penyaring menentukan pengguna LDAP mana yang memiliki akses ke %s.", "Verify settings and count users" : "Verifikasi setelan dan jumlah pengguna", diff --git a/apps/user_ldap/l10n/it.js b/apps/user_ldap/l10n/it.js index 17f9a67b2a0..466210dda57 100644 --- a/apps/user_ldap/l10n/it.js +++ b/apps/user_ldap/l10n/it.js @@ -94,7 +94,6 @@ OC.L10N.register( "Test Base DN" : "Rileva DN base", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Impedisce le richieste LDAP automatiche. Meglio per installazioni più grandi, ma richiede una certa conoscenza di LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Digita manualmente i filtri LDAP (consigliato per directory grandi)", - "%s access is limited to users meeting these criteria:" : "L'accesso a %s è limitato agli utenti che verificano questi criteri:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Le classi di oggetti più comuni per gli utenti sono organizationalPerson, person, user, e inetOrgPerson. Se non sei sicuro su quale classe di oggetti selezionare, consulta l'amministratore della tua directory.", "The filter specifies which LDAP users shall have access to the %s instance." : "Il filtro specifica quali utenti LDAP devono avere accesso all'istanza %s.", "Verify settings and count users" : "Verifica le impostazioni e conta gli utenti", diff --git a/apps/user_ldap/l10n/it.json b/apps/user_ldap/l10n/it.json index 1b3fd64bd99..db8852c49c2 100644 --- a/apps/user_ldap/l10n/it.json +++ b/apps/user_ldap/l10n/it.json @@ -92,7 +92,6 @@ "Test Base DN" : "Rileva DN base", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Impedisce le richieste LDAP automatiche. Meglio per installazioni più grandi, ma richiede una certa conoscenza di LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Digita manualmente i filtri LDAP (consigliato per directory grandi)", - "%s access is limited to users meeting these criteria:" : "L'accesso a %s è limitato agli utenti che verificano questi criteri:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Le classi di oggetti più comuni per gli utenti sono organizationalPerson, person, user, e inetOrgPerson. Se non sei sicuro su quale classe di oggetti selezionare, consulta l'amministratore della tua directory.", "The filter specifies which LDAP users shall have access to the %s instance." : "Il filtro specifica quali utenti LDAP devono avere accesso all'istanza %s.", "Verify settings and count users" : "Verifica le impostazioni e conta gli utenti", diff --git a/apps/user_ldap/l10n/ja.js b/apps/user_ldap/l10n/ja.js index 0f337bd0b65..39e478ad9d6 100644 --- a/apps/user_ldap/l10n/ja.js +++ b/apps/user_ldap/l10n/ja.js @@ -94,7 +94,7 @@ OC.L10N.register( "Test Base DN" : "ベースDN をテスト", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "自動的なLDAP問合せを停止します。大規模な設定には適していますが、LDAPの知識が必要になります。", "Manually enter LDAP filters (recommended for large directories)" : "手動でLDAPフィルターを入力(大規模ディレクトリ時のみ推奨)", - "%s access is limited to users meeting these criteria:" : "%s のアクセス権は基準を満たすユーザーに制限されます:", + "Listing and searching for users is constrained by these criteria:" : "ユーザーの表示と検索は、次の基準で制約されます:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "ユーザーの最も一般的なオブジェクトクラスは、organizationalPerson, person, user と inetOrgPerson です。もし、どのオブジェクトを選択すれば良いか分からない場合は、ディレクトリ管理者に相談してください。", "The filter specifies which LDAP users shall have access to the %s instance." : "フィルターは、どのLDAPユーザーが %s にアクセスするかを指定します。", "Verify settings and count users" : "設定を検証し、ユーザーを数える", diff --git a/apps/user_ldap/l10n/ja.json b/apps/user_ldap/l10n/ja.json index 767727d2d4a..4a561bac7c2 100644 --- a/apps/user_ldap/l10n/ja.json +++ b/apps/user_ldap/l10n/ja.json @@ -92,7 +92,7 @@ "Test Base DN" : "ベースDN をテスト", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "自動的なLDAP問合せを停止します。大規模な設定には適していますが、LDAPの知識が必要になります。", "Manually enter LDAP filters (recommended for large directories)" : "手動でLDAPフィルターを入力(大規模ディレクトリ時のみ推奨)", - "%s access is limited to users meeting these criteria:" : "%s のアクセス権は基準を満たすユーザーに制限されます:", + "Listing and searching for users is constrained by these criteria:" : "ユーザーの表示と検索は、次の基準で制約されます:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "ユーザーの最も一般的なオブジェクトクラスは、organizationalPerson, person, user と inetOrgPerson です。もし、どのオブジェクトを選択すれば良いか分からない場合は、ディレクトリ管理者に相談してください。", "The filter specifies which LDAP users shall have access to the %s instance." : "フィルターは、どのLDAPユーザーが %s にアクセスするかを指定します。", "Verify settings and count users" : "設定を検証し、ユーザーを数える", diff --git a/apps/user_ldap/l10n/nb_NO.js b/apps/user_ldap/l10n/nb_NO.js index 17289116064..9c8b69b18fe 100644 --- a/apps/user_ldap/l10n/nb_NO.js +++ b/apps/user_ldap/l10n/nb_NO.js @@ -92,7 +92,6 @@ OC.L10N.register( "Test Base DN" : "Test basis-DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Unngår automatiske LDAP-forespørsler. Bedre for store oppsett men krever litt LDAP-kunnskap.", "Manually enter LDAP filters (recommended for large directories)" : "Legg inn LDAP-filtre manuelt (anbefalt for store kataloger)", - "%s access is limited to users meeting these criteria:" : "%s tilgang er begrenset til brukere som møter følgende kriterier:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "De mest vanlige objektklassene for brukere er organizationalPerson, person, user og inetOrgPerson. Kontakt katalogadministratoren hvis du er usikker på hvilken objektklasse du skal velge.", "The filter specifies which LDAP users shall have access to the %s instance." : "Filteret spesifiserer hvilke LDAP-brukere som skal ha tilgang til %s-instansen.", "Verify settings and count users" : "Sjekk innstillinger og tell brukere", diff --git a/apps/user_ldap/l10n/nb_NO.json b/apps/user_ldap/l10n/nb_NO.json index 18f1cdd8838..386c0f9fd00 100644 --- a/apps/user_ldap/l10n/nb_NO.json +++ b/apps/user_ldap/l10n/nb_NO.json @@ -90,7 +90,6 @@ "Test Base DN" : "Test basis-DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Unngår automatiske LDAP-forespørsler. Bedre for store oppsett men krever litt LDAP-kunnskap.", "Manually enter LDAP filters (recommended for large directories)" : "Legg inn LDAP-filtre manuelt (anbefalt for store kataloger)", - "%s access is limited to users meeting these criteria:" : "%s tilgang er begrenset til brukere som møter følgende kriterier:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "De mest vanlige objektklassene for brukere er organizationalPerson, person, user og inetOrgPerson. Kontakt katalogadministratoren hvis du er usikker på hvilken objektklasse du skal velge.", "The filter specifies which LDAP users shall have access to the %s instance." : "Filteret spesifiserer hvilke LDAP-brukere som skal ha tilgang til %s-instansen.", "Verify settings and count users" : "Sjekk innstillinger og tell brukere", diff --git a/apps/user_ldap/l10n/nl.js b/apps/user_ldap/l10n/nl.js index b8caaf20ed3..3c1e8483b68 100644 --- a/apps/user_ldap/l10n/nl.js +++ b/apps/user_ldap/l10n/nl.js @@ -94,7 +94,7 @@ OC.L10N.register( "Test Base DN" : "Testen basis DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Voorkom automatische LDAP opvragingen. Weliswaar beter voor grote installaties, maar vergt LDAP kennis.", "Manually enter LDAP filters (recommended for large directories)" : "Handmatig invoeren LDAP filters (aanbevolen voor grote directories)", - "%s access is limited to users meeting these criteria:" : "%s toegang is beperkt tot gebruikers die voldoen aan deze criteria:", + "Listing and searching for users is constrained by these criteria:" : "De volgende beperkingen voor gebruikers om te zoeken of een overzicht te verkrijgen zijn van toepassing:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "De meest gebruikelijke objectklassen voor gebruikers zijn organizationalPerson, persoon, gebruiker, en inetOrgPerson. Als je niet zeker weet welke objectklasse moet worden geselecteerd, raadpleeg dan je directorybeheerder.", "The filter specifies which LDAP users shall have access to the %s instance." : "Dit filter geeft aan welke LDAP gebruikers toegang hebben tot %s.", "Verify settings and count users" : "Verifiëren instellingen en tellen gebruikers", diff --git a/apps/user_ldap/l10n/nl.json b/apps/user_ldap/l10n/nl.json index 79816be4075..a7dbe6a9afb 100644 --- a/apps/user_ldap/l10n/nl.json +++ b/apps/user_ldap/l10n/nl.json @@ -92,7 +92,7 @@ "Test Base DN" : "Testen basis DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Voorkom automatische LDAP opvragingen. Weliswaar beter voor grote installaties, maar vergt LDAP kennis.", "Manually enter LDAP filters (recommended for large directories)" : "Handmatig invoeren LDAP filters (aanbevolen voor grote directories)", - "%s access is limited to users meeting these criteria:" : "%s toegang is beperkt tot gebruikers die voldoen aan deze criteria:", + "Listing and searching for users is constrained by these criteria:" : "De volgende beperkingen voor gebruikers om te zoeken of een overzicht te verkrijgen zijn van toepassing:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "De meest gebruikelijke objectklassen voor gebruikers zijn organizationalPerson, persoon, gebruiker, en inetOrgPerson. Als je niet zeker weet welke objectklasse moet worden geselecteerd, raadpleeg dan je directorybeheerder.", "The filter specifies which LDAP users shall have access to the %s instance." : "Dit filter geeft aan welke LDAP gebruikers toegang hebben tot %s.", "Verify settings and count users" : "Verifiëren instellingen en tellen gebruikers", diff --git a/apps/user_ldap/l10n/pl.js b/apps/user_ldap/l10n/pl.js index c33bf91d1c3..fefad1c913c 100644 --- a/apps/user_ldap/l10n/pl.js +++ b/apps/user_ldap/l10n/pl.js @@ -94,7 +94,7 @@ OC.L10N.register( "Test Base DN" : "Sprawdź DN bazy danych LDAP / AD", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Zapobiega automatycznym zapytaniom LDAP. Lepsze dla większych instalacji, lecz wymaga pewnej wiedzy o LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Ręcznie wprowadzaj filtry LDAP (zalecane dla dużych katalogów)", - "%s access is limited to users meeting these criteria:" : "%s dostęp jest ograniczony dla użytkowników spełniających te warunki:", + "Listing and searching for users is constrained by these criteria:" : "Wyświetlanie i wyszukiwanie użytkowników jest ograniczony tymi kryteriami:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Najbardziej wspólną klasą obiektów dla użytkowników jest organizationalPerson, person, user i InetOrgPerson. Jeśli nie wiesz, którą klasę obiektów wybrać, skonsultuj to ze swoim administratorem usługi katalogowej.", "The filter specifies which LDAP users shall have access to the %s instance." : "Filtr określa, którzy użytkownicy LDAP powinni mieć dostęp do instancji %s.", "Verify settings and count users" : "Sprawdź ustawienia i policz użytkowników", diff --git a/apps/user_ldap/l10n/pl.json b/apps/user_ldap/l10n/pl.json index 099c764306b..0452149573e 100644 --- a/apps/user_ldap/l10n/pl.json +++ b/apps/user_ldap/l10n/pl.json @@ -92,7 +92,7 @@ "Test Base DN" : "Sprawdź DN bazy danych LDAP / AD", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Zapobiega automatycznym zapytaniom LDAP. Lepsze dla większych instalacji, lecz wymaga pewnej wiedzy o LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Ręcznie wprowadzaj filtry LDAP (zalecane dla dużych katalogów)", - "%s access is limited to users meeting these criteria:" : "%s dostęp jest ograniczony dla użytkowników spełniających te warunki:", + "Listing and searching for users is constrained by these criteria:" : "Wyświetlanie i wyszukiwanie użytkowników jest ograniczony tymi kryteriami:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Najbardziej wspólną klasą obiektów dla użytkowników jest organizationalPerson, person, user i InetOrgPerson. Jeśli nie wiesz, którą klasę obiektów wybrać, skonsultuj to ze swoim administratorem usługi katalogowej.", "The filter specifies which LDAP users shall have access to the %s instance." : "Filtr określa, którzy użytkownicy LDAP powinni mieć dostęp do instancji %s.", "Verify settings and count users" : "Sprawdź ustawienia i policz użytkowników", diff --git a/apps/user_ldap/l10n/pt_BR.js b/apps/user_ldap/l10n/pt_BR.js index 82316b171a1..aad7664de5f 100644 --- a/apps/user_ldap/l10n/pt_BR.js +++ b/apps/user_ldap/l10n/pt_BR.js @@ -94,7 +94,7 @@ OC.L10N.register( "Test Base DN" : "Teste Base DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita pedidos LDAP automáticos. Melhor para configurações maiores, mas requer algum conhecimento LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Inserir manualmente filtros LDAP (recomendado para grandes diretórios)", - "%s access is limited to users meeting these criteria:" : "%s o acesso está limitado aos usuários que atentam a esse critério:", + "Listing and searching for users is constrained by these criteria:" : "Listar e pesquisar usuários é limitado por esses critérios:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "As classes de objetos mais comuns para os usuários são organizationalPerson, pessoa, usuário e inetOrgPerson. Se você não tem certeza de qual classe de objeto selecionar, por favor, consulte o seu administrador do diretório.", "The filter specifies which LDAP users shall have access to the %s instance." : "O filtro especifica quais usuários LDAP devem ter acesso à instância do %s.", "Verify settings and count users" : "Verificar configurações e contas de usuários", diff --git a/apps/user_ldap/l10n/pt_BR.json b/apps/user_ldap/l10n/pt_BR.json index 2422ae147c0..cea7d246ed0 100644 --- a/apps/user_ldap/l10n/pt_BR.json +++ b/apps/user_ldap/l10n/pt_BR.json @@ -92,7 +92,7 @@ "Test Base DN" : "Teste Base DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita pedidos LDAP automáticos. Melhor para configurações maiores, mas requer algum conhecimento LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Inserir manualmente filtros LDAP (recomendado para grandes diretórios)", - "%s access is limited to users meeting these criteria:" : "%s o acesso está limitado aos usuários que atentam a esse critério:", + "Listing and searching for users is constrained by these criteria:" : "Listar e pesquisar usuários é limitado por esses critérios:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "As classes de objetos mais comuns para os usuários são organizationalPerson, pessoa, usuário e inetOrgPerson. Se você não tem certeza de qual classe de objeto selecionar, por favor, consulte o seu administrador do diretório.", "The filter specifies which LDAP users shall have access to the %s instance." : "O filtro especifica quais usuários LDAP devem ter acesso à instância do %s.", "Verify settings and count users" : "Verificar configurações e contas de usuários", diff --git a/apps/user_ldap/l10n/pt_PT.js b/apps/user_ldap/l10n/pt_PT.js index 6ddc7687742..de2dde2bdb5 100644 --- a/apps/user_ldap/l10n/pt_PT.js +++ b/apps/user_ldap/l10n/pt_PT.js @@ -91,7 +91,6 @@ OC.L10N.register( "Test Base DN" : "Testar Base DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita pedidos LDAP automáticos. Melhor para grandes configurações, mas requer conhecimentos LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Introduzir filtros LDAP manualmente (recomendado para directórios grandes)", - "%s access is limited to users meeting these criteria:" : "O acesso %s está limitado para os utilizadores que reúnam estes critérios:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Os objectos mais comuns para utilizadores são <em>organizationalPerson, person, user, and inetOrgPerson</em>. Se não tem a certeza de que classe de objecto deverá seleccionar, por favor, contacte o administrador do Directório.", "The filter specifies which LDAP users shall have access to the %s instance." : "O filtro especifica quais utilizadores do LDAP devem ter acesso à instância %s.", "Verify settings and count users" : "Verificar definições e contar utilizadores", diff --git a/apps/user_ldap/l10n/pt_PT.json b/apps/user_ldap/l10n/pt_PT.json index 65c9529f962..6bb88268656 100644 --- a/apps/user_ldap/l10n/pt_PT.json +++ b/apps/user_ldap/l10n/pt_PT.json @@ -89,7 +89,6 @@ "Test Base DN" : "Testar Base DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita pedidos LDAP automáticos. Melhor para grandes configurações, mas requer conhecimentos LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Introduzir filtros LDAP manualmente (recomendado para directórios grandes)", - "%s access is limited to users meeting these criteria:" : "O acesso %s está limitado para os utilizadores que reúnam estes critérios:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Os objectos mais comuns para utilizadores são <em>organizationalPerson, person, user, and inetOrgPerson</em>. Se não tem a certeza de que classe de objecto deverá seleccionar, por favor, contacte o administrador do Directório.", "The filter specifies which LDAP users shall have access to the %s instance." : "O filtro especifica quais utilizadores do LDAP devem ter acesso à instância %s.", "Verify settings and count users" : "Verificar definições e contar utilizadores", diff --git a/apps/user_ldap/l10n/ru.js b/apps/user_ldap/l10n/ru.js index 9fd5488025f..74924e2c9d6 100644 --- a/apps/user_ldap/l10n/ru.js +++ b/apps/user_ldap/l10n/ru.js @@ -94,7 +94,6 @@ OC.L10N.register( "Test Base DN" : "Проверить базу поиска DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Избегает отправки автоматических запросов LDAP. Эта опция подходит для крупных проектов, но требует некоторых знаний LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Ввести LDAP фильтры вручную (рекомендуется для больших каталогов)", - "%s access is limited to users meeting these criteria:" : "%s доступ ограничен для пользователей, отвечающих следующим критериям:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Наиболее частые классы объектов для пользователей organizationalPerson, person, user и inetOrgPerson. Если вы не уверены какой класс объектов выбрать, пожалуйста обратитесь к администратору.", "The filter specifies which LDAP users shall have access to the %s instance." : "Этот фильтр указывает, какие пользователи LDAP должны иметь доступ к экземпляру %s.", "Verify settings and count users" : "Проверить настройки и пересчитать пользователей", diff --git a/apps/user_ldap/l10n/ru.json b/apps/user_ldap/l10n/ru.json index 0c3e148ec7b..1ec59ea20fa 100644 --- a/apps/user_ldap/l10n/ru.json +++ b/apps/user_ldap/l10n/ru.json @@ -92,7 +92,6 @@ "Test Base DN" : "Проверить базу поиска DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Избегает отправки автоматических запросов LDAP. Эта опция подходит для крупных проектов, но требует некоторых знаний LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Ввести LDAP фильтры вручную (рекомендуется для больших каталогов)", - "%s access is limited to users meeting these criteria:" : "%s доступ ограничен для пользователей, отвечающих следующим критериям:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Наиболее частые классы объектов для пользователей organizationalPerson, person, user и inetOrgPerson. Если вы не уверены какой класс объектов выбрать, пожалуйста обратитесь к администратору.", "The filter specifies which LDAP users shall have access to the %s instance." : "Этот фильтр указывает, какие пользователи LDAP должны иметь доступ к экземпляру %s.", "Verify settings and count users" : "Проверить настройки и пересчитать пользователей", diff --git a/apps/user_ldap/l10n/sl.js b/apps/user_ldap/l10n/sl.js index 7268269e675..fa06b28cd2a 100644 --- a/apps/user_ldap/l10n/sl.js +++ b/apps/user_ldap/l10n/sl.js @@ -91,7 +91,6 @@ OC.L10N.register( "Test Base DN" : "Preizkus osnovnega enoznačnega imena (DN)", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Preusmeri samodejne zahteve LDAP. Nastavitev je priporočljiva za obsežnejše namestitve, vendar zahteva nekaj znanja o delu z LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Ročno vstavi filtre za LDAP (priporočljivo za obsežnejše mape).", - "%s access is limited to users meeting these criteria:" : "%s dostop je omejen na uporabnike, ki zadostijo tem zahtevam:", "The filter specifies which LDAP users shall have access to the %s instance." : "Filter določa, kateri uporabniki LDAP bodo imeli dostop do %s.", "Verify settings and count users" : "Preveri nastavitve in preštej uporabnike", "Saving" : "Poteka shranjevanje ...", diff --git a/apps/user_ldap/l10n/sl.json b/apps/user_ldap/l10n/sl.json index 406ff287748..d76c0aca991 100644 --- a/apps/user_ldap/l10n/sl.json +++ b/apps/user_ldap/l10n/sl.json @@ -89,7 +89,6 @@ "Test Base DN" : "Preizkus osnovnega enoznačnega imena (DN)", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Preusmeri samodejne zahteve LDAP. Nastavitev je priporočljiva za obsežnejše namestitve, vendar zahteva nekaj znanja o delu z LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Ročno vstavi filtre za LDAP (priporočljivo za obsežnejše mape).", - "%s access is limited to users meeting these criteria:" : "%s dostop je omejen na uporabnike, ki zadostijo tem zahtevam:", "The filter specifies which LDAP users shall have access to the %s instance." : "Filter določa, kateri uporabniki LDAP bodo imeli dostop do %s.", "Verify settings and count users" : "Preveri nastavitve in preštej uporabnike", "Saving" : "Poteka shranjevanje ...", diff --git a/apps/user_ldap/l10n/sq.js b/apps/user_ldap/l10n/sq.js index 2f09cd96511..83fd4f4fa54 100644 --- a/apps/user_ldap/l10n/sq.js +++ b/apps/user_ldap/l10n/sq.js @@ -92,7 +92,6 @@ OC.L10N.register( "Test Base DN" : "Testo DN Bazë", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Shmang kërkesa LDAP automatike. Më e përshtatshme për instalime më të mëdha, por lyp ca dije rreth LDAP-it.", "Manually enter LDAP filters (recommended for large directories)" : "Jepni filtra LDAP dorazi (e këshilluar për drejtori të mëdha)", - "%s access is limited to users meeting these criteria:" : "Hyrja për %s u rezervohet përdoruesve që plotësojnë këto kushte:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Klasat më të rëndomta objektesh për përdoruesit janë organizationalPerson, person, user, dhe inetOrgPerson. Nëse s’jeni i sigurt cilën klasë objekti të përzgjidhni, ju lutemi, lidhuni me përgjegjësin e drejtorisë suaj.", "The filter specifies which LDAP users shall have access to the %s instance." : "Filtri përcakton se cilët përdorues LDAP do të kenë hyrje te instanca %s.", "Verify settings and count users" : "Verifiko rregullimet dhe numëro përdoruesit", diff --git a/apps/user_ldap/l10n/sq.json b/apps/user_ldap/l10n/sq.json index 053ae0f5a2d..24723781460 100644 --- a/apps/user_ldap/l10n/sq.json +++ b/apps/user_ldap/l10n/sq.json @@ -90,7 +90,6 @@ "Test Base DN" : "Testo DN Bazë", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Shmang kërkesa LDAP automatike. Më e përshtatshme për instalime më të mëdha, por lyp ca dije rreth LDAP-it.", "Manually enter LDAP filters (recommended for large directories)" : "Jepni filtra LDAP dorazi (e këshilluar për drejtori të mëdha)", - "%s access is limited to users meeting these criteria:" : "Hyrja për %s u rezervohet përdoruesve që plotësojnë këto kushte:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Klasat më të rëndomta objektesh për përdoruesit janë organizationalPerson, person, user, dhe inetOrgPerson. Nëse s’jeni i sigurt cilën klasë objekti të përzgjidhni, ju lutemi, lidhuni me përgjegjësin e drejtorisë suaj.", "The filter specifies which LDAP users shall have access to the %s instance." : "Filtri përcakton se cilët përdorues LDAP do të kenë hyrje te instanca %s.", "Verify settings and count users" : "Verifiko rregullimet dhe numëro përdoruesit", diff --git a/apps/user_ldap/l10n/tr.js b/apps/user_ldap/l10n/tr.js index f7e42c7f3c9..a320b070c64 100644 --- a/apps/user_ldap/l10n/tr.js +++ b/apps/user_ldap/l10n/tr.js @@ -92,7 +92,6 @@ OC.L10N.register( "Test Base DN" : "Base DN'i Sına", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Otomatik LDAP isteklerinden kaçın. Büyük kurulumlar için daha iyi ancak LDAP bilgisi gerektirir.", "Manually enter LDAP filters (recommended for large directories)" : "LDAP filtrelerini el ile girin (büyük dizinler için önerilir)", - "%s access is limited to users meeting these criteria:" : "%s erişimi aşağıdaki kritere uyan kullanıcılara kısıtlanmıştır:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Kullanıcılar için en çok ortak nesne sınıfları organizationalPerson, person, user ve inetOrgPerson sınıflarıdır. Hangi nesne sınıfını seçeceğinizden emin değilseniz lütfen dizin yöneticinize danışın.", "The filter specifies which LDAP users shall have access to the %s instance." : "Filtre, %s örneğine erişmesi gereken LDAP kullanıcılarını belirtir.", "Verify settings and count users" : "Ayarları doğrula ve kullanıcıları say", diff --git a/apps/user_ldap/l10n/tr.json b/apps/user_ldap/l10n/tr.json index c08ec466b84..4fb5c710029 100644 --- a/apps/user_ldap/l10n/tr.json +++ b/apps/user_ldap/l10n/tr.json @@ -90,7 +90,6 @@ "Test Base DN" : "Base DN'i Sına", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Otomatik LDAP isteklerinden kaçın. Büyük kurulumlar için daha iyi ancak LDAP bilgisi gerektirir.", "Manually enter LDAP filters (recommended for large directories)" : "LDAP filtrelerini el ile girin (büyük dizinler için önerilir)", - "%s access is limited to users meeting these criteria:" : "%s erişimi aşağıdaki kritere uyan kullanıcılara kısıtlanmıştır:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Kullanıcılar için en çok ortak nesne sınıfları organizationalPerson, person, user ve inetOrgPerson sınıflarıdır. Hangi nesne sınıfını seçeceğinizden emin değilseniz lütfen dizin yöneticinize danışın.", "The filter specifies which LDAP users shall have access to the %s instance." : "Filtre, %s örneğine erişmesi gereken LDAP kullanıcılarını belirtir.", "Verify settings and count users" : "Ayarları doğrula ve kullanıcıları say", diff --git a/apps/user_ldap/l10n/zh_CN.js b/apps/user_ldap/l10n/zh_CN.js index 2d57b1545e9..c1f3a4d46ca 100644 --- a/apps/user_ldap/l10n/zh_CN.js +++ b/apps/user_ldap/l10n/zh_CN.js @@ -94,7 +94,7 @@ OC.L10N.register( "Test Base DN" : "测试基础DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "避免自动LDAP请求。用于更精确的设置,但需要一些LDAP知识。", "Manually enter LDAP filters (recommended for large directories)" : "手动输入LDAP筛选条件(建议用于大型目录)", - "%s access is limited to users meeting these criteria:" : "%s 的访问权限限于满足以下条件的用户:", + "Listing and searching for users is constrained by these criteria:" : "列表搜索用户受到标准约束:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "对于用户最常用的对象类为organizationalPerson,person,user和inetOrgPerson。如果你不确定选择哪些对象类,请咨询您的目录管理员。", "The filter specifies which LDAP users shall have access to the %s instance." : "该筛选条件指定哪些LDAP用户有权访问%s的实例。", "Verify settings and count users" : "验证设置和统计用户", diff --git a/apps/user_ldap/l10n/zh_CN.json b/apps/user_ldap/l10n/zh_CN.json index c8dbccd08c9..4c0ae4ac69e 100644 --- a/apps/user_ldap/l10n/zh_CN.json +++ b/apps/user_ldap/l10n/zh_CN.json @@ -92,7 +92,7 @@ "Test Base DN" : "测试基础DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "避免自动LDAP请求。用于更精确的设置,但需要一些LDAP知识。", "Manually enter LDAP filters (recommended for large directories)" : "手动输入LDAP筛选条件(建议用于大型目录)", - "%s access is limited to users meeting these criteria:" : "%s 的访问权限限于满足以下条件的用户:", + "Listing and searching for users is constrained by these criteria:" : "列表搜索用户受到标准约束:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "对于用户最常用的对象类为organizationalPerson,person,user和inetOrgPerson。如果你不确定选择哪些对象类,请咨询您的目录管理员。", "The filter specifies which LDAP users shall have access to the %s instance." : "该筛选条件指定哪些LDAP用户有权访问%s的实例。", "Verify settings and count users" : "验证设置和统计用户", diff --git a/apps/user_ldap/lib/Access.php b/apps/user_ldap/lib/Access.php index 9e93ef2ecaa..cc0446ae523 100644 --- a/apps/user_ldap/lib/Access.php +++ b/apps/user_ldap/lib/Access.php @@ -1473,7 +1473,7 @@ class Access extends LDAPUtility implements IUserTools { return true; } - if ($uuidOverride !== '' && !$force) { + if (is_string($uuidOverride) && trim($uuidOverride) !== '' && !$force) { $this->connection->$uuidAttr = $uuidOverride; return true; } diff --git a/apps/user_ldap/lib/Connection.php b/apps/user_ldap/lib/Connection.php index 92b874e7a15..04f8c7401e2 100644 --- a/apps/user_ldap/lib/Connection.php +++ b/apps/user_ldap/lib/Connection.php @@ -47,6 +47,8 @@ use OC\ServerNotAvailableException; * @property string[] ldapBaseUsers * @property int|string ldapPagingSize holds an integer * @property bool|mixed|void ldapGroupMemberAssocAttr + * @property string ldapUuidUserAttribute + * @property string ldapUuidGroupAttribute */ class Connection extends LDAPUtility { private $ldapConnectionRes = null; @@ -339,7 +341,7 @@ class Connection extends LDAPUtility { $this->configuration->$effectiveSetting = $uuidOverride; } else { $uuidAttributes = array('auto', 'entryuuid', 'nsuniqueid', - 'objectguid', 'guid'); + 'objectguid', 'guid', 'ipauniqueid'); if(!in_array($this->configuration->$effectiveSetting, $uuidAttributes) && (!is_null($this->configID))) { diff --git a/apps/user_ldap/lib/Group_LDAP.php b/apps/user_ldap/lib/Group_LDAP.php index 49e5e724833..d620a00f849 100644 --- a/apps/user_ldap/lib/Group_LDAP.php +++ b/apps/user_ldap/lib/Group_LDAP.php @@ -902,4 +902,12 @@ class Group_LDAP extends BackendUtility implements \OCP\GroupInterface { public function implementsActions($actions) { return (bool)(\OC\Group\Backend::COUNT_USERS & $actions); } + + /** + * Return access for LDAP interaction. + * @return Access instance of Access for LDAP interaction + */ + public function getLDAPAccess() { + return $this->access; + } } diff --git a/apps/user_ldap/lib/Group_Proxy.php b/apps/user_ldap/lib/Group_Proxy.php index 64b85427f8f..c102e7ac626 100644 --- a/apps/user_ldap/lib/Group_Proxy.php +++ b/apps/user_ldap/lib/Group_Proxy.php @@ -196,4 +196,13 @@ class Group_Proxy extends Proxy implements \OCP\GroupInterface { //it's the same across all our user backends obviously return $this->refBackend->implementsActions($actions); } + + /** + * Return access for LDAP interaction. + * @param string $gid + * @return Access instance of Access for LDAP interaction + */ + public function getLDAPAccess($gid) { + return $this->handleRequest($gid, 'getLDAPAccess', []); + } } diff --git a/apps/user_ldap/lib/Mapping/AbstractMapping.php b/apps/user_ldap/lib/Mapping/AbstractMapping.php index 6fb4a5436c3..755cfadbccd 100644 --- a/apps/user_ldap/lib/Mapping/AbstractMapping.php +++ b/apps/user_ldap/lib/Mapping/AbstractMapping.php @@ -129,6 +129,25 @@ abstract class AbstractMapping { } /** + * Updates the UUID based on the given DN + * + * required by Migration/UUIDFix + * + * @param $uuid + * @param $fdn + * @return bool + */ + public function setUUIDbyDN($uuid, $fdn) { + $query = $this->dbc->prepare(' + UPDATE `' . $this->getTableName() . '` + SET `directory_uuid` = ? + WHERE `ldap_dn` = ? + '); + + return $this->modify($query, [$uuid, $fdn]); + } + + /** * Gets the name based on the provided LDAP DN. * @param string $fdn * @return string|false diff --git a/apps/user_ldap/lib/Migration/UUIDFix.php b/apps/user_ldap/lib/Migration/UUIDFix.php new file mode 100644 index 00000000000..5b9e5e2231d --- /dev/null +++ b/apps/user_ldap/lib/Migration/UUIDFix.php @@ -0,0 +1,60 @@ +<?php +/** + * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\User_LDAP\Migration; + + +use OC\BackgroundJob\QueuedJob; +use OCA\User_LDAP\Mapping\AbstractMapping; +use OCA\User_LDAP\Proxy; +use OCA\User_LDAP\User_Proxy; + +abstract class UUIDFix extends QueuedJob { + /** @var AbstractMapping */ + protected $mapper; + + /** @var Proxy */ + protected $proxy; + + public function run($argument) { + $isUser = $this->proxy instanceof User_Proxy; + foreach($argument['records'] as $record) { + $access = $this->proxy->getLDAPAccess($record['name']); + $uuid = $access->getUUID($record['dn'], $isUser); + if($uuid === false) { + // record not found, no prob, continue with the next + continue; + } + if($uuid !== $record['uuid']) { + $this->mapper->setUUIDbyDN($uuid, $record['dn']); + } + } + } + + /** + * @param Proxy $proxy + */ + public function overrideProxy(Proxy $proxy) { + $this->proxy = $proxy; + } +} diff --git a/apps/user_ldap/lib/Migration/UUIDFixGroup.php b/apps/user_ldap/lib/Migration/UUIDFixGroup.php new file mode 100644 index 00000000000..cbc38366984 --- /dev/null +++ b/apps/user_ldap/lib/Migration/UUIDFixGroup.php @@ -0,0 +1,37 @@ +<?php +/** + * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\User_LDAP\Migration; + +use OCA\User_LDAP\Helper; +use OCA\User_LDAP\LDAP; +use OCA\User_LDAP\Mapping\GroupMapping; +use OCA\User_LDAP\User_Proxy; +use OCP\IConfig; + +class UUIDFixGroup extends UUIDFix { + public function __construct(GroupMapping $mapper, LDAP $ldap, IConfig $config, Helper $helper) { + $this->mapper = $mapper; + $this->proxy = new User_Proxy($helper->getServerConfigurationPrefixes(true), $ldap, $config); + } +} diff --git a/apps/user_ldap/lib/Migration/UUIDFixInsert.php b/apps/user_ldap/lib/Migration/UUIDFixInsert.php new file mode 100644 index 00000000000..4a1104f2c6f --- /dev/null +++ b/apps/user_ldap/lib/Migration/UUIDFixInsert.php @@ -0,0 +1,101 @@ +<?php +/** + * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\User_LDAP\Migration; + +use OCA\User_LDAP\Mapping\GroupMapping; +use OCA\User_LDAP\Mapping\UserMapping; +use OCP\BackgroundJob\IJobList; +use OCP\IConfig; +use OCP\Migration\IOutput; +use OCP\Migration\IRepairStep; + +class UUIDFixInsert implements IRepairStep { + + /** @var IConfig */ + protected $config; + + /** @var UserMapping */ + protected $userMapper; + + /** @var GroupMapping */ + protected $groupMapper; + + /** @var IJobList */ + protected $jobList; + + public function __construct(IConfig $config, UserMapping $userMapper, GroupMapping $groupMapper, IJobList $jobList) { + $this->config = $config; + $this->userMapper = $userMapper; + $this->groupMapper = $groupMapper; + $this->jobList = $jobList; + } + + /** + * Returns the step's name + * + * @return string + * @since 9.1.0 + */ + public function getName() { + return 'Insert UUIDFix background job for user and group in batches'; + } + + /** + * Run repair step. + * Must throw exception on error. + * + * @param IOutput $output + * @throws \Exception in case of failure + * @since 9.1.0 + */ + public function run(IOutput $output) { + $installedVersion = $this->config->getAppValue('user_ldap', 'installed_version', '1.2.1'); + if(version_compare($installedVersion, '1.2.1') !== -1) { + return; + } + + foreach ([$this->userMapper, $this->groupMapper] as $mapper) { + $offset = 0; + $batchSize = 50; + $jobClass = $mapper instanceof UserMapping ? UUIDFixUser::class : UUIDFixGroup::class; + do { + $retry = false; + $records = $mapper->getList($offset, $batchSize); + if(count($records) === 0){ + continue; + } + try { + $this->jobList->add($jobClass, ['records' => $records]); + $offset += $batchSize; + } catch (\InvalidArgumentException $e) { + if(strpos($e->getMessage(), 'Background job arguments can\'t exceed 4000') !== false) { + $batchSize = intval(floor(count($records) * 0.8)); + $retry = true; + } + } + } while (count($records) === $batchSize || $retry); + } + + } +} diff --git a/apps/user_ldap/lib/Migration/UUIDFixUser.php b/apps/user_ldap/lib/Migration/UUIDFixUser.php new file mode 100644 index 00000000000..ee1457dcccb --- /dev/null +++ b/apps/user_ldap/lib/Migration/UUIDFixUser.php @@ -0,0 +1,37 @@ +<?php +/** + * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\User_LDAP\Migration; + +use OCA\User_LDAP\Helper; +use OCA\User_LDAP\LDAP; +use OCA\User_LDAP\Mapping\UserMapping; +use OCA\User_LDAP\Group_Proxy; +use OCP\IConfig; + +class UUIDFixUser extends UUIDFix { + public function __construct(UserMapping $mapper, LDAP $ldap, IConfig $config, Helper $helper) { + $this->mapper = $mapper; + $this->proxy = new Group_Proxy($helper->getServerConfigurationPrefixes(true), $ldap, $config); + } +} diff --git a/apps/user_ldap/lib/Proxy.php b/apps/user_ldap/lib/Proxy.php index 6b896e0b13d..7f998314e20 100644 --- a/apps/user_ldap/lib/Proxy.php +++ b/apps/user_ldap/lib/Proxy.php @@ -128,6 +128,12 @@ abstract class Proxy { abstract protected function walkBackends($id, $method, $parameters); /** + * @param string $id + * @return Access + */ + abstract public function getLDAPAccess($id); + + /** * Takes care of the request to the User backend * @param string $id * @param string $method string, the method of the user backend that shall be called diff --git a/apps/user_ldap/templates/part.wizard-userfilter.php b/apps/user_ldap/templates/part.wizard-userfilter.php index 076db93a91a..ebac944e56f 100644 --- a/apps/user_ldap/templates/part.wizard-userfilter.php +++ b/apps/user_ldap/templates/part.wizard-userfilter.php @@ -1,7 +1,7 @@ <fieldset id="ldapWizard2"> <div> <p> - <?php p($l->t('%s access is limited to users meeting these criteria:', $theme->getName()));?> + <?php p($l->t('Listing and searching for users is constrained by these criteria:'));?> </p> <p> <label for="ldap_userfilter_objectclass"> diff --git a/apps/user_ldap/tests/.htaccess b/apps/user_ldap/tests/.htaccess index 5e068d28661..6fde30e763a 100755 --- a/apps/user_ldap/tests/.htaccess +++ b/apps/user_ldap/tests/.htaccess @@ -11,4 +11,6 @@ Satisfy All </ifModule> # section for Apache 2.2 and 2.4 +<ifModule mod_autoindex.c> IndexIgnore * +</ifModule> diff --git a/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php b/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php index 493fc2abace..2966180f5a1 100644 --- a/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php +++ b/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php @@ -25,8 +25,10 @@ namespace OCA\User_LDAP\Tests\Integration; use OCA\User_LDAP\Access; use OCA\User_LDAP\Connection; +use OCA\User_LDAP\FilesystemHelper; use OCA\User_LDAP\LDAP; use OCA\User_LDAP\Helper; +use OCA\User_LDAP\LogWrapper; use OCA\User_LDAP\User\Manager; abstract class AbstractIntegrationTest { @@ -106,7 +108,15 @@ abstract class AbstractIntegrationTest { * @return Manager */ protected function initUserManager() { - $this->userManager = new FakeManager(); + $this->userManager = new Manager( + \OC::$server->getConfig(), + new FilesystemHelper(), + new LogWrapper(), + \OC::$server->getAvatarManager(), + new \OCP\Image(), + \OC::$server->getDatabaseConnection(), + \OC::$server->getUserManager() + ); } /** diff --git a/apps/user_ldap/tests/Integration/FakeManager.php b/apps/user_ldap/tests/Integration/FakeManager.php deleted file mode 100644 index 1eb405298a2..00000000000 --- a/apps/user_ldap/tests/Integration/FakeManager.php +++ /dev/null @@ -1,38 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Joas Schilling <coding@schilljs.com> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace OCA\User_LDAP\Tests\Integration; - -/** - * Class FakeManager - * - * this is a mock of \OCA\User_LDAP\User\Manager which is a dependency of - * Access, that pulls plenty more things in. Because it is not needed in the - * scope of these tests, we replace it with a mock. - */ -class FakeManager extends \OCA\User_LDAP\User\Manager { - public function __construct() { - $this->ocConfig = \OC::$server->getConfig(); - $this->image = new \OCP\Image(); - } -} diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestAttributeDetection.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestAttributeDetection.php new file mode 100644 index 00000000000..55b2eabedc2 --- /dev/null +++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestAttributeDetection.php @@ -0,0 +1,86 @@ +<?php +/** + * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\user_ldap\tests\Integration\Lib; + +use OCA\User_LDAP\Group_LDAP; +use OCA\User_LDAP\Mapping\GroupMapping; +use OCA\User_LDAP\Mapping\UserMapping; +use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest; +use OCA\User_LDAP\User_LDAP; + +require_once __DIR__ . '/../Bootstrap.php'; + +class IntegrationTestAttributeDetection extends AbstractIntegrationTest { + public function init() { + require(__DIR__ . '/../setup-scripts/createExplicitUsers.php'); + require(__DIR__ . '/../setup-scripts/createExplicitGroups.php'); + + parent::init(); + + $this->connection->setConfiguration(['ldapGroupFilter' => 'objectClass=groupOfNames']); + $this->connection->setConfiguration(['ldapGroupMemberAssocAttr' => 'member']); + + $userMapper = new UserMapping(\OC::$server->getDatabaseConnection()); + $userMapper->clear(); + $this->access->setUserMapper($userMapper); + + $groupMapper = new GroupMapping(\OC::$server->getDatabaseConnection()); + $groupMapper->clear(); + $this->access->setGroupMapper($groupMapper); + + $userBackend = new User_LDAP($this->access, \OC::$server->getConfig()); + $userManager = \OC::$server->getUserManager(); + $userManager->clearBackends(); + $userManager->registerBackend($userBackend); + + $groupBackend = new Group_LDAP($this->access); + $groupManger = \OC::$server->getGroupManager(); + $groupManger->clearBackends(); + $groupManger->addBackend($groupBackend); + } + + protected function caseNativeUUIDAttributeUsers() { + // trigger importing of users which also triggers UUID attribute detection + \OC::$server->getUserManager()->search('', 5, 0); + return $this->connection->ldapUuidUserAttribute === 'entryuuid'; + } + + protected function caseNativeUUIDAttributeGroups() { + // essentially the same as 'caseNativeUUIDAttributeUsers', code paths + // are similar, but we take no chances. + + // trigger importing of users which also triggers UUID attribute detection + \OC::$server->getGroupManager()->search('', 5, 0); + return $this->connection->ldapUuidGroupAttribute === 'entryuuid'; + } +} + +/** @var string $host */ +/** @var int $port */ +/** @var string $adn */ +/** @var string $apwd */ +/** @var string $bdn */ +$test = new IntegrationTestAttributeDetection($host, $port, $adn, $apwd, $bdn); +$test->init(); +$test->run(); diff --git a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php index ab0d2ffdcce..d0444daca5f 100644 --- a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php +++ b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php @@ -25,6 +25,7 @@ namespace OCA\User_LDAP\Tests\Integration\Lib\User; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest; +use OCA\User_LDAP\User_LDAP; require_once __DIR__ . '/../../Bootstrap.php'; @@ -42,7 +43,7 @@ class IntegrationTestUserDisplayName extends AbstractIntegrationTest { $this->mapping = new UserMapping(\OC::$server->getDatabaseConnection()); $this->mapping->clear(); $this->access->setUserMapper($this->mapping); - $userBackend = new \OCA\User_LDAP\User_LDAP($this->access, \OC::$server->getConfig()); + $userBackend = new User_LDAP($this->access, \OC::$server->getConfig()); \OC_User::useBackend($userBackend); } diff --git a/apps/user_ldap/tests/Mapping/AbstractMappingTest.php b/apps/user_ldap/tests/Mapping/AbstractMappingTest.php index 5c3474d9ad2..c9845bb31e5 100644 --- a/apps/user_ldap/tests/Mapping/AbstractMappingTest.php +++ b/apps/user_ldap/tests/Mapping/AbstractMappingTest.php @@ -26,6 +26,7 @@ namespace OCA\User_LDAP\Tests\Mapping; +use OCA\User_LDAP\Mapping\AbstractMapping; use OCP\IDBConnection; abstract class AbstractMappingTest extends \Test\TestCase { @@ -182,7 +183,7 @@ abstract class AbstractMappingTest extends \Test\TestCase { /** * tests setDNbyUUID() for successful and unsuccessful update. */ - public function testSetMethod() { + public function testSetDNMethod() { list($mapper, $data) = $this->initTest(); $newDN = 'uid=modified,dc=example,dc=org'; @@ -196,7 +197,26 @@ abstract class AbstractMappingTest extends \Test\TestCase { $this->assertFalse($done); $name = $mapper->getNameByDN($newDN); $this->assertFalse($name); + } + + /** + * tests setUUIDbyDN() for successful and unsuccessful update. + */ + public function testSetUUIDMethod() { + /** @var AbstractMapping $mapper */ + list($mapper, $data) = $this->initTest(); + $newUUID = 'ABC737-DEF754'; + + $done = $mapper->setUUIDbyDN($newUUID, 'uid=notme,dc=example,dc=org'); + $this->assertFalse($done); + $name = $mapper->getNameByUUID($newUUID); + $this->assertFalse($name); + + $done = $mapper->setUUIDbyDN($newUUID, $data[0]['dn']); + $this->assertTrue($done); + $uuid = $mapper->getUUIDByDN($data[0]['dn']); + $this->assertSame($uuid, $newUUID); } /** diff --git a/apps/user_ldap/tests/Migration/AbstractUUIDFixTest.php b/apps/user_ldap/tests/Migration/AbstractUUIDFixTest.php new file mode 100644 index 00000000000..8921648da83 --- /dev/null +++ b/apps/user_ldap/tests/Migration/AbstractUUIDFixTest.php @@ -0,0 +1,197 @@ +<?php +/** + * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\User_LDAP\Tests\Migration; + +use OCA\User_LDAP\LDAP; +use Test\TestCase; +use OCA\User_LDAP\Access; +use OCA\User_LDAP\Helper; +use OCA\User_LDAP\Migration\UUIDFixUser; +use OCA\User_LDAP\Mapping\UserMapping; +use OCA\User_LDAP\Mapping\GroupMapping; +use OCA\User_LDAP\User_Proxy; +use OCP\IConfig; + +abstract class AbstractUUIDFixTest extends TestCase { + /** @var Helper|\PHPUnit_Framework_MockObject_MockObject */ + protected $helper; + + /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */ + protected $config; + + /** @var LDAP|\PHPUnit_Framework_MockObject_MockObject */ + protected $ldap; + + /** @var UserMapping|GroupMapping|\PHPUnit_Framework_MockObject_MockObject */ + protected $mapper; + + /** @var UUIDFixUser */ + protected $job; + + /** @var User_Proxy|\PHPUnit_Framework_MockObject_MockObject */ + protected $proxy; + + /** @var Access|\PHPUnit_Framework_MockObject_MockObject */ + protected $access; + + /** @var bool */ + protected $isUser = true; + + public function setUp() { + parent::setUp(); + + $this->ldap = $this->createMock(LDAP::class); + $this->config = $this->createMock(IConfig::class); + $this->access = $this->createMock(Access::class); + + $this->helper = $this->createMock(Helper::class); + $this->helper->expects($this->any()) + ->method('getServerConfigurationPrefixes') + ->with(true) + ->willReturn(['s01', 's03']); + } + + protected function mockProxy($className) { + $this->proxy = $this->createMock($className); + $this->proxy->expects($this->any()) + ->method('getLDAPAccess') + ->willReturn($this->access); + } + + protected function instantiateJob($className) { + $this->job = new $className($this->mapper, $this->ldap, $this->config, $this->helper); + $this->job->overrideProxy($this->proxy); + } + + public function testRunSingleRecord() { + $args = [ + 'records' => [ + 0 => [ + 'name' => 'Someone', + 'dn' => 'uid=Someone,dc=Somewhere', + 'uuid' => 'kaput' + ] + ] + ]; + $correctUUID = '4355-AED3-9D73-03AD'; + + $this->access->expects($this->once()) + ->method('getUUID') + ->with($args['records'][0]['dn'], $this->isUser) + ->willReturn($correctUUID); + + $this->mapper->expects($this->once()) + ->method('setUUIDbyDN') + ->with($correctUUID, $args['records'][0]['dn']); + + $this->job->run($args); + } + + public function testRunValidRecord() { + $correctUUID = '4355-AED3-9D73-03AD'; + $args = [ + 'records' => [ + 0 => [ + 'name' => 'Someone', + 'dn' => 'uid=Someone,dc=Somewhere', + 'uuid' => $correctUUID + ] + ] + ]; + + $this->access->expects($this->once()) + ->method('getUUID') + ->with($args['records'][0]['dn'], $this->isUser) + ->willReturn($correctUUID); + + $this->mapper->expects($this->never()) + ->method('setUUIDbyDN'); + + $this->job->run($args); + } + + public function testRunRemovedRecord() { + $args = [ + 'records' => [ + 0 => [ + 'name' => 'Someone', + 'dn' => 'uid=Someone,dc=Somewhere', + 'uuid' => 'kaput' + ] + ] + ]; + + $this->access->expects($this->once()) + ->method('getUUID') + ->with($args['records'][0]['dn'], $this->isUser) + ->willReturn(false); + + $this->mapper->expects($this->never()) + ->method('setUUIDbyDN'); + + $this->job->run($args); + } + + public function testRunManyRecords() { + $args = [ + 'records' => [ + 0 => [ + 'name' => 'Someone', + 'dn' => 'uid=Someone,dc=Somewhere', + 'uuid' => 'kaput' + ], + 1 => [ + 'name' => 'kdslkdsaIdsal', + 'dn' => 'uid=kdslkdsaIdsal,dc=Somewhere', + 'uuid' => 'AED3-4355-03AD-9D73' + ], + 2 => [ + 'name' => 'Paperboy', + 'dn' => 'uid=Paperboy,dc=Somewhere', + 'uuid' => 'kaput' + ] + ] + ]; + $correctUUIDs = ['4355-AED3-9D73-03AD', 'AED3-4355-03AD-9D73', 'AED3-9D73-4355-03AD']; + + $this->access->expects($this->exactly(3)) + ->method('getUUID') + ->withConsecutive( + [$args['records'][0]['dn'], $this->isUser], + [$args['records'][1]['dn'], $this->isUser], + [$args['records'][2]['dn'], $this->isUser] + ) + ->willReturnOnConsecutiveCalls($correctUUIDs[0], $correctUUIDs[1], $correctUUIDs[2]); + + $this->mapper->expects($this->exactly(2)) + ->method('setUUIDbyDN') + ->withConsecutive( + [$correctUUIDs[0], $args['records'][0]['dn']], + [$correctUUIDs[2], $args['records'][2]['dn']] + ); + + $this->job->run($args); + } + +} diff --git a/apps/user_ldap/tests/Migration/UUIDFixGroupTest.php b/apps/user_ldap/tests/Migration/UUIDFixGroupTest.php new file mode 100644 index 00000000000..b91f4af433f --- /dev/null +++ b/apps/user_ldap/tests/Migration/UUIDFixGroupTest.php @@ -0,0 +1,50 @@ +<?php +/** + * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\Group_LDAP\Tests\Migration; + +use OCA\User_LDAP\Migration\UUIDFixGroup; +use OCA\User_LDAP\Mapping\GroupMapping; +use OCA\User_LDAP\Group_Proxy; +use OCA\User_LDAP\Tests\Migration\AbstractUUIDFixTest; + +/** + * Class UUIDFixGroupTest + * + * @package OCA\Group_LDAP\Tests\Migration + * @group DB + */ +class UUIDFixGroupTest extends AbstractUUIDFixTest { + public function setUp() { + $this->isUser = false; + parent::setUp(); + + $this->isUser = false; + + $this->mapper = $this->createMock(GroupMapping::class); + + $this->mockProxy(Group_Proxy::class); + $this->instantiateJob(UUIDFixGroup::class); + } + +} diff --git a/apps/user_ldap/tests/Migration/UUIDFixInsertTest.php b/apps/user_ldap/tests/Migration/UUIDFixInsertTest.php new file mode 100644 index 00000000000..a5f7ea50175 --- /dev/null +++ b/apps/user_ldap/tests/Migration/UUIDFixInsertTest.php @@ -0,0 +1,195 @@ +<?php +/** + * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\User_LDAP\Tests\Migration; + +use OCA\User_LDAP\Migration\UUIDFixInsert; +use OCA\User_LDAP\Mapping\UserMapping; +use OCA\User_LDAP\Mapping\GroupMapping; +use OCP\BackgroundJob\IJobList; +use OCP\IConfig; +use OCP\Migration\IOutput; +use Test\TestCase; + +class UUIDFixInsertTest extends TestCase { + /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */ + protected $config; + + /** @var UserMapping|\PHPUnit_Framework_MockObject_MockObject */ + protected $userMapper; + + /** @var GroupMapping|\PHPUnit_Framework_MockObject_MockObject */ + protected $groupMapper; + + /** @var IJobList|\PHPUnit_Framework_MockObject_MockObject */ + protected $jobList; + + /** @var UUIDFixInsert */ + protected $job; + + public function setUp() { + parent::setUp(); + + $this->jobList = $this->createMock(IJobList::class); + $this->config = $this->createMock(IConfig::class); + $this->userMapper = $this->createMock(UserMapping::class); + $this->groupMapper = $this->createMock(GroupMapping::class); + $this->job = new UUIDFixInsert( + $this->config, + $this->userMapper, + $this->groupMapper, + $this->jobList + ); + } + + public function testGetName() { + $this->assertSame('Insert UUIDFix background job for user and group in batches', $this->job->getName()); + } + + public function recordProvider() { + $record = [ + 'dn' => 'cn=somerecord,dc=somewhere', + 'name' => 'Something', + 'uuid' => 'AB12-3456-CDEF7-8GH9' + ]; + array_fill(0, 50, $record); + + $userBatches = [ + 0 => array_fill(0, 50, $record), + 1 => array_fill(0, 50, $record), + 2 => array_fill(0, 13, $record), + ]; + + $groupBatches = [ + 0 => array_fill(0, 7, $record), + ]; + + return [ + ['userBatches' => $userBatches, 'groupBatches' => $groupBatches] + ]; + } + + public function recordProviderTooLongAndNone() { + $record = [ + 'dn' => 'cn=somerecord,dc=somewhere', + 'name' => 'Something', + 'uuid' => 'AB12-3456-CDEF7-8GH9' + ]; + array_fill(0, 50, $record); + + $userBatches = [ + 0 => array_fill(0, 50, $record), + 1 => array_fill(0, 40, $record), + 2 => array_fill(0, 32, $record), + 3 => array_fill(0, 32, $record), + 4 => array_fill(0, 23, $record), + ]; + + $groupBatches = [0 => []]; + + return [ + ['userBatches' => $userBatches, 'groupBatches' => $groupBatches] + ]; + } + + /** + * @dataProvider recordProvider + */ + public function testRun($userBatches, $groupBatches) { + $this->config->expects($this->once()) + ->method('getAppValue') + ->with('user_ldap', 'installed_version', '1.2.1') + ->willReturn('1.2.0'); + + $this->userMapper->expects($this->exactly(3)) + ->method('getList') + ->withConsecutive([0, 50], [50, 50], [100, 50]) + ->willReturnOnConsecutiveCalls($userBatches[0], $userBatches[1], $userBatches[2]); + + $this->groupMapper->expects($this->exactly(1)) + ->method('getList') + ->with(0, 50) + ->willReturn($groupBatches[0]); + + $this->jobList->expects($this->exactly(4)) + ->method('add'); + + /** @var IOutput $out */ + $out = $this->createMock(IOutput::class); + $this->job->run($out); + } + + /** + * @dataProvider recordProviderTooLongAndNone + */ + public function testRunWithManyAndNone($userBatches, $groupBatches) { + $this->config->expects($this->once()) + ->method('getAppValue') + ->with('user_ldap', 'installed_version', '1.2.1') + ->willReturn('1.2.0'); + + $this->userMapper->expects($this->exactly(5)) + ->method('getList') + ->withConsecutive([0, 50], [0, 40], [0, 32], [32, 32], [64, 32]) + ->willReturnOnConsecutiveCalls($userBatches[0], $userBatches[1], $userBatches[2], $userBatches[3], $userBatches[4]); + + $this->groupMapper->expects($this->once()) + ->method('getList') + ->with(0, 50) + ->willReturn($groupBatches[0]); + + $this->jobList->expects($this->at(0)) + ->method('add') + ->willThrowException(new \InvalidArgumentException('Background job arguments can\'t exceed 4000 etc')); + $this->jobList->expects($this->at(1)) + ->method('add') + ->willThrowException(new \InvalidArgumentException('Background job arguments can\'t exceed 4000 etc')); + $this->jobList->expects($this->at(2)) + ->method('add'); + $this->jobList->expects($this->at(3)) + ->method('add'); + $this->jobList->expects($this->at(4)) + ->method('add'); + + /** @var IOutput $out */ + $out = $this->createMock(IOutput::class); + $this->job->run($out); + } + + public function testDonNotRun() { + $this->config->expects($this->once()) + ->method('getAppValue') + ->with('user_ldap', 'installed_version', '1.2.1') + ->willReturn('1.2.1'); + $this->userMapper->expects($this->never()) + ->method('getList'); + $this->groupMapper->expects($this->never()) + ->method('getList'); + $this->jobList->expects($this->never()) + ->method('add'); + + /** @var IOutput $out */ + $out = $this->createMock(IOutput::class); + $this->job->run($out); + } +} diff --git a/apps/user_ldap/tests/Migration/UUIDFixUserTest.php b/apps/user_ldap/tests/Migration/UUIDFixUserTest.php new file mode 100644 index 00000000000..28eca1608d2 --- /dev/null +++ b/apps/user_ldap/tests/Migration/UUIDFixUserTest.php @@ -0,0 +1,46 @@ +<?php +/** + * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\User_LDAP\Tests\Migration; + +use OCA\User_LDAP\Migration\UUIDFixUser; +use OCA\User_LDAP\Mapping\UserMapping; +use OCA\User_LDAP\User_Proxy; + +/** + * Class UUIDFixUserTest + * + * @package OCA\User_LDAP\Tests\Migration + * @group DB + */ +class UUIDFixUserTest extends AbstractUUIDFixTest { + public function setUp() { + $this->isUser = true; + parent::setUp(); + + $this->mapper = $this->createMock(UserMapping::class); + + $this->mockProxy(User_Proxy::class); + $this->instantiateJob(UUIDFixUser::class); + } +} diff --git a/apps/workflowengine/l10n/zh_CN.js b/apps/workflowengine/l10n/zh_CN.js index 9f7071a6c88..19c294371ee 100644 --- a/apps/workflowengine/l10n/zh_CN.js +++ b/apps/workflowengine/l10n/zh_CN.js @@ -49,7 +49,9 @@ OC.L10N.register( "The given group does not exist" : "输入的群组不存在", "Operation #%s does not exist" : "操作 %s 不存在", "Operation %s does not exist" : "操作 %s 不存在", + "Operation %s is invalid" : "操作 %s 无效", "Workflow" : "数据流", + "Add rule group" : "添加规则组", "Add rule" : "添加规则", "Reset" : "重置", "Save" : "保存", diff --git a/apps/workflowengine/l10n/zh_CN.json b/apps/workflowengine/l10n/zh_CN.json index b5138ba8e8f..410cc7f8479 100644 --- a/apps/workflowengine/l10n/zh_CN.json +++ b/apps/workflowengine/l10n/zh_CN.json @@ -47,7 +47,9 @@ "The given group does not exist" : "输入的群组不存在", "Operation #%s does not exist" : "操作 %s 不存在", "Operation %s does not exist" : "操作 %s 不存在", + "Operation %s is invalid" : "操作 %s 无效", "Workflow" : "数据流", + "Add rule group" : "添加规则组", "Add rule" : "添加规则", "Reset" : "重置", "Save" : "保存", diff --git a/build/.htaccess b/build/.htaccess index c7a7b79feac..853aed187d3 100644 --- a/build/.htaccess +++ b/build/.htaccess @@ -9,4 +9,6 @@ deny from all </ifModule> # section for Apache 2.2 and 2.4 +<ifModule mod_autoindex.c> IndexIgnore * +</ifModule> diff --git a/build/integration/features/bootstrap/Auth.php b/build/integration/features/bootstrap/Auth.php index 61cad0dc145..46bb94a2b20 100644 --- a/build/integration/features/bootstrap/Auth.php +++ b/build/integration/features/bootstrap/Auth.php @@ -31,7 +31,7 @@ trait Auth { private $clientToken; /** @BeforeScenario */ - public function tearUpScenario() { + public function setUpScenario() { $this->client = new Client(); $this->responseXml = ''; } diff --git a/build/integration/features/bootstrap/CalDavContext.php b/build/integration/features/bootstrap/CalDavContext.php index cae0089875f..4843dde135a 100644 --- a/build/integration/features/bootstrap/CalDavContext.php +++ b/build/integration/features/bootstrap/CalDavContext.php @@ -50,7 +50,7 @@ class CalDavContext implements \Behat\Behat\Context\Context { } /** @BeforeScenario */ - public function tearUpScenario() { + public function setUpScenario() { $this->client = new Client(); $this->responseXml = ''; } diff --git a/build/integration/features/bootstrap/CardDavContext.php b/build/integration/features/bootstrap/CardDavContext.php index 2dce688ab85..8ff8b55d28d 100644 --- a/build/integration/features/bootstrap/CardDavContext.php +++ b/build/integration/features/bootstrap/CardDavContext.php @@ -50,7 +50,7 @@ class CardDavContext implements \Behat\Behat\Context\Context { } /** @BeforeScenario */ - public function tearUpScenario() { + public function setUpScenario() { $this->client = new Client(); $this->responseXml = ''; } diff --git a/build/integration/features/bootstrap/ChecksumsContext.php b/build/integration/features/bootstrap/ChecksumsContext.php index 3d2d9000794..4dd43db852f 100644 --- a/build/integration/features/bootstrap/ChecksumsContext.php +++ b/build/integration/features/bootstrap/ChecksumsContext.php @@ -48,7 +48,7 @@ class ChecksumsContext implements \Behat\Behat\Context\Context { } /** @BeforeScenario */ - public function tearUpScenario() { + public function setUpScenario() { $this->client = new Client(); } diff --git a/build/integration/features/bootstrap/TagsContext.php b/build/integration/features/bootstrap/TagsContext.php index 46ce869c86a..3a48cce8aea 100644 --- a/build/integration/features/bootstrap/TagsContext.php +++ b/build/integration/features/bootstrap/TagsContext.php @@ -50,7 +50,7 @@ class TagsContext implements \Behat\Behat\Context\Context { } /** @BeforeScenario */ - public function tearUpScenario() { + public function setUpScenario() { $this->client = new Client(); } diff --git a/config/.htaccess b/config/.htaccess index c7a7b79feac..853aed187d3 100644 --- a/config/.htaccess +++ b/config/.htaccess @@ -9,4 +9,6 @@ deny from all </ifModule> # section for Apache 2.2 and 2.4 +<ifModule mod_autoindex.c> IndexIgnore * +</ifModule> diff --git a/config/config.sample.php b/config/config.sample.php index 2a1387cecd0..0fbd3ffce07 100644 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -188,7 +188,7 @@ $CONFIG = array( /** * Lifetime of the remember login cookie, which is set when the user clicks - * the ``remember`` checkbox on the login screen. + * the ``remember`` checkbox on the login screen. * * Defaults to ``60*60*24*15`` seconds (15 days) */ @@ -497,20 +497,20 @@ $CONFIG = array( * * Available values: * - * * ``auto`` - * default setting. keeps files and folders in the trash bin for 30 days - * and automatically deletes anytime after that if space is needed (note: + * * ``auto`` + * default setting. keeps files and folders in the trash bin for 30 days + * and automatically deletes anytime after that if space is needed (note: * files may not be deleted if space is not needed). - * * ``D, auto`` - * keeps files and folders in the trash bin for D+ days, delete anytime if + * * ``D, auto`` + * keeps files and folders in the trash bin for D+ days, delete anytime if * space needed (note: files may not be deleted if space is not needed) - * * ``auto, D`` - * delete all files in the trash bin that are older than D days + * * ``auto, D`` + * delete all files in the trash bin that are older than D days * automatically, delete other files anytime if space needed - * * ``D1, D2`` - * keep files and folders in the trash bin for at least D1 days and + * * ``D1, D2`` + * keep files and folders in the trash bin for at least D1 days and * delete when exceeds D2 days - * * ``disabled`` + * * ``disabled`` * trash bin auto clean disabled, files and folders will be kept forever * * Defaults to ``auto`` @@ -539,19 +539,19 @@ $CONFIG = array( * * Available values: * - * * ``auto`` - * default setting. Automatically expire versions according to expire + * * ``auto`` + * default setting. Automatically expire versions according to expire * rules. Please refer to :doc:`../configuration_files/file_versioning` for * more information. - * * ``D, auto`` - * keep versions at least for D days, apply expire rules to all versions + * * ``D, auto`` + * keep versions at least for D days, apply expire rules to all versions * that are older than D days - * * ``auto, D`` - * delete all versions that are older than D days automatically, delete + * * ``auto, D`` + * delete all versions that are older than D days automatically, delete * other versions according to expire rules - * * ``D1, D2`` + * * ``D1, D2`` * keep versions for at least D1 days and delete when exceeds D2 days - * * ``disabled`` + * * ``disabled`` * versions auto clean disabled, versions will be kept forever * * Defaults to ``auto`` @@ -984,14 +984,6 @@ $CONFIG = array( */ 'maintenance' => false, -/** - * When set to ``true``, the Nextcloud instance will be unavailable for all - * users who are not in the ``admin`` group. - * - * Defaults to ``false`` - */ -'singleuser' => false, - /** * SSL @@ -1185,6 +1177,17 @@ $CONFIG = array( */ 'sharing.managerFactory' => '\OC\Share20\ProviderFactory', +/** + * Define max number of results returned by the user search for auto-completion + * Default is unlimited (value set to 0). + */ +'sharing.maxAutocompleteResults' => 0, + +/** + * Define the minimum length of the search string before we start auto-completion + * Default is no limit (value set to 0) + */ +'sharing.minSearchStringLength' => 0, /** diff --git a/core/Command/Encryption/DecryptAll.php b/core/Command/Encryption/DecryptAll.php index e02d7be5bb6..a2c306adc28 100644 --- a/core/Command/Encryption/DecryptAll.php +++ b/core/Command/Encryption/DecryptAll.php @@ -54,7 +54,7 @@ class DecryptAll extends Command { protected $wasTrashbinEnabled; /** @var bool */ - protected $wasSingleUserModeEnabled; + protected $wasMaintenanceModeEnabled; /** @var \OC\Encryption\DecryptAll */ protected $decryptAll; @@ -83,20 +83,20 @@ class DecryptAll extends Command { } /** - * Set single user mode and disable the trashbin app + * Set maintenance mode and disable the trashbin app */ - protected function forceSingleUserAndTrashbin() { + protected function forceMaintenanceAndTrashbin() { $this->wasTrashbinEnabled = $this->appManager->isEnabledForUser('files_trashbin'); - $this->wasSingleUserModeEnabled = $this->config->getSystemValue('singleuser', false); - $this->config->setSystemValue('singleuser', true); + $this->wasMaintenanceModeEnabled = $this->config->getSystemValue('maintenance', false); + $this->config->setSystemValue('maintenance', true); $this->appManager->disableApp('files_trashbin'); } /** - * Reset the single user mode and re-enable the trashbin app + * Reset the maintenance mode and re-enable the trashbin app */ - protected function resetSingleUserAndTrashbin() { - $this->config->setSystemValue('singleuser', $this->wasSingleUserModeEnabled); + protected function resetMaintenanceAndTrashbin() { + $this->config->setSystemValue('maintenance', $this->wasMaintenanceModeEnabled); if ($this->wasTrashbinEnabled) { $this->appManager->enableApp('files_trashbin'); } @@ -147,7 +147,7 @@ class DecryptAll extends Command { $output->writeln(''); $question = new ConfirmationQuestion('Do you really want to continue? (y/n) ', false); if ($this->questionHelper->ask($input, $output, $question)) { - $this->forceSingleUserAndTrashbin(); + $this->forceMaintenanceAndTrashbin(); $user = $input->getArgument('user'); $result = $this->decryptAll->decryptAll($input, $output, $user); if ($result === false) { @@ -158,7 +158,7 @@ class DecryptAll extends Command { $output->writeln('Server side encryption remains enabled'); $this->config->setAppValue('core', 'encryption_enabled', 'yes'); } - $this->resetSingleUserAndTrashbin(); + $this->resetMaintenanceAndTrashbin(); } else { $output->write('Enable server side encryption... '); $this->config->setAppValue('core', 'encryption_enabled', 'yes'); @@ -168,7 +168,7 @@ class DecryptAll extends Command { } catch (\Exception $e) { // enable server side encryption again if something went wrong $this->config->setAppValue('core', 'encryption_enabled', 'yes'); - $this->resetSingleUserAndTrashbin(); + $this->resetMaintenanceAndTrashbin(); throw $e; } diff --git a/core/Command/Encryption/EncryptAll.php b/core/Command/Encryption/EncryptAll.php index f26c163aa2f..3a0c88c0798 100644 --- a/core/Command/Encryption/EncryptAll.php +++ b/core/Command/Encryption/EncryptAll.php @@ -50,7 +50,7 @@ class EncryptAll extends Command { protected $wasTrashbinEnabled; /** @var bool */ - protected $wasSingleUserModeEnabled; + protected $wasMaintenanceModeEnabled; /** * @param IManager $encryptionManager @@ -72,20 +72,20 @@ class EncryptAll extends Command { } /** - * Set single user mode and disable the trashbin app + * Set maintenance mode and disable the trashbin app */ - protected function forceSingleUserAndTrashbin() { + protected function forceMaintenanceAndTrashbin() { $this->wasTrashbinEnabled = $this->appManager->isEnabledForUser('files_trashbin'); - $this->wasSingleUserModeEnabled = $this->config->getSystemValue('singleuser', false); - $this->config->setSystemValue('singleuser', true); + $this->wasMaintenanceModeEnabled = $this->config->getSystemValue('maintenance', false); + $this->config->setSystemValue('maintenance', true); $this->appManager->disableApp('files_trashbin'); } /** - * Reset the single user mode and re-enable the trashbin app + * Reset the maintenance mode and re-enable the trashbin app */ - protected function resetSingleUserAndTrashbin() { - $this->config->setSystemValue('singleuser', $this->wasSingleUserModeEnabled); + protected function resetMaintenanceAndTrashbin() { + $this->config->setSystemValue('maintenance', $this->wasMaintenanceModeEnabled); if ($this->wasTrashbinEnabled) { $this->appManager->enableApp('files_trashbin'); } @@ -116,17 +116,17 @@ class EncryptAll extends Command { $output->writeln(''); $question = new ConfirmationQuestion('Do you really want to continue? (y/n) ', false); if ($this->questionHelper->ask($input, $output, $question)) { - $this->forceSingleUserAndTrashbin(); + $this->forceMaintenanceAndTrashbin(); try { $defaultModule = $this->encryptionManager->getEncryptionModule(); $defaultModule->encryptAll($input, $output); } catch (\Exception $ex) { - $this->resetSingleUserAndTrashbin(); + $this->resetMaintenanceAndTrashbin(); throw $ex; } - $this->resetSingleUserAndTrashbin(); + $this->resetMaintenanceAndTrashbin(); } else { $output->writeln('aborted'); } diff --git a/core/Command/Maintenance/SingleUser.php b/core/Command/Maintenance/SingleUser.php deleted file mode 100644 index e4f945596d2..00000000000 --- a/core/Command/Maintenance/SingleUser.php +++ /dev/null @@ -1,79 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin Appelman <robin@icewind.nl> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace OC\Core\Command\Maintenance; - -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Input\InputOption; -use Symfony\Component\Console\Output\OutputInterface; - -use OCP\IConfig; - -class SingleUser extends Command { - - /** @var IConfig */ - protected $config; - - /** - * @param IConfig $config - */ - public function __construct(IConfig $config) { - $this->config = $config; - parent::__construct(); - } - - protected function configure() { - $this - ->setName('maintenance:singleuser') - ->setDescription('set single user mode') - ->addOption( - 'on', - null, - InputOption::VALUE_NONE, - 'enable single user mode' - ) - ->addOption( - 'off', - null, - InputOption::VALUE_NONE, - 'disable single user mode' - ); - } - - protected function execute(InputInterface $input, OutputInterface $output) { - if ($input->getOption('on')) { - $this->config->setSystemValue('singleuser', true); - $output->writeln('Single user mode enabled'); - } elseif ($input->getOption('off')) { - $this->config->setSystemValue('singleuser', false); - $output->writeln('Single user mode disabled'); - } else { - if ($this->config->getSystemValue('singleuser', false)) { - $output->writeln('Single user mode is currently enabled'); - } else { - $output->writeln('Single user mode is currently disabled'); - } - } - } -} diff --git a/core/Controller/LoginController.php b/core/Controller/LoginController.php index 954a18e8778..abb1df4bcd4 100644 --- a/core/Controller/LoginController.php +++ b/core/Controller/LoginController.php @@ -1,8 +1,10 @@ <?php /** + * @copyright Copyright (c) 2017, Sandro Lutz <sandro.lutz@temparus.ch> * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> * @copyright Copyright (c) 2016, ownCloud, Inc. * + * @author Sandro Lutz <sandro.lutz@temparus.ch> * @author Christoph Wurst <christoph@owncloud.com> * @author Joas Schilling <coding@schilljs.com> * @author Lukas Reschke <lukas@statuscode.ch> @@ -44,6 +46,7 @@ use OCP\IURLGenerator; use OCP\IUser; use OCP\IUserManager; use OCP\IUserSession; +use OC\Hooks\PublicEmitter; class LoginController extends Controller { /** @var IUserManager */ @@ -214,6 +217,10 @@ class LoginController extends Controller { return $this->generateRedirect($redirect_url); } + if ($this->userManager instanceof PublicEmitter) { + $this->userManager->emit('\OC\User', 'preLogin', array($user, $password)); + } + $originalUser = $user; // TODO: Add all the insane error handling /* @var $loginResult IUser */ diff --git a/core/css/apps.scss b/core/css/apps.scss index f1ddc95e092..91805fe16b2 100644 --- a/core/css/apps.scss +++ b/core/css/apps.scss @@ -420,6 +420,11 @@ em { input[type='text'] { width: 93%; } + + .info-text { + padding: 5px 0 7px 22px; + color: #999; + } } #app-settings-header { diff --git a/core/css/guest.css b/core/css/guest.css index 292ae40e8d6..5a5935b4dcb 100644 --- a/core/css/guest.css +++ b/core/css/guest.css @@ -43,7 +43,7 @@ p.info a:hover { } em { font-style: normal; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=50)'; opacity: .5; } @@ -134,8 +134,8 @@ input { outline: none; border-radius: 3px; } -input[type="submit"], -input[type="button"], +input[type='submit'], +input[type='button'], button, .button, select { width: auto; @@ -147,8 +147,8 @@ select { border: 1px solid rgba(240,240,240,.9); cursor: pointer; } -input[type="text"], -input[type="password"], +input[type='text'], +input[type='password'], input[type='email'] { width: 249px; background: #fff; @@ -165,7 +165,7 @@ input.login { width: 269px; background-position: right 16px center; } -input[type="submit"], +input[type='submit'], input.updateButton, input.update-continue { padding: 10px 20px; /* larger log in and installation buttons */ @@ -177,65 +177,60 @@ button.primary { color: #fff; } -/* Checkboxes */ +/* Checkboxes - white only for login */ input[type='checkbox'].checkbox { - height:1px; - left:-10000px; - overflow:hidden; - position:absolute; - top:auto; - width:1px; + position: absolute; + left: -10000px; + top: auto; + width: 1px; + height: 1px; + overflow: hidden; } input[type='checkbox'].checkbox + label { - user-select:none; + user-select: none; } input[type='checkbox'].checkbox:disabled + label, input[type='checkbox'].checkbox:disabled + label:before { - cursor:default; + cursor: default; } input[type='checkbox'].checkbox + label:before { - background-position:center; - border:1px solid #888; - border-radius:1px; - content:''; - display:inline-block; - height:10px; - margin:3px; - margin-top:1px; - vertical-align:middle; - width:10px; + content: ''; + display: inline-block; + vertical-align: middle; + margin: 3px; + margin-top: 1px; + border: 1px solid #888; + border-radius: 1px; + height: 10px; + width: 10px; + background-position: center; +} +input[type='checkbox'].checkbox--white + label:before { + border-color: #ddd; } input[type='checkbox'].checkbox--white:not(:disabled):not(:checked) + label:hover:before, input[type='checkbox'].checkbox--white:focus + label:before { - border-color:#fff; + border-color: #fff; } -input[type='checkbox'].checkbox--white:checked + label:before, -input[type='checkbox'].checkbox--white.checkbox:indeterminate + label:before { - border-color:#fff; +input[type='checkbox'].checkbox--white:checked + label:before { background-color: #eee; + border-color: #eee; } input[type='checkbox'].checkbox--white:disabled + label:before { - background-color:#666; - border-color:#999; + background-color: #666 !important; + border-color: #999 !important; } input[type='checkbox'].checkbox--white:checked:disabled + label:before { - border-color:#666; + border-color: #666; + background-color: #222; } input[type='checkbox'].checkbox--white:checked + label:before { - background-image:url('../img/actions/checkbox-mark-white.svg'); -} -input[type='checkbox'].checkbox--white:indeterminate + label:before { - background-image:url('../img/actions/checkbox-mixed-white.svg'); -} -input[type='checkbox'].checkbox--white:indeterminate:disabled + label:after { - background-color:#aaa; - border-color:#888; -} -input[type='checkbox'].checkbox--white + label:before, -input[type='checkbox'].checkbox--white:checked:disabled + label:after { - border-color:#aaa; + background-color: transparent !important; + border-color: #fff !important; + background-image: url('../img/actions/checkbox-mark-white.svg'); } + /* keep the labels for screen readers but hide them since we use placeholders */ label.infield { display: none; @@ -273,7 +268,7 @@ label.infield { padding: 14px !important; } #show:checked + label, #dbpassword-toggle:checked + label, #personal-show:checked + label { - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=80)'; opacity: .8; } #show + label, #dbpassword-toggle + label, #personal-show + label { @@ -283,13 +278,13 @@ label.infield { background-image: url('../img/actions/toggle.svg?v=1'); background-repeat: no-repeat; background-position: center; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"; + -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=30)'; opacity: .3; } #show + label:before, #dbpassword-toggle + label:before, #personal-show + label:before { display: none; } -#pass2, input[name="personal-password-clone"] { +#pass2, input[name='personal-password-clone'] { padding: .6em 2.5em .4em .4em; width: 8em; } @@ -308,14 +303,14 @@ p.info, form fieldset legend, #datadirContent label, form fieldset .warning-info, -form input[type="checkbox"]+label { +form input[type='checkbox']+label { text-align: center; color: #fff; } /* overrides another !important statement that sets this to unreadable black */ -form .warning input[type="checkbox"]:hover+label, -form .warning input[type="checkbox"]:focus+label, -form .warning input[type="checkbox"]+label { +form .warning input[type='checkbox']:hover+label, +form .warning input[type='checkbox']:focus+label, +form .warning input[type='checkbox']+label { color: #fff !important; } @@ -439,7 +434,7 @@ form #selectDbType label.ui-state-active { border-radius: 3px; cursor: default; } -.warning, { +.warning { padding: 5px; background: #fdd; margin: 0 7px 5px 4px; @@ -449,7 +444,7 @@ form #selectDbType label.ui-state-active { .error a { color: #fff !important; font-weight: 600 !important; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)'; opacity: 1; } .error a.button { @@ -546,6 +541,9 @@ p.info { .icon-confirm-white { background-image: url('../img/actions/confirm-white.svg?v=2'); } +.icon-checkmark-white { + background-image: url('../img/actions/checkmark-white.svg?v=1'); +} /* Loading */ @@ -593,16 +591,16 @@ p.info { } /* Css replaced elements don't have ::after nor ::before */ img.icon-loading, object.icon-loading, video.icon-loading, button.icon-loading, textarea.icon-loading, input.icon-loading, select.icon-loading { - background-image: url("../img/loading.gif"); + background-image: url('../img/loading.gif'); } img.icon-loading-dark, object.icon-loading-dark, video.icon-loading-dark, button.icon-loading-dark, textarea.icon-loading-dark, input.icon-loading-dark, select.icon-loading-dark { - background-image: url("../img/loading-dark.gif"); + background-image: url('../img/loading-dark.gif'); } img.icon-loading-small, object.icon-loading-small, video.icon-loading-small, button.icon-loading-small, textarea.icon-loading-small, input.icon-loading-small, select.icon-loading-small { - background-image: url("../img/loading-small.gif"); + background-image: url('../img/loading-small.gif'); } img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-small-dark, button.icon-loading-small-dark, textarea.icon-loading-small-dark, input.icon-loading-small-dark, select.icon-loading-small-dark { - background-image: url("../img/loading-small-dark.gif"); + background-image: url('../img/loading-small-dark.gif'); } @-webkit-keyframes rotate { from { @@ -629,4 +627,4 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading- footer, .push { height: 70px; -}
\ No newline at end of file +} diff --git a/core/css/share.scss b/core/css/share.scss index 8852ad2748e..6d98dc74945 100644 --- a/core/css/share.scss +++ b/core/css/share.scss @@ -78,6 +78,11 @@ } } +.ui-autocomplete .autocomplete-note { + padding: 5px 10px; + color: rgba(0, 0, 0, .3); +} + #shareWithList { list-style-type: none; padding: 8px; diff --git a/core/css/styles.scss b/core/css/styles.scss index d958a01655b..aa97c91a55d 100644 --- a/core/css/styles.scss +++ b/core/css/styles.scss @@ -1297,6 +1297,7 @@ fieldset { /* hidden input type=file field */ .hiddenuploadfield { + display: none; width: 0; height: 0; opacity: 0; diff --git a/core/js/js.js b/core/js/js.js index 5ef5c72f625..5f5f540af63 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -1536,7 +1536,7 @@ function initCore() { $(window).resize(_.debounce(adjustControlsWidth, 250)); - $('body').delegate('#app-content', 'apprendered appresized', _.debounce(adjustControlsWidth, 100)); + $('body').delegate('#app-content', 'apprendered appresized', _.debounce(adjustControlsWidth, 150)); } diff --git a/core/js/sharedialogview.js b/core/js/sharedialogview.js index 60cd97fb572..a63960da2b8 100644 --- a/core/js/sharedialogview.js +++ b/core/js/sharedialogview.js @@ -130,18 +130,46 @@ }, autocompleteHandler: function (search, response) { - var view = this; - var $loading = this.$el.find('.shareWithLoading'); + var $shareWithField = $('.shareWithField'), + view = this, + $loading = this.$el.find('.shareWithLoading'), + $remoteShareInfo = this.$el.find('.shareWithRemoteInfo'); + + var count = oc_config['sharing.minSearchStringLength']; + if (search.term.trim().length < count) { + var title = n('core', + 'At least {count} character is needed for autocompletion', + 'At least {count} characters are needed for autocompletion', + count, + { count: count } + ); + $shareWithField.addClass('error') + .attr('data-original-title', title) + .tooltip('hide') + .tooltip({ + placement: 'bottom', + trigger: 'manual' + }) + .tooltip('fixTitle') + .tooltip('show'); + response(); + return; + } + $loading.removeClass('hidden'); $loading.addClass('inlineblock'); - var $remoteShareInfo = this.$el.find('.shareWithRemoteInfo'); $remoteShareInfo.addClass('hidden'); + + $shareWithField.removeClass('error') + .tooltip('hide'); + + var perPage = 200; $.get( OC.linkToOCS('apps/files_sharing/api/v1') + 'sharees', { format: 'json', search: search.term.trim(), - perPage: 200, + perPage: perPage, itemType: view.model.get('itemType') }, function (result) { @@ -232,16 +260,27 @@ var suggestions = users.concat(groups).concat(remotes).concat(emails).concat(lookup); if (suggestions.length > 0) { - $('.shareWithField').removeClass('error') - .tooltip('hide') + $shareWithField .autocomplete("option", "autoFocus", true); + response(suggestions); + + // show a notice that the list is truncated + // this is the case if one of the search results is at least as long as the max result config option + if(oc_config['sharing.maxAutocompleteResults'] > 0 && + Math.min(perPage, oc_config['sharing.maxAutocompleteResults']) + <= Math.max(users.length, groups.length, remotes.length, emails.length, lookup.length)) { + + var message = t('core', 'This list is maybe truncated - please refine your search term to see more results.'); + $('.ui-autocomplete').append('<li class="autocomplete-note">' + message + '</li>'); + } + } else { - var title = t('core', 'No users or groups found for {search}', {search: $('.shareWithField').val()}); + var title = t('core', 'No users or groups found for {search}', {search: $shareWithField.val()}); if (!view.configModel.get('allowGroupSharing')) { title = t('core', 'No users found for {search}', {search: $('.shareWithField').val()}); } - $('.shareWithField').addClass('error') + $shareWithField.addClass('error') .attr('data-original-title', title) .tooltip('hide') .tooltip({ diff --git a/core/l10n/da.js b/core/l10n/da.js index f072a3c8ea3..4ff2fb33a7d 100644 --- a/core/l10n/da.js +++ b/core/l10n/da.js @@ -3,6 +3,8 @@ OC.L10N.register( { "Please select a file." : "Vælg fil", "File is too big" : "Filen er for stor", + "The selected file is not an image." : "Den valgte fil er ikke et billede.", + "The selected file cannot be read." : "Den valgte fil kan ikke læses.", "Invalid file provided" : "Der er angivet en ugyldig fil", "No image or file provided" : "Ingen fil eller billede givet", "Unknown filetype" : "Ukendt filtype", @@ -19,6 +21,7 @@ OC.L10N.register( "%s password reset" : "%s adgangskode nulstillet", "Couldn't send reset email. Please contact your administrator." : "Der opstod et problem under afsending af e-mailen til nulstilling. Kontakt venligst systemadministratoren.", "Preparing update" : "Forbereder opdatering", + "[%d / %d]: %s" : "[%d / %d]: %s", "Repair warning: " : "Reparationsadvarsel:", "Repair error: " : "Reparationsfejl:", "Please use the command line updater because automatic updating is disabled in the config.php." : "Brug kommandolinje-updateren, da automatisk opdatering er slået fra i config.php", @@ -46,8 +49,9 @@ OC.L10N.register( "Saving..." : "Gemmer...", "Dismiss" : "Afvis", "Password" : "Adgangskode", - "Cancel" : "Annuller", + "Cancel" : "Annullér", "seconds ago" : "sekunder siden", + "Logging in …" : "Logger ind ...", "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Linket til at nulstille dit kodeord er blevet sendt til din e-post: hvis du ikke modtager den inden for en rimelig tid, så tjek dine spam/junk-mapper.<br> Hvis det ikke er der, så spørg din lokale administrator.", "I know what I'm doing" : "Jeg ved, hvad jeg har gang i", "Password can not be changed. Please contact your administrator." : "Adgangskoden kunne ikke ændres. Kontakt venligst din administrator.", @@ -95,6 +99,9 @@ OC.L10N.register( "Expiration" : "Udløb", "Expiration date" : "Udløbsdato", "Choose a password for the public link" : "Vælg et kodeord til det offentlige link", + "Copy" : "Kopiér", + "Press ⌘-C to copy." : "Tryk ⌘-C for at kopiere.", + "Press Ctrl-C to copy." : "Tryk Ctrl-C for at kopiere.", "Resharing is not allowed" : "Videredeling ikke tilladt", "Share link" : "Del link", "Link" : "Link", @@ -106,6 +113,7 @@ OC.L10N.register( "Shared with you by {owner}" : "Delt med dig af {owner}", "group" : "gruppe", "remote" : "ekstern", + "email" : "e-mail", "Unshare" : "Fjern deling", "can edit" : "kan redigere", "access control" : "Adgangskontrol", @@ -119,6 +127,7 @@ OC.L10N.register( "Non-existing tag #{tag}" : "Ikke-eksisterende mærke #{tag}", "restricted" : "begrænset", "invisible" : "usynlig", + "({scope})" : "({scope})", "Delete" : "Slet", "Rename" : "Omdøb", "The object type is not specified." : "Objekttypen er ikke angivet.", @@ -138,6 +147,7 @@ OC.L10N.register( "Please reload the page." : "Genindlæs venligst siden", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Opdateringen blev ikke udført korrekt. For mere information <a href=\"{url}\">tjek vores indlæg på forumet</a>, som dækker dette problem.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Opdateringen blev ikke udført korrekt. Rapporter venligst problemet til <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud fællesskabet</a>.", + "Continue to Nextcloud" : "Forsæt til Nextcloud", "The update was successful. Redirecting you to Nextcloud now." : "Opdateringen blev udført korrekt. Du bliver nu viderestillet til Nextcloud.", "Searching other places" : "Søger på andre steder", "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} søgeresultat fundet i andre mapper","{count} søgeresultater fundet i andre mapper"], @@ -193,6 +203,7 @@ OC.L10N.register( "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denne applikation kræver JavaScript for at fungere korrekt. {linkstart}Slå venligst JavaScript til{linkend} og genindlæs siden. ", "Search" : "Søg", "Log out" : "Log ud", + "Confirm your password" : "Bekræft dit password", "Server side authentication failed!" : "Server side godkendelse mislykkedes!", "Please contact your administrator." : "Kontakt venligst din administrator", "An internal error occurred." : "Der opstod en intern fejl.", @@ -223,6 +234,7 @@ OC.L10N.register( "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Sørg venligst for at sikre, at databasen, config-mappen og data-mappen er blevet sikkerhedskopieret inden vi fortsætter.", "Start update" : "Begynd opdatering", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "For at undgå tidsudløb ved større installationer, så kan du i stedet køre følgende kommando fra din installationsmappe:", + "Update needed" : "Opdatering nødvendig", "This %s instance is currently in maintenance mode, which may take a while." : "Denne %s-instans befinder sig i vedligeholdelsestilstand for øjeblikket, hvilket kan tage et stykke tid.", "This page will refresh itself when the %s instance is available again." : "Denne side vil genopfriske sig selv, når %s-instancen er tilgængelig igen.", "Error loading tags" : "Fejl ved indlæsning af mærker", diff --git a/core/l10n/da.json b/core/l10n/da.json index 83dcf681709..faf0e763e3c 100644 --- a/core/l10n/da.json +++ b/core/l10n/da.json @@ -1,6 +1,8 @@ { "translations": { "Please select a file." : "Vælg fil", "File is too big" : "Filen er for stor", + "The selected file is not an image." : "Den valgte fil er ikke et billede.", + "The selected file cannot be read." : "Den valgte fil kan ikke læses.", "Invalid file provided" : "Der er angivet en ugyldig fil", "No image or file provided" : "Ingen fil eller billede givet", "Unknown filetype" : "Ukendt filtype", @@ -17,6 +19,7 @@ "%s password reset" : "%s adgangskode nulstillet", "Couldn't send reset email. Please contact your administrator." : "Der opstod et problem under afsending af e-mailen til nulstilling. Kontakt venligst systemadministratoren.", "Preparing update" : "Forbereder opdatering", + "[%d / %d]: %s" : "[%d / %d]: %s", "Repair warning: " : "Reparationsadvarsel:", "Repair error: " : "Reparationsfejl:", "Please use the command line updater because automatic updating is disabled in the config.php." : "Brug kommandolinje-updateren, da automatisk opdatering er slået fra i config.php", @@ -44,8 +47,9 @@ "Saving..." : "Gemmer...", "Dismiss" : "Afvis", "Password" : "Adgangskode", - "Cancel" : "Annuller", + "Cancel" : "Annullér", "seconds ago" : "sekunder siden", + "Logging in …" : "Logger ind ...", "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Linket til at nulstille dit kodeord er blevet sendt til din e-post: hvis du ikke modtager den inden for en rimelig tid, så tjek dine spam/junk-mapper.<br> Hvis det ikke er der, så spørg din lokale administrator.", "I know what I'm doing" : "Jeg ved, hvad jeg har gang i", "Password can not be changed. Please contact your administrator." : "Adgangskoden kunne ikke ændres. Kontakt venligst din administrator.", @@ -93,6 +97,9 @@ "Expiration" : "Udløb", "Expiration date" : "Udløbsdato", "Choose a password for the public link" : "Vælg et kodeord til det offentlige link", + "Copy" : "Kopiér", + "Press ⌘-C to copy." : "Tryk ⌘-C for at kopiere.", + "Press Ctrl-C to copy." : "Tryk Ctrl-C for at kopiere.", "Resharing is not allowed" : "Videredeling ikke tilladt", "Share link" : "Del link", "Link" : "Link", @@ -104,6 +111,7 @@ "Shared with you by {owner}" : "Delt med dig af {owner}", "group" : "gruppe", "remote" : "ekstern", + "email" : "e-mail", "Unshare" : "Fjern deling", "can edit" : "kan redigere", "access control" : "Adgangskontrol", @@ -117,6 +125,7 @@ "Non-existing tag #{tag}" : "Ikke-eksisterende mærke #{tag}", "restricted" : "begrænset", "invisible" : "usynlig", + "({scope})" : "({scope})", "Delete" : "Slet", "Rename" : "Omdøb", "The object type is not specified." : "Objekttypen er ikke angivet.", @@ -136,6 +145,7 @@ "Please reload the page." : "Genindlæs venligst siden", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Opdateringen blev ikke udført korrekt. For mere information <a href=\"{url}\">tjek vores indlæg på forumet</a>, som dækker dette problem.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Opdateringen blev ikke udført korrekt. Rapporter venligst problemet til <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud fællesskabet</a>.", + "Continue to Nextcloud" : "Forsæt til Nextcloud", "The update was successful. Redirecting you to Nextcloud now." : "Opdateringen blev udført korrekt. Du bliver nu viderestillet til Nextcloud.", "Searching other places" : "Søger på andre steder", "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} søgeresultat fundet i andre mapper","{count} søgeresultater fundet i andre mapper"], @@ -191,6 +201,7 @@ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denne applikation kræver JavaScript for at fungere korrekt. {linkstart}Slå venligst JavaScript til{linkend} og genindlæs siden. ", "Search" : "Søg", "Log out" : "Log ud", + "Confirm your password" : "Bekræft dit password", "Server side authentication failed!" : "Server side godkendelse mislykkedes!", "Please contact your administrator." : "Kontakt venligst din administrator", "An internal error occurred." : "Der opstod en intern fejl.", @@ -221,6 +232,7 @@ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Sørg venligst for at sikre, at databasen, config-mappen og data-mappen er blevet sikkerhedskopieret inden vi fortsætter.", "Start update" : "Begynd opdatering", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "For at undgå tidsudløb ved større installationer, så kan du i stedet køre følgende kommando fra din installationsmappe:", + "Update needed" : "Opdatering nødvendig", "This %s instance is currently in maintenance mode, which may take a while." : "Denne %s-instans befinder sig i vedligeholdelsestilstand for øjeblikket, hvilket kan tage et stykke tid.", "This page will refresh itself when the %s instance is available again." : "Denne side vil genopfriske sig selv, når %s-instancen er tilgængelig igen.", "Error loading tags" : "Fejl ved indlæsning af mærker", diff --git a/core/l10n/de.js b/core/l10n/de.js index 15403713f57..fa96af73970 100644 --- a/core/l10n/de.js +++ b/core/l10n/de.js @@ -59,7 +59,7 @@ OC.L10N.register( "Failed to authenticate, try again" : "Legitimierung fehlgeschlagen, noch einmal versuchen", "seconds ago" : "Gerade eben", "Logging in …" : "Melde an ...", - "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Der Link zum Rücksetzen deines Passwortes ist an deine E-Mail-Adresse versandt worden. Solltest du in Kürze keine entsprechende E-Mail erhalten, überprüfe bitte deinen Spam-Ordner.<br>Ansonsten kannst du dich bei deinem lokalen Administrator melden.", + "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Der Link zum Zurücksetzen deines Passworts wurde an deine E-Mail-Adresse versandt. Solltest du diesen nicht in Kürze erhalten, prüfe bitte deinen Spam-Ordner.<br>Wenn du keine E-Mail bekommen hast, wende dich bitte an deinen lokalen Administrator.", "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Deine Dateien sind verschlüsselt. Es gibt keinen Weg Deine Dateien nach dem Rücksetzen des Passwortes wiederherzustellen.<br />Falls Du Dir nicht sicher bist, kontaktiere Deinen Administrator.<br />Möchtest Du wirklich fortfahren?", "I know what I'm doing" : "Ich weiß, was ich mache", "Password can not be changed. Please contact your administrator." : "Passwort kann nicht geändert werden. Bitte kontaktiere deinen Administrator.", @@ -141,6 +141,8 @@ OC.L10N.register( "access control" : "Zugriffskontrolle", "Could not unshare" : "Freigabe konnte nicht entfernt werden", "Share details could not be loaded for this item." : "Details der geteilten Freigabe zu diesem Eintrag konnten nicht geladen werden.", + "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Mindestens {count} Zeichen wird für die Autovervollständigung benötigt","Mindestens {count} Zeichen werden für die Autovervollständigung benötigt"], + "This list is maybe truncated - please refine your search term to see more results." : "Die Liste ist unter Umständen gekürzt - Bitte verfeinern Sie Ihre Suche um mehr Ergebnisse zu erhalten.", "No users or groups found for {search}" : "Keine Benutzer oder Gruppen gefunden für {search}", "No users found for {search}" : "Kein Benutzer gefunden für {search}", "An error occurred. Please try again" : "Es ist ein Fehler aufgetreten. Bitte versuche es noch einmal", diff --git a/core/l10n/de.json b/core/l10n/de.json index 03ddb70ddd1..ed19b18e391 100644 --- a/core/l10n/de.json +++ b/core/l10n/de.json @@ -57,7 +57,7 @@ "Failed to authenticate, try again" : "Legitimierung fehlgeschlagen, noch einmal versuchen", "seconds ago" : "Gerade eben", "Logging in …" : "Melde an ...", - "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Der Link zum Rücksetzen deines Passwortes ist an deine E-Mail-Adresse versandt worden. Solltest du in Kürze keine entsprechende E-Mail erhalten, überprüfe bitte deinen Spam-Ordner.<br>Ansonsten kannst du dich bei deinem lokalen Administrator melden.", + "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Der Link zum Zurücksetzen deines Passworts wurde an deine E-Mail-Adresse versandt. Solltest du diesen nicht in Kürze erhalten, prüfe bitte deinen Spam-Ordner.<br>Wenn du keine E-Mail bekommen hast, wende dich bitte an deinen lokalen Administrator.", "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Deine Dateien sind verschlüsselt. Es gibt keinen Weg Deine Dateien nach dem Rücksetzen des Passwortes wiederherzustellen.<br />Falls Du Dir nicht sicher bist, kontaktiere Deinen Administrator.<br />Möchtest Du wirklich fortfahren?", "I know what I'm doing" : "Ich weiß, was ich mache", "Password can not be changed. Please contact your administrator." : "Passwort kann nicht geändert werden. Bitte kontaktiere deinen Administrator.", @@ -139,6 +139,8 @@ "access control" : "Zugriffskontrolle", "Could not unshare" : "Freigabe konnte nicht entfernt werden", "Share details could not be loaded for this item." : "Details der geteilten Freigabe zu diesem Eintrag konnten nicht geladen werden.", + "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Mindestens {count} Zeichen wird für die Autovervollständigung benötigt","Mindestens {count} Zeichen werden für die Autovervollständigung benötigt"], + "This list is maybe truncated - please refine your search term to see more results." : "Die Liste ist unter Umständen gekürzt - Bitte verfeinern Sie Ihre Suche um mehr Ergebnisse zu erhalten.", "No users or groups found for {search}" : "Keine Benutzer oder Gruppen gefunden für {search}", "No users found for {search}" : "Kein Benutzer gefunden für {search}", "An error occurred. Please try again" : "Es ist ein Fehler aufgetreten. Bitte versuche es noch einmal", diff --git a/core/l10n/de_DE.js b/core/l10n/de_DE.js index 27677acd495..6c80899bc04 100644 --- a/core/l10n/de_DE.js +++ b/core/l10n/de_DE.js @@ -59,7 +59,7 @@ OC.L10N.register( "Failed to authenticate, try again" : "Legitimierung fehlgeschlagen, noch einmal versuchen", "seconds ago" : "Gerade eben", "Logging in …" : "Melde an ...", - "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Der Link zum Rücksetzen Ihres Passworts ist an Ihre E-Mail-Adresse versandt worden. Sollten Sie ihn nicht in Kürze erhalten, prüfen Sie bitte Ihren Spam-Ordner.<br>Wenn die E-Mail sich nicht darin befindet, wenden Sie sich bette an Ihrem lokalen Administrator.", + "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Der Link zum Zurücksetzen Ihres Passworts wurde an Ihre E-Mail-Adresse versandt. Sollten Sie diesen nicht in Kürze erhalten, prüfen Sie bitte Ihren Spam-Ordner.<br>Wenn sie keine E-Mail bekommen haben, wenden Sie sich bitte an Ihren lokalen Administrator.", "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ihre Dateien sind verschlüsselt. Es gibt keinen Weg Ihre Dateien nach dem Rücksetzen des Passwortes wiederherzustellen.<br />Falls Sie sich nicht sicher sind, kontaktieren Sie Ihren Administrator.<br />Möchten Sie wirklich fortfahren?", "I know what I'm doing" : "Ich weiß, was ich mache", "Password can not be changed. Please contact your administrator." : "Passwort kann nicht geändert werden. Bitte kontaktieren Sie Ihren Administrator.", @@ -135,12 +135,14 @@ OC.L10N.register( "Unshare" : "Freigabe aufheben", "can reshare" : "kann weiterteilen", "can edit" : "kann bearbeiten", - "can create" : "Kann erstellen", - "can change" : "Kann ändern", - "can delete" : "Kann löschen", + "can create" : "kann erstellen", + "can change" : "kann ändern", + "can delete" : "kann löschen", "access control" : "Zugriffskontrolle", "Could not unshare" : "Freigabe konnte nicht aufgehoben werden", "Share details could not be loaded for this item." : "Die Freigabedetails konnten für dieses Element nicht geladen werden.", + "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Mindestens {count} Zeichen wird für die Autovervollständigung benötigt","Mindestens {count} Zeichen werden für die Autovervollständigung benötigt"], + "This list is maybe truncated - please refine your search term to see more results." : "Die Liste ist unter Umständen gekürzt - Bitte verfeinern Sie Ihre Suche um mehr Ergebnisse zu erhalten.", "No users or groups found for {search}" : "Keine Benutzer oder Gruppen für {search} gefunden", "No users found for {search}" : "Keine Benutzer für {search} gefunden", "An error occurred. Please try again" : "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es noch einmal", diff --git a/core/l10n/de_DE.json b/core/l10n/de_DE.json index 6a9137e7386..ee137912b85 100644 --- a/core/l10n/de_DE.json +++ b/core/l10n/de_DE.json @@ -57,7 +57,7 @@ "Failed to authenticate, try again" : "Legitimierung fehlgeschlagen, noch einmal versuchen", "seconds ago" : "Gerade eben", "Logging in …" : "Melde an ...", - "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Der Link zum Rücksetzen Ihres Passworts ist an Ihre E-Mail-Adresse versandt worden. Sollten Sie ihn nicht in Kürze erhalten, prüfen Sie bitte Ihren Spam-Ordner.<br>Wenn die E-Mail sich nicht darin befindet, wenden Sie sich bette an Ihrem lokalen Administrator.", + "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Der Link zum Zurücksetzen Ihres Passworts wurde an Ihre E-Mail-Adresse versandt. Sollten Sie diesen nicht in Kürze erhalten, prüfen Sie bitte Ihren Spam-Ordner.<br>Wenn sie keine E-Mail bekommen haben, wenden Sie sich bitte an Ihren lokalen Administrator.", "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ihre Dateien sind verschlüsselt. Es gibt keinen Weg Ihre Dateien nach dem Rücksetzen des Passwortes wiederherzustellen.<br />Falls Sie sich nicht sicher sind, kontaktieren Sie Ihren Administrator.<br />Möchten Sie wirklich fortfahren?", "I know what I'm doing" : "Ich weiß, was ich mache", "Password can not be changed. Please contact your administrator." : "Passwort kann nicht geändert werden. Bitte kontaktieren Sie Ihren Administrator.", @@ -133,12 +133,14 @@ "Unshare" : "Freigabe aufheben", "can reshare" : "kann weiterteilen", "can edit" : "kann bearbeiten", - "can create" : "Kann erstellen", - "can change" : "Kann ändern", - "can delete" : "Kann löschen", + "can create" : "kann erstellen", + "can change" : "kann ändern", + "can delete" : "kann löschen", "access control" : "Zugriffskontrolle", "Could not unshare" : "Freigabe konnte nicht aufgehoben werden", "Share details could not be loaded for this item." : "Die Freigabedetails konnten für dieses Element nicht geladen werden.", + "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Mindestens {count} Zeichen wird für die Autovervollständigung benötigt","Mindestens {count} Zeichen werden für die Autovervollständigung benötigt"], + "This list is maybe truncated - please refine your search term to see more results." : "Die Liste ist unter Umständen gekürzt - Bitte verfeinern Sie Ihre Suche um mehr Ergebnisse zu erhalten.", "No users or groups found for {search}" : "Keine Benutzer oder Gruppen für {search} gefunden", "No users found for {search}" : "Keine Benutzer für {search} gefunden", "An error occurred. Please try again" : "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es noch einmal", diff --git a/core/l10n/es.js b/core/l10n/es.js index 8e37cf427f7..8115aee0bc9 100644 --- a/core/l10n/es.js +++ b/core/l10n/es.js @@ -141,6 +141,8 @@ OC.L10N.register( "access control" : "control de acceso", "Could not unshare" : "No se puede quitar el comparto", "Share details could not be loaded for this item." : "No se han podido cargar los detalles de compartición para este elemento.", + "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Se necesita al menos {count} carácter para el autocompletado","Se necesitan al menos {count} caracteres para el autocompletado"], + "This list is maybe truncated - please refine your search term to see more results." : "Esta lista puede estar acortada. Por favor, refina los términos de búsqueda para ver más resultados.", "No users or groups found for {search}" : "No se han encontrado usuarios ni grupos para {search}", "No users found for {search}" : "No se han encontrado usuarios para {search}", "An error occurred. Please try again" : "Ha ocurrido un error. Por favor inténtelo de nuevo", diff --git a/core/l10n/es.json b/core/l10n/es.json index 187c559f9e1..fe0cf652141 100644 --- a/core/l10n/es.json +++ b/core/l10n/es.json @@ -139,6 +139,8 @@ "access control" : "control de acceso", "Could not unshare" : "No se puede quitar el comparto", "Share details could not be loaded for this item." : "No se han podido cargar los detalles de compartición para este elemento.", + "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Se necesita al menos {count} carácter para el autocompletado","Se necesitan al menos {count} caracteres para el autocompletado"], + "This list is maybe truncated - please refine your search term to see more results." : "Esta lista puede estar acortada. Por favor, refina los términos de búsqueda para ver más resultados.", "No users or groups found for {search}" : "No se han encontrado usuarios ni grupos para {search}", "No users found for {search}" : "No se han encontrado usuarios para {search}", "An error occurred. Please try again" : "Ha ocurrido un error. Por favor inténtelo de nuevo", diff --git a/core/l10n/eu.js b/core/l10n/eu.js new file mode 100644 index 00000000000..2328492361f --- /dev/null +++ b/core/l10n/eu.js @@ -0,0 +1,373 @@ +OC.L10N.register( + "core", + { + "Please select a file." : "Fitxategi bat aukeratu mesedez", + "File is too big" : "Fitxategia handiegia da", + "The selected file is not an image." : "Aukeratutako fitxategia ez da irudi bat.", + "The selected file cannot be read." : "Aukeratutako fitxategia ezin da aukeratu", + "Invalid file provided" : "Invalid file provided", + "No image or file provided" : "Ez da irudi edo fitxategirik zehaztu", + "Unknown filetype" : "Fitxategi mota ezezaguna", + "Invalid image" : "Baliogabeko irudia", + "An error occurred. Please contact your admin." : "Errore bat izan da, administraria kontaktatu.app", + "No temporary profile picture available, try again" : "Ez dago behin-behineko profil irudirik, saiatu berriro", + "No crop data provided" : "Ez da ebaketaren daturik eskaini", + "No valid crop data provided" : "Ebakidura baliogabea da", + "Crop is not square" : "Ebakidura ez da karratua", + "Couldn't reset password because the token is invalid" : "Ezin izan da pasahitza berrezarri tokena baliogabea delako", + "Couldn't reset password because the token is expired" : "Ezin da berrezarri pasahitza token-a iraungi duelako.", + "Couldn't send reset email. Please make sure your username is correct." : "Ezin izan da berrezartzeko eposta bidali. Ziurtatu zure erabiltzaile izena egokia dela.", + "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Ezin izan da berreskuratze posta elektronikoa bidali helbiderik ez dagoelako erabiltzaile honetarako. Jarri harremanetan administratzailearekin.", + "%s password reset" : "%s pasahitza berrezarri", + "Couldn't send reset email. Please contact your administrator." : "Ezin da berrezartzeko eposta bidali. Mesedez jarri harremetan zure administradorearekin.", + "Preparing update" : "Eguneratzea prestatzen", + "[%d / %d]: %s" : "[%d / %d]: %s", + "Repair warning: " : "Konponketa abisua:", + "Repair error: " : "Akatsa konpondu:", + "Please use the command line updater because automatic updating is disabled in the config.php." : "Mesedez, erabili komando-lerroa eguneratzeko, eguneratze automatikoa config.php-n desgaituta dago eta.", + "[%d / %d]: Checking table %s" : "[%d / %d]: Taula egiaztatzen %s", + "Turned on maintenance mode" : "Mantenu modua gaitu da", + "Turned off maintenance mode" : "Mantenu modua desgaitu da", + "Maintenance mode is kept active" : "Mantentze modua aktibatuta dago oraindik.", + "Updating database schema" : "Datu-basearen eskema eguneratzen", + "Updated database" : "Datu-basea eguneratuta", + "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Datu-basearen eskema eguneratu daitekeen egiaztatzen (honek luzerako hartu dezake datu-basearen arabera)", + "Checked database schema update" : "Egiaztatuta datu-basearen zerbitzariaren eguneraketa", + "Checking updates of apps" : "Aplikazioentzako eguneraketak egiaztatzen", + "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "%s datu-basearen eskema eguneratu daitekeen egiaztatzen (honek luzerako hartu dezake datu-basearen arabera)", + "Checked database schema update for apps" : "Egiaztatuta aplikazioen datu-basearen zerbitzariaren eguneraketa", + "Updated \"%s\" to %s" : "\"%s\" %s-ra eguneratua", + "Set log level to debug" : "Set log level to debug", + "Reset log level" : "Reset log level", + "Starting code integrity check" : "Kodearen integritate egiaztapena hasten", + "Finished code integrity check" : "Kodearen integritate egiaztapena bukatuta", + "%s (3rdparty)" : "%s (3rdparty)", + "%s (incompatible)" : "%s (incompatible)", + "Following apps have been disabled: %s" : "Hurrengo aplikazioak desgaitu egin dira: %s", + "Already up to date" : "Dagoeneko eguneratuta", + "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Kodearen integritate egiaztapenarekin arazoak egon dira. Informazio gehiago…</a>", + "Settings" : "Ezarpenak", + "Connection to server lost" : "Zerbitzariarekiko konexioa eten da", + "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Arazoa orria kargatzerakoan, birkargatzen segundu batean","Arazoa orria kargatzerakoan, birkargatzen %n segundutan"], + "Saving..." : "Gordetzen...", + "Dismiss" : "Ezikusi", + "This action requires you to confirm your password" : "Ekintza hau zure pasahitza konfirmatzeko eskatuko dizu", + "Authentication required" : "Autentifikazioa beharrezkoa", + "Password" : "Pasahitza", + "Cancel" : "Ezeztatu", + "Confirm" : "Baieztatu", + "Failed to authenticate, try again" : "Huts egindu autentifikazioa, berriz saiatu", + "seconds ago" : "duela segundo batzuk", + "Logging in …" : "Saioa hasten ...", + "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Zure pasahitza berrezartzeko lotura zure postara bidalia izan da.<br>Ez baduzu arrazoizko denbora epe batean jasotzen begiratu zure zabor-posta karpetan.<br>Hor ere ez badago kudeatzailearekin harremanetan jarri.", + "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Zure fitxategiak zifratzen dira. Pasahitza aldatuz gero, ez dago zure datuak berreskuratzeko modurik.<br />Ziur ez bazaude, jarri harremanetan administratzailearekin jarraitu baino lehen. <br />Ziur zaude jarraitu nahi duzula?", + "I know what I'm doing" : "Badakit zer ari naizen egiten", + "Password can not be changed. Please contact your administrator." : "Ezin da pasahitza aldatu. Mesedez jarri harremetan zure administradorearekin.", + "No" : "Ez", + "Yes" : "Bai", + "No files in here" : "Ez dago fitxategirik hemen", + "Choose" : "Aukeratu", + "Error loading file picker template: {error}" : "Errorea fitxategi hautatzaile txantiloiak kargatzerakoan: {error}", + "Ok" : "Ados", + "Error loading message template: {error}" : "Errorea mezu txantiloia kargatzean: {error}", + "read-only" : "irakurtzeko-soilik", + "_{count} file conflict_::_{count} file conflicts_" : ["fitxategi {count}ek konfliktua sortu du","{count} fitxategik konfliktua sortu dute"], + "One file conflict" : "Fitxategi batek konfliktua sortu du", + "New Files" : "Fitxategi Berriak", + "Already existing files" : "Dagoeneko existitzen diren fitxategiak", + "Which files do you want to keep?" : "Ze fitxategi mantendu nahi duzu?", + "If you select both versions, the copied file will have a number added to its name." : "Bi bertsioak hautatzen badituzu, kopiatutako fitxategiaren izenean zenbaki bat atxikituko zaio.", + "Continue" : "Jarraitu", + "(all selected)" : "(denak hautatuta)", + "({count} selected)" : "({count} hautatuta)", + "Error loading file exists template" : "Errorea fitxategia existitzen da txantiloiak kargatzerakoan", + "Pending" : "Zain", + "Very weak password" : "Pasahitz oso ahula", + "Weak password" : "Pasahitz ahula", + "So-so password" : "Halamoduzko pasahitza", + "Good password" : "Pasahitz ona", + "Strong password" : "Pasahitz sendoa", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Zure web zerbitzaria ez dago oraindik konfiguratuta fitxategia sinkronizazioa ahalbidetzeko WebDAV interfazea badirudi hautsita dagoela.", + "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Zure web zerbitzaria ez dago behar bezala konfiguratuta \"{url}\" irekitzeko. Informazio gehiago gure <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentazioan </a> aurki daiteke.", + "This server has no working Internet connection: Multiple endpoints could not be reached. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "This server has no working Internet connection: Multiple endpoints could not be reached. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.", + "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it.", + "The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.", + "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki about both modules</a>.", + "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)", + "Error occurred while checking server setup" : "Akatsa gertatu da zerbitzariaren konfigurazioa egiaztatzean", + "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." : "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.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting.", + "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>.", + "Shared" : "Elkarbanatuta", + "Shared with {recipients}" : "{recipients}-rekin partekatua.", + "Error" : "Errorea", + "Error while sharing" : "Errore bat egon da elkarbanatzean", + "Error while unsharing" : "Errore bat egon da elkarbanaketa desegitean", + "Error setting expiration date" : "Errore bat egon da muga data ezartzean", + "The public link will expire no later than {days} days after it is created" : "Esteka publikoak iraungi egingo du, askoz jota, sortu eta {days} egunetara.", + "Set expiration date" : "Ezarri muga data", + "Expiration" : "Iraungitzea", + "Expiration date" : "Muga data", + "Choose a password for the public link" : "Aukeratu pasahitz bat esteka publikorako", + "Copied!" : "Kopiatuta!", + "Copy" : "Kopiatu", + "Not supported!" : "Ez da onartzen!", + "Press ⌘-C to copy." : "Sakatu ⌘-C kopiatzeko.", + "Press Ctrl-C to copy." : "Sakatu Ctrl-C kpiatzeko.", + "Resharing is not allowed" : "Berriz elkarbanatzea ez dago baimendua", + "Share link" : "Elkarbanatu lotura", + "Link" : "Esteka", + "Password protect" : "Babestu pasahitzarekin", + "Allow upload and editing" : "Onartu igoera eta edizioa", + "Allow editing" : "Baimendu editatzea", + "File drop (upload only)" : "Fitxategiak utzi (igo bakarrik)", + "Email link to person" : "Postaz bidali lotura ", + "Send" : "Bidali", + "Shared with you and the group {group} by {owner}" : "{owner}-k zu eta {group} taldearekin elkarbanatuta", + "Shared with you by {owner}" : "{owner}-k zurekin elkarbanatuta", + "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} link bidez partekatuta", + "group" : "taldea", + "remote" : "urrunekoa", + "email" : "posta-elektronikoa", + "Unshare" : "Ez elkarbanatu", + "can reshare" : "elkarbanatu dezake", + "can edit" : "editatu dezake", + "can create" : "sortu dezake", + "can change" : "aldatu dezake", + "can delete" : "ezabatu dezake", + "access control" : "sarrera kontrola", + "Could not unshare" : "Ezin izan despartekatu", + "Share details could not be loaded for this item." : "Partekatze xehetasunak ezin izan dira elementu honentzat kargatu.", + "No users or groups found for {search}" : "Ez dira {search} -rentzat erabiltzaile edo talderik aurkitu", + "No users found for {search}" : "Ez dira {search} -rentzat erabiltzailerik aurkitu", + "An error occurred. Please try again" : "Errore bat gertatu da. Saiatu berriro.", + "{sharee} (group)" : "{sharee} (group)", + "{sharee} (remote)" : "{sharee} (remote)", + "{sharee} (email)" : "{sharee} (email)", + "Share" : "Elkarbanatu", + "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Partekatu beste zerbitzarietan dagoen jendearekin, beraien Federated Cloud ID erabiliz username@example.com/nextcloud", + "Share with users or by mail..." : "Erabiltzaileekin edo postaz elkarbanatu...", + "Share with users or remote users..." : "Erabiltzaile edo urruneko erabiltzaile batzuekin elkarbanatu...", + "Share with users, remote users or by mail..." : "Erabiltzaile, urruneko erabiltzaile edo postaz elkarbanatu...", + "Share with users or groups..." : "Erabiltzaile edo talde batekin elkarbanatu...", + "Share with users, groups or by mail..." : "Erabiltzaile, talde edo posta elektroniko bidez elkarbanatu...", + "Share with users, groups or remote users..." : "erabiltzaile, talde edo urruneko erabiltzaile batzuekin Elkarbanatu ...", + "Share with users, groups, remote users or by mail..." : "Erabiltzaile, talde, urruneko erabiltzaile edo postaz elkarbanatu...", + "Share with users..." : "Erabiltzaileekin elkarbanatu...", + "Error removing share" : " Akatsa kuota kentzerakoan", + "Non-existing tag #{tag}" : "#{tag} ez da existitzen", + "restricted" : "mugatua", + "invisible" : "ikusiezina", + "({scope})" : "({scope})", + "Delete" : "Ezabatu", + "Rename" : "Berrizendatu", + "Collaborative tags" : "Elkarlaneko etiketak", + "No tags found" : "Ez da etiketarik aurkitu", + "The object type is not specified." : "Objetu mota ez dago zehaztuta.", + "Enter new" : "Sartu berria", + "Add" : "Gehitu", + "Edit tags" : "Editatu etiketak", + "Error loading dialog template: {error}" : "Errorea elkarrizketa txantiloia kargatzean: {errorea}", + "No tags selected for deletion." : "Ez dira ezabatzeko etiketak hautatu.", + "unknown text" : "testu ezezaguna", + "Hello world!" : "Kaixo Mundua!", + "sunny" : "eguzkitsua", + "Hello {name}, the weather is {weather}" : "Kaixo {name}, eguraldia {weather} da", + "Hello {name}" : "Kaixo {name}", + "new" : "Berria", + "_download %n file_::_download %n files_" : ["%n fitxategia jaitsi","jaitsi %n fitxategiak"], + "The update is in progress, leaving this page might interrupt the process in some environments." : "Eguneratzea abian da, orri hau utziz prozesua eten liteke ingurune batzuetan.", + "Update to {version}" : "{version} bertsiora eguneratu", + "An error occurred." : "Akats bat gertatu da.", + "Please reload the page." : "Mesedez birkargatu orria.", + "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue.", + "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>.", + "Continue to Nextcloud" : "Nextcloudera abiatu", + "The update was successful. Redirecting you to Nextcloud now." : "The update was successful. Redirecting you to Nextcloud now.", + "Searching other places" : "Beste lekuak bilatzen", + "No search results in other folders for '{tag}{filter}{endtag}'" : "Ez da '{tag}{filter}{endtag}-rentzako' bilaketa-emaitzik egon", + "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} bilaketa-emaitza beste karpeta batean","{count} bilaketa-emaitzak beste karpetetan"], + "Personal" : "Pertsonala", + "Users" : "Erabiltzaileak", + "Apps" : "Aplikazioak", + "Admin" : "Admin", + "Help" : "Laguntza", + "Access forbidden" : "Sarrera debekatuta", + "File not found" : "Ez da fitxategia aurkitu", + "The specified document has not been found on the server." : "Zehaztutako dokumentua ez da zerbitzarian aurkitu.", + "You can click here to return to %s." : "Hemen klika dezakezu %sra itzultzeko.", + "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Kaixo\n\n%s-ek %s zurekin partekatu duela jakin dezazun.\nIkusi ezazu: %s\n\n", + "The share will expire on %s." : "Elkarbanaketa %s-n iraungiko da.", + "Cheers!" : "Ongi izan!", + "Internal Server Error" : "Zerbitzariaren Barne Errorea", + "The server encountered an internal error and was unable to complete your request." : "Zerbitzariak barne errore bat izan du eta ez da gai izan zure eskaria osatzeko.", + "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Mesedez harremanetan jarri zerbitzariaren kudeatzailearekin errore hau aldi askotan agertzekotan, mesedez gehitu beheko zehaztapen teknikoak zure txostenean.", + "More details can be found in the server log." : "Zehaztapen gehiago zerbitzariaren egunerokoan aurki daitezke.", + "Technical details" : "Arazo teknikoak", + "Remote Address: %s" : "Urruneko Helbidea: %s", + "Request ID: %s" : "Eskariaren IDa: %s", + "Type: %s" : "Mota: %s", + "Code: %s" : "Kodea: %s", + "Message: %s" : "Mezua: %s", + "File: %s" : "Fitxategia: %s", + "Line: %s" : "Lerroa: %s", + "Trace" : "Arrastoa", + "Security warning" : "Segurtasun abisua", + "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Zure data karpeta eta fitxategiak interneten bidez eskuragarri egon daitezke .htaccess fitxategia ez delako funtzionatzen ari.", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>.", + "Create an <strong>admin account</strong>" : "Sortu <strong>kudeatzaile kontu<strong> bat", + "Username" : "Erabiltzaile izena", + "Storage & database" : "Biltegia & datubasea", + "Data folder" : "Datuen karpeta", + "Configure the database" : "Konfiguratu datu basea", + "Only %s is available." : "Soilik %s dago eskuragarri.", + "Install and activate additional PHP modules to choose other database types." : "Instalatu eta aktibatu PHP modulu osagarriak, beste datu-base mota aukeratzeko.", + "For more details check out the documentation." : "Xehetasun gehiago nahi izanez gero, begiratu dokumentazioa.", + "Database user" : "Datubasearen erabiltzailea", + "Database password" : "Datubasearen pasahitza", + "Database name" : "Datubasearen izena", + "Database tablespace" : "Datu basearen taula-lekua", + "Database host" : "Datubasearen hostalaria", + "Please specify the port number along with the host name (e.g., localhost:5432)." : "Please specify the port number along with the host name (e.g., localhost:5432).", + "Performance warning" : "Errendimendua abisua", + "SQLite will be used as database." : "SQLite will be used as database.", + "For larger installations we recommend to choose a different database backend." : "For larger installations we recommend to choose a different database backend.", + "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Especially when using the desktop client for file syncing the use of SQLite is discouraged.", + "Finish setup" : "Bukatu konfigurazioa", + "Finishing …" : "Bukatzen...", + "Need help?" : "Laguntza behar al duzu?", + "See the documentation" : "Ikusi dokumentazioa", + "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page.", + "Search" : "Bilatu", + "Log out" : "Saioa bukatu", + "This action requires you to confirm your password:" : "Ekintza honek zure pasahitza konfirmatzeko eskatuko dizu:", + "Confirm your password" : "Berretsi pasahitza", + "Server side authentication failed!" : "Zerbitzari aldeko autentifikazioak huts egin du!", + "Please contact your administrator." : "Mesedez jarri harremetan zure administradorearekin.", + "An internal error occurred." : "Barne errorea gertatu da.", + "Please try again or contact your administrator." : "Saiatu berriro edo jarri harremanetan administratzailearekin.", + "Username or email" : "Erabiltzaile izena edo e-posta", + "Wrong password. Reset it?" : "Pasahitz okerra. Berrezarri?", + "Wrong password." : "Pasahitz okerra.", + "Log in" : "Hasi saioa", + "Stay logged in" : "Ez amaitu saioa", + "Alternative Logins" : "Beste erabiltzaile izenak", + "Use the following link to reset your password: {link}" : "Eribili hurrengo lotura zure pasahitza berrezartzeko: {link}", + "New password" : "Pasahitz berria", + "New Password" : "Pasahitz Berria", + "Reset password" : "Berrezarri pasahitza", + "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Kaixo<br><br>%s-ek %s zurekin partekatu duela jakin dezazun.\nIkusi ezazu: %s", + "This Nextcloud instance is currently in single user mode." : "Nextcloud instantzia hau erabiltzaile bakar moduan dago.", + "This means only administrators can use the instance." : "Honek administradoreak bakarrik erabili dezakeela esan nahi du.", + "Contact your system administrator if this message persists or appeared unexpectedly." : "Jarri harremanetan zure sistema administratzailearekin mezu hau irauten badu edo bat-batean agertu bada.", + "Thank you for your patience." : "Milesker zure patzientziagatik.", + "Two-factor authentication" : "Bi faktoreko autentifikazioa", + "Enhanced security is enabled for your account. Please authenticate using a second factor." : "Hobetutako segurtasuna dago gaituta zure kontuan. Mesedez, autentifikatu bigarren faktore bat erabiliz.", + "Cancel log in" : "Ezeztatu log in", + "Use backup code" : "Erabili ordezko kodea", + "Error while validating your second factor" : "Akatsa zure bigarren faktorea balioztatzean", + "You are accessing the server from an untrusted domain." : "Zerbitzaria domeinu ez fidagarri batetik eskuratzen ari zara.", + "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Jarri harremanetan administratzailearekin. Instantzia honen administratzaile bat bazara, \"trusted_domains\" ezarpena ezarri config/config.php-en. Adibidezko konfigurazioa config/config.sample.php-en dago.", + "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Zure ezarpenen gorabehera, administratzaile bezala posible duzu ere azpiko botoia erabiltzea fidatzeko domeinu horrekin.", + "Add \"%s\" as trusted domain" : "Gehitu \"%s\" domeinu fidagarri gisa", + "App update required" : "Aplikazio eguneraketa beharrezkoa da", + "%s will be updated to version %s" : "%s %s bertsiora eguneratuko da", + "These apps will be updated:" : "Aplikazio hauek eguneratuko dira:", + "These incompatible apps will be disabled:" : "Aplikazio bateraezin hauek desgaituko dira:", + "The theme %s has been disabled." : "%s gaia desgaitu da.", + "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Ekin aurretik egiazta ezazu datu basearen, ezarpenen karpetaren eta datuen karpetaren babeskopia duzula.", + "Start update" : "Hasi eguneraketa", + "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Instalazio handien itxarote-denbora saihesteko, ondoko komandoa exekuta dezakezu instalazio direktoriotik:", + "Detailed logs" : "Log xehea", + "Update needed" : "Eguneratzea beharrezkoa da", + "Please use the command line updater because you have a big instance." : "Mesedez, erabili komando lerroa eguneratzeko, instantzia handi duzulako.", + "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Laguntza lortzeko, ikusi <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentazioa</a>.", + "This %s instance is currently in maintenance mode, which may take a while." : "Instantzia hau %s mantenu-moduan dago, honek denbora tarte bat iraun dezake.", + "This page will refresh itself when the %s instance is available again." : "Orri honek bere burua eguneratuko du %s instantzia berriz prest dagoenean.", + "Error loading tags" : "Errore bat izan da etiketak kargatzearkoan.", + "Tag already exists" : "Etiketa dagoeneko existitzen da", + "Error deleting tag(s)" : "Errore bat izan da etiketa(k) ezabatzerakoan", + "Error tagging" : "Errorea etiketa ezartzerakoan", + "Error untagging" : "Errorea etiketa kentzerakoan", + "Error favoriting" : "Errorea gogokoetara gehitzerakoan", + "Error unfavoriting" : "Errorea gogokoetatik kentzerakoan", + "Couldn't send mail to following users: %s " : "Ezin izan da posta bidali hurrengo erabiltzaileei: %s", + "Sunday" : "Igandea", + "Monday" : "Astelehena", + "Tuesday" : "Asteartea", + "Wednesday" : "Asteazkena", + "Thursday" : "Osteguna", + "Friday" : "Ostirala", + "Saturday" : "Larunbata", + "Sun." : "Ig.", + "Mon." : "Al.", + "Tue." : "Ar.", + "Wed." : "Az.", + "Thu." : "Og.", + "Fri." : "Ol.", + "Sat." : "Lr.", + "Su" : "Ig", + "Mo" : "Al", + "Tu" : "Ar", + "We" : "Az", + "Th" : "Og", + "Fr" : "Ol", + "Sa" : "Lr", + "January" : "Urtarrila", + "February" : "Otsaila", + "March" : "Martxoa", + "April" : "Apirila", + "May" : "Maiatza", + "June" : "Ekaina", + "July" : "Uztaila", + "August" : "Abuztua", + "September" : "Iraila", + "October" : "Urria", + "November" : "Azaroa", + "December" : "Abendua", + "Jan." : "Urt.", + "Feb." : "Ots.", + "Mar." : "Mar.", + "Apr." : "Api.", + "May." : "Mai.", + "Jun." : "Eka.", + "Jul." : "Uzt.", + "Aug." : "Abu.", + "Sep." : "Ira.", + "Oct." : "Urr.", + "Nov." : "Aza.", + "Dec." : "Abe.", + "Problem loading page, reloading in 5 seconds" : "Arazoa orria kargatzerakoan, 5 segundotan birkargatzen", + "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Zure fitxategiak enkriptaturik daude. Ez baduzu berreskuratze gakoa gaitzen pasahitza berrabiaraztean ez da zure fitxategiak berreskuratzeko modurik egongo. <br />Zer egin ziur ez bazaude kudeatzailearekin harremanetan ipini jarraitu aurretik.<br /> Ziur zaude aurrera jarraitu nahi duzula?", + "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." : "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features.", + "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.", + "Hide file listing" : "Ezkutatu fitxategi zerrenda", + "Sending ..." : "Bidaltzen ...", + "Email sent" : "Eposta bidalia", + "Send link via email" : "Bidali esteka posta elektronikoz", + "notify by email" : "jakinarazi eposta bidez", + "can share" : "elkarbana dezake", + "create" : "sortu", + "change" : "aldatu", + "delete" : "ezabatu", + "{sharee} (at {server})" : "{sharee} (at {server})", + "Share with users…" : "Erabiltzaileekin elkarbanatu...", + "Share with users, groups or remote users…" : "Erabiltzaile, talde edo urruneko erabiltzaile batzuekin elkarbanatu ...", + "Share with users or groups…" : "Erabiltzaile edo talde batekin elkarbanatu...", + "Share with users or remote users…" : "Erabiltzaile edo urruneko erabiltzaile batzuekin elkarbanatu...", + "Warning" : "Abisua", + "Error while sending notification" : "Akatsa jakinarazpena bidaltzean", + "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Berritzea abian dago, orri hau utziz gero prozesua eten liteke ingurune batzuetan.", + "Updating to {version}" : "{version} bertsiora eguneratzen", + "The update was successful. There were warnings." : "Eguneratzea arrakastatsua izan da. Abisuakegon dira.", + "No search results in other folders" : "Ez da bilaketaren emaitzik lortu beste karpetatan", + "Two-step verification" : "Bi urratseko egiaztapena", + "Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Hobetutako segurtasuna gaitu da zure kontuan. Mesedez, autentifikatu bigarren faktorea erabiliz.", + "Cancel login" : "Ezeztatu login", + "Please authenticate using the selected factor." : "Mesedez, autentifikatu hautatutako faktorea erabiliz.", + "An error occured while verifying the token" : "Akats bat gertatu da token-a egiaztatzean" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/core/l10n/eu.json b/core/l10n/eu.json new file mode 100644 index 00000000000..caf3d11ea17 --- /dev/null +++ b/core/l10n/eu.json @@ -0,0 +1,371 @@ +{ "translations": { + "Please select a file." : "Fitxategi bat aukeratu mesedez", + "File is too big" : "Fitxategia handiegia da", + "The selected file is not an image." : "Aukeratutako fitxategia ez da irudi bat.", + "The selected file cannot be read." : "Aukeratutako fitxategia ezin da aukeratu", + "Invalid file provided" : "Invalid file provided", + "No image or file provided" : "Ez da irudi edo fitxategirik zehaztu", + "Unknown filetype" : "Fitxategi mota ezezaguna", + "Invalid image" : "Baliogabeko irudia", + "An error occurred. Please contact your admin." : "Errore bat izan da, administraria kontaktatu.app", + "No temporary profile picture available, try again" : "Ez dago behin-behineko profil irudirik, saiatu berriro", + "No crop data provided" : "Ez da ebaketaren daturik eskaini", + "No valid crop data provided" : "Ebakidura baliogabea da", + "Crop is not square" : "Ebakidura ez da karratua", + "Couldn't reset password because the token is invalid" : "Ezin izan da pasahitza berrezarri tokena baliogabea delako", + "Couldn't reset password because the token is expired" : "Ezin da berrezarri pasahitza token-a iraungi duelako.", + "Couldn't send reset email. Please make sure your username is correct." : "Ezin izan da berrezartzeko eposta bidali. Ziurtatu zure erabiltzaile izena egokia dela.", + "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Ezin izan da berreskuratze posta elektronikoa bidali helbiderik ez dagoelako erabiltzaile honetarako. Jarri harremanetan administratzailearekin.", + "%s password reset" : "%s pasahitza berrezarri", + "Couldn't send reset email. Please contact your administrator." : "Ezin da berrezartzeko eposta bidali. Mesedez jarri harremetan zure administradorearekin.", + "Preparing update" : "Eguneratzea prestatzen", + "[%d / %d]: %s" : "[%d / %d]: %s", + "Repair warning: " : "Konponketa abisua:", + "Repair error: " : "Akatsa konpondu:", + "Please use the command line updater because automatic updating is disabled in the config.php." : "Mesedez, erabili komando-lerroa eguneratzeko, eguneratze automatikoa config.php-n desgaituta dago eta.", + "[%d / %d]: Checking table %s" : "[%d / %d]: Taula egiaztatzen %s", + "Turned on maintenance mode" : "Mantenu modua gaitu da", + "Turned off maintenance mode" : "Mantenu modua desgaitu da", + "Maintenance mode is kept active" : "Mantentze modua aktibatuta dago oraindik.", + "Updating database schema" : "Datu-basearen eskema eguneratzen", + "Updated database" : "Datu-basea eguneratuta", + "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Datu-basearen eskema eguneratu daitekeen egiaztatzen (honek luzerako hartu dezake datu-basearen arabera)", + "Checked database schema update" : "Egiaztatuta datu-basearen zerbitzariaren eguneraketa", + "Checking updates of apps" : "Aplikazioentzako eguneraketak egiaztatzen", + "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "%s datu-basearen eskema eguneratu daitekeen egiaztatzen (honek luzerako hartu dezake datu-basearen arabera)", + "Checked database schema update for apps" : "Egiaztatuta aplikazioen datu-basearen zerbitzariaren eguneraketa", + "Updated \"%s\" to %s" : "\"%s\" %s-ra eguneratua", + "Set log level to debug" : "Set log level to debug", + "Reset log level" : "Reset log level", + "Starting code integrity check" : "Kodearen integritate egiaztapena hasten", + "Finished code integrity check" : "Kodearen integritate egiaztapena bukatuta", + "%s (3rdparty)" : "%s (3rdparty)", + "%s (incompatible)" : "%s (incompatible)", + "Following apps have been disabled: %s" : "Hurrengo aplikazioak desgaitu egin dira: %s", + "Already up to date" : "Dagoeneko eguneratuta", + "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Kodearen integritate egiaztapenarekin arazoak egon dira. Informazio gehiago…</a>", + "Settings" : "Ezarpenak", + "Connection to server lost" : "Zerbitzariarekiko konexioa eten da", + "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Arazoa orria kargatzerakoan, birkargatzen segundu batean","Arazoa orria kargatzerakoan, birkargatzen %n segundutan"], + "Saving..." : "Gordetzen...", + "Dismiss" : "Ezikusi", + "This action requires you to confirm your password" : "Ekintza hau zure pasahitza konfirmatzeko eskatuko dizu", + "Authentication required" : "Autentifikazioa beharrezkoa", + "Password" : "Pasahitza", + "Cancel" : "Ezeztatu", + "Confirm" : "Baieztatu", + "Failed to authenticate, try again" : "Huts egindu autentifikazioa, berriz saiatu", + "seconds ago" : "duela segundo batzuk", + "Logging in …" : "Saioa hasten ...", + "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Zure pasahitza berrezartzeko lotura zure postara bidalia izan da.<br>Ez baduzu arrazoizko denbora epe batean jasotzen begiratu zure zabor-posta karpetan.<br>Hor ere ez badago kudeatzailearekin harremanetan jarri.", + "Your files are encrypted. There will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Zure fitxategiak zifratzen dira. Pasahitza aldatuz gero, ez dago zure datuak berreskuratzeko modurik.<br />Ziur ez bazaude, jarri harremanetan administratzailearekin jarraitu baino lehen. <br />Ziur zaude jarraitu nahi duzula?", + "I know what I'm doing" : "Badakit zer ari naizen egiten", + "Password can not be changed. Please contact your administrator." : "Ezin da pasahitza aldatu. Mesedez jarri harremetan zure administradorearekin.", + "No" : "Ez", + "Yes" : "Bai", + "No files in here" : "Ez dago fitxategirik hemen", + "Choose" : "Aukeratu", + "Error loading file picker template: {error}" : "Errorea fitxategi hautatzaile txantiloiak kargatzerakoan: {error}", + "Ok" : "Ados", + "Error loading message template: {error}" : "Errorea mezu txantiloia kargatzean: {error}", + "read-only" : "irakurtzeko-soilik", + "_{count} file conflict_::_{count} file conflicts_" : ["fitxategi {count}ek konfliktua sortu du","{count} fitxategik konfliktua sortu dute"], + "One file conflict" : "Fitxategi batek konfliktua sortu du", + "New Files" : "Fitxategi Berriak", + "Already existing files" : "Dagoeneko existitzen diren fitxategiak", + "Which files do you want to keep?" : "Ze fitxategi mantendu nahi duzu?", + "If you select both versions, the copied file will have a number added to its name." : "Bi bertsioak hautatzen badituzu, kopiatutako fitxategiaren izenean zenbaki bat atxikituko zaio.", + "Continue" : "Jarraitu", + "(all selected)" : "(denak hautatuta)", + "({count} selected)" : "({count} hautatuta)", + "Error loading file exists template" : "Errorea fitxategia existitzen da txantiloiak kargatzerakoan", + "Pending" : "Zain", + "Very weak password" : "Pasahitz oso ahula", + "Weak password" : "Pasahitz ahula", + "So-so password" : "Halamoduzko pasahitza", + "Good password" : "Pasahitz ona", + "Strong password" : "Pasahitz sendoa", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Zure web zerbitzaria ez dago oraindik konfiguratuta fitxategia sinkronizazioa ahalbidetzeko WebDAV interfazea badirudi hautsita dagoela.", + "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Zure web zerbitzaria ez dago behar bezala konfiguratuta \"{url}\" irekitzeko. Informazio gehiago gure <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentazioan </a> aurki daiteke.", + "This server has no working Internet connection: Multiple endpoints could not be reached. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "This server has no working Internet connection: Multiple endpoints could not be reached. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.", + "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it.", + "The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.", + "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki about both modules</a>.", + "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)", + "Error occurred while checking server setup" : "Akatsa gertatu da zerbitzariaren konfigurazioa egiaztatzean", + "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." : "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.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting.", + "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>.", + "Shared" : "Elkarbanatuta", + "Shared with {recipients}" : "{recipients}-rekin partekatua.", + "Error" : "Errorea", + "Error while sharing" : "Errore bat egon da elkarbanatzean", + "Error while unsharing" : "Errore bat egon da elkarbanaketa desegitean", + "Error setting expiration date" : "Errore bat egon da muga data ezartzean", + "The public link will expire no later than {days} days after it is created" : "Esteka publikoak iraungi egingo du, askoz jota, sortu eta {days} egunetara.", + "Set expiration date" : "Ezarri muga data", + "Expiration" : "Iraungitzea", + "Expiration date" : "Muga data", + "Choose a password for the public link" : "Aukeratu pasahitz bat esteka publikorako", + "Copied!" : "Kopiatuta!", + "Copy" : "Kopiatu", + "Not supported!" : "Ez da onartzen!", + "Press ⌘-C to copy." : "Sakatu ⌘-C kopiatzeko.", + "Press Ctrl-C to copy." : "Sakatu Ctrl-C kpiatzeko.", + "Resharing is not allowed" : "Berriz elkarbanatzea ez dago baimendua", + "Share link" : "Elkarbanatu lotura", + "Link" : "Esteka", + "Password protect" : "Babestu pasahitzarekin", + "Allow upload and editing" : "Onartu igoera eta edizioa", + "Allow editing" : "Baimendu editatzea", + "File drop (upload only)" : "Fitxategiak utzi (igo bakarrik)", + "Email link to person" : "Postaz bidali lotura ", + "Send" : "Bidali", + "Shared with you and the group {group} by {owner}" : "{owner}-k zu eta {group} taldearekin elkarbanatuta", + "Shared with you by {owner}" : "{owner}-k zurekin elkarbanatuta", + "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} link bidez partekatuta", + "group" : "taldea", + "remote" : "urrunekoa", + "email" : "posta-elektronikoa", + "Unshare" : "Ez elkarbanatu", + "can reshare" : "elkarbanatu dezake", + "can edit" : "editatu dezake", + "can create" : "sortu dezake", + "can change" : "aldatu dezake", + "can delete" : "ezabatu dezake", + "access control" : "sarrera kontrola", + "Could not unshare" : "Ezin izan despartekatu", + "Share details could not be loaded for this item." : "Partekatze xehetasunak ezin izan dira elementu honentzat kargatu.", + "No users or groups found for {search}" : "Ez dira {search} -rentzat erabiltzaile edo talderik aurkitu", + "No users found for {search}" : "Ez dira {search} -rentzat erabiltzailerik aurkitu", + "An error occurred. Please try again" : "Errore bat gertatu da. Saiatu berriro.", + "{sharee} (group)" : "{sharee} (group)", + "{sharee} (remote)" : "{sharee} (remote)", + "{sharee} (email)" : "{sharee} (email)", + "Share" : "Elkarbanatu", + "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Partekatu beste zerbitzarietan dagoen jendearekin, beraien Federated Cloud ID erabiliz username@example.com/nextcloud", + "Share with users or by mail..." : "Erabiltzaileekin edo postaz elkarbanatu...", + "Share with users or remote users..." : "Erabiltzaile edo urruneko erabiltzaile batzuekin elkarbanatu...", + "Share with users, remote users or by mail..." : "Erabiltzaile, urruneko erabiltzaile edo postaz elkarbanatu...", + "Share with users or groups..." : "Erabiltzaile edo talde batekin elkarbanatu...", + "Share with users, groups or by mail..." : "Erabiltzaile, talde edo posta elektroniko bidez elkarbanatu...", + "Share with users, groups or remote users..." : "erabiltzaile, talde edo urruneko erabiltzaile batzuekin Elkarbanatu ...", + "Share with users, groups, remote users or by mail..." : "Erabiltzaile, talde, urruneko erabiltzaile edo postaz elkarbanatu...", + "Share with users..." : "Erabiltzaileekin elkarbanatu...", + "Error removing share" : " Akatsa kuota kentzerakoan", + "Non-existing tag #{tag}" : "#{tag} ez da existitzen", + "restricted" : "mugatua", + "invisible" : "ikusiezina", + "({scope})" : "({scope})", + "Delete" : "Ezabatu", + "Rename" : "Berrizendatu", + "Collaborative tags" : "Elkarlaneko etiketak", + "No tags found" : "Ez da etiketarik aurkitu", + "The object type is not specified." : "Objetu mota ez dago zehaztuta.", + "Enter new" : "Sartu berria", + "Add" : "Gehitu", + "Edit tags" : "Editatu etiketak", + "Error loading dialog template: {error}" : "Errorea elkarrizketa txantiloia kargatzean: {errorea}", + "No tags selected for deletion." : "Ez dira ezabatzeko etiketak hautatu.", + "unknown text" : "testu ezezaguna", + "Hello world!" : "Kaixo Mundua!", + "sunny" : "eguzkitsua", + "Hello {name}, the weather is {weather}" : "Kaixo {name}, eguraldia {weather} da", + "Hello {name}" : "Kaixo {name}", + "new" : "Berria", + "_download %n file_::_download %n files_" : ["%n fitxategia jaitsi","jaitsi %n fitxategiak"], + "The update is in progress, leaving this page might interrupt the process in some environments." : "Eguneratzea abian da, orri hau utziz prozesua eten liteke ingurune batzuetan.", + "Update to {version}" : "{version} bertsiora eguneratu", + "An error occurred." : "Akats bat gertatu da.", + "Please reload the page." : "Mesedez birkargatu orria.", + "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue.", + "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>.", + "Continue to Nextcloud" : "Nextcloudera abiatu", + "The update was successful. Redirecting you to Nextcloud now." : "The update was successful. Redirecting you to Nextcloud now.", + "Searching other places" : "Beste lekuak bilatzen", + "No search results in other folders for '{tag}{filter}{endtag}'" : "Ez da '{tag}{filter}{endtag}-rentzako' bilaketa-emaitzik egon", + "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} bilaketa-emaitza beste karpeta batean","{count} bilaketa-emaitzak beste karpetetan"], + "Personal" : "Pertsonala", + "Users" : "Erabiltzaileak", + "Apps" : "Aplikazioak", + "Admin" : "Admin", + "Help" : "Laguntza", + "Access forbidden" : "Sarrera debekatuta", + "File not found" : "Ez da fitxategia aurkitu", + "The specified document has not been found on the server." : "Zehaztutako dokumentua ez da zerbitzarian aurkitu.", + "You can click here to return to %s." : "Hemen klika dezakezu %sra itzultzeko.", + "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Kaixo\n\n%s-ek %s zurekin partekatu duela jakin dezazun.\nIkusi ezazu: %s\n\n", + "The share will expire on %s." : "Elkarbanaketa %s-n iraungiko da.", + "Cheers!" : "Ongi izan!", + "Internal Server Error" : "Zerbitzariaren Barne Errorea", + "The server encountered an internal error and was unable to complete your request." : "Zerbitzariak barne errore bat izan du eta ez da gai izan zure eskaria osatzeko.", + "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Mesedez harremanetan jarri zerbitzariaren kudeatzailearekin errore hau aldi askotan agertzekotan, mesedez gehitu beheko zehaztapen teknikoak zure txostenean.", + "More details can be found in the server log." : "Zehaztapen gehiago zerbitzariaren egunerokoan aurki daitezke.", + "Technical details" : "Arazo teknikoak", + "Remote Address: %s" : "Urruneko Helbidea: %s", + "Request ID: %s" : "Eskariaren IDa: %s", + "Type: %s" : "Mota: %s", + "Code: %s" : "Kodea: %s", + "Message: %s" : "Mezua: %s", + "File: %s" : "Fitxategia: %s", + "Line: %s" : "Lerroa: %s", + "Trace" : "Arrastoa", + "Security warning" : "Segurtasun abisua", + "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Zure data karpeta eta fitxategiak interneten bidez eskuragarri egon daitezke .htaccess fitxategia ez delako funtzionatzen ari.", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>.", + "Create an <strong>admin account</strong>" : "Sortu <strong>kudeatzaile kontu<strong> bat", + "Username" : "Erabiltzaile izena", + "Storage & database" : "Biltegia & datubasea", + "Data folder" : "Datuen karpeta", + "Configure the database" : "Konfiguratu datu basea", + "Only %s is available." : "Soilik %s dago eskuragarri.", + "Install and activate additional PHP modules to choose other database types." : "Instalatu eta aktibatu PHP modulu osagarriak, beste datu-base mota aukeratzeko.", + "For more details check out the documentation." : "Xehetasun gehiago nahi izanez gero, begiratu dokumentazioa.", + "Database user" : "Datubasearen erabiltzailea", + "Database password" : "Datubasearen pasahitza", + "Database name" : "Datubasearen izena", + "Database tablespace" : "Datu basearen taula-lekua", + "Database host" : "Datubasearen hostalaria", + "Please specify the port number along with the host name (e.g., localhost:5432)." : "Please specify the port number along with the host name (e.g., localhost:5432).", + "Performance warning" : "Errendimendua abisua", + "SQLite will be used as database." : "SQLite will be used as database.", + "For larger installations we recommend to choose a different database backend." : "For larger installations we recommend to choose a different database backend.", + "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Especially when using the desktop client for file syncing the use of SQLite is discouraged.", + "Finish setup" : "Bukatu konfigurazioa", + "Finishing …" : "Bukatzen...", + "Need help?" : "Laguntza behar al duzu?", + "See the documentation" : "Ikusi dokumentazioa", + "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page.", + "Search" : "Bilatu", + "Log out" : "Saioa bukatu", + "This action requires you to confirm your password:" : "Ekintza honek zure pasahitza konfirmatzeko eskatuko dizu:", + "Confirm your password" : "Berretsi pasahitza", + "Server side authentication failed!" : "Zerbitzari aldeko autentifikazioak huts egin du!", + "Please contact your administrator." : "Mesedez jarri harremetan zure administradorearekin.", + "An internal error occurred." : "Barne errorea gertatu da.", + "Please try again or contact your administrator." : "Saiatu berriro edo jarri harremanetan administratzailearekin.", + "Username or email" : "Erabiltzaile izena edo e-posta", + "Wrong password. Reset it?" : "Pasahitz okerra. Berrezarri?", + "Wrong password." : "Pasahitz okerra.", + "Log in" : "Hasi saioa", + "Stay logged in" : "Ez amaitu saioa", + "Alternative Logins" : "Beste erabiltzaile izenak", + "Use the following link to reset your password: {link}" : "Eribili hurrengo lotura zure pasahitza berrezartzeko: {link}", + "New password" : "Pasahitz berria", + "New Password" : "Pasahitz Berria", + "Reset password" : "Berrezarri pasahitza", + "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Kaixo<br><br>%s-ek %s zurekin partekatu duela jakin dezazun.\nIkusi ezazu: %s", + "This Nextcloud instance is currently in single user mode." : "Nextcloud instantzia hau erabiltzaile bakar moduan dago.", + "This means only administrators can use the instance." : "Honek administradoreak bakarrik erabili dezakeela esan nahi du.", + "Contact your system administrator if this message persists or appeared unexpectedly." : "Jarri harremanetan zure sistema administratzailearekin mezu hau irauten badu edo bat-batean agertu bada.", + "Thank you for your patience." : "Milesker zure patzientziagatik.", + "Two-factor authentication" : "Bi faktoreko autentifikazioa", + "Enhanced security is enabled for your account. Please authenticate using a second factor." : "Hobetutako segurtasuna dago gaituta zure kontuan. Mesedez, autentifikatu bigarren faktore bat erabiliz.", + "Cancel log in" : "Ezeztatu log in", + "Use backup code" : "Erabili ordezko kodea", + "Error while validating your second factor" : "Akatsa zure bigarren faktorea balioztatzean", + "You are accessing the server from an untrusted domain." : "Zerbitzaria domeinu ez fidagarri batetik eskuratzen ari zara.", + "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Jarri harremanetan administratzailearekin. Instantzia honen administratzaile bat bazara, \"trusted_domains\" ezarpena ezarri config/config.php-en. Adibidezko konfigurazioa config/config.sample.php-en dago.", + "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Zure ezarpenen gorabehera, administratzaile bezala posible duzu ere azpiko botoia erabiltzea fidatzeko domeinu horrekin.", + "Add \"%s\" as trusted domain" : "Gehitu \"%s\" domeinu fidagarri gisa", + "App update required" : "Aplikazio eguneraketa beharrezkoa da", + "%s will be updated to version %s" : "%s %s bertsiora eguneratuko da", + "These apps will be updated:" : "Aplikazio hauek eguneratuko dira:", + "These incompatible apps will be disabled:" : "Aplikazio bateraezin hauek desgaituko dira:", + "The theme %s has been disabled." : "%s gaia desgaitu da.", + "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Ekin aurretik egiazta ezazu datu basearen, ezarpenen karpetaren eta datuen karpetaren babeskopia duzula.", + "Start update" : "Hasi eguneraketa", + "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Instalazio handien itxarote-denbora saihesteko, ondoko komandoa exekuta dezakezu instalazio direktoriotik:", + "Detailed logs" : "Log xehea", + "Update needed" : "Eguneratzea beharrezkoa da", + "Please use the command line updater because you have a big instance." : "Mesedez, erabili komando lerroa eguneratzeko, instantzia handi duzulako.", + "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Laguntza lortzeko, ikusi <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentazioa</a>.", + "This %s instance is currently in maintenance mode, which may take a while." : "Instantzia hau %s mantenu-moduan dago, honek denbora tarte bat iraun dezake.", + "This page will refresh itself when the %s instance is available again." : "Orri honek bere burua eguneratuko du %s instantzia berriz prest dagoenean.", + "Error loading tags" : "Errore bat izan da etiketak kargatzearkoan.", + "Tag already exists" : "Etiketa dagoeneko existitzen da", + "Error deleting tag(s)" : "Errore bat izan da etiketa(k) ezabatzerakoan", + "Error tagging" : "Errorea etiketa ezartzerakoan", + "Error untagging" : "Errorea etiketa kentzerakoan", + "Error favoriting" : "Errorea gogokoetara gehitzerakoan", + "Error unfavoriting" : "Errorea gogokoetatik kentzerakoan", + "Couldn't send mail to following users: %s " : "Ezin izan da posta bidali hurrengo erabiltzaileei: %s", + "Sunday" : "Igandea", + "Monday" : "Astelehena", + "Tuesday" : "Asteartea", + "Wednesday" : "Asteazkena", + "Thursday" : "Osteguna", + "Friday" : "Ostirala", + "Saturday" : "Larunbata", + "Sun." : "Ig.", + "Mon." : "Al.", + "Tue." : "Ar.", + "Wed." : "Az.", + "Thu." : "Og.", + "Fri." : "Ol.", + "Sat." : "Lr.", + "Su" : "Ig", + "Mo" : "Al", + "Tu" : "Ar", + "We" : "Az", + "Th" : "Og", + "Fr" : "Ol", + "Sa" : "Lr", + "January" : "Urtarrila", + "February" : "Otsaila", + "March" : "Martxoa", + "April" : "Apirila", + "May" : "Maiatza", + "June" : "Ekaina", + "July" : "Uztaila", + "August" : "Abuztua", + "September" : "Iraila", + "October" : "Urria", + "November" : "Azaroa", + "December" : "Abendua", + "Jan." : "Urt.", + "Feb." : "Ots.", + "Mar." : "Mar.", + "Apr." : "Api.", + "May." : "Mai.", + "Jun." : "Eka.", + "Jul." : "Uzt.", + "Aug." : "Abu.", + "Sep." : "Ira.", + "Oct." : "Urr.", + "Nov." : "Aza.", + "Dec." : "Abe.", + "Problem loading page, reloading in 5 seconds" : "Arazoa orria kargatzerakoan, 5 segundotan birkargatzen", + "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Zure fitxategiak enkriptaturik daude. Ez baduzu berreskuratze gakoa gaitzen pasahitza berrabiaraztean ez da zure fitxategiak berreskuratzeko modurik egongo. <br />Zer egin ziur ez bazaude kudeatzailearekin harremanetan ipini jarraitu aurretik.<br /> Ziur zaude aurrera jarraitu nahi duzula?", + "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." : "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features.", + "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>.", + "Hide file listing" : "Ezkutatu fitxategi zerrenda", + "Sending ..." : "Bidaltzen ...", + "Email sent" : "Eposta bidalia", + "Send link via email" : "Bidali esteka posta elektronikoz", + "notify by email" : "jakinarazi eposta bidez", + "can share" : "elkarbana dezake", + "create" : "sortu", + "change" : "aldatu", + "delete" : "ezabatu", + "{sharee} (at {server})" : "{sharee} (at {server})", + "Share with users…" : "Erabiltzaileekin elkarbanatu...", + "Share with users, groups or remote users…" : "Erabiltzaile, talde edo urruneko erabiltzaile batzuekin elkarbanatu ...", + "Share with users or groups…" : "Erabiltzaile edo talde batekin elkarbanatu...", + "Share with users or remote users…" : "Erabiltzaile edo urruneko erabiltzaile batzuekin elkarbanatu...", + "Warning" : "Abisua", + "Error while sending notification" : "Akatsa jakinarazpena bidaltzean", + "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Berritzea abian dago, orri hau utziz gero prozesua eten liteke ingurune batzuetan.", + "Updating to {version}" : "{version} bertsiora eguneratzen", + "The update was successful. There were warnings." : "Eguneratzea arrakastatsua izan da. Abisuakegon dira.", + "No search results in other folders" : "Ez da bilaketaren emaitzik lortu beste karpetatan", + "Two-step verification" : "Bi urratseko egiaztapena", + "Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Hobetutako segurtasuna gaitu da zure kontuan. Mesedez, autentifikatu bigarren faktorea erabiliz.", + "Cancel login" : "Ezeztatu login", + "Please authenticate using the selected factor." : "Mesedez, autentifikatu hautatutako faktorea erabiliz.", + "An error occured while verifying the token" : "Akats bat gertatu da token-a egiaztatzean" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/core/l10n/fr.js b/core/l10n/fr.js index 34d0df3d76c..8d0f82cf959 100644 --- a/core/l10n/fr.js +++ b/core/l10n/fr.js @@ -141,6 +141,8 @@ OC.L10N.register( "access control" : "contrôle d'accès", "Could not unshare" : "Impossible d'arrêter de partager", "Share details could not be loaded for this item." : "Les informations de partage n'ont pu être chargées pour cet élément.", + "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Au moins {count} caractère est nécessaire pour l'autocomplétion","Au moins {count} caractères sont nécessaires pour l'autocomplétion"], + "This list is maybe truncated - please refine your search term to see more results." : "Des résultats peuvent avoir été omis. Affinez votre recherche pour en voir plus.", "No users or groups found for {search}" : "Pas d'utilisateur ou de groupe trouvé pour {search}", "No users found for {search}" : "Aucun utilisateur trouvé pour {search}", "An error occurred. Please try again" : "Une erreur est survenue. Merci de réessayer", diff --git a/core/l10n/fr.json b/core/l10n/fr.json index 7734be9e16a..7fb2609b53b 100644 --- a/core/l10n/fr.json +++ b/core/l10n/fr.json @@ -139,6 +139,8 @@ "access control" : "contrôle d'accès", "Could not unshare" : "Impossible d'arrêter de partager", "Share details could not be loaded for this item." : "Les informations de partage n'ont pu être chargées pour cet élément.", + "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Au moins {count} caractère est nécessaire pour l'autocomplétion","Au moins {count} caractères sont nécessaires pour l'autocomplétion"], + "This list is maybe truncated - please refine your search term to see more results." : "Des résultats peuvent avoir été omis. Affinez votre recherche pour en voir plus.", "No users or groups found for {search}" : "Pas d'utilisateur ou de groupe trouvé pour {search}", "No users found for {search}" : "Aucun utilisateur trouvé pour {search}", "An error occurred. Please try again" : "Une erreur est survenue. Merci de réessayer", diff --git a/core/l10n/is.js b/core/l10n/is.js index b1b13f94ce1..985d19b69d8 100644 --- a/core/l10n/is.js +++ b/core/l10n/is.js @@ -141,6 +141,8 @@ OC.L10N.register( "access control" : "aðgangsstýring", "Could not unshare" : "Gat ekki hætt deilingu", "Share details could not be loaded for this item." : "Ekki tókst að hlaða inn upplýsingum um sameign varðandi þetta atriði.", + "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Það þarf a.m.k. {count} staf til að sjálfvirk útfylling virki","Það þarf a.m.k. {count} stafi til að sjálfvirk útfylling virki"], + "This list is maybe truncated - please refine your search term to see more results." : "Þessi listi gæti verið stytt útgáfa - þrengdu leitarskilyrðin til að sjá fleiri niðurstöður.", "No users or groups found for {search}" : "Engir notendur eða hópar fundust í {search}", "No users found for {search}" : "Engir notendur fundust með {search}", "An error occurred. Please try again" : "Villa kom upp. Endilega reyndu aftur", diff --git a/core/l10n/is.json b/core/l10n/is.json index 243dfb082b1..4cc4528a3b1 100644 --- a/core/l10n/is.json +++ b/core/l10n/is.json @@ -139,6 +139,8 @@ "access control" : "aðgangsstýring", "Could not unshare" : "Gat ekki hætt deilingu", "Share details could not be loaded for this item." : "Ekki tókst að hlaða inn upplýsingum um sameign varðandi þetta atriði.", + "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Það þarf a.m.k. {count} staf til að sjálfvirk útfylling virki","Það þarf a.m.k. {count} stafi til að sjálfvirk útfylling virki"], + "This list is maybe truncated - please refine your search term to see more results." : "Þessi listi gæti verið stytt útgáfa - þrengdu leitarskilyrðin til að sjá fleiri niðurstöður.", "No users or groups found for {search}" : "Engir notendur eða hópar fundust í {search}", "No users found for {search}" : "Engir notendur fundust með {search}", "An error occurred. Please try again" : "Villa kom upp. Endilega reyndu aftur", diff --git a/core/l10n/ja.js b/core/l10n/ja.js index d3b0f9ea819..ad71d7f28d6 100644 --- a/core/l10n/ja.js +++ b/core/l10n/ja.js @@ -48,6 +48,7 @@ OC.L10N.register( "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">コード整合性の確認で問題が発生しました。詳しくはこちら…</a>", "Settings" : "設定", "Connection to server lost" : "サーバとの接続が切断されました", + "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["ページ読込に問題がありました。%n秒後に再読込します"], "Saving..." : "保存中...", "Dismiss" : "閉じる", "This action requires you to confirm your password" : "この操作では、パスワードを確認する必要があります", @@ -140,6 +141,8 @@ OC.L10N.register( "access control" : "アクセス権限", "Could not unshare" : "共有の解除ができませんでした", "Share details could not be loaded for this item." : "共有の詳細はこのアイテムによりロードできませんでした。", + "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["オートコンプリートには{count}文字以上必要です"], + "This list is maybe truncated - please refine your search term to see more results." : "このリストは切り捨てられている可能性があります - 検索語句を絞り込んで検索結果を表示してください。", "No users or groups found for {search}" : "{search} の検索でユーザー、グループが見つかりません", "No users found for {search}" : "{search} のユーザーはいませんでした", "An error occurred. Please try again" : "エラーが発生しました。もう一度実行してください。", diff --git a/core/l10n/ja.json b/core/l10n/ja.json index 630e3005cf3..34e9d81823b 100644 --- a/core/l10n/ja.json +++ b/core/l10n/ja.json @@ -46,6 +46,7 @@ "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">コード整合性の確認で問題が発生しました。詳しくはこちら…</a>", "Settings" : "設定", "Connection to server lost" : "サーバとの接続が切断されました", + "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["ページ読込に問題がありました。%n秒後に再読込します"], "Saving..." : "保存中...", "Dismiss" : "閉じる", "This action requires you to confirm your password" : "この操作では、パスワードを確認する必要があります", @@ -138,6 +139,8 @@ "access control" : "アクセス権限", "Could not unshare" : "共有の解除ができませんでした", "Share details could not be loaded for this item." : "共有の詳細はこのアイテムによりロードできませんでした。", + "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["オートコンプリートには{count}文字以上必要です"], + "This list is maybe truncated - please refine your search term to see more results." : "このリストは切り捨てられている可能性があります - 検索語句を絞り込んで検索結果を表示してください。", "No users or groups found for {search}" : "{search} の検索でユーザー、グループが見つかりません", "No users found for {search}" : "{search} のユーザーはいませんでした", "An error occurred. Please try again" : "エラーが発生しました。もう一度実行してください。", diff --git a/core/l10n/lv.js b/core/l10n/lv.js index d7e688837cd..9d2279f3ae1 100644 --- a/core/l10n/lv.js +++ b/core/l10n/lv.js @@ -43,6 +43,7 @@ OC.L10N.register( "Already up to date" : "Jau ir jaunākā", "Settings" : "Iestatījumi", "Connection to server lost" : "Zaudēts savienojums ar serveri", + "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Problēma ielādējot lapu, pārlādēšana pēc %n sekundēm","Problēma ielādējot lapu, pārlādēšana pēc %n sekundēm","Problēma ielādējot lapu, pārlādēšana pēc %n sekundēm"], "Saving..." : "Saglabā...", "Dismiss" : "Atmest", "Authentication required" : "Nepieciešama autentifikācija", @@ -121,8 +122,11 @@ OC.L10N.register( "Share" : "Koplietot", "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Koplietot ar personām, kas atrodas citos serveros, izmantojot Federated Cloud ID username@example.com/nextcloud", "Share with users or by mail..." : "Koplietot ar lietotājiem vai izmantojot e-pastu...", + "Share with users or remote users..." : "Koplietot ar lietotājiem vai attāliem lietotājiem...", + "Share with users, remote users or by mail..." : "Koplietot ar lietotājiem, attāliem lietotājiem vai izmantojot e-pastu...", "Share with users or groups..." : "Koplietot ar lietotājiem vai grupām...", "Share with users, groups or by mail..." : "Koplietot ar lietotājiem, grupām vai izmantojot e-pastu...", + "Share with users, groups or remote users..." : "Koplietot ar lietotājiem, grupām vai attāliem lietotājiem...", "Share with users..." : "Koplietots ar lietotājiem...", "Error removing share" : "Kļūda, noņemot koplietošanu", "restricted" : "ierobežots", @@ -142,6 +146,7 @@ OC.L10N.register( "Hello {name}, the weather is {weather}" : "Sveiks {name}, laiks ir {weather}", "Hello {name}" : "Sveiks {name}", "new" : "jauns", + "_download %n file_::_download %n files_" : ["lejupielādēt %n failus","lejupielādēt %n failus","lejupielādēt %n failus"], "Update to {version}" : "Atjaunināts uz {version}", "An error occurred." : "Radās kļūda.", "Please reload the page." : "Lūdzu, atkārtoti ielādējiet lapu.", @@ -186,6 +191,7 @@ OC.L10N.register( "Database name" : "Datubāzes nosaukums", "Database tablespace" : "Datubāzes tabulas telpa", "Database host" : "Datubāzes serveris", + "Please specify the port number along with the host name (e.g., localhost:5432)." : "Lūdzu, norādiet porta numuru kopā ar resursdatora nosaukumu (piemēram, localhost: 5432).", "Performance warning" : "Veiktspējas brīdinājums", "SQLite will be used as database." : "SQLite tiks izmantota kā datu bāze.", "Finish setup" : "Pabeigt iestatīšanu", @@ -228,6 +234,9 @@ OC.L10N.register( "Please use the command line updater because you have a big instance." : "Lūdzu, izmantojiet komandrindas atjauninātāju, jo jums ir liels datu apjoms.", "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Lai saņemtu palīdzību, skatiet <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentāciju</a>.", "This %s instance is currently in maintenance mode, which may take a while." : "Šis %s serveris pašlaik darbojas uzturēšanas režīmā, tas var ilgt kādu laiku.", + "Error loading tags" : "Kļūda ielādējot birkas", + "Tag already exists" : "Birka jau pastāv", + "Error deleting tag(s)" : "Kļūda dzēšot birku(as)", "Error tagging" : "Kļūda atzīmējot", "Error untagging" : "Kļūda noņemot atzīmi", "Couldn't send mail to following users: %s " : "Nevarēja nosūtīt e-pastu sekojošiem lietotājiem: %s", @@ -277,6 +286,7 @@ OC.L10N.register( "Nov." : "Nov.", "Dec." : "Dec.", "Problem loading page, reloading in 5 seconds" : "Problēma ielādējot lapu, pārlādēšana pēc 5 sekundēm", + "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Jūsu faili ir šifrēti. Ja neesat iespējojis atkopšanas atslēgu, nevarēsiet atgūt datus atpakaļ, pēc jūsu paroles atiestatīšanas.<br />Ja neesat pārliecināts par to, ko darīt, lūdzu, pirms turpināt, sazinieties ar administratoru. <br />Vai tiešām vēlaties turpināt?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Šim serverim nav interneta savienojuma. Tas nozīmē, ka daži līdzekļi, piemēram, ārējo atmiņas montāžas vai trešās puses lietojumprogrammu paziņojumi par atjauninājumiem nedarbosies. Attāli piekļūt failiem un nosūtīt paziņojumu uz e-pastu, iespējams nedarbosies. Mēs ierosinām, izveidot interneta savienojumu ar šo serveri, ja vēlaties, lai visas funkcijas darbotos.", "Hide file listing" : "Paslēpt datņu sarakstu", "Sending ..." : "Sūta...", diff --git a/core/l10n/lv.json b/core/l10n/lv.json index d59ea39c531..09b4d9a4506 100644 --- a/core/l10n/lv.json +++ b/core/l10n/lv.json @@ -41,6 +41,7 @@ "Already up to date" : "Jau ir jaunākā", "Settings" : "Iestatījumi", "Connection to server lost" : "Zaudēts savienojums ar serveri", + "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Problēma ielādējot lapu, pārlādēšana pēc %n sekundēm","Problēma ielādējot lapu, pārlādēšana pēc %n sekundēm","Problēma ielādējot lapu, pārlādēšana pēc %n sekundēm"], "Saving..." : "Saglabā...", "Dismiss" : "Atmest", "Authentication required" : "Nepieciešama autentifikācija", @@ -119,8 +120,11 @@ "Share" : "Koplietot", "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Koplietot ar personām, kas atrodas citos serveros, izmantojot Federated Cloud ID username@example.com/nextcloud", "Share with users or by mail..." : "Koplietot ar lietotājiem vai izmantojot e-pastu...", + "Share with users or remote users..." : "Koplietot ar lietotājiem vai attāliem lietotājiem...", + "Share with users, remote users or by mail..." : "Koplietot ar lietotājiem, attāliem lietotājiem vai izmantojot e-pastu...", "Share with users or groups..." : "Koplietot ar lietotājiem vai grupām...", "Share with users, groups or by mail..." : "Koplietot ar lietotājiem, grupām vai izmantojot e-pastu...", + "Share with users, groups or remote users..." : "Koplietot ar lietotājiem, grupām vai attāliem lietotājiem...", "Share with users..." : "Koplietots ar lietotājiem...", "Error removing share" : "Kļūda, noņemot koplietošanu", "restricted" : "ierobežots", @@ -140,6 +144,7 @@ "Hello {name}, the weather is {weather}" : "Sveiks {name}, laiks ir {weather}", "Hello {name}" : "Sveiks {name}", "new" : "jauns", + "_download %n file_::_download %n files_" : ["lejupielādēt %n failus","lejupielādēt %n failus","lejupielādēt %n failus"], "Update to {version}" : "Atjaunināts uz {version}", "An error occurred." : "Radās kļūda.", "Please reload the page." : "Lūdzu, atkārtoti ielādējiet lapu.", @@ -184,6 +189,7 @@ "Database name" : "Datubāzes nosaukums", "Database tablespace" : "Datubāzes tabulas telpa", "Database host" : "Datubāzes serveris", + "Please specify the port number along with the host name (e.g., localhost:5432)." : "Lūdzu, norādiet porta numuru kopā ar resursdatora nosaukumu (piemēram, localhost: 5432).", "Performance warning" : "Veiktspējas brīdinājums", "SQLite will be used as database." : "SQLite tiks izmantota kā datu bāze.", "Finish setup" : "Pabeigt iestatīšanu", @@ -226,6 +232,9 @@ "Please use the command line updater because you have a big instance." : "Lūdzu, izmantojiet komandrindas atjauninātāju, jo jums ir liels datu apjoms.", "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Lai saņemtu palīdzību, skatiet <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentāciju</a>.", "This %s instance is currently in maintenance mode, which may take a while." : "Šis %s serveris pašlaik darbojas uzturēšanas režīmā, tas var ilgt kādu laiku.", + "Error loading tags" : "Kļūda ielādējot birkas", + "Tag already exists" : "Birka jau pastāv", + "Error deleting tag(s)" : "Kļūda dzēšot birku(as)", "Error tagging" : "Kļūda atzīmējot", "Error untagging" : "Kļūda noņemot atzīmi", "Couldn't send mail to following users: %s " : "Nevarēja nosūtīt e-pastu sekojošiem lietotājiem: %s", @@ -275,6 +284,7 @@ "Nov." : "Nov.", "Dec." : "Dec.", "Problem loading page, reloading in 5 seconds" : "Problēma ielādējot lapu, pārlādēšana pēc 5 sekundēm", + "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Jūsu faili ir šifrēti. Ja neesat iespējojis atkopšanas atslēgu, nevarēsiet atgūt datus atpakaļ, pēc jūsu paroles atiestatīšanas.<br />Ja neesat pārliecināts par to, ko darīt, lūdzu, pirms turpināt, sazinieties ar administratoru. <br />Vai tiešām vēlaties turpināt?", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Šim serverim nav interneta savienojuma. Tas nozīmē, ka daži līdzekļi, piemēram, ārējo atmiņas montāžas vai trešās puses lietojumprogrammu paziņojumi par atjauninājumiem nedarbosies. Attāli piekļūt failiem un nosūtīt paziņojumu uz e-pastu, iespējams nedarbosies. Mēs ierosinām, izveidot interneta savienojumu ar šo serveri, ja vēlaties, lai visas funkcijas darbotos.", "Hide file listing" : "Paslēpt datņu sarakstu", "Sending ..." : "Sūta...", diff --git a/core/l10n/nl.js b/core/l10n/nl.js index 3e857b0f4cf..6d77d1c52d2 100644 --- a/core/l10n/nl.js +++ b/core/l10n/nl.js @@ -141,6 +141,8 @@ OC.L10N.register( "access control" : "toegangscontrole", "Could not unshare" : "Kon delen niet ongedaan maken", "Share details could not be loaded for this item." : "Details van shares voor dit object konden niet worden geladen.", + "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Minimaal {count} karakter benodigd voor automatisch aanvullen","Minimaal {count} karakters benodigd voor automatisch aanvullen"], + "This list is maybe truncated - please refine your search term to see more results." : "Deze lijst is misschien afgekapt - verfijn de zoekterm om meer resultaten te zien.", "No users or groups found for {search}" : "Geen gebruikers of groepen gevonden voor {search}", "No users found for {search}" : "Geen gebruikers gevonden voor {search}", "An error occurred. Please try again" : "Er trad een fout op. Probeer het opnieuw", diff --git a/core/l10n/nl.json b/core/l10n/nl.json index fa22378f2cc..e568f42fc34 100644 --- a/core/l10n/nl.json +++ b/core/l10n/nl.json @@ -139,6 +139,8 @@ "access control" : "toegangscontrole", "Could not unshare" : "Kon delen niet ongedaan maken", "Share details could not be loaded for this item." : "Details van shares voor dit object konden niet worden geladen.", + "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Minimaal {count} karakter benodigd voor automatisch aanvullen","Minimaal {count} karakters benodigd voor automatisch aanvullen"], + "This list is maybe truncated - please refine your search term to see more results." : "Deze lijst is misschien afgekapt - verfijn de zoekterm om meer resultaten te zien.", "No users or groups found for {search}" : "Geen gebruikers of groepen gevonden voor {search}", "No users found for {search}" : "Geen gebruikers gevonden voor {search}", "An error occurred. Please try again" : "Er trad een fout op. Probeer het opnieuw", diff --git a/core/l10n/pl.js b/core/l10n/pl.js index 4c906ea9dd0..f6077207bcf 100644 --- a/core/l10n/pl.js +++ b/core/l10n/pl.js @@ -141,6 +141,8 @@ OC.L10N.register( "access control" : "kontrola dostępu", "Could not unshare" : "Nie udało się usunąć udostępnienia", "Share details could not be loaded for this item." : "Szczegóły udziału nie mogły zostać wczytane dla tego obiektu.", + "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Do automatycznego uzupełnienia potrzebny jest co najmniej {count} znak","Do automatycznego uzupełnienia potrzebnych jest co najmniej {count} znaków","Do automatycznego uzupełnienia potrzebnych jest co najmniej {count} znaków","Do automatycznego uzupełnienia potrzebnych jest co najmniej {count} znaków"], + "This list is maybe truncated - please refine your search term to see more results." : "Ta lista może być obcięta - proszę bardziej określić fraze wyszukiwania, aby zobaczyć więcej wyników.", "No users or groups found for {search}" : "Nie znaleziono użytkowników lub grup dla {search}", "No users found for {search}" : "Nie znaleziono użytkowników dla {search}", "An error occurred. Please try again" : "Wystąpił błąd. Proszę spróbować ponownie.", diff --git a/core/l10n/pl.json b/core/l10n/pl.json index 0324fd3175c..e4145d1d742 100644 --- a/core/l10n/pl.json +++ b/core/l10n/pl.json @@ -139,6 +139,8 @@ "access control" : "kontrola dostępu", "Could not unshare" : "Nie udało się usunąć udostępnienia", "Share details could not be loaded for this item." : "Szczegóły udziału nie mogły zostać wczytane dla tego obiektu.", + "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Do automatycznego uzupełnienia potrzebny jest co najmniej {count} znak","Do automatycznego uzupełnienia potrzebnych jest co najmniej {count} znaków","Do automatycznego uzupełnienia potrzebnych jest co najmniej {count} znaków","Do automatycznego uzupełnienia potrzebnych jest co najmniej {count} znaków"], + "This list is maybe truncated - please refine your search term to see more results." : "Ta lista może być obcięta - proszę bardziej określić fraze wyszukiwania, aby zobaczyć więcej wyników.", "No users or groups found for {search}" : "Nie znaleziono użytkowników lub grup dla {search}", "No users found for {search}" : "Nie znaleziono użytkowników dla {search}", "An error occurred. Please try again" : "Wystąpił błąd. Proszę spróbować ponownie.", diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js index fb033408f85..44c34893951 100644 --- a/core/l10n/pt_BR.js +++ b/core/l10n/pt_BR.js @@ -141,6 +141,8 @@ OC.L10N.register( "access control" : "controle de acesso", "Could not unshare" : "Não foi possível descompartilhar", "Share details could not be loaded for this item." : "Detalhes de compartilhamento não puderam ser carregados para este item.", + "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Pelo menos {count} caractere é necessário para completar automaticamente","Pelo menos {count} caracteres são necessários para completar automaticamente"], + "This list is maybe truncated - please refine your search term to see more results." : "Esta lista pode estar truncada: por favor refine seus termos de pesquisa para ver mais resultados", "No users or groups found for {search}" : "Nenhum usuário grupo encontrado para {search}", "No users found for {search}" : "Nenhum usuário encontrado para {search}", "An error occurred. Please try again" : "Ocorreu um erro. Por favor tente novamente", diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json index ed6c774c326..2abac850f61 100644 --- a/core/l10n/pt_BR.json +++ b/core/l10n/pt_BR.json @@ -139,6 +139,8 @@ "access control" : "controle de acesso", "Could not unshare" : "Não foi possível descompartilhar", "Share details could not be loaded for this item." : "Detalhes de compartilhamento não puderam ser carregados para este item.", + "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Pelo menos {count} caractere é necessário para completar automaticamente","Pelo menos {count} caracteres são necessários para completar automaticamente"], + "This list is maybe truncated - please refine your search term to see more results." : "Esta lista pode estar truncada: por favor refine seus termos de pesquisa para ver mais resultados", "No users or groups found for {search}" : "Nenhum usuário grupo encontrado para {search}", "No users found for {search}" : "Nenhum usuário encontrado para {search}", "An error occurred. Please try again" : "Ocorreu um erro. Por favor tente novamente", diff --git a/core/l10n/ru.js b/core/l10n/ru.js index 7e83de69a7e..e3a1f197141 100644 --- a/core/l10n/ru.js +++ b/core/l10n/ru.js @@ -141,6 +141,8 @@ OC.L10N.register( "access control" : "контроль доступа", "Could not unshare" : "Не удалось отменить доступ", "Share details could not be loaded for this item." : "Не удалось загрузить информацию об общем доступе для этого элемента.", + "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Для автозавершения требуется как минимум {count} символ.","Для автозавершения требуется как минимум {count} символа.","Для автозавершения требуется как минимум {count} символов.","Для автозавершения требуется как минимум {count} символа."], + "This list is maybe truncated - please refine your search term to see more results." : "Этот список может быть показан не полностью - уточните запрос что бы просмотреть больше результатов.", "No users or groups found for {search}" : "Не найдено пользователей или групп по запросу {search}", "No users found for {search}" : "Не найдено пользователей по запросу {search}", "An error occurred. Please try again" : "Произошла ошибка. Попробуйте ещё раз", diff --git a/core/l10n/ru.json b/core/l10n/ru.json index 9dadc561845..6f438698166 100644 --- a/core/l10n/ru.json +++ b/core/l10n/ru.json @@ -139,6 +139,8 @@ "access control" : "контроль доступа", "Could not unshare" : "Не удалось отменить доступ", "Share details could not be loaded for this item." : "Не удалось загрузить информацию об общем доступе для этого элемента.", + "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Для автозавершения требуется как минимум {count} символ.","Для автозавершения требуется как минимум {count} символа.","Для автозавершения требуется как минимум {count} символов.","Для автозавершения требуется как минимум {count} символа."], + "This list is maybe truncated - please refine your search term to see more results." : "Этот список может быть показан не полностью - уточните запрос что бы просмотреть больше результатов.", "No users or groups found for {search}" : "Не найдено пользователей или групп по запросу {search}", "No users found for {search}" : "Не найдено пользователей по запросу {search}", "An error occurred. Please try again" : "Произошла ошибка. Попробуйте ещё раз", diff --git a/core/register_command.php b/core/register_command.php index 6f31adafe92..288ee9590b7 100644 --- a/core/register_command.php +++ b/core/register_command.php @@ -123,7 +123,6 @@ if (\OC::$server->getConfig()->getSystemValue('installed', false)) { $application->add(new OC\Core\Command\Maintenance\Mimetype\UpdateDB(\OC::$server->getMimeTypeDetector(), \OC::$server->getMimeTypeLoader())); $application->add(new OC\Core\Command\Maintenance\Mimetype\UpdateJS(\OC::$server->getMimeTypeDetector())); $application->add(new OC\Core\Command\Maintenance\Mode(\OC::$server->getConfig())); - $application->add(new OC\Core\Command\Maintenance\SingleUser(\OC::$server->getConfig())); $application->add(new OC\Core\Command\Maintenance\UpdateHtaccess()); $application->add(new OC\Core\Command\Upgrade(\OC::$server->getConfig(), \OC::$server->getLogger())); diff --git a/core/search/css/results.css b/core/search/css/results.css index fd07561d133..e55c2926fd7 100644 --- a/core/search/css/results.css +++ b/core/search/css/results.css @@ -69,6 +69,7 @@ } .has-favorites:not(.hidden) ~ #searchresults td.icon { width: 86px; + background-size: 32px; } #searchresults tr.template { @@ -50,11 +50,6 @@ try { exit; } - if (\OC::$server->getSystemConfig()->getValue('singleuser', false)) { - \OCP\Util::writeLog('cron', 'We are in admin only mode, skipping cron', \OCP\Util::DEBUG); - exit; - } - // load all apps to get all api routes properly setup OC_App::loadApps(); diff --git a/lib/base.php b/lib/base.php index 9f480c0b0dc..c63efb359cc 100644 --- a/lib/base.php +++ b/lib/base.php @@ -286,32 +286,6 @@ class OC { } } - public static function checkSingleUserMode($lockIfNoUserLoggedIn = false) { - if (!\OC::$server->getSystemConfig()->getValue('singleuser', false)) { - return; - } - $user = OC_User::getUserSession()->getUser(); - if ($user) { - $group = \OC::$server->getGroupManager()->get('admin'); - if ($group->inGroup($user)) { - return; - } - } else { - if(!$lockIfNoUserLoggedIn) { - return; - } - } - // send http status 503 - header('HTTP/1.1 503 Service Temporarily Unavailable'); - header('Status: 503 Service Temporarily Unavailable'); - header('Retry-After: 120'); - - // render error page - $template = new OC_Template('', 'singleuser.user', 'guest'); - $template->printPage(); - die(); - } - /** * Checks if the version requires an update and shows * @param bool $showTemplate Whether an update screen should get shown @@ -990,7 +964,6 @@ class OC { OC_App::loadApps(array('filesystem', 'logging')); OC_App::loadApps(); } - self::checkSingleUserMode(); OC_Util::setupFS(); OC::$server->getRouter()->match(\OC::$server->getRequest()->getRawPathInfo()); return; diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php index 5bd9da04072..9a1ede021a7 100644 --- a/lib/composer/composer/autoload_classmap.php +++ b/lib/composer/composer/autoload_classmap.php @@ -411,7 +411,6 @@ return array( 'OC\\Core\\Command\\Maintenance\\Mimetype\\UpdateJS' => $baseDir . '/core/Command/Maintenance/Mimetype/UpdateJS.php', 'OC\\Core\\Command\\Maintenance\\Mode' => $baseDir . '/core/Command/Maintenance/Mode.php', 'OC\\Core\\Command\\Maintenance\\Repair' => $baseDir . '/core/Command/Maintenance/Repair.php', - 'OC\\Core\\Command\\Maintenance\\SingleUser' => $baseDir . '/core/Command/Maintenance/SingleUser.php', 'OC\\Core\\Command\\Maintenance\\UpdateHtaccess' => $baseDir . '/core/Command/Maintenance/UpdateHtaccess.php', 'OC\\Core\\Command\\Security\\ImportCertificate' => $baseDir . '/core/Command/Security/ImportCertificate.php', 'OC\\Core\\Command\\Security\\ListCertificates' => $baseDir . '/core/Command/Security/ListCertificates.php', @@ -679,13 +678,8 @@ return array( 'OC\\RedisFactory' => $baseDir . '/lib/private/RedisFactory.php', 'OC\\Repair' => $baseDir . '/lib/private/Repair.php', 'OC\\RepairException' => $baseDir . '/lib/private/RepairException.php', - 'OC\\Repair\\AssetCache' => $baseDir . '/lib/private/Repair/AssetCache.php', 'OC\\Repair\\CleanTags' => $baseDir . '/lib/private/Repair/CleanTags.php', 'OC\\Repair\\Collation' => $baseDir . '/lib/private/Repair/Collation.php', - 'OC\\Repair\\DropOldJobs' => $baseDir . '/lib/private/Repair/DropOldJobs.php', - 'OC\\Repair\\DropOldTables' => $baseDir . '/lib/private/Repair/DropOldTables.php', - 'OC\\Repair\\FillETags' => $baseDir . '/lib/private/Repair/FillETags.php', - 'OC\\Repair\\InnoDB' => $baseDir . '/lib/private/Repair/InnoDB.php', 'OC\\Repair\\MoveUpdaterStepFile' => $baseDir . '/lib/private/Repair/MoveUpdaterStepFile.php', 'OC\\Repair\\NC11\\CleanPreviews' => $baseDir . '/lib/private/Repair/NC11/CleanPreviews.php', 'OC\\Repair\\NC11\\CleanPreviewsBackgroundJob' => $baseDir . '/lib/private/Repair/NC11/CleanPreviewsBackgroundJob.php', @@ -693,18 +687,10 @@ return array( 'OC\\Repair\\NC11\\MoveAvatars' => $baseDir . '/lib/private/Repair/NC11/MoveAvatars.php', 'OC\\Repair\\NC11\\MoveAvatarsBackgroundJob' => $baseDir . '/lib/private/Repair/NC11/MoveAvatarsBackgroundJob.php', 'OC\\Repair\\OldGroupMembershipShares' => $baseDir . '/lib/private/Repair/OldGroupMembershipShares.php', - 'OC\\Repair\\Preview' => $baseDir . '/lib/private/Repair/Preview.php', - 'OC\\Repair\\RemoveGetETagEntries' => $baseDir . '/lib/private/Repair/RemoveGetETagEntries.php', - 'OC\\Repair\\RemoveOldShares' => $baseDir . '/lib/private/Repair/RemoveOldShares.php', 'OC\\Repair\\RemoveRootShares' => $baseDir . '/lib/private/Repair/RemoveRootShares.php', 'OC\\Repair\\RepairInvalidShares' => $baseDir . '/lib/private/Repair/RepairInvalidShares.php', 'OC\\Repair\\RepairMimeTypes' => $baseDir . '/lib/private/Repair/RepairMimeTypes.php', - 'OC\\Repair\\RepairUnmergedShares' => $baseDir . '/lib/private/Repair/RepairUnmergedShares.php', - 'OC\\Repair\\SearchLuceneTables' => $baseDir . '/lib/private/Repair/SearchLuceneTables.php', - 'OC\\Repair\\SharePropagation' => $baseDir . '/lib/private/Repair/SharePropagation.php', 'OC\\Repair\\SqliteAutoincrement' => $baseDir . '/lib/private/Repair/SqliteAutoincrement.php', - 'OC\\Repair\\UpdateCertificateStore' => $baseDir . '/lib/private/Repair/UpdateCertificateStore.php', - 'OC\\Repair\\UpdateOutdatedOcsIds' => $baseDir . '/lib/private/Repair/UpdateOutdatedOcsIds.php', 'OC\\RichObjectStrings\\Validator' => $baseDir . '/lib/private/RichObjectStrings/Validator.php', 'OC\\Route\\CachingRouter' => $baseDir . '/lib/private/Route/CachingRouter.php', 'OC\\Route\\Route' => $baseDir . '/lib/private/Route/Route.php', diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php index 475b4c15542..329773cd6eb 100644 --- a/lib/composer/composer/autoload_static.php +++ b/lib/composer/composer/autoload_static.php @@ -441,7 +441,6 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\Core\\Command\\Maintenance\\Mimetype\\UpdateJS' => __DIR__ . '/../../..' . '/core/Command/Maintenance/Mimetype/UpdateJS.php', 'OC\\Core\\Command\\Maintenance\\Mode' => __DIR__ . '/../../..' . '/core/Command/Maintenance/Mode.php', 'OC\\Core\\Command\\Maintenance\\Repair' => __DIR__ . '/../../..' . '/core/Command/Maintenance/Repair.php', - 'OC\\Core\\Command\\Maintenance\\SingleUser' => __DIR__ . '/../../..' . '/core/Command/Maintenance/SingleUser.php', 'OC\\Core\\Command\\Maintenance\\UpdateHtaccess' => __DIR__ . '/../../..' . '/core/Command/Maintenance/UpdateHtaccess.php', 'OC\\Core\\Command\\Security\\ImportCertificate' => __DIR__ . '/../../..' . '/core/Command/Security/ImportCertificate.php', 'OC\\Core\\Command\\Security\\ListCertificates' => __DIR__ . '/../../..' . '/core/Command/Security/ListCertificates.php', @@ -709,13 +708,8 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\RedisFactory' => __DIR__ . '/../../..' . '/lib/private/RedisFactory.php', 'OC\\Repair' => __DIR__ . '/../../..' . '/lib/private/Repair.php', 'OC\\RepairException' => __DIR__ . '/../../..' . '/lib/private/RepairException.php', - 'OC\\Repair\\AssetCache' => __DIR__ . '/../../..' . '/lib/private/Repair/AssetCache.php', 'OC\\Repair\\CleanTags' => __DIR__ . '/../../..' . '/lib/private/Repair/CleanTags.php', 'OC\\Repair\\Collation' => __DIR__ . '/../../..' . '/lib/private/Repair/Collation.php', - 'OC\\Repair\\DropOldJobs' => __DIR__ . '/../../..' . '/lib/private/Repair/DropOldJobs.php', - 'OC\\Repair\\DropOldTables' => __DIR__ . '/../../..' . '/lib/private/Repair/DropOldTables.php', - 'OC\\Repair\\FillETags' => __DIR__ . '/../../..' . '/lib/private/Repair/FillETags.php', - 'OC\\Repair\\InnoDB' => __DIR__ . '/../../..' . '/lib/private/Repair/InnoDB.php', 'OC\\Repair\\MoveUpdaterStepFile' => __DIR__ . '/../../..' . '/lib/private/Repair/MoveUpdaterStepFile.php', 'OC\\Repair\\NC11\\CleanPreviews' => __DIR__ . '/../../..' . '/lib/private/Repair/NC11/CleanPreviews.php', 'OC\\Repair\\NC11\\CleanPreviewsBackgroundJob' => __DIR__ . '/../../..' . '/lib/private/Repair/NC11/CleanPreviewsBackgroundJob.php', @@ -723,18 +717,10 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\Repair\\NC11\\MoveAvatars' => __DIR__ . '/../../..' . '/lib/private/Repair/NC11/MoveAvatars.php', 'OC\\Repair\\NC11\\MoveAvatarsBackgroundJob' => __DIR__ . '/../../..' . '/lib/private/Repair/NC11/MoveAvatarsBackgroundJob.php', 'OC\\Repair\\OldGroupMembershipShares' => __DIR__ . '/../../..' . '/lib/private/Repair/OldGroupMembershipShares.php', - 'OC\\Repair\\Preview' => __DIR__ . '/../../..' . '/lib/private/Repair/Preview.php', - 'OC\\Repair\\RemoveGetETagEntries' => __DIR__ . '/../../..' . '/lib/private/Repair/RemoveGetETagEntries.php', - 'OC\\Repair\\RemoveOldShares' => __DIR__ . '/../../..' . '/lib/private/Repair/RemoveOldShares.php', 'OC\\Repair\\RemoveRootShares' => __DIR__ . '/../../..' . '/lib/private/Repair/RemoveRootShares.php', 'OC\\Repair\\RepairInvalidShares' => __DIR__ . '/../../..' . '/lib/private/Repair/RepairInvalidShares.php', 'OC\\Repair\\RepairMimeTypes' => __DIR__ . '/../../..' . '/lib/private/Repair/RepairMimeTypes.php', - 'OC\\Repair\\RepairUnmergedShares' => __DIR__ . '/../../..' . '/lib/private/Repair/RepairUnmergedShares.php', - 'OC\\Repair\\SearchLuceneTables' => __DIR__ . '/../../..' . '/lib/private/Repair/SearchLuceneTables.php', - 'OC\\Repair\\SharePropagation' => __DIR__ . '/../../..' . '/lib/private/Repair/SharePropagation.php', 'OC\\Repair\\SqliteAutoincrement' => __DIR__ . '/../../..' . '/lib/private/Repair/SqliteAutoincrement.php', - 'OC\\Repair\\UpdateCertificateStore' => __DIR__ . '/../../..' . '/lib/private/Repair/UpdateCertificateStore.php', - 'OC\\Repair\\UpdateOutdatedOcsIds' => __DIR__ . '/../../..' . '/lib/private/Repair/UpdateOutdatedOcsIds.php', 'OC\\RichObjectStrings\\Validator' => __DIR__ . '/../../..' . '/lib/private/RichObjectStrings/Validator.php', 'OC\\Route\\CachingRouter' => __DIR__ . '/../../..' . '/lib/private/Route/CachingRouter.php', 'OC\\Route\\Route' => __DIR__ . '/../../..' . '/lib/private/Route/Route.php', diff --git a/lib/l10n/eu.js b/lib/l10n/eu.js new file mode 100644 index 00000000000..9fd865bc5af --- /dev/null +++ b/lib/l10n/eu.js @@ -0,0 +1,185 @@ +OC.L10N.register( + "lib", + { + "Cannot write into \"config\" directory!" : "Ezin da idatzi \"config\" karpetan!", + "This can usually be fixed by giving the webserver write access to the config directory" : "Hau normalean konpondu daitekesweb zerbitzarira config karpetan idazteko baimenak emanez", + "See %s" : "Ikusi %s", + "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Hau normalean konpondu daiteke %sweb zerbitzarira config karpetan idazteko baimenak emanez%s.", + "Sample configuration detected" : "Adibide-ezarpena detektatua", + "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Detektatu da adibide-ezarpena kopiatu dela. Honek zure instalazioa apur dezake eta ez da onartzen. Irakurri dokumentazioa config.php fitxategia aldatu aurretik.", + "%1$s and %2$s" : "%1$s eta %2$s", + "%1$s, %2$s and %3$s" : "%1$s, %2$s eta %3$s", + "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s eta %4$s", + "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s eta %5$s", + "PHP %s or higher is required." : "PHP %s edo berriagoa behar da.", + "PHP with a version lower than %s is required." : "PHPren bertsioa %s baino txikiagoa izan behar da.", + "Following databases are supported: %s" : "Hurrengo datubaseak onartzen dira: %s", + "The command line tool %s could not be found" : "Komando lerroko %s tresna ezin da aurkitu", + "The library %s is not available." : "%s liburutegia ez dago eskuragarri.", + "Library %s with a version higher than %s is required - available version %s." : "%s liburutegiak %s baino bertsio handiagoa izan behar du - dagoen bertsioa %s.", + "Library %s with a version lower than %s is required - available version %s." : "%s liburutegiak %s baino bertsio txikiagoa izan behar du - dagoen bertsioa %s.", + "Following platforms are supported: %s" : "Hurrengo plataformak onartzen dira: %s", + "Unknown filetype" : "Fitxategi mota ezezaguna", + "Invalid image" : "Baliogabeko irudia", + "Avatar image is not square" : "Abatarreko irudia ez da karratua", + "today" : "gaur", + "yesterday" : "atzo", + "_%n day ago_::_%n days ago_" : ["orain dela egun %n","orain dela %n egun"], + "last month" : "joan den hilabetean", + "_%n month ago_::_%n months ago_" : ["orain dela hilabete %n","orain dela %n hilabete"], + "last year" : "joan den urtean", + "_%n year ago_::_%n years ago_" : ["orain dela urte %n","orain dela %n urte"], + "_%n hour ago_::_%n hours ago_" : ["orain dela ordu %n","orain dela %n ordu"], + "_%n minute ago_::_%n minutes ago_" : ["orain dela minutu %n","orain dela %n minutu"], + "seconds ago" : "duela segundu batzuk", + "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "%s id duen modulua ez da existitzen. Mesedez, gaitu ezazu zure aplikazio ezarpenetan, edo jarri harremanetan administratzailearekin.", + "File name is a reserved word" : "Fitxategi izena hitz erreserbatua da", + "File name contains at least one invalid character" : "Fitxategi izenak behintzat baliogabeko karaktere bat du", + "File name is too long" : "Fitxategi-izena luzeegia da", + "Dot files are not allowed" : "Dot fitxategiak ez dira onartzen", + "Empty filename is not allowed" : "Fitxategiaren izena izin da hutsa izan", + "APCu" : "APCu", + "Redis" : "Redis", + "Server settings" : "Zerbitzariaren ezarpenak", + "Sharing" : "Partekatze", + "Encryption" : "Enkriptazio", + "Additional settings" : "Ezarpen gehiago", + "Tips & tricks" : "Aholkuak eta trikimailuak", + "%s enter the database username and name." : "%s sartu datu-basearen erabiltzaile-izena eta izena.", + "%s enter the database username." : "%s sartu datu basearen erabiltzaile izena.", + "%s enter the database name." : "%s sartu datu basearen izena.", + "%s you may not use dots in the database name" : "%s ezin duzu punturik erabili datu basearen izenean.", + "Oracle connection could not be established" : "Ezin da Oracle konexioa sortu", + "Oracle username and/or password not valid" : "Oracle erabiltzaile edota pasahitza ez dira egokiak.", + "DB Error: \"%s\"" : "DB errorea: \"%s\"", + "Offending command was: \"%s\"" : "Errorea komando honek sortu du: \"%s\"", + "You need to enter either an existing account or the administrator." : "Existitzen den kontu bat edo administradorearena jarri behar duzu.", + "Offending command was: \"%s\", name: %s, password: %s" : "Errorea komando honek sortu du: \"%s\", izena: %s, pasahitza: %s", + "PostgreSQL username and/or password not valid" : "PostgreSQL erabiltzaile edota pasahitza ez dira egokiak.", + "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X-ek ez du sostengurik eta %s gaizki ibili daiteke plataforma honetan. Erabiltzekotan, zure ardurapean.", + "For the best results, please consider using a GNU/Linux server instead." : "Emaitza hobeak izateko, mesedez gogoan hartu GNU/Linux zerbitzari bat erabiltzea.", + "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Mesedez ezabatu open_basedir ezarpena zure php.ini-tik edo aldatu 64-biteko PHPra.", + "Set an admin username." : "Ezarri administraziorako erabiltzaile izena.", + "Set an admin password." : "Ezarri administraziorako pasahitza.", + "Can't create or write into the data directory %s" : "Ezin da %s datu karpeta sortu edo bertan idatzi ", + "%s shared »%s« with you" : "%s-ek »%s« zurekin partekatu du", + "Sharing %s failed, because the backend does not allow shares from type %i" : "%s partekatzeak huts egin du, motorrak %i motako partekatzeak baimentzen ez dituelako", + "Sharing %s failed, because the file does not exist" : "%s elkarbanatzeak huts egin du, fitxategia ez delako existitzen", + "You are not allowed to share %s" : "Ez zadue %s elkarbanatzeko baimendua", + "Sharing %s failed, because the user %s does not exist" : "%s elkarbanatzeak huts egin du, %s erabiltzailea existitzen ez delako", + "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "%s elkarbanatzeak huts egin du, %s erabiltzailea ez delako %s partaide den talderen bateko partaidea", + "Sharing %s failed, because this item is already shared with %s" : "%s elkarbanatzeak huts egin du, dagoeneko %s erabiltzailearekin elkarbanatuta dagoelako", + "Sharing %s failed, because the group %s does not exist" : "%s elkarbanatzeak huts egin du, %s taldea ez delako existitzen", + "Sharing %s failed, because %s is not a member of the group %s" : "%s elkarbanatzeak huts egin du, %s ez delako %s taldearen partaidea", + "You need to provide a password to create a public link, only protected links are allowed" : "Lotura publiko bat sortzeko pasahitza idatzi behar duzu, bakarrik babestutako loturak baimenduta daude", + "Sharing %s failed, because sharing with links is not allowed" : "%s elkarbanatzeak huts egin du, lotura bidezko elkarbanatzea baimendua ez dagoelako", + "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "%s partekatzeak huts egin du, ezin da %s aurkitu, agian zerbitzaria orain ez dago eskuragarri.", + "Share type %s is not valid for %s" : "%s elkarbanaketa mota ez da %srentzako egokia", + "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "%srentzako baimenak ezartzea huts egin du, baimenak %sri emandakoak baino gehiago direlako", + "Setting permissions for %s failed, because the item was not found" : "%srentzako baimenak ezartzea huts egin du, aurkitu ez delako", + "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Ezin izan da jarri iraungitze data. Konpartitzea ezin da iraungi konpartitu eta %s ondoren.", + "Cannot set expiration date. Expiration date is in the past" : "Ezin da jarri iraungitze data. Iraungitze data iragan da.", + "Sharing backend %s must implement the interface OCP\\Share_Backend" : "%s elkarbanaketa motorra OCP\\Share_Backend interfazea inplementatu behar du ", + "Sharing backend %s not found" : "Ez da %s elkarbanaketa motorra aurkitu", + "Sharing backend for %s not found" : "Ez da %srako elkarbanaketa motorrik aurkitu", + "Sharing %s failed, because the permissions exceed permissions granted to %s" : "%s elkarbanatzeak huts egin du, baimenak %sri emandakoak baino gehiago direlako", + "Sharing %s failed, because resharing is not allowed" : "%s elkarbanatzeak huts egin du, ber-elkarbanatzea baimenduta ez dagoelako", + "Sharing %s failed, because the sharing backend for %s could not find its source" : "%s elkarbanatzeak huts egin du, %sren elkarbanaketa motorrak bere iturria aurkitu ezin duelako", + "Sharing %s failed, because the file could not be found in the file cache" : "%s elkarbanatzeak huts egin du, fitxategia katxean aurkitu ez delako", + "Could not find category \"%s\"" : "Ezin da \"%s\" kategoria aurkitu", + "Sunday" : "Igandea", + "Monday" : "Astelehena", + "Tuesday" : "Asteartea", + "Wednesday" : "Asteazkena", + "Thursday" : "Osteguna", + "Friday" : "Ostirala", + "Saturday" : "Larunbata", + "Sun." : "Ig.", + "Mon." : "Al.", + "Tue." : "Ar.", + "Wed." : "Az.", + "Thu." : "Og.", + "Fri." : "Ol.", + "Sat." : "Lr.", + "Su" : "Ig", + "Mo" : "Al", + "Tu" : "Ar", + "We" : "Az", + "Th" : "Og", + "Fr" : "Ol", + "Sa" : "Lr", + "January" : "Urtarrila", + "February" : "Otsaila", + "March" : "Martxoa", + "April" : "Apirila", + "May" : "Maiatza", + "June" : "Ekaina", + "July" : "Uztaila", + "August" : "Abuztua", + "September" : "Iraila", + "October" : "Urria", + "November" : "Azaroa", + "December" : "Abendua", + "Jan." : "Urt.", + "Feb." : "Ots.", + "Mar." : "Mar.", + "Apr." : "Api.", + "May." : "Mai.", + "Jun." : "Eka.", + "Jul." : "Uzt.", + "Aug." : "Abu.", + "Sep." : "Ira.", + "Oct." : "Urr.", + "Nov." : "Aza.", + "Dec." : "Abe.", + "Apps" : "Aplikazioak", + "A valid username must be provided" : "Baliozko erabiltzaile izena eman behar da", + "A valid password must be provided" : "Baliozko pasahitza eman behar da", + "The username is already being used" : "Erabiltzaile izena dagoeneko erabiltzen ari da", + "Login canceled by app" : "Aplikazioa saioa bertan behera utzi du", + "User disabled" : "Erabiltzaile desgaituta", + "Help" : "Laguntza", + "Personal" : "Pertsonala", + "Users" : "Erabiltzaileak", + "Admin" : "Admin", + "No app name specified" : "Ez da aplikazioaren izena zehaztu", + "Application is not enabled" : "Aplikazioa ez dago gaituta", + "Authentication error" : "Autentifikazio errorea", + "Token expired. Please reload page." : "Tokena iraungitu da. Mesedez birkargatu orria.", + "Unknown user" : "Erabiltzaile ezezaguna", + "No database drivers (sqlite, mysql, or postgresql) installed." : "Ez dago datubaseen (sqlite, mysql edo postgresql) driverrik instalatuta.", + "Cannot write into \"config\" directory" : "Ezin da idatzi \"config\" karpetan", + "Cannot write into \"apps\" directory" : "Ezin da idatzi \"apps\" karpetan", + "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Hau normalean konpondu daiteke %sweb zerbitzarira apps karpetan idazteko baimenak emanez%s edo konfigurazio fitxategian appstorea ez gaituz.", + "Cannot create \"data\" directory (%s)" : "Ezin da \"data\" karpeta sortu (%s)", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Hau normalean konpondu daiteke %sweb zerbitzarira erro karpetan idazteko baimenak emanez%s.", + "Setting locale to %s failed" : "Lokala %sra ezartzeak huts egin du", + "Please install one of these locales on your system and restart your webserver." : "Instalatu hauetako lokal bat zure sisteman eta berrabiarazi zure web zerbitzaria.", + "Please ask your server administrator to install the module." : "Mesedez eskatu zure zerbitzariaren kudeatzaileari modulua instala dezan.", + "PHP module %s not installed." : "PHPren %s modulua ez dago instalaturik.", + "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Hau ziur aski cache/accelerator batek eragin du, hala nola Zend OPcache edo eAccelerator.", + "PHP modules have been installed, but they are still listed as missing?" : "PHP moduluak instalatu dira, baina oraindik faltan bezala markatuta daude?", + "Please ask your server administrator to restart the web server." : "Mesedez eskatu zerbitzariaren kudeatzaileari web zerbitzaria berrabiarazteko.", + "PostgreSQL >= 9 required" : "PostgreSQL >= 9 behar da", + "Please upgrade your database version" : "Mesedez eguneratu zure datu basearen bertsioa", + "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Mesedez aldatu baimenak 0770ra beste erabiltzaileek karpetan sartu ezin izateko.", + "Data directory (%s) is readable by other users" : "Data karpeta (%s) beste erabiltzaileek irakur dezakete", + "Data directory (%s) is invalid" : "Datuen karpeta (%s) ez da baliogarria", + "Please check that the data directory contains a file \".ocdata\" in its root." : "Mesedez egiaztatu data karpeta \".ocdata\" fitxategia duela bere erroan.", + "Could not obtain lock type %d on \"%s\"." : "Ezin da lortu sarraia mota %d \"%s\"-an.", + "App directory already exists" : "Aplikazioaren karpeta dagoeneko existitzen da", + "Can't create app folder. Please fix permissions. %s" : "Ezin izan da aplikazioaren karpeta sortu. Mesdez konpondu baimenak. %s", + "No source specified when installing app" : "Ez da jatorririk zehaztu aplikazioa instalatzerakoan", + "No href specified when installing app from http" : "Ez da href parametrorik zehaztu http bidez aplikazioa instalatzerakoan", + "No path specified when installing app from local file" : "Ez da kokalekurik zehaztu fitxategi lokal moduan aplikazioa instalatzerakoan", + "Archives of type %s are not supported" : "%s motako fitxategiak ez dira onartzen", + "Failed to open archive when installing app" : "Fitxategia irekitzeak huts egin du aplikazioa instalatzerakoan", + "App does not provide an info.xml file" : "Aplikazioak ez du info.xml fitxategia", + "App can't be installed because of not allowed code in the App" : "Aplikazioa ezin da instalatu bertan duen baimendu gabeko kodea dela eta", + "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Aplikazioa ezin da instalatu <shipped>true</shipped> etiketa duelako eta etiketa hau ez da onartzen banaketan ez datozen aplikazioetan", + "Logging" : "Erregistroa", + "Recommended" : "Aholkatuta", + "Microsoft Windows Platform is not supported" : "Microsoft Windows Platform ez da jasaten", + "Storage not available" : "Biltegia ez dago eskuragarri" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/eu.json b/lib/l10n/eu.json new file mode 100644 index 00000000000..ea50d2fd0b7 --- /dev/null +++ b/lib/l10n/eu.json @@ -0,0 +1,183 @@ +{ "translations": { + "Cannot write into \"config\" directory!" : "Ezin da idatzi \"config\" karpetan!", + "This can usually be fixed by giving the webserver write access to the config directory" : "Hau normalean konpondu daitekesweb zerbitzarira config karpetan idazteko baimenak emanez", + "See %s" : "Ikusi %s", + "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Hau normalean konpondu daiteke %sweb zerbitzarira config karpetan idazteko baimenak emanez%s.", + "Sample configuration detected" : "Adibide-ezarpena detektatua", + "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Detektatu da adibide-ezarpena kopiatu dela. Honek zure instalazioa apur dezake eta ez da onartzen. Irakurri dokumentazioa config.php fitxategia aldatu aurretik.", + "%1$s and %2$s" : "%1$s eta %2$s", + "%1$s, %2$s and %3$s" : "%1$s, %2$s eta %3$s", + "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s eta %4$s", + "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s eta %5$s", + "PHP %s or higher is required." : "PHP %s edo berriagoa behar da.", + "PHP with a version lower than %s is required." : "PHPren bertsioa %s baino txikiagoa izan behar da.", + "Following databases are supported: %s" : "Hurrengo datubaseak onartzen dira: %s", + "The command line tool %s could not be found" : "Komando lerroko %s tresna ezin da aurkitu", + "The library %s is not available." : "%s liburutegia ez dago eskuragarri.", + "Library %s with a version higher than %s is required - available version %s." : "%s liburutegiak %s baino bertsio handiagoa izan behar du - dagoen bertsioa %s.", + "Library %s with a version lower than %s is required - available version %s." : "%s liburutegiak %s baino bertsio txikiagoa izan behar du - dagoen bertsioa %s.", + "Following platforms are supported: %s" : "Hurrengo plataformak onartzen dira: %s", + "Unknown filetype" : "Fitxategi mota ezezaguna", + "Invalid image" : "Baliogabeko irudia", + "Avatar image is not square" : "Abatarreko irudia ez da karratua", + "today" : "gaur", + "yesterday" : "atzo", + "_%n day ago_::_%n days ago_" : ["orain dela egun %n","orain dela %n egun"], + "last month" : "joan den hilabetean", + "_%n month ago_::_%n months ago_" : ["orain dela hilabete %n","orain dela %n hilabete"], + "last year" : "joan den urtean", + "_%n year ago_::_%n years ago_" : ["orain dela urte %n","orain dela %n urte"], + "_%n hour ago_::_%n hours ago_" : ["orain dela ordu %n","orain dela %n ordu"], + "_%n minute ago_::_%n minutes ago_" : ["orain dela minutu %n","orain dela %n minutu"], + "seconds ago" : "duela segundu batzuk", + "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "%s id duen modulua ez da existitzen. Mesedez, gaitu ezazu zure aplikazio ezarpenetan, edo jarri harremanetan administratzailearekin.", + "File name is a reserved word" : "Fitxategi izena hitz erreserbatua da", + "File name contains at least one invalid character" : "Fitxategi izenak behintzat baliogabeko karaktere bat du", + "File name is too long" : "Fitxategi-izena luzeegia da", + "Dot files are not allowed" : "Dot fitxategiak ez dira onartzen", + "Empty filename is not allowed" : "Fitxategiaren izena izin da hutsa izan", + "APCu" : "APCu", + "Redis" : "Redis", + "Server settings" : "Zerbitzariaren ezarpenak", + "Sharing" : "Partekatze", + "Encryption" : "Enkriptazio", + "Additional settings" : "Ezarpen gehiago", + "Tips & tricks" : "Aholkuak eta trikimailuak", + "%s enter the database username and name." : "%s sartu datu-basearen erabiltzaile-izena eta izena.", + "%s enter the database username." : "%s sartu datu basearen erabiltzaile izena.", + "%s enter the database name." : "%s sartu datu basearen izena.", + "%s you may not use dots in the database name" : "%s ezin duzu punturik erabili datu basearen izenean.", + "Oracle connection could not be established" : "Ezin da Oracle konexioa sortu", + "Oracle username and/or password not valid" : "Oracle erabiltzaile edota pasahitza ez dira egokiak.", + "DB Error: \"%s\"" : "DB errorea: \"%s\"", + "Offending command was: \"%s\"" : "Errorea komando honek sortu du: \"%s\"", + "You need to enter either an existing account or the administrator." : "Existitzen den kontu bat edo administradorearena jarri behar duzu.", + "Offending command was: \"%s\", name: %s, password: %s" : "Errorea komando honek sortu du: \"%s\", izena: %s, pasahitza: %s", + "PostgreSQL username and/or password not valid" : "PostgreSQL erabiltzaile edota pasahitza ez dira egokiak.", + "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X-ek ez du sostengurik eta %s gaizki ibili daiteke plataforma honetan. Erabiltzekotan, zure ardurapean.", + "For the best results, please consider using a GNU/Linux server instead." : "Emaitza hobeak izateko, mesedez gogoan hartu GNU/Linux zerbitzari bat erabiltzea.", + "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Mesedez ezabatu open_basedir ezarpena zure php.ini-tik edo aldatu 64-biteko PHPra.", + "Set an admin username." : "Ezarri administraziorako erabiltzaile izena.", + "Set an admin password." : "Ezarri administraziorako pasahitza.", + "Can't create or write into the data directory %s" : "Ezin da %s datu karpeta sortu edo bertan idatzi ", + "%s shared »%s« with you" : "%s-ek »%s« zurekin partekatu du", + "Sharing %s failed, because the backend does not allow shares from type %i" : "%s partekatzeak huts egin du, motorrak %i motako partekatzeak baimentzen ez dituelako", + "Sharing %s failed, because the file does not exist" : "%s elkarbanatzeak huts egin du, fitxategia ez delako existitzen", + "You are not allowed to share %s" : "Ez zadue %s elkarbanatzeko baimendua", + "Sharing %s failed, because the user %s does not exist" : "%s elkarbanatzeak huts egin du, %s erabiltzailea existitzen ez delako", + "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "%s elkarbanatzeak huts egin du, %s erabiltzailea ez delako %s partaide den talderen bateko partaidea", + "Sharing %s failed, because this item is already shared with %s" : "%s elkarbanatzeak huts egin du, dagoeneko %s erabiltzailearekin elkarbanatuta dagoelako", + "Sharing %s failed, because the group %s does not exist" : "%s elkarbanatzeak huts egin du, %s taldea ez delako existitzen", + "Sharing %s failed, because %s is not a member of the group %s" : "%s elkarbanatzeak huts egin du, %s ez delako %s taldearen partaidea", + "You need to provide a password to create a public link, only protected links are allowed" : "Lotura publiko bat sortzeko pasahitza idatzi behar duzu, bakarrik babestutako loturak baimenduta daude", + "Sharing %s failed, because sharing with links is not allowed" : "%s elkarbanatzeak huts egin du, lotura bidezko elkarbanatzea baimendua ez dagoelako", + "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "%s partekatzeak huts egin du, ezin da %s aurkitu, agian zerbitzaria orain ez dago eskuragarri.", + "Share type %s is not valid for %s" : "%s elkarbanaketa mota ez da %srentzako egokia", + "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "%srentzako baimenak ezartzea huts egin du, baimenak %sri emandakoak baino gehiago direlako", + "Setting permissions for %s failed, because the item was not found" : "%srentzako baimenak ezartzea huts egin du, aurkitu ez delako", + "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Ezin izan da jarri iraungitze data. Konpartitzea ezin da iraungi konpartitu eta %s ondoren.", + "Cannot set expiration date. Expiration date is in the past" : "Ezin da jarri iraungitze data. Iraungitze data iragan da.", + "Sharing backend %s must implement the interface OCP\\Share_Backend" : "%s elkarbanaketa motorra OCP\\Share_Backend interfazea inplementatu behar du ", + "Sharing backend %s not found" : "Ez da %s elkarbanaketa motorra aurkitu", + "Sharing backend for %s not found" : "Ez da %srako elkarbanaketa motorrik aurkitu", + "Sharing %s failed, because the permissions exceed permissions granted to %s" : "%s elkarbanatzeak huts egin du, baimenak %sri emandakoak baino gehiago direlako", + "Sharing %s failed, because resharing is not allowed" : "%s elkarbanatzeak huts egin du, ber-elkarbanatzea baimenduta ez dagoelako", + "Sharing %s failed, because the sharing backend for %s could not find its source" : "%s elkarbanatzeak huts egin du, %sren elkarbanaketa motorrak bere iturria aurkitu ezin duelako", + "Sharing %s failed, because the file could not be found in the file cache" : "%s elkarbanatzeak huts egin du, fitxategia katxean aurkitu ez delako", + "Could not find category \"%s\"" : "Ezin da \"%s\" kategoria aurkitu", + "Sunday" : "Igandea", + "Monday" : "Astelehena", + "Tuesday" : "Asteartea", + "Wednesday" : "Asteazkena", + "Thursday" : "Osteguna", + "Friday" : "Ostirala", + "Saturday" : "Larunbata", + "Sun." : "Ig.", + "Mon." : "Al.", + "Tue." : "Ar.", + "Wed." : "Az.", + "Thu." : "Og.", + "Fri." : "Ol.", + "Sat." : "Lr.", + "Su" : "Ig", + "Mo" : "Al", + "Tu" : "Ar", + "We" : "Az", + "Th" : "Og", + "Fr" : "Ol", + "Sa" : "Lr", + "January" : "Urtarrila", + "February" : "Otsaila", + "March" : "Martxoa", + "April" : "Apirila", + "May" : "Maiatza", + "June" : "Ekaina", + "July" : "Uztaila", + "August" : "Abuztua", + "September" : "Iraila", + "October" : "Urria", + "November" : "Azaroa", + "December" : "Abendua", + "Jan." : "Urt.", + "Feb." : "Ots.", + "Mar." : "Mar.", + "Apr." : "Api.", + "May." : "Mai.", + "Jun." : "Eka.", + "Jul." : "Uzt.", + "Aug." : "Abu.", + "Sep." : "Ira.", + "Oct." : "Urr.", + "Nov." : "Aza.", + "Dec." : "Abe.", + "Apps" : "Aplikazioak", + "A valid username must be provided" : "Baliozko erabiltzaile izena eman behar da", + "A valid password must be provided" : "Baliozko pasahitza eman behar da", + "The username is already being used" : "Erabiltzaile izena dagoeneko erabiltzen ari da", + "Login canceled by app" : "Aplikazioa saioa bertan behera utzi du", + "User disabled" : "Erabiltzaile desgaituta", + "Help" : "Laguntza", + "Personal" : "Pertsonala", + "Users" : "Erabiltzaileak", + "Admin" : "Admin", + "No app name specified" : "Ez da aplikazioaren izena zehaztu", + "Application is not enabled" : "Aplikazioa ez dago gaituta", + "Authentication error" : "Autentifikazio errorea", + "Token expired. Please reload page." : "Tokena iraungitu da. Mesedez birkargatu orria.", + "Unknown user" : "Erabiltzaile ezezaguna", + "No database drivers (sqlite, mysql, or postgresql) installed." : "Ez dago datubaseen (sqlite, mysql edo postgresql) driverrik instalatuta.", + "Cannot write into \"config\" directory" : "Ezin da idatzi \"config\" karpetan", + "Cannot write into \"apps\" directory" : "Ezin da idatzi \"apps\" karpetan", + "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Hau normalean konpondu daiteke %sweb zerbitzarira apps karpetan idazteko baimenak emanez%s edo konfigurazio fitxategian appstorea ez gaituz.", + "Cannot create \"data\" directory (%s)" : "Ezin da \"data\" karpeta sortu (%s)", + "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Hau normalean konpondu daiteke %sweb zerbitzarira erro karpetan idazteko baimenak emanez%s.", + "Setting locale to %s failed" : "Lokala %sra ezartzeak huts egin du", + "Please install one of these locales on your system and restart your webserver." : "Instalatu hauetako lokal bat zure sisteman eta berrabiarazi zure web zerbitzaria.", + "Please ask your server administrator to install the module." : "Mesedez eskatu zure zerbitzariaren kudeatzaileari modulua instala dezan.", + "PHP module %s not installed." : "PHPren %s modulua ez dago instalaturik.", + "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Hau ziur aski cache/accelerator batek eragin du, hala nola Zend OPcache edo eAccelerator.", + "PHP modules have been installed, but they are still listed as missing?" : "PHP moduluak instalatu dira, baina oraindik faltan bezala markatuta daude?", + "Please ask your server administrator to restart the web server." : "Mesedez eskatu zerbitzariaren kudeatzaileari web zerbitzaria berrabiarazteko.", + "PostgreSQL >= 9 required" : "PostgreSQL >= 9 behar da", + "Please upgrade your database version" : "Mesedez eguneratu zure datu basearen bertsioa", + "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Mesedez aldatu baimenak 0770ra beste erabiltzaileek karpetan sartu ezin izateko.", + "Data directory (%s) is readable by other users" : "Data karpeta (%s) beste erabiltzaileek irakur dezakete", + "Data directory (%s) is invalid" : "Datuen karpeta (%s) ez da baliogarria", + "Please check that the data directory contains a file \".ocdata\" in its root." : "Mesedez egiaztatu data karpeta \".ocdata\" fitxategia duela bere erroan.", + "Could not obtain lock type %d on \"%s\"." : "Ezin da lortu sarraia mota %d \"%s\"-an.", + "App directory already exists" : "Aplikazioaren karpeta dagoeneko existitzen da", + "Can't create app folder. Please fix permissions. %s" : "Ezin izan da aplikazioaren karpeta sortu. Mesdez konpondu baimenak. %s", + "No source specified when installing app" : "Ez da jatorririk zehaztu aplikazioa instalatzerakoan", + "No href specified when installing app from http" : "Ez da href parametrorik zehaztu http bidez aplikazioa instalatzerakoan", + "No path specified when installing app from local file" : "Ez da kokalekurik zehaztu fitxategi lokal moduan aplikazioa instalatzerakoan", + "Archives of type %s are not supported" : "%s motako fitxategiak ez dira onartzen", + "Failed to open archive when installing app" : "Fitxategia irekitzeak huts egin du aplikazioa instalatzerakoan", + "App does not provide an info.xml file" : "Aplikazioak ez du info.xml fitxategia", + "App can't be installed because of not allowed code in the App" : "Aplikazioa ezin da instalatu bertan duen baimendu gabeko kodea dela eta", + "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Aplikazioa ezin da instalatu <shipped>true</shipped> etiketa duelako eta etiketa hau ez da onartzen banaketan ez datozen aplikazioetan", + "Logging" : "Erregistroa", + "Recommended" : "Aholkatuta", + "Microsoft Windows Platform is not supported" : "Microsoft Windows Platform ez da jasaten", + "Storage not available" : "Biltegia ez dago eskuragarri" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/lib/l10n/is.js b/lib/l10n/is.js index 30750dcccee..3ecb4663bda 100644 --- a/lib/l10n/is.js +++ b/lib/l10n/is.js @@ -137,7 +137,7 @@ OC.L10N.register( "Login canceled by app" : "Forrit hætti við innskráningu", "User disabled" : "Notandi óvirkur", "Help" : "Hjálp", - "Personal" : "Um mig", + "Personal" : "Einka", "Users" : "Notendur", "Admin" : "Stjórnun", "App \"%s\" cannot be installed because appinfo file cannot be read." : "Ekki er hægt að setja upp \"%s\" forritið vegna þess að ekki var hægt að lesa appinfo-skrána.", diff --git a/lib/l10n/is.json b/lib/l10n/is.json index 28709e70c14..9d49ab40f0f 100644 --- a/lib/l10n/is.json +++ b/lib/l10n/is.json @@ -135,7 +135,7 @@ "Login canceled by app" : "Forrit hætti við innskráningu", "User disabled" : "Notandi óvirkur", "Help" : "Hjálp", - "Personal" : "Um mig", + "Personal" : "Einka", "Users" : "Notendur", "Admin" : "Stjórnun", "App \"%s\" cannot be installed because appinfo file cannot be read." : "Ekki er hægt að setja upp \"%s\" forritið vegna þess að ekki var hægt að lesa appinfo-skrána.", diff --git a/lib/private/App/AppStore/Fetcher/Fetcher.php b/lib/private/App/AppStore/Fetcher/Fetcher.php index dab79e11821..ab0e299f0a2 100644 --- a/lib/private/App/AppStore/Fetcher/Fetcher.php +++ b/lib/private/App/AppStore/Fetcher/Fetcher.php @@ -69,6 +69,12 @@ abstract class Fetcher { * @return array */ protected function fetch($ETag, $content) { + $appstoreenabled = $this->config->getSystemValue('appstoreenabled', true); + + if (!$appstoreenabled) { + return []; + } + $options = []; if ($ETag !== '') { @@ -102,7 +108,13 @@ abstract class Fetcher { * * @return array */ - public function get() { + public function get() { + $appstoreenabled = $this->config->getSystemValue('appstoreenabled', true); + + if (!$appstoreenabled) { + return []; + } + $rootFolder = $this->appData->getFolder('/'); $ETag = ''; @@ -112,13 +124,14 @@ abstract class Fetcher { // File does already exists $file = $rootFolder->getFile($this->fileName); $jsonBlob = json_decode($file->getContent(), true); - if(is_array($jsonBlob)) { + if (is_array($jsonBlob)) { /* * If the timestamp is older than 300 seconds request the files new * If the version changed (update!) also refresh */ - if((int)$jsonBlob['timestamp'] > ($this->timeFactory->getTime() - self::INVALIDATE_AFTER_SECONDS) && - isset($jsonBlob['ncversion']) && $jsonBlob['ncversion'] === $this->config->getSystemValue('version', '0.0.0')) { + if ((int)$jsonBlob['timestamp'] > ($this->timeFactory->getTime() - self::INVALIDATE_AFTER_SECONDS) && + isset($jsonBlob['ncversion']) && $jsonBlob['ncversion'] === $this->config->getSystemValue('version', '0.0.0') + ) { return $jsonBlob['data']; } diff --git a/lib/private/Files/Cache/Cache.php b/lib/private/Files/Cache/Cache.php index a966d621c58..7e7ebd795a0 100644 --- a/lib/private/Files/Cache/Cache.php +++ b/lib/private/Files/Cache/Cache.php @@ -163,6 +163,7 @@ class Cache implements ICache { $data['encryptedVersion'] = (int)$data['encrypted']; $data['encrypted'] = (bool)$data['encrypted']; $data['storage_id'] = $data['storage']; + $data['storage'] = (int)$data['storage']; $data['mimetype'] = $mimetypeLoader->getMimetypeById($data['mimetype']); $data['mimepart'] = $mimetypeLoader->getMimetypeById($data['mimepart']); if ($data['storage_mtime'] == 0) { @@ -196,19 +197,8 @@ class Cache implements ICache { FROM `*PREFIX*filecache` WHERE `parent` = ? ORDER BY `name` ASC'; $result = $this->connection->executeQuery($sql, [$fileId]); $files = $result->fetchAll(); - foreach ($files as &$file) { - $file['mimetype'] = $this->mimetypeLoader->getMimetypeById($file['mimetype']); - $file['mimepart'] = $this->mimetypeLoader->getMimetypeById($file['mimepart']); - if ($file['storage_mtime'] == 0) { - $file['storage_mtime'] = $file['mtime']; - } - $file['permissions'] = (int)$file['permissions']; - $file['mtime'] = (int)$file['mtime']; - $file['storage_mtime'] = (int)$file['storage_mtime']; - $file['size'] = 0 + $file['size']; - } return array_map(function (array $data) { - return new CacheEntry($data); + return self::cacheEntryFromData($data, $this->mimetypeLoader);; }, $files); } else { return array(); @@ -601,22 +591,18 @@ class Cache implements ICache { $sql = ' SELECT `fileid`, `storage`, `path`, `parent`, `name`, - `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, - `etag`, `permissions`, `checksum` + `mimetype`, `storage_mtime`, `mimepart`, `size`, `mtime`, + `encrypted`, `etag`, `permissions`, `checksum` FROM `*PREFIX*filecache` WHERE `storage` = ? AND `name` ILIKE ?'; $result = $this->connection->executeQuery($sql, [$this->getNumericStorageId(), $pattern] ); - $files = []; - while ($row = $result->fetch()) { - $row['mimetype'] = $this->mimetypeLoader->getMimetypeById($row['mimetype']); - $row['mimepart'] = $this->mimetypeLoader->getMimetypeById($row['mimepart']); - $files[] = $row; - } + $files = $result->fetchAll(); + return array_map(function(array $data) { - return new CacheEntry($data); + return self::cacheEntryFromData($data, $this->mimetypeLoader); }, $files); } @@ -633,18 +619,15 @@ class Cache implements ICache { } else { $where = '`mimepart` = ?'; } - $sql = 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `etag`, `permissions`, `checksum` + $sql = 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `storage_mtime`, `mtime`, `encrypted`, `etag`, `permissions`, `checksum` FROM `*PREFIX*filecache` WHERE ' . $where . ' AND `storage` = ?'; $mimetype = $this->mimetypeLoader->getId($mimetype); $result = $this->connection->executeQuery($sql, array($mimetype, $this->getNumericStorageId())); - $files = array(); - while ($row = $result->fetch()) { - $row['mimetype'] = $this->mimetypeLoader->getMimetypeById($row['mimetype']); - $row['mimepart'] = $this->mimetypeLoader->getMimetypeById($row['mimepart']); - $files[] = $row; - } + + $files = $result->fetchAll(); + return array_map(function (array $data) { - return new CacheEntry($data); + return self::cacheEntryFromData($data, $this->mimetypeLoader); }, $files); } @@ -659,7 +642,7 @@ class Cache implements ICache { */ public function searchByTag($tag, $userId) { $sql = 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, ' . - '`mimetype`, `mimepart`, `size`, `mtime`, ' . + '`mimetype`, `mimepart`, `size`, `mtime`, `storage_mtime`, ' . '`encrypted`, `etag`, `permissions`, `checksum` ' . 'FROM `*PREFIX*filecache` `file`, ' . '`*PREFIX*vcategory_to_object` `tagmap`, ' . @@ -686,12 +669,11 @@ class Cache implements ICache { $tag ] ); - $files = array(); - while ($row = $result->fetch()) { - $files[] = $row; - } + + $files = $result->fetchAll(); + return array_map(function (array $data) { - return new CacheEntry($data); + return self::cacheEntryFromData($data, $this->mimetypeLoader); }, $files); } diff --git a/lib/private/Files/Cache/Scanner.php b/lib/private/Files/Cache/Scanner.php index 8625e4904ca..e65c01559f0 100644 --- a/lib/private/Files/Cache/Scanner.php +++ b/lib/private/Files/Cache/Scanner.php @@ -168,7 +168,7 @@ class Scanner extends BasicEmitter implements IScanner { $parent = ''; } if ($parentId === -1) { - $parentId = $this->cache->getId($parent); + $parentId = $this->cache->getParentId($file); } // scan the parent if it's not in the cache (id -1) and the current file is not the root folder @@ -491,7 +491,7 @@ class Scanner extends BasicEmitter implements IScanner { } else { $lastPath = null; while (($path = $this->cache->getIncomplete()) !== false && $path !== $lastPath) { - $this->runBackgroundScanJob(function() use ($path) { + $this->runBackgroundScanJob(function () use ($path) { $this->scan($path, self::SCAN_RECURSIVE_INCOMPLETE, self::REUSE_ETAG | self::REUSE_SIZE); }, $path); // FIXME: this won't proceed with the next item, needs revamping of getIncomplete() diff --git a/lib/private/Files/Cache/Wrapper/CacheJail.php b/lib/private/Files/Cache/Wrapper/CacheJail.php index d8bdca6a3c4..894fbcc803d 100644 --- a/lib/private/Files/Cache/Wrapper/CacheJail.php +++ b/lib/private/Files/Cache/Wrapper/CacheJail.php @@ -142,11 +142,7 @@ class CacheJail extends CacheWrapper { * @return int */ public function getParentId($file) { - if ($file === '') { - return -1; - } else { - return $this->getCache()->getParentId($this->getSourcePath($file)); - } + return $this->getCache()->getParentId($this->getSourcePath($file)); } /** diff --git a/lib/private/Files/Storage/DAV.php b/lib/private/Files/Storage/DAV.php index 31f87d16b04..76a6155df24 100644 --- a/lib/private/Files/Storage/DAV.php +++ b/lib/private/Files/Storage/DAV.php @@ -74,11 +74,11 @@ class DAV extends Common { /** @var bool */ protected $ready; /** @var Client */ - private $client; + protected $client; /** @var ArrayCache */ - private $statCache; + protected $statCache; /** @var \OCP\Http\Client\IClientService */ - private $httpClientService; + protected $httpClientService; /** * @param array $params @@ -127,7 +127,7 @@ class DAV extends Common { } } - private function init() { + protected function init() { if ($this->ready) { return; } @@ -627,7 +627,7 @@ class DAV extends Common { * @param string $path to encode * @return string encoded path */ - private function encodePath($path) { + protected function encodePath($path) { // slashes need to stay return str_replace('%2F', '/', rawurlencode($path)); } @@ -641,7 +641,7 @@ class DAV extends Common { * @throws StorageInvalidException * @throws StorageNotAvailableException */ - private function simpleResponse($method, $path, $body, $expected) { + protected function simpleResponse($method, $path, $body, $expected) { $path = $this->cleanPath($path); try { $response = $this->client->request($method, $this->encodePath($path), $body); @@ -815,7 +815,7 @@ class DAV extends Common { * @throws StorageNotAvailableException if the storage is not available, * which might be temporary */ - private function convertException(Exception $e, $path = '') { + protected function convertException(Exception $e, $path = '') { \OC::$server->getLogger()->logException($e); Util::writeLog('files_external', $e->getMessage(), Util::ERROR); if ($e instanceof ClientHttpException) { diff --git a/lib/private/Files/Storage/Wrapper/Jail.php b/lib/private/Files/Storage/Wrapper/Jail.php index 8615d73f346..013f5ab2344 100644 --- a/lib/private/Files/Storage/Wrapper/Jail.php +++ b/lib/private/Files/Storage/Wrapper/Jail.php @@ -58,7 +58,7 @@ class Jail extends Wrapper { } public function getId() { - return 'link:' . parent::getId() . ':' . $this->rootPath; + return parent::getId(); } /** diff --git a/lib/private/Files/Storage/Wrapper/PermissionsMask.php b/lib/private/Files/Storage/Wrapper/PermissionsMask.php index 239824b67e2..ab0c30a4736 100644 --- a/lib/private/Files/Storage/Wrapper/PermissionsMask.php +++ b/lib/private/Files/Storage/Wrapper/PermissionsMask.php @@ -138,4 +138,13 @@ class PermissionsMask extends Wrapper { $sourceCache = parent::getCache($path, $storage); return new CachePermissionsMask($sourceCache, $this->mask); } + + public function getMetaData($path) { + $data = parent::getMetaData($path); + + if ($data && isset($data['permissions'])) { + $data['permissions'] = $data['permissions'] & $this->mask; + } + return $data; + } } diff --git a/lib/private/Repair.php b/lib/private/Repair.php index e8d466cd844..6344db64e8e 100644 --- a/lib/private/Repair.php +++ b/lib/private/Repair.php @@ -30,28 +30,17 @@ namespace OC; -use OC\Repair\AssetCache; use OC\Repair\CleanTags; use OC\Repair\Collation; -use OC\Repair\DropOldJobs; use OC\Repair\MoveUpdaterStepFile; use OC\Repair\NC11\CleanPreviews; use OC\Repair\NC11\FixMountStorages; use OC\Repair\NC11\MoveAvatars; use OC\Repair\OldGroupMembershipShares; -use OC\Repair\RemoveGetETagEntries; -use OC\Repair\RemoveOldShares; use OC\Repair\RemoveRootShares; -use OC\Repair\SharePropagation; use OC\Repair\SqliteAutoincrement; -use OC\Repair\DropOldTables; -use OC\Repair\FillETags; -use OC\Repair\InnoDB; use OC\Repair\RepairMimeTypes; -use OC\Repair\SearchLuceneTables; -use OC\Repair\UpdateOutdatedOcsIds; use OC\Repair\RepairInvalidShares; -use OC\Repair\RepairUnmergedShares; use OCP\AppFramework\QueryException; use OCP\Migration\IOutput; use OCP\Migration\IRepairStep; @@ -131,23 +120,9 @@ class Repair implements IOutput{ return [ new Collation(\OC::$server->getConfig(), \OC::$server->getLogger(), \OC::$server->getDatabaseConnection(), false), new RepairMimeTypes(\OC::$server->getConfig()), - new AssetCache(), - new FillETags(\OC::$server->getDatabaseConnection()), new CleanTags(\OC::$server->getDatabaseConnection(), \OC::$server->getUserManager()), - new DropOldTables(\OC::$server->getDatabaseConnection()), - new DropOldJobs(\OC::$server->getJobList()), - new RemoveGetETagEntries(\OC::$server->getDatabaseConnection()), - new UpdateOutdatedOcsIds(\OC::$server->getConfig()), new RepairInvalidShares(\OC::$server->getConfig(), \OC::$server->getDatabaseConnection()), - new SharePropagation(\OC::$server->getConfig()), - new RemoveOldShares(\OC::$server->getDatabaseConnection()), new RemoveRootShares(\OC::$server->getDatabaseConnection(), \OC::$server->getUserManager(), \OC::$server->getLazyRootFolder()), - new RepairUnmergedShares( - \OC::$server->getConfig(), - \OC::$server->getDatabaseConnection(), - \OC::$server->getUserManager(), - \OC::$server->getGroupManager() - ), new MoveUpdaterStepFile(\OC::$server->getConfig()), new MoveAvatars( \OC::$server->getJobList(), @@ -183,20 +158,10 @@ class Repair implements IOutput{ public static function getBeforeUpgradeRepairSteps() { $connection = \OC::$server->getDatabaseConnection(); $steps = [ - new InnoDB(), new Collation(\OC::$server->getConfig(), \OC::$server->getLogger(), $connection, true), new SqliteAutoincrement($connection), - new SearchLuceneTables(), ]; - //There is no need to delete all previews on every single update - //only 7.0.0 through 7.0.2 generated broken previews - $currentVersion = \OC::$server->getConfig()->getSystemValue('version'); - if (version_compare($currentVersion, '7.0.0.0', '>=') && - version_compare($currentVersion, '7.0.3.4', '<=')) { - $steps[] = new \OC\Repair\Preview(); - } - return $steps; } diff --git a/lib/private/Repair/AssetCache.php b/lib/private/Repair/AssetCache.php deleted file mode 100644 index 74eb9c51986..00000000000 --- a/lib/private/Repair/AssetCache.php +++ /dev/null @@ -1,43 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Adam Williamson <awilliam@redhat.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace OC\Repair; - -use OCP\Migration\IOutput; -use OCP\Migration\IRepairStep; - -class AssetCache implements IRepairStep { - - public function getName() { - return 'Remove asset cache'; - } - - public function run(IOutput $output) { - $assetDir = \OC::$server->getConfig()->getSystemValue('assetdirectory', \OC::$SERVERROOT) . '/assets'; - \OC_Helper::rmdirr($assetDir, false); - $output->info('Asset cache cleared.'); - } -} - diff --git a/lib/private/Repair/DropOldJobs.php b/lib/private/Repair/DropOldJobs.php deleted file mode 100644 index 126df9e940f..00000000000 --- a/lib/private/Repair/DropOldJobs.php +++ /dev/null @@ -1,88 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Joas Schilling <coding@schilljs.com> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace OC\Repair; - -use OCP\BackgroundJob\IJobList; -use OCP\Migration\IOutput; -use OCP\Migration\IRepairStep; - -class DropOldJobs implements IRepairStep { - - /** @var IJobList */ - protected $jobList; - - /** - * @param IJobList $jobList - */ - public function __construct(IJobList $jobList) { - $this->jobList = $jobList; - } - - /** - * Returns the step's name - * - * @return string - */ - public function getName() { - return 'Drop old background jobs'; - } - - /** - * Run repair step. - * Must throw exception on error. - * - * @throws \Exception in case of failure - */ - public function run(IOutput $output) { - $oldJobs = $this->oldJobs(); - foreach($oldJobs as $job) { - if($this->jobList->has($job['class'], $job['arguments'])) { - $this->jobList->remove($job['class'], $job['arguments']); - } - } - } - - /** - * returns a list of old jobs as an associative array with keys 'class' and - * 'arguments'. - * - * @return array - */ - public function oldJobs() { - return [ - ['class' => 'OC_Cache_FileGlobalGC', 'arguments' => null], - ['class' => 'OC\Cache\FileGlobalGC', 'arguments' => null], - ['class' => 'OCA\Files\BackgroundJob\DeleteOrphanedTagsJob', 'arguments' => null], - - ['class' => 'OCA\Files_sharing\Lib\DeleteOrphanedSharesJob', 'arguments' => null], - ['class' => 'OCA\Files_sharing\ExpireSharesJob', 'arguments' => null], - - ['class' => 'OCA\user_ldap\lib\Jobs', 'arguments' => null], - ['class' => '\OCA\User_LDAP\Jobs\CleanUp', 'arguments' => null], - ]; - } - - -} diff --git a/lib/private/Repair/DropOldTables.php b/lib/private/Repair/DropOldTables.php deleted file mode 100644 index dfc3f757ea8..00000000000 --- a/lib/private/Repair/DropOldTables.php +++ /dev/null @@ -1,111 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Florian Preinstorfer <nblock@archlinux.us> - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace OC\Repair; - - -use OCP\IDBConnection; -use OCP\Migration\IOutput; -use OCP\Migration\IRepairStep; - -class DropOldTables implements IRepairStep { - - /** @var IDBConnection */ - protected $connection; - - /** - * @param IDBConnection $connection - */ - public function __construct(IDBConnection $connection) { - $this->connection = $connection; - } - - /** - * Returns the step's name - * - * @return string - */ - public function getName() { - return 'Drop old database tables'; - } - - /** - * Run repair step. - * Must throw exception on error. - * - * @throws \Exception in case of failure - */ - public function run(IOutput $output) { - $tables = $this->oldDatabaseTables(); - $output->startProgress(count($tables)); - foreach ($this->oldDatabaseTables() as $tableName) { - if ($this->connection->tableExists($tableName)){ - $this->connection->dropTable($tableName); - } - $output->advance(1, "Drop old database table: $tableName"); - } - $output->finishProgress(); - } - - /** - * Returns a list of outdated tables which are not used anymore - * @return array - */ - protected function oldDatabaseTables() { - return [ - 'calendar_calendars', - 'calendar_objects', - 'calendar_share_calendar', - 'calendar_share_event', - 'file_map', - 'foldersize', - 'fscache', - 'gallery_sharing', - 'locks', - 'log', - 'media_albums', - 'media_artists', - 'media_sessions', - 'media_songs', - 'media_users', - 'permissions', - 'pictures_images_cache', - 'principalgroups', - 'principals', - 'queuedtasks', - 'sharing', - 'clndr_calendars', - 'clndr_objects', - 'clndr_share_event', - 'clndr_share_calendar', - 'clndr_repeat', - 'contacts_addressbooks', - 'contacts_cards', - 'contacts_cards_properties', - 'gallery_albums', - 'gallery_photos' - ]; - } -} diff --git a/lib/private/Repair/FillETags.php b/lib/private/Repair/FillETags.php deleted file mode 100644 index 2954c0eaa63..00000000000 --- a/lib/private/Repair/FillETags.php +++ /dev/null @@ -1,57 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Joas Schilling <coding@schilljs.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace OC\Repair; - -use OCP\Migration\IOutput; -use OCP\Migration\IRepairStep; - -class FillETags implements IRepairStep { - - /** @var \OCP\IDBConnection */ - protected $connection; - - /** - * @param \OCP\IDBConnection $connection - */ - public function __construct($connection) { - $this->connection = $connection; - } - - public function getName() { - return 'Generate ETags for file where no ETag is present.'; - } - - public function run(IOutput $output) { - $qb = $this->connection->getQueryBuilder(); - $qb->update('filecache') - ->set('etag', $qb->expr()->literal('xxx')) - ->where($qb->expr()->eq('etag', $qb->expr()->literal(''))) - ->orWhere($qb->expr()->isNull('etag')); - - $result = $qb->execute(); - $output->info("ETags have been fixed for $result files/folders."); - } -} - diff --git a/lib/private/Repair/InnoDB.php b/lib/private/Repair/InnoDB.php deleted file mode 100644 index 174cc334482..00000000000 --- a/lib/private/Repair/InnoDB.php +++ /dev/null @@ -1,70 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin Appelman <robin@icewind.nl> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace OC\Repair; - -use Doctrine\DBAL\Platforms\MySqlPlatform; -use OCP\Migration\IOutput; -use OCP\Migration\IRepairStep; - -class InnoDB implements IRepairStep { - - public function getName() { - return 'Repair MySQL database engine'; - } - - /** - * Fix mime types - */ - public function run(IOutput $output) { - $connection = \OC::$server->getDatabaseConnection(); - if (!$connection->getDatabasePlatform() instanceof MySqlPlatform) { - $output->info('Not a mysql database -> nothing to do'); - return; - } - - $tables = $this->getAllMyIsamTables($connection); - if (is_array($tables)) { - foreach ($tables as $table) { - $connection->exec("ALTER TABLE $table ENGINE=InnoDB;"); - $output->info("Fixed $table"); - } - } - } - - /** - * @param \Doctrine\DBAL\Connection $connection - * @return string[] - */ - private function getAllMyIsamTables($connection) { - $dbName = \OC::$server->getConfig()->getSystemValue("dbname"); - $result = $connection->fetchArray( - "SELECT table_name FROM information_schema.tables WHERE table_schema = ? AND engine = 'MyISAM' AND TABLE_NAME LIKE \"*PREFIX*%\"", - array($dbName) - ); - - return $result; - } -} - diff --git a/lib/private/Repair/Preview.php b/lib/private/Repair/Preview.php deleted file mode 100644 index 8391c3bf726..00000000000 --- a/lib/private/Repair/Preview.php +++ /dev/null @@ -1,48 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Georg Ehrke <georg@owncloud.com> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ -namespace OC\Repair; - -use OC\Files\View; -use OCP\Migration\IOutput; -use OCP\Migration\IRepairStep; - -class Preview implements IRepairStep { - - public function getName() { - return 'Cleaning-up broken previews'; - } - - public function run(IOutput $out) { - $view = new View('/'); - $children = $view->getDirectoryContent('/'); - - foreach ($children as $child) { - if ($view->is_dir($child->getPath())) { - $thumbnailsFolder = $child->getPath() . '/thumbnails'; - if ($view->is_dir($thumbnailsFolder)) { - $view->rmdir($thumbnailsFolder); - } - } - } - } -} diff --git a/lib/private/Repair/RemoveGetETagEntries.php b/lib/private/Repair/RemoveGetETagEntries.php deleted file mode 100644 index d701a8f26de..00000000000 --- a/lib/private/Repair/RemoveGetETagEntries.php +++ /dev/null @@ -1,58 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Morris Jobke <hey@morrisjobke.de> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace OC\Repair; - -use OCP\IDBConnection; -use OCP\Migration\IOutput; -use OCP\Migration\IRepairStep; - -class RemoveGetETagEntries implements IRepairStep { - - /** - * @var IDBConnection - */ - protected $connection; - - /** - * @param IDBConnection $connection - */ - public function __construct(IDBConnection $connection) { - $this->connection = $connection; - } - - public function getName() { - return 'Remove getetag entries in properties table'; - } - - /** - * Removes all entries with the key "{DAV:}getetag" from the table properties - */ - public function run(IOutput $out) { - $sql = 'DELETE FROM `*PREFIX*properties`' - . ' WHERE `propertyname` = ?'; - $deletedRows = $this->connection->executeUpdate($sql, ['{DAV:}getetag']); - - $out->info('Removed ' . $deletedRows . ' unneeded "{DAV:}getetag" entries from properties table.'); - } -} diff --git a/lib/private/Repair/RemoveOldShares.php b/lib/private/Repair/RemoveOldShares.php deleted file mode 100644 index 32a17189fbf..00000000000 --- a/lib/private/Repair/RemoveOldShares.php +++ /dev/null @@ -1,104 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ -namespace OC\Repair; - -use OCP\IDBConnection; -use OCP\Migration\IOutput; -use OCP\Migration\IRepairStep; - -/** - * Class RemoveOldShares - * - * @package OC\Repair - */ -class RemoveOldShares implements IRepairStep { - - /** @var IDBConnection */ - protected $connection; - - /** - * RemoveOldCalendarShares constructor. - * - * @param IDBConnection $db - */ - public function __construct(IDBConnection $connection) { - $this->connection = $connection; - } - - /** - * @return string - */ - public function getName() { - return 'Remove old (< 9.0) calendar/contact shares'; - } - - /** - * @param IOutput $output - */ - public function run(IOutput $output) { - $output->startProgress(4); - - $this->removeCalendarShares($output); - $this->removeContactShares($output); - - $output->finishProgress(); - } - - /** - * @param IOutput $output - */ - private function removeCalendarShares(IOutput $output) { - $qb = $this->connection->getQueryBuilder(); - $qb->delete('share') - ->where($qb->expr()->eq('item_type', $qb->createNamedParameter('calendar'))); - $qb->execute(); - - $output->advance(); - - $qb = $this->connection->getQueryBuilder(); - $qb->delete('share') - ->where($qb->expr()->eq('item_type', $qb->createNamedParameter('event'))); - $qb->execute(); - - $output->advance(); - } - - /** - * @param IOutput $output - */ - private function removeContactShares(IOutput $output) { - $qb = $this->connection->getQueryBuilder(); - $qb->delete('share') - ->where($qb->expr()->eq('item_type', $qb->createNamedParameter('contact'))); - $qb->execute(); - - $output->advance(); - - $qb = $this->connection->getQueryBuilder(); - $qb->delete('share') - ->where($qb->expr()->eq('item_type', $qb->createNamedParameter('addressbook'))); - $qb->execute(); - - $output->advance(); - } -} - diff --git a/lib/private/Repair/RepairInvalidShares.php b/lib/private/Repair/RepairInvalidShares.php index 04624c910dd..eba66e295c4 100644 --- a/lib/private/Repair/RepairInvalidShares.php +++ b/lib/private/Repair/RepairInvalidShares.php @@ -56,43 +56,6 @@ class RepairInvalidShares implements IRepairStep { } /** - * Past bugs would make it possible to set an expiration date on user shares even - * though it is not supported. This functions removes the expiration date from such entries. - */ - private function removeExpirationDateFromNonLinkShares(IOutput $out) { - $builder = $this->connection->getQueryBuilder(); - $builder - ->update('share') - ->set('expiration', 'null') - ->where($builder->expr()->isNotNull('expiration')) - ->andWhere($builder->expr()->neq('share_type', $builder->expr()->literal(\OC\Share\Constants::SHARE_TYPE_LINK))); - - $updatedEntries = $builder->execute(); - if ($updatedEntries > 0) { - $out->info('Removed invalid expiration date from ' . $updatedEntries . ' shares'); - } - } - - /** - * In the past link shares with public upload enabled were missing the delete permission. - */ - private function addShareLinkDeletePermission(IOutput $out) { - $oldPerms = \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE; - $newPerms = \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE; - $builder = $this->connection->getQueryBuilder(); - $builder - ->update('share') - ->set('permissions', $builder->expr()->literal($newPerms)) - ->where($builder->expr()->eq('share_type', $builder->expr()->literal(\OC\Share\Constants::SHARE_TYPE_LINK))) - ->andWhere($builder->expr()->eq('permissions', $builder->expr()->literal($oldPerms))); - - $updatedEntries = $builder->execute(); - if ($updatedEntries > 0) { - $out->info('Fixed link share permissions for ' . $updatedEntries . ' shares'); - } - } - - /** * Adjust file share permissions */ private function adjustFileSharePermissions(IOutput $out) { @@ -150,14 +113,6 @@ class RepairInvalidShares implements IRepairStep { public function run(IOutput $out) { $ocVersionFromBeforeUpdate = $this->config->getSystemValue('version', '0.0.0'); - if (version_compare($ocVersionFromBeforeUpdate, '8.2.0.7', '<')) { - // this situation was only possible before 8.2 - $this->removeExpirationDateFromNonLinkShares($out); - } - if (version_compare($ocVersionFromBeforeUpdate, '9.1.0.9', '<')) { - // this situation was only possible before 9.1 - $this->addShareLinkDeletePermission($out); - } if (version_compare($ocVersionFromBeforeUpdate, '12.0.0.11', '<')) { $this->adjustFileSharePermissions($out); } diff --git a/lib/private/Repair/RepairMimeTypes.php b/lib/private/Repair/RepairMimeTypes.php index fbf446a681c..534b5ce2c28 100644 --- a/lib/private/Repair/RepairMimeTypes.php +++ b/lib/private/Repair/RepairMimeTypes.php @@ -78,24 +78,6 @@ class RepairMimeTypes implements IRepairStep { '); } - private static function updateWrongStmt() { - return \OC_DB::prepare(' - UPDATE `*PREFIX*filecache` - SET `mimetype` = ( - SELECT `id` - FROM `*PREFIX*mimetypes` - WHERE `mimetype` = ? - ) WHERE `mimetype` = ? - '); - } - - private static function deleteStmt() { - return \OC_DB::prepare(' - DELETE FROM `*PREFIX*mimetypes` - WHERE `id` = ? - '); - } - private static function updateByNameStmt() { return \OC_DB::prepare(' UPDATE `*PREFIX*filecache` @@ -104,34 +86,6 @@ class RepairMimeTypes implements IRepairStep { '); } - private function repairMimetypes($wrongMimetypes) { - foreach ($wrongMimetypes as $wrong => $correct) { - // do we need to remove a wrong mimetype? - $result = \OC_DB::executeAudited(self::getIdStmt(), array($wrong)); - $wrongId = $result->fetchOne(); - - if ($wrongId !== false) { - // do we need to insert the correct mimetype? - $result = \OC_DB::executeAudited(self::existsStmt(), array($correct)); - $exists = $result->fetchOne(); - - if (!is_null($correct)) { - if (!$exists) { - // insert mimetype - \OC_DB::executeAudited(self::insertStmt(), array($correct)); - } - - // change wrong mimetype to correct mimetype in filecache - \OC_DB::executeAudited(self::updateWrongStmt(), array($correct, $wrongId)); - } - - // delete wrong mimetype - \OC_DB::executeAudited(self::deleteStmt(), array($wrongId)); - - } - } - } - private function updateMimetypes($updatedMimetypes) { if (empty($this->folderMimeTypeId)) { $result = \OC_DB::executeAudited(self::getIdStmt(), array('httpd/unix-directory')); @@ -156,158 +110,6 @@ class RepairMimeTypes implements IRepairStep { } } - private function fixOfficeMimeTypes() { - // update wrong mimetypes - $wrongMimetypes = array( - 'application/mspowerpoint' => 'application/vnd.ms-powerpoint', - 'application/msexcel' => 'application/vnd.ms-excel', - ); - - self::repairMimetypes($wrongMimetypes); - - $updatedMimetypes = array( - 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', - 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', - 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', - ); - - - // separate doc from docx etc - self::updateMimetypes($updatedMimetypes); - - } - - private function fixApkMimeType() { - $updatedMimetypes = array( - 'apk' => 'application/vnd.android.package-archive', - ); - - self::updateMimetypes($updatedMimetypes); - } - - private function fixFontsMimeTypes() { - // update wrong mimetypes - $wrongMimetypes = array( - 'font' => null, - 'font/opentype' => 'application/font-sfnt', - 'application/x-font-ttf' => 'application/font-sfnt', - ); - - self::repairMimetypes($wrongMimetypes); - - $updatedMimetypes = array( - 'ttf' => 'application/font-sfnt', - 'otf' => 'application/font-sfnt', - 'pfb' => 'application/x-font', - ); - - self::updateMimetypes($updatedMimetypes); - } - - private function fixPostscriptMimeType() { - $updatedMimetypes = array( - 'eps' => 'application/postscript', - 'ps' => 'application/postscript', - ); - - self::updateMimetypes($updatedMimetypes); - } - - private function introduceRawMimeType() { - $updatedMimetypes = array( - 'arw' => 'image/x-dcraw', - 'cr2' => 'image/x-dcraw', - 'dcr' => 'image/x-dcraw', - 'dng' => 'image/x-dcraw', - 'erf' => 'image/x-dcraw', - 'iiq' => 'image/x-dcraw', - 'k25' => 'image/x-dcraw', - 'kdc' => 'image/x-dcraw', - 'mef' => 'image/x-dcraw', - 'nef' => 'image/x-dcraw', - 'orf' => 'image/x-dcraw', - 'pef' => 'image/x-dcraw', - 'raf' => 'image/x-dcraw', - 'rw2' => 'image/x-dcraw', - 'srf' => 'image/x-dcraw', - 'sr2' => 'image/x-dcraw', - 'xrf' => 'image/x-dcraw', - ); - - self::updateMimetypes($updatedMimetypes); - } - - private function introduce3dImagesMimeType() { - $updatedMimetypes = array( - 'jps' => 'image/jpeg', - 'mpo' => 'image/jpeg', - ); - - self::updateMimetypes($updatedMimetypes); - } - - private function introduceConfMimeType() { - $updatedMimetypes = array( - 'conf' => 'text/plain', - 'cnf' => 'text/plain', - ); - - self::updateMimetypes($updatedMimetypes); - } - - private function introduceYamlMimeType() { - $updatedMimetypes = array( - 'yaml' => 'application/yaml', - 'yml' => 'application/yaml', - ); - - self::updateMimetypes($updatedMimetypes); - } - - private function introduceJavaMimeType() { - $updatedMimetypes = array( - 'class' => 'application/java', - 'java' => 'text/x-java-source', - ); - - self::updateMimetypes($updatedMimetypes); - } - - private function introduceHppMimeType() { - $updatedMimetypes = array( - 'hpp' => 'text/x-h', - ); - - self::updateMimetypes($updatedMimetypes); - } - - private function introduceRssMimeType() { - $updatedMimetypes = array( - 'rss' => 'application/rss+xml', - ); - - self::updateMimetypes($updatedMimetypes); - } - - private function introduceRtfMimeType() { - $updatedMimetypes = array( - 'rtf' => 'text/rtf', - ); - - self::updateMimetypes($updatedMimetypes); - } - - private function introduceRichDocumentsMimeTypes() { - $updatedMimetypes = array( - 'lwp' => 'application/vnd.lotus-wordpro', - 'one' => 'application/msonenote', - 'vsd' => 'application/vnd.visio', - 'wpd' => 'application/vnd.wordperfect', - ); - - self::updateMimetypes($updatedMimetypes); - } - private function introduceWindowsProgramTypes() { $updatedMimetypes = array( 'htaccess' => 'text/plain', @@ -328,66 +130,6 @@ class RepairMimeTypes implements IRepairStep { // NOTE TO DEVELOPERS: when adding new mime types, please make sure to // add a version comparison to avoid doing it every time - // only update mime types if necessary as it can be expensive - if (version_compare($ocVersionFromBeforeUpdate, '8.2.0', '<')) { - if ($this->fixOfficeMimeTypes()) { - $out->info('Fixed office mime types'); - } - - if ($this->fixApkMimeType()) { - $out->info('Fixed APK mime type'); - } - - if ($this->fixFontsMimeTypes()) { - $out->info('Fixed fonts mime types'); - } - - if ($this->fixPostscriptMimeType()) { - $out->info('Fixed Postscript mime types'); - } - - if ($this->introduceRawMimeType()) { - $out->info('Fixed Raw mime types'); - } - - if ($this->introduce3dImagesMimeType()) { - $out->info('Fixed 3D images mime types'); - } - - if ($this->introduceConfMimeType()) { - $out->info('Fixed Conf/cnf mime types'); - } - - if ($this->introduceYamlMimeType()) { - $out->info('Fixed Yaml/Yml mime types'); - } - } - - // Mimetype updates from #19272 - if (version_compare($ocVersionFromBeforeUpdate, '8.2.0.8', '<')) { - if ($this->introduceJavaMimeType()) { - $out->info('Fixed java/class mime types'); - } - - if ($this->introduceHppMimeType()) { - $out->info('Fixed hpp mime type'); - } - - if ($this->introduceRssMimeType()) { - $out->info('Fixed rss mime type'); - } - - if ($this->introduceRtfMimeType()) { - $out->info('Fixed rtf mime type'); - } - } - - if (version_compare($ocVersionFromBeforeUpdate, '9.0.0.10', '<')) { - if ($this->introduceRichDocumentsMimeTypes()) { - $out->info('Fixed richdocuments additional office mime types'); - } - } - if (version_compare($ocVersionFromBeforeUpdate, '12.0.0.13', '<') && $this->introduceWindowsProgramTypes()) { $out->info('Fixed windows program mime types'); } diff --git a/lib/private/Repair/RepairUnmergedShares.php b/lib/private/Repair/RepairUnmergedShares.php deleted file mode 100644 index 56d935c74f5..00000000000 --- a/lib/private/Repair/RepairUnmergedShares.php +++ /dev/null @@ -1,357 +0,0 @@ -<?php -/** - * @author Vincent Petry <pvince81@owncloud.com> - * - * @copyright Copyright (c) 2016, ownCloud, Inc. - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace OC\Repair; - -use OCP\Migration\IOutput; -use OCP\Migration\IRepairStep; -use OC\Share\Constants; -use OCP\DB\QueryBuilder\IQueryBuilder; -use OCP\IConfig; -use OCP\IDBConnection; -use OCP\IUserManager; -use OCP\IUser; -use OCP\IGroupManager; -use OC\Share20\DefaultShareProvider; - -/** - * Repairs shares for which the received folder was not properly deduplicated. - * - * An unmerged share can for example happen when sharing a folder with the same - * user through multiple ways, like several groups and also directly, additionally - * to group shares. Since 9.0.0 these would create duplicate entries "folder (2)", - * one for every share. This repair step rearranges them so they only appear as a single - * folder. - */ -class RepairUnmergedShares implements IRepairStep { - - /** @var \OCP\IConfig */ - protected $config; - - /** @var \OCP\IDBConnection */ - protected $connection; - - /** @var IUserManager */ - protected $userManager; - - /** @var IGroupManager */ - protected $groupManager; - - /** @var IQueryBuilder */ - private $queryGetSharesWithUsers; - - /** @var IQueryBuilder */ - private $queryUpdateSharePermissionsAndTarget; - - /** @var IQueryBuilder */ - private $queryUpdateShareInBatch; - - /** - * @param \OCP\IConfig $config - * @param \OCP\IDBConnection $connection - */ - public function __construct( - IConfig $config, - IDBConnection $connection, - IUserManager $userManager, - IGroupManager $groupManager - ) { - $this->connection = $connection; - $this->config = $config; - $this->userManager = $userManager; - $this->groupManager = $groupManager; - } - - public function getName() { - return 'Repair unmerged shares'; - } - - /** - * Builds prepared queries for reuse - */ - private function buildPreparedQueries() { - /** - * Retrieve shares for a given user/group and share type - */ - $query = $this->connection->getQueryBuilder(); - $query - ->select('item_source', 'id', 'file_target', 'permissions', 'parent', 'share_type', 'stime') - ->from('share') - ->where($query->expr()->eq('share_type', $query->createParameter('shareType'))) - ->andWhere($query->expr()->in('share_with', $query->createParameter('shareWiths'))) - ->andWhere($query->expr()->in('item_type', $query->createParameter('itemTypes'))) - ->orderBy('item_source', 'ASC') - ->addOrderBy('stime', 'ASC'); - - $this->queryGetSharesWithUsers = $query; - - /** - * Updates the file_target to the given value for all given share ids. - * - * This updates several shares in bulk which is faster than individually. - */ - $query = $this->connection->getQueryBuilder(); - $query->update('share') - ->set('file_target', $query->createParameter('file_target')) - ->where($query->expr()->in('id', $query->createParameter('ids'))); - - $this->queryUpdateShareInBatch = $query; - - /** - * Updates the share permissions and target path of a single share. - */ - $query = $this->connection->getQueryBuilder(); - $query->update('share') - ->set('permissions', $query->createParameter('permissions')) - ->set('file_target', $query->createParameter('file_target')) - ->where($query->expr()->eq('id', $query->createParameter('shareid'))); - - $this->queryUpdateSharePermissionsAndTarget = $query; - - } - - private function getSharesWithUser($shareType, $shareWiths) { - $groupedShares = []; - - $query = $this->queryGetSharesWithUsers; - $query->setParameter('shareWiths', $shareWiths, IQueryBuilder::PARAM_STR_ARRAY); - $query->setParameter('shareType', $shareType); - $query->setParameter('itemTypes', ['file', 'folder'], IQueryBuilder::PARAM_STR_ARRAY); - - $shares = $query->execute()->fetchAll(); - - // group by item_source - foreach ($shares as $share) { - if (!isset($groupedShares[$share['item_source']])) { - $groupedShares[$share['item_source']] = []; - } - $groupedShares[$share['item_source']][] = $share; - } - return $groupedShares; - } - - private function isPotentialDuplicateName($name) { - return (preg_match('/\(\d+\)(\.[^\.]+)?$/', $name) === 1); - } - - /** - * Decide on the best target name based on all group shares and subshares, - * goal is to increase the likeliness that the chosen name matches what - * the user is expecting. - * - * For this, we discard the entries with parenthesis "(2)". - * In case the user also renamed the duplicates to a legitimate name, this logic - * will still pick the most recent one as it's the one the user is most likely to - * remember renaming. - * - * If no suitable subshare is found, use the least recent group share instead. - * - * @param array $groupShares group share entries - * @param array $subShares sub share entries - * - * @return string chosen target name - */ - private function findBestTargetName($groupShares, $subShares) { - $pickedShare = null; - // sort by stime, this also properly sorts the direct user share if any - @usort($subShares, function($a, $b) { - return ((int)$a['stime'] - (int)$b['stime']); - }); - - foreach ($subShares as $subShare) { - // skip entries that have parenthesis with numbers - if ($this->isPotentialDuplicateName($subShare['file_target'])) { - continue; - } - // pick any share found that would match, the last being the most recent - $pickedShare = $subShare; - } - - // no suitable subshare found - if ($pickedShare === null) { - // use least recent group share target instead - $pickedShare = $groupShares[0]; - } - - return $pickedShare['file_target']; - } - - /** - * Fix the given received share represented by the set of group shares - * and matching sub shares - * - * @param array $groupShares group share entries - * @param array $subShares sub share entries - * - * @return boolean false if the share was not repaired, true if it was - */ - private function fixThisShare($groupShares, $subShares) { - if (empty($subShares)) { - return false; - } - - $groupSharesById = []; - foreach ($groupShares as $groupShare) { - $groupSharesById[$groupShare['id']] = $groupShare; - } - - if ($this->isThisShareValid($groupSharesById, $subShares)) { - return false; - } - - $targetPath = $this->findBestTargetName($groupShares, $subShares); - - // check whether the user opted out completely of all subshares - $optedOut = true; - foreach ($subShares as $subShare) { - if ((int)$subShare['permissions'] !== 0) { - $optedOut = false; - break; - } - } - - $shareIds = []; - foreach ($subShares as $subShare) { - // only if the user deleted some subshares but not all, adjust the permissions of that subshare - if (!$optedOut && (int)$subShare['permissions'] === 0 && (int)$subShare['share_type'] === DefaultShareProvider::SHARE_TYPE_USERGROUP) { - // set permissions from parent group share - $permissions = $groupSharesById[$subShare['parent']]['permissions']; - - // fix permissions and target directly - $query = $this->queryUpdateSharePermissionsAndTarget; - $query->setParameter('shareid', $subShare['id']); - $query->setParameter('file_target', $targetPath); - $query->setParameter('permissions', $permissions); - $query->execute(); - } else { - // gather share ids for bulk target update - if ($subShare['file_target'] !== $targetPath) { - $shareIds[] = (int)$subShare['id']; - } - } - } - - if (!empty($shareIds)) { - $query = $this->queryUpdateShareInBatch; - $query->setParameter('ids', $shareIds, IQueryBuilder::PARAM_INT_ARRAY); - $query->setParameter('file_target', $targetPath); - $query->execute(); - } - - return true; - } - - /** - * Checks whether the number of group shares is balanced with the child subshares. - * If all group shares have exactly one subshare, and the target of every subshare - * is the same, then the share is valid. - * If however there is a group share entry that has no matching subshare, it means - * we're in the bogus situation and the whole share must be repaired - * - * @param array $groupSharesById - * @param array $subShares - * - * @return true if the share is valid, false if it needs repair - */ - private function isThisShareValid($groupSharesById, $subShares) { - $foundTargets = []; - - // every group share needs to have exactly one matching subshare - foreach ($subShares as $subShare) { - $foundTargets[$subShare['file_target']] = true; - if (count($foundTargets) > 1) { - // not all the same target path value => invalid - return false; - } - if (isset($groupSharesById[$subShare['parent']])) { - // remove it from the list as we found it - unset($groupSharesById[$subShare['parent']]); - } - } - - // if we found one subshare per group entry, the set will be empty. - // If not empty, it means that one of the group shares did not have - // a matching subshare entry. - return empty($groupSharesById); - } - - /** - * Detect unmerged received shares and merge them properly - */ - private function fixUnmergedShares(IOutput $out, IUser $user) { - $groups = $this->groupManager->getUserGroupIds($user); - if (empty($groups)) { - // user is in no groups, so can't have received group shares - return; - } - - // get all subshares grouped by item source - $subSharesByItemSource = $this->getSharesWithUser(DefaultShareProvider::SHARE_TYPE_USERGROUP, [$user->getUID()]); - - // because sometimes one wants to give the user more permissions than the group share - $userSharesByItemSource = $this->getSharesWithUser(Constants::SHARE_TYPE_USER, [$user->getUID()]); - - if (empty($subSharesByItemSource) && empty($userSharesByItemSource)) { - // nothing to repair for this user, no need to do extra queries - return; - } - - $groupSharesByItemSource = $this->getSharesWithUser(Constants::SHARE_TYPE_GROUP, $groups); - if (empty($groupSharesByItemSource) && empty($userSharesByItemSource)) { - // nothing to repair for this user - return; - } - - foreach ($groupSharesByItemSource as $itemSource => $groupShares) { - $subShares = []; - if (isset($subSharesByItemSource[$itemSource])) { - $subShares = $subSharesByItemSource[$itemSource]; - } - - if (isset($userSharesByItemSource[$itemSource])) { - // add it to the subshares to get a similar treatment - $subShares = array_merge($subShares, $userSharesByItemSource[$itemSource]); - } - - $this->fixThisShare($groupShares, $subShares); - } - } - - public function run(IOutput $output) { - $ocVersionFromBeforeUpdate = $this->config->getSystemValue('version', '0.0.0'); - if (version_compare($ocVersionFromBeforeUpdate, '9.1.0.16', '<')) { - // this situation was only possible between 9.0.0 and 9.0.3 included - - $function = function(IUser $user) use ($output) { - $this->fixUnmergedShares($output, $user); - $output->advance(); - }; - - $this->buildPreparedQueries(); - - $output->startProgress($this->userManager->countUsers()); - - $this->userManager->callForAllUsers($function); - - $output->finishProgress(); - } - } -} diff --git a/lib/private/Repair/SearchLuceneTables.php b/lib/private/Repair/SearchLuceneTables.php deleted file mode 100644 index 0a06371ce90..00000000000 --- a/lib/private/Repair/SearchLuceneTables.php +++ /dev/null @@ -1,80 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Jörn Friedrich Dreyer <jfd@butonic.de> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace OC\Repair; - -use OCP\Migration\IOutput; -use OCP\Migration\IRepairStep; - -class SearchLuceneTables implements IRepairStep { - - public function getName() { - return 'Repair duplicate entries in oc_lucene_status'; - } - - /** - * Fix duplicate entries in oc_lucene_status - * - * search_lucene prior to v0.5.0 did not have a primary key on the lucene_status table. Newer versions do, which - * causes the migration check to fail because it tries to insert duplicate rows into the new schema. - * - * FIXME Currently, apps don't have a way of repairing anything before the migration check: - * @link https://github.com/owncloud/core/issues/10980 - * - * As a result this repair step needs to live in the core repo, although it belongs into search_lucene: - * @link https://github.com/owncloud/core/issues/10205#issuecomment-54957557 - * - * It will completely remove any rows that make a file id have more than one status: - * fileid | status fileid | status - * --------+-------- will become --------+-------- - * 2 | E 3 | E - * 2 | I - * 3 | E - * - * search_lucene will then reindex the fileids without a status when the next indexing job is executed - */ - public function run(IOutput $out) { - $connection = \OC::$server->getDatabaseConnection(); - if ($connection->tableExists('lucene_status')) { - $out->info('removing duplicate entries from lucene_status'); - - $query = $connection->prepare(' - DELETE FROM `*PREFIX*lucene_status` - WHERE `fileid` IN ( - SELECT `fileid` - FROM ( - SELECT `fileid` - FROM `*PREFIX*lucene_status` - GROUP BY `fileid` - HAVING count(`fileid`) > 1 - ) AS `mysqlerr1093hack` - )'); - $query->execute(); - } else { - $out->info('lucene_status table does not exist -> nothing to do'); - } - } - -} - diff --git a/lib/private/Repair/SharePropagation.php b/lib/private/Repair/SharePropagation.php deleted file mode 100644 index c0cca3bd1ad..00000000000 --- a/lib/private/Repair/SharePropagation.php +++ /dev/null @@ -1,56 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Robin Appelman <robin@icewind.nl> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ -namespace OC\Repair; - -use OCP\IConfig; -use OCP\Migration\IOutput; -use OCP\Migration\IRepairStep; - -class SharePropagation implements IRepairStep { - - /** @var IConfig */ - private $config; - - /** - * SharePropagation constructor. - * - * @param IConfig $config - */ - public function __construct(IConfig $config) { - $this->config = $config; - } - - public function getName() { - return 'Remove old share propagation app entries'; - } - - public function run(IOutput $out ) { - $keys = $this->config->getAppKeys('files_sharing'); - - foreach ($keys as $key) { - if (is_numeric($key)) { - $this->config->deleteAppValue('files_sharing', $key); - } - } - } -} diff --git a/lib/private/Repair/UpdateCertificateStore.php b/lib/private/Repair/UpdateCertificateStore.php deleted file mode 100644 index a3313d5c23e..00000000000 --- a/lib/private/Repair/UpdateCertificateStore.php +++ /dev/null @@ -1,90 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace OC\Repair; - -use OC\Files\View; -use OC\Server; -use OCP\IConfig; -use OCP\Migration\IOutput; -use OCP\Migration\IRepairStep; - -/** - * Class UpdateCertificateStore rewrites the user specific certificate store after - * an update has been performed. This is done because a new root certificate file - * might have been added. - * - * @package OC\Repair - */ -class UpdateCertificateStore implements IRepairStep { - /** - * FIXME: The certificate manager does only allow specifying the user - * within the constructor. This makes DI impossible. - * @var Server - */ - protected $server; - /** @var IConfig */ - protected $config; - - /** - * @param Server $server - * @param IConfig $config - */ - public function __construct(Server $server, - IConfig $config) { - $this->server = $server; - $this->config = $config; - } - - /** {@inheritDoc} */ - public function getName() { - return 'Update user certificate stores with new root certificates'; - } - - /** {@inheritDoc} */ - public function run(IOutput $out) { - $rootView = new View(); - $dataDirectory = $this->config->getSystemValue('datadirectory', null); - if(is_null($dataDirectory)) { - throw new \Exception('No data directory specified'); - } - - $pathToRootCerts = '/files_external/rootcerts.crt'; - - foreach($rootView->getDirectoryContent('', 'httpd/unix-directory') as $fileInfo) { - $uid = trim($fileInfo->getPath(), '/'); - if($rootView->file_exists($uid . $pathToRootCerts)) { - // Delete the existing root certificate - $rootView->unlink($uid . $pathToRootCerts); - - /** - * FIXME: The certificate manager does only allow specifying the user - * within the constructor. This makes DI impossible. - */ - // Regenerate the certificates - $certificateManager = $this->server->getCertificateManager($uid); - $certificateManager->createCertificateBundle(); - } - } - } -} diff --git a/lib/private/Repair/UpdateOutdatedOcsIds.php b/lib/private/Repair/UpdateOutdatedOcsIds.php deleted file mode 100644 index 6f4f2447e94..00000000000 --- a/lib/private/Repair/UpdateOutdatedOcsIds.php +++ /dev/null @@ -1,106 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace OC\Repair; - -use OCP\IConfig; -use OCP\Migration\IOutput; -use OCP\Migration\IRepairStep; - -/** - * Class UpdateOutdatedOcsIds is used to update invalid outdated OCS IDs, this is - * for example the case when an application has had another OCS ID in the past such - * as for contacts and calendar when apps.owncloud.com migrated to a unified identifier - * for multiple versions. - * - * @package OC\Repair - */ -class UpdateOutdatedOcsIds implements IRepairStep { - /** @var IConfig */ - private $config; - - /** - * @param IConfig $config - */ - public function __construct(IConfig $config) { - $this->config = $config; - } - - /** - * {@inheritdoc} - */ - public function getName() { - return 'Repair outdated OCS IDs'; - } - - /** - * @param string $appName - * @param string $oldId - * @param string $newId - * @return bool True if updated, false otherwise - */ - public function fixOcsId($appName, $oldId, $newId) { - $existingId = $this->config->getAppValue($appName, 'ocsid'); - - if($existingId === $oldId) { - $this->config->setAppValue($appName, 'ocsid', $newId); - return true; - } - - return false; - } - - /** - * {@inheritdoc} - */ - public function run(IOutput $output) { - $appsToUpdate = [ - 'contacts' => [ - 'old' => '166044', - 'new' => '168708', - ], - 'calendar' => [ - 'old' => '166043', - 'new' => '168707', - ], - 'bookmarks' => [ - 'old' => '166042', - 'new' => '168710', - ], - 'search_lucene' => [ - 'old' => '166057', - 'new' => '168709', - ], - 'documents' => [ - 'old' => '166045', - 'new' => '168711', - ] - ]; - - foreach($appsToUpdate as $appName => $ids) { - if ($this->fixOcsId($appName, $ids['old'], $ids['new'])) { - $output->info("Fixed invalid $appName OCS id"); - } - } - } -} diff --git a/lib/private/Setup.php b/lib/private/Setup.php index 321e8ea4c66..13e6ae2862b 100644 --- a/lib/private/Setup.php +++ b/lib/private/Setup.php @@ -373,11 +373,6 @@ class Setup { Setup::updateHtaccess(); Setup::protectDataDirectory(); - //try to write logtimezone - if (date_default_timezone_get()) { - $config->setSystemValue('logtimezone', date_default_timezone_get()); - } - self::installBackgroundJobs(); //and we are done @@ -481,7 +476,7 @@ class Setup { public static function protectDataDirectory() { //Require all denied $now = date('Y-m-d H:i:s'); - $content = "# Generated by ownCloud on $now\n"; + $content = "# Generated by Nextcloud on $now\n"; $content.= "# line below if for Apache 2.4\n"; $content.= "<ifModule mod_authz_core.c>\n"; $content.= "Require all denied\n"; @@ -492,7 +487,9 @@ class Setup { $content.= "Satisfy All\n"; $content.= "</ifModule>\n\n"; $content.= "# section for Apache 2.2 and 2.4\n"; + $content.= "<ifModule mod_autoindex.c>\n"; $content.= "IndexIgnore *\n"; + $content.= "</ifModule>\n"; $baseDir = \OC::$server->getConfig()->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data'); file_put_contents($baseDir . '/.htaccess', $content); diff --git a/lib/private/Template/JSConfigHelper.php b/lib/private/Template/JSConfigHelper.php index 1c241989fd2..6bf08dcdada 100644 --- a/lib/private/Template/JSConfigHelper.php +++ b/lib/private/Template/JSConfigHelper.php @@ -206,7 +206,9 @@ class JSConfigHelper { 'versionstring' => \OC_Util::getVersionString(), 'enable_avatars' => true, // here for legacy reasons - to not crash existing code that relies on this value 'lost_password_link'=> $this->config->getSystemValue('lost_password_link', null), - 'modRewriteWorking' => (\OC::$server->getConfig()->getSystemValue('htaccess.IgnoreFrontController', false) === true || getenv('front_controller_active') === 'true'), + 'modRewriteWorking' => ($this->config->getSystemValue('htaccess.IgnoreFrontController', false) === true || getenv('front_controller_active') === 'true'), + 'sharing.maxAutocompleteResults' => intval($this->config->getSystemValue('sharing.maxAutocompleteResults', 0)), + 'sharing.minSearchStringLength' => intval($this->config->getSystemValue('sharing.minSearchStringLength', 0)), ]), "oc_appconfig" => json_encode([ 'core' => [ diff --git a/lib/private/TemplateLayout.php b/lib/private/TemplateLayout.php index f1621363237..ccd53c9cafa 100644 --- a/lib/private/TemplateLayout.php +++ b/lib/private/TemplateLayout.php @@ -159,11 +159,18 @@ class TemplateLayout extends \OC_Template { $this->append( 'jsfiles', $web.'/'.$file . $this->getVersionHashSuffix() ); } + try { + $pathInfo = \OC::$server->getRequest()->getPathInfo(); + } catch (\Exception $e) { + $pathInfo = ''; + } + // Do not initialise scss appdata until we have a fully installed instance // Do not load scss for update, errors, installation or login page if(\OC::$server->getSystemConfig()->getValue('installed', false) && !\OCP\Util::needUpgrade() - && !preg_match('/^\/login/', \OC::$server->getRequest()->getPathInfo())) { + && $pathInfo !== '' + && !preg_match('/^\/login/', $pathInfo)) { $cssFiles = self::findStylesheetFiles(\OC_Util::$styles); } else { // If we ignore the scss compiler, diff --git a/lib/private/User/Session.php b/lib/private/User/Session.php index 705ca95210a..c03cbd5891b 100644 --- a/lib/private/User/Session.php +++ b/lib/private/User/Session.php @@ -1,7 +1,9 @@ <?php /** + * @copyright Copyright (c) 2017, Sandro Lutz <sandro.lutz@temparus.ch> * @copyright Copyright (c) 2016, ownCloud, Inc. * + * @author Sandro Lutz <sandro.lutz@temparus.ch> * @author Arthur Schiwon <blizzz@arthur-schiwon.de> * @author Bernhard Posselt <dev@bernhard-posselt.com> * @author Christoph Wurst <christoph@owncloud.com> @@ -332,6 +334,10 @@ class Session implements IUserSession, Emitter { OC\Security\Bruteforce\Throttler $throttler) { $currentDelay = $throttler->sleepDelay($request->getRemoteAddress(), 'login'); + if ($this->manager instanceof PublicEmitter) { + $this->manager->emit('\OC\User', 'preLogin', array($user, $password)); + } + $isTokenPassword = $this->isTokenPassword($password); if (!$isTokenPassword && $this->isTokenAuthEnforced()) { throw new PasswordLoginForbiddenException(); @@ -476,7 +482,6 @@ class Session implements IUserSession, Emitter { * @throws LoginException if an app canceld the login process or the user is not enabled */ private function loginWithPassword($uid, $password) { - $this->manager->emit('\OC\User', 'preLogin', array($uid, $password)); $user = $this->manager->checkPassword($uid, $password); if ($user === false) { // Password check failed @@ -527,8 +532,6 @@ class Session implements IUserSession, Emitter { // Ignore and use empty string instead } - $this->manager->emit('\OC\User', 'preLogin', array($uid, $password)); - $user = $this->manager->get($uid); if (is_null($user)) { // user does not exist diff --git a/lib/private/legacy/helper.php b/lib/private/legacy/helper.php index dfe2e09afff..9c4bc895fb9 100644 --- a/lib/private/legacy/helper.php +++ b/lib/private/legacy/helper.php @@ -52,7 +52,6 @@ class OC_Helper { /** * Creates an absolute url for public use - * * @param string $service id * @param bool $add_slash * @return string the url @@ -63,14 +62,13 @@ class OC_Helper { if ($service === 'files') { $url = OC::$server->getURLGenerator()->getAbsoluteURL('/s'); } else { - $url = OC::$server->getURLGenerator()->getAbsoluteURL(OC::$server->getURLGenerator()->linkTo('', 'public.php') . '?service=' . $service); + $url = OC::$server->getURLGenerator()->getAbsoluteURL(OC::$server->getURLGenerator()->linkTo('', 'public.php').'?service='.$service); } return $url . (($add_slash && $service[strlen($service) - 1] != '/') ? '/' : ''); } /** * Make a human file size - * * @param int $bytes file size in bytes * @return string a human readable file size * @@ -106,7 +104,6 @@ class OC_Helper { /** * Make a php file size - * * @param int $bytes file size in bytes * @return string a php parseable file size * @@ -133,7 +130,6 @@ class OC_Helper { /** * Make a computer file size - * * @param string $str file size in human readable format * @return float a file size in bytes * @@ -176,7 +172,6 @@ class OC_Helper { /** * Recursive copying of folders - * * @param string $src source folder * @param string $dest target folder * @@ -199,7 +194,6 @@ class OC_Helper { /** * Recursive deletion of folders - * * @param string $dir path to the folder * @param bool $deleteSelf if set to false only the content of the folder will be deleted * @return bool @@ -399,7 +393,6 @@ class OC_Helper { /** * performs a search in a nested array - * * @param array $haystack the array to be searched * @param string $needle the search string * @param string $index optional, only search this key name @@ -432,7 +425,7 @@ class OC_Helper { * @return int number of bytes representing */ public static function maxUploadFilesize($dir, $freeSpace = null) { - if (is_null($freeSpace) || $freeSpace < 0) { + if (is_null($freeSpace) || $freeSpace < 0){ $freeSpace = self::freeSpace($dir); } return min($freeSpace, self::uploadLimit()); @@ -450,7 +443,7 @@ class OC_Helper { $freeSpace = max($freeSpace, 0); return $freeSpace; } else { - return (INF > 0) ? INF : PHP_INT_MAX; // work around https://bugs.php.net/bug.php?id=69188 + return (INF > 0)? INF: PHP_INT_MAX; // work around https://bugs.php.net/bug.php?id=69188 } } @@ -517,7 +510,7 @@ class OC_Helper { if (empty($paths)) { $paths = '/usr/local/bin /usr/bin /opt/bin /bin'; } else { - $paths = str_replace(':', ' ', getenv('PATH')); + $paths = str_replace(':',' ',getenv('PATH')); } $command = 'find ' . $paths . ' -name ' . escapeshellarg($program) . ' 2> /dev/null'; exec($command, $output, $returnCode); @@ -540,12 +533,6 @@ class OC_Helper { * @throws \OCP\Files\NotFoundException */ public static function getStorageInfo($path, $rootInfo = null) { - $memcache = \OC::$server->getMemCacheFactory()->create('storageInfo'); - $cacheKey = $rootInfo ? '__root__' . md5($path) : md5($path); - $cached = $memcache->get($cacheKey); - if (is_array($cached)) { - return $cached; - } // return storage info without adding mount points $includeExtStorage = \OC::$server->getSystemConfig()->getValue('quota_include_external_storage', false); @@ -610,20 +597,10 @@ class OC_Helper { $ownerId = $storage->getOwner($path); $ownerDisplayName = ''; $owner = \OC::$server->getUserManager()->get($ownerId); - if ($owner) { + if($owner) { $ownerDisplayName = $owner->getDisplayName(); } - $memcache->set($cacheKey, [ - 'free' => $free, - 'used' => $used, - 'quota' => $quota, - 'total' => $total, - 'relative' => $relative, - 'owner' => $ownerId, - 'ownerDisplayName' => $ownerDisplayName, - ], 5 * 60); - return [ 'free' => $free, 'used' => $used, @@ -668,7 +645,6 @@ class OC_Helper { /** * Returns whether the config file is set manually to read-only - * * @return bool */ public static function isReadOnlyConfigEnabled() { diff --git a/lib/private/legacy/image.php b/lib/private/legacy/image.php index 5403cccd026..ed7dfce29a6 100644 --- a/lib/private/legacy/image.php +++ b/lib/private/legacy/image.php @@ -54,6 +54,8 @@ class OC_Image implements \OCP\IImage { private $fileInfo; /** @var \OCP\ILogger */ private $logger; + /** @var \OCP\IConfig */ + private $config; /** @var array */ private $exif; @@ -79,18 +81,23 @@ class OC_Image implements \OCP\IImage { * @param resource|string $imageRef The path to a local file, a base64 encoded string or a resource created by * an imagecreate* function. * @param \OCP\ILogger $logger + * @param \OCP\IConfig $config */ - public function __construct($imageRef = null, $logger = null) { + public function __construct($imageRef = null, \OCP\ILogger $logger = null, \OCP\IConfig $config = null) { $this->logger = $logger; - if (is_null($logger)) { + if ($logger === null) { $this->logger = \OC::$server->getLogger(); } + $this->config = $config; + if ($config === null) { + $this->config = \OC::$server->getConfig(); + } if (\OC_Util::fileInfoLoaded()) { $this->fileInfo = new finfo(FILEINFO_MIME_TYPE); } - if (!is_null($imageRef)) { + if ($imageRef !== null) { $this->load($imageRef); } } @@ -205,11 +212,13 @@ class OC_Image implements \OCP\IImage { if ($mimeType === null) { $mimeType = $this->mimeType(); } - if ($filePath === null && $this->filePath === null) { - $this->logger->error(__METHOD__ . '(): called with no path.', array('app' => 'core')); - return false; - } elseif ($filePath === null && $this->filePath !== null) { - $filePath = $this->filePath; + if ($filePath === null) { + if ($this->filePath === null) { + $this->logger->error(__METHOD__ . '(): called with no path.', array('app' => 'core')); + return false; + } else { + $filePath = $this->filePath; + } } return $this->_output($filePath, $mimeType); } @@ -224,12 +233,14 @@ class OC_Image implements \OCP\IImage { */ private function _output($filePath = null, $mimeType = null) { if ($filePath) { - if (!file_exists(dirname($filePath))) + if (!file_exists(dirname($filePath))) { mkdir(dirname($filePath), 0777, true); - if (!is_writable(dirname($filePath))) { + } + $isWritable = is_writable(dirname($filePath)); + if (!$isWritable) { $this->logger->error(__METHOD__ . '(): Directory \'' . dirname($filePath) . '\' is not writable.', array('app' => 'core')); return false; - } elseif (is_writable(dirname($filePath)) && file_exists($filePath) && !is_writable($filePath)) { + } elseif ($isWritable && file_exists($filePath) && !is_writable($filePath)) { $this->logger->error(__METHOD__ . '(): File \'' . $filePath . '\' is not writable.', array('app' => 'core')); return false; } @@ -267,7 +278,7 @@ class OC_Image implements \OCP\IImage { $retVal = imagegif($this->resource, $filePath); break; case IMAGETYPE_JPEG: - $retVal = imagejpeg($this->resource, $filePath); + $retVal = imagejpeg($this->resource, $filePath, $this->getJpegQuality()); break; case IMAGETYPE_PNG: $retVal = imagepng($this->resource, $filePath); @@ -319,7 +330,12 @@ class OC_Image implements \OCP\IImage { $res = imagepng($this->resource); break; case "image/jpeg": - $res = imagejpeg($this->resource); + $quality = $this->getJpegQuality(); + if ($quality !== null) { + $res = imagejpeg($this->resource, null, $quality); + } else { + $res = imagejpeg($this->resource); + } break; case "image/gif": $res = imagegif($this->resource); @@ -338,11 +354,22 @@ class OC_Image implements \OCP\IImage { /** * @return string - base64 encoded, which is suitable for embedding in a VCard. */ - function __toString() { + public function __toString() { return base64_encode($this->data()); } /** + * @return int|null + */ + protected function getJpegQuality() { + $quality = $this->config->getAppValue('preview', 'jpeg_quality', 90); + if ($quality !== null) { + $quality = min(100, max(10, (int) $quality)); + } + return $quality; + } + + /** * (I'm open for suggestions on better method name ;) * Get the orientation based on EXIF data. * @@ -478,7 +505,7 @@ class OC_Image implements \OCP\IImage { */ public function load($imageRef) { if (is_resource($imageRef)) { - if (get_resource_type($imageRef) == 'gd') { + if (get_resource_type($imageRef) === 'gd') { $this->resource = $imageRef; return $this->resource; } elseif (in_array(get_resource_type($imageRef), array('file', 'stream'))) { @@ -747,7 +774,7 @@ class OC_Image implements \OCP\IImage { $this->logger->warning($error, array('app' => 'core')); return $im; } - $color = unpack('V', $part . $vide); + $color = @unpack('V', $part . $vide); break; case 16: if (!($part = substr($data, $p, 2))) { @@ -755,20 +782,20 @@ class OC_Image implements \OCP\IImage { $this->logger->warning($error, array('app' => 'core')); return $im; } - $color = unpack('v', $part); + $color = @unpack('v', $part); $color[1] = (($color[1] & 0xf800) >> 8) * 65536 + (($color[1] & 0x07e0) >> 3) * 256 + (($color[1] & 0x001f) << 3); break; case 8: - $color = unpack('n', $vide . substr($data, $p, 1)); - $color[1] = $palette[$color[1] + 1]; + $color = @unpack('n', $vide . substr($data, $p, 1)); + $color[1] = (isset($palette[$color[1] + 1])) ? $palette[$color[1] + 1] : $palette[1]; break; case 4: - $color = unpack('n', $vide . substr($data, floor($p), 1)); + $color = @unpack('n', $vide . substr($data, floor($p), 1)); $color[1] = ($p * 2) % 2 == 0 ? $color[1] >> 4 : $color[1] & 0x0F; - $color[1] = $palette[$color[1] + 1]; + $color[1] = (isset($palette[$color[1] + 1])) ? $palette[$color[1] + 1] : $palette[1]; break; case 1: - $color = unpack('n', $vide . substr($data, floor($p), 1)); + $color = @unpack('n', $vide . substr($data, floor($p), 1)); switch (($p * 8) % 8) { case 0: $color[1] = $color[1] >> 7; @@ -795,7 +822,7 @@ class OC_Image implements \OCP\IImage { $color[1] = ($color[1] & 0x1); break; } - $color[1] = $palette[$color[1] + 1]; + $color[1] = (isset($palette[$color[1] + 1])) ? $palette[$color[1] + 1] : $palette[1]; break; default: fclose($fh); diff --git a/lib/private/legacy/user.php b/lib/private/legacy/user.php index 0a52be7565d..661242a659a 100644 --- a/lib/private/legacy/user.php +++ b/lib/private/legacy/user.php @@ -187,7 +187,18 @@ class OC_User { if ($uid) { if (self::getUser() !== $uid) { self::setUserId($uid); - self::setDisplayName($uid); + $setUidAsDisplayName = true; + if($backend instanceof \OCP\UserInterface + && $backend->implementsActions(OC_User_Backend::GET_DISPLAYNAME)) { + + $backendDisplayName = $backend->getDisplayName($uid); + if(is_string($backendDisplayName) && trim($backendDisplayName) !== '') { + $setUidAsDisplayName = false; + } + } + if($setUidAsDisplayName) { + self::setDisplayName($uid); + } self::getUserSession()->setLoginName($uid); $request = OC::$server->getRequest(); self::getUserSession()->createSessionToken($request, $uid, $uid); diff --git a/lib/public/IServerContainer.php b/lib/public/IServerContainer.php index 02a092ea660..8c74c05d801 100644 --- a/lib/public/IServerContainer.php +++ b/lib/public/IServerContainer.php @@ -54,7 +54,7 @@ use Symfony\Component\EventDispatcher\EventDispatcherInterface; * This container holds all ownCloud services * @since 6.0.0 */ -interface IServerContainer { +interface IServerContainer extends IContainer { /** * The contacts manager will act as a broker between consumers for contacts information and diff --git a/ocs/v1.php b/ocs/v1.php index 31eb0687955..2c83144da6f 100644 --- a/ocs/v1.php +++ b/ocs/v1.php @@ -32,8 +32,7 @@ require_once __DIR__ . '/../lib/base.php'; if (\OCP\Util::needUpgrade() - || \OC::$server->getSystemConfig()->getValue('maintenance', false) - || \OC::$server->getSystemConfig()->getValue('singleuser', false)) { + || \OC::$server->getSystemConfig()->getValue('maintenance', false)) { // since the behavior of apps or remotes are unpredictable during // an upgrade, return a 503 directly OC_Response::setStatus(OC_Response::STATUS_SERVICE_UNAVAILABLE); diff --git a/public.php b/public.php index 2f86bc92bc6..a9365d6db63 100644 --- a/public.php +++ b/public.php @@ -39,7 +39,6 @@ try { } OC::checkMaintenanceMode(); - OC::checkSingleUserMode(true); $request = \OC::$server->getRequest(); $pathInfo = $request->getPathInfo(); diff --git a/resources/codesigning/root.crl b/resources/codesigning/root.crl index cb1b97fc87d..31f8055e3b1 100644 --- a/resources/codesigning/root.crl +++ b/resources/codesigning/root.crl @@ -1,14 +1,14 @@ -----BEGIN X509 CRL----- -MIICDTCB9gIBATANBgkqhkiG9w0BAQsFADB7MQswCQYDVQQGEwJERTEbMBkGA1UE -CAwSQmFkZW4tV3VlcnR0ZW1iZXJnMRcwFQYDVQQKDA5OZXh0Y2xvdWQgR21iSDE2 -MDQGA1UEAwwtTmV4dGNsb3VkIENvZGUgU2lnbmluZyBJbnRlcm1lZGlhdGUgQXV0 -aG9yaXR5Fw0xNjEwMTcxMjA5MjhaFw0yNjA4MjYxMjA5MjhaMBUwEwICEBAXDTE2 -MTAxNzEyMDkxOVqgMDAuMB8GA1UdIwQYMBaAFG3qbqqpNyw8iS0XPv1G7sOeeO10 -MAsGA1UdFAQEAgIQAzANBgkqhkiG9w0BAQsFAAOCAQEAZGJNwERFseCv6cS6bfmq -hIIqHieG+/mp4kjqtk4mg8CEYZq/M0q2DMjh7xZUuflV3wadqTCDunDXoyUIV36K -TwLsrREKGFqpSDsVgnX6IYeG0Sf7rnV5PYD2ODWfXrjp3yU7/Jgc2qjco11X5psV -uUnqGDU7DoMwFB6GTTRXfjpCKn8SUtuETAEN013Ii6xXsfCJQTjzQaZByz/Xbypr -sPfotQRfpAhhfjowK5B2ESjXePdNuFlPEAJ114HDJrI89dndIzus95N+3q2sm80T -TFwdooAghAvVmABADC3GQ9bvQb9CUC14DQZJWesy/ps64fgKdXcnBhsX9uPJ7Fdb -hQ== ------END X509 CRL-----
\ No newline at end of file +MIICIzCCAQsCAQEwDQYJKoZIhvcNAQELBQAwezELMAkGA1UEBhMCREUxGzAZBgNV +BAgMEkJhZGVuLVd1ZXJ0dGVtYmVyZzEXMBUGA1UECgwOTmV4dGNsb3VkIEdtYkgx +NjA0BgNVBAMMLU5leHRjbG91ZCBDb2RlIFNpZ25pbmcgSW50ZXJtZWRpYXRlIEF1 +dGhvcml0eRcNMTcwMjIwMTAwODU2WhcNMjYxMjMwMTAwODU2WjAqMBMCAhAQFw0x +NjEwMTcxMjA5MTlaMBMCAhAXFw0xNzAyMjAxMDAyMzhaoDAwLjAfBgNVHSMEGDAW +gBRt6m6qqTcsPIktFz79Ru7DnnjtdDALBgNVHRQEBAICEAQwDQYJKoZIhvcNAQEL +BQADggEBAC94bDgg/jGNTgp+L4I4GoZtfVQI9E0NbFyb2pBdAHA9vOcwvIYaaaB5 +b2hi5Ath/2o5/1OcnTJ8B5RPIoRu/2XOXiMXEH1ilS89VPYjNUUmEWmfFLKm8rWx +Z91cIBCeSDITDfYC+yG+QjVsl7YY60P7fduajZXdSD1ZtHravczVFXzilbafvFex +eim9jF+lANeFoTtFcmWCyUM/ys/qKagFBmkLkuxrYerWEMrNy6QNwc5dnL0LtPag +3aYRVY9qGqFWKFA0zg6dge4n9iZVkwczJME8AuKh2sRsqCmadx7QGqzkJWWXAAFi +j0Ixr7s4a90qFE1dE5v/SukfWeUH1Wg= +-----END X509 CRL----- diff --git a/settings/Controller/UsersController.php b/settings/Controller/UsersController.php index 719b6eb68f6..19c5b068167 100644 --- a/settings/Controller/UsersController.php +++ b/settings/Controller/UsersController.php @@ -49,7 +49,9 @@ use OCP\IUserManager; use OCP\IUserSession; use OCP\Mail\IMailer; use OCP\IAvatarManager; -use Punic\Exception; +use OCP\Security\ICrypto; +use OCP\Security\ISecureRandom; +use OCP\AppFramework\Utility\ITimeFactory; /** * @package OC\Settings\Controller @@ -85,6 +87,13 @@ class UsersController extends Controller { private $avatarManager; /** @var AccountManager */ private $accountManager; + /** @var ISecureRandom */ + private $secureRandom; + /** @var ITimeFactory */ + private $timeFactory; + /** @var ICrypto */ + private $crypto; + /** * @param string $appName @@ -103,6 +112,9 @@ class UsersController extends Controller { * @param IAppManager $appManager * @param IAvatarManager $avatarManager * @param AccountManager $accountManager + * @param ISecureRandom $secureRandom + * @param ITimeFactory $timeFactory + * @param ICrypto $crypto */ public function __construct($appName, IRequest $request, @@ -119,8 +131,10 @@ class UsersController extends Controller { IURLGenerator $urlGenerator, IAppManager $appManager, IAvatarManager $avatarManager, - AccountManager $accountManager -) { + AccountManager $accountManager, + ISecureRandom $secureRandom, + ITimeFactory $timeFactory, + ICrypto $crypto) { parent::__construct($appName, $request); $this->userManager = $userManager; $this->groupManager = $groupManager; @@ -135,6 +149,9 @@ class UsersController extends Controller { $this->urlGenerator = $urlGenerator; $this->avatarManager = $avatarManager; $this->accountManager = $accountManager; + $this->secureRandom = $secureRandom; + $this->timeFactory = $timeFactory; + $this->crypto = $crypto; // check for encryption state - TODO see formatUserForIndex $this->isEncryptionAppEnabled = $appManager->isEnabledForUser('encryption'); @@ -362,6 +379,21 @@ class UsersController extends Controller { ); } + $generatedPassword = false; + if ($password === '') { + if ($email === '') { + return new DataResponse( + array( + 'message' => (string)$this->l10n->t('To send a password link to the user an email address is required.') + ), + Http::STATUS_UNPROCESSABLE_ENTITY + ); + } + + $password = $this->secureRandom->generate(32); + $generatedPassword = true; + } + try { $user = $this->userManager->createUser($username, $password); } catch (\Exception $exception) { @@ -394,10 +426,27 @@ class UsersController extends Controller { if($email !== '') { $user->setEMailAddress($email); + if ($generatedPassword) { + $token = $this->secureRandom->generate( + 21, + ISecureRandom::CHAR_DIGITS . + ISecureRandom::CHAR_LOWER . + ISecureRandom::CHAR_UPPER + ); + $tokenValue = $this->timeFactory->getTime() . ':' . $token; + $mailAddress = !is_null($user->getEMailAddress()) ? $user->getEMailAddress() : ''; + $encryptedValue = $this->crypto->encrypt($tokenValue, $mailAddress . $this->config->getSystemValue('secret')); + $this->config->setUserValue($username, 'core', 'lostpassword', $encryptedValue); + + $link = $this->urlGenerator->linkToRouteAbsolute('core.lost.resetform', ['userId' => $username, 'token' => $token]); + } else { + $link = $this->urlGenerator->getAbsoluteURL('/'); + } + // data for the mail template $mailData = array( 'username' => $username, - 'url' => $this->urlGenerator->getAbsoluteURL('/') + 'url' => $link ); $mail = new TemplateResponse('settings', 'email.new_user', $mailData, 'blank'); diff --git a/settings/js/apps.js b/settings/js/apps.js index 1538e71a491..b73b4a35b3f 100644 --- a/settings/js/apps.js +++ b/settings/js/apps.js @@ -292,8 +292,8 @@ OC.Settings.Apps = OC.Settings.Apps || { OC.Settings.Apps.hideErrorMessage(appId); groups = groups || []; var appItem = $('div#app-'+appId+''); - element.val(t('settings','Enabling app …')); if(active && !groups.length) { + element.val(t('settings','Disabling app …')); $.post(OC.filePath('settings','ajax','disableapp.php'),{appid:appId},function(result) { if(!result || result.status !== 'success') { if (result.data && result.data.message) { @@ -320,6 +320,7 @@ OC.Settings.Apps = OC.Settings.Apps || { } else { // TODO: display message to admin to not refresh the page! // TODO: lock UI to prevent further operations + element.val(t('settings','Enabling app …')); $.post(OC.filePath('settings','ajax','enableapp.php'),{appid: appId, groups: groups},function(result) { if(!result || result.status !== 'success') { if (result.data && result.data.message) { diff --git a/settings/js/users/users.js b/settings/js/users/users.js index 3cf7b5e810a..a6dcafcdac3 100644 --- a/settings/js/users/users.js +++ b/settings/js/users/users.js @@ -918,7 +918,7 @@ $(document).ready(function () { })); return false; } - if ($.trim(password) === '') { + if ($.trim(password) === '' && !$('#CheckboxMailOnUserCreate').is(':checked')) { OC.Notification.showTemporary(t('settings', 'Error creating user: {message}', { message: t('settings', 'A valid password must be provided') })); diff --git a/settings/l10n/ca.js b/settings/l10n/ca.js index bb75e202b5e..e9a4f8febc4 100644 --- a/settings/l10n/ca.js +++ b/settings/l10n/ca.js @@ -47,10 +47,10 @@ OC.L10N.register( "All" : "Tots", "Update to %s" : "Actualitzar a %s", "No apps found for your version" : "No s'han trobat aplicacions per la seva versió", - "Enabling app …" : "Activant aplicació...", "Error while disabling app" : "Error en desactivar l'aplicació", "Disable" : "Desactiva", "Enable" : "Habilita", + "Enabling app …" : "Activant aplicació...", "Error while enabling app" : "Error en activar l'aplicació", "Updating...." : "Actualitzant...", "Error while updating app" : "Error en actualitzar l'aplicació", diff --git a/settings/l10n/ca.json b/settings/l10n/ca.json index 1b13280b4ed..969362672c8 100644 --- a/settings/l10n/ca.json +++ b/settings/l10n/ca.json @@ -45,10 +45,10 @@ "All" : "Tots", "Update to %s" : "Actualitzar a %s", "No apps found for your version" : "No s'han trobat aplicacions per la seva versió", - "Enabling app …" : "Activant aplicació...", "Error while disabling app" : "Error en desactivar l'aplicació", "Disable" : "Desactiva", "Enable" : "Habilita", + "Enabling app …" : "Activant aplicació...", "Error while enabling app" : "Error en activar l'aplicació", "Updating...." : "Actualitzant...", "Error while updating app" : "Error en actualitzar l'aplicació", diff --git a/settings/l10n/cs_CZ.js b/settings/l10n/cs_CZ.js index 7a6c7d56661..0f195417d89 100644 --- a/settings/l10n/cs_CZ.js +++ b/settings/l10n/cs_CZ.js @@ -27,6 +27,7 @@ OC.L10N.register( "Invalid mail address" : "Neplatná emailová adresa", "No valid group selected" : "Není vybrána platná skupina", "A user with that name already exists." : "Uživatel tohoto jména již existuje.", + "To send a password link to the user an email address is required." : "Pro zaslání odkazu na heslo uživateli je nutná e-mailová adresa.", "Unable to create user." : "Nelze vytvořit uživatele.", "Your %s account was created" : "Účet %s byl vytvořen", "Unable to delete user." : "Nelze smazat uživatele.", @@ -56,10 +57,10 @@ OC.L10N.register( "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Oficiální aplikace jsou vyvíjeny komunitou. Poskytují klíčovou funkcionalitu a jsou připravené na produkční nasazení.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Schválené aplikace jsou vyvíjeny důvěryhodnými vývojáři a prošly zběžným bezpečnostním prověřením. Jsou aktivně udržovány v repozitáři s otevřeným kódem a jejich správci je považují za stabilní pro občasné až normální použití.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "U této aplikace nebyla provedena kontrola na bezpečnostní problémy. Aplikace je nová nebo nestabilní. Instalujte pouze na vlastní nebezpečí.", - "Enabling app …" : "Povolování aplikace …", "Error while disabling app" : "Chyba při zakazování aplikace", "Disable" : "Zakázat", "Enable" : "Povolit", + "Enabling app …" : "Povolování aplikace …", "Error while enabling app" : "Chyba při povolování aplikace", "Error: this app cannot be enabled because it makes the server unstable" : "Chyba: tuto aplikaci nelze zapnout, protože způsobuje nestabilitu serveru", "Error: could not disable broken app" : "Chyba: nezdařilo se vypnout rozbitou aplikaci", @@ -276,7 +277,6 @@ OC.L10N.register( "Email" : "Email", "Your email address" : "Vaše emailová adresa", "No email address set" : "Emailová adresa není nastavena", - "For password recovery and notifications" : "Pro obnovení hesla a upozornění", "Phone number" : "Telefonní číslo", "Your phone number" : "Vlastní telefonní číslo", "Address" : "Adresa", @@ -319,6 +319,7 @@ OC.L10N.register( "Show last log in" : "Poslední přihlášení", "Show user backend" : "Zobrazit vedení uživatelů", "Send email to new user" : "Poslat email novému uživateli", + "When the password of the new user is left empty an activation email with a link to set the password is send to the user" : "Pokud je heslo nového uživatele ponecháno prázdné, je uživateli poslán aktivační e-mail s odkazem na nastavení hesla", "Show email address" : "Zobrazit emailové adresy", "E-Mail" : "Email", "Create" : "Vytvořit", @@ -368,6 +369,7 @@ OC.L10N.register( "Enable experimental apps" : "Povolit experimentální aplikace", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Ahoj,<br><br>toto je oznámení o nově vytvořeném %s účtu.<br><br>Uživatelské jméno: %s<br>Přihlásit se dá zde: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Ahoj,\n\ntoto je oznámení o nově vytvořeném %s účtu.\n\nUživatelské jméno: %s\nPřihlásit se dá zde: %s\n", + "For password recovery and notifications" : "Pro obnovení hesla a upozornění", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Chcete-li podpořit projekt\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">připojte se k vývoji</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">šiřte informace dál</a>!", "Add Group" : "Přidat skupinu", "Group" : "Skupina", diff --git a/settings/l10n/cs_CZ.json b/settings/l10n/cs_CZ.json index 67190dc0149..3d2faaf446c 100644 --- a/settings/l10n/cs_CZ.json +++ b/settings/l10n/cs_CZ.json @@ -25,6 +25,7 @@ "Invalid mail address" : "Neplatná emailová adresa", "No valid group selected" : "Není vybrána platná skupina", "A user with that name already exists." : "Uživatel tohoto jména již existuje.", + "To send a password link to the user an email address is required." : "Pro zaslání odkazu na heslo uživateli je nutná e-mailová adresa.", "Unable to create user." : "Nelze vytvořit uživatele.", "Your %s account was created" : "Účet %s byl vytvořen", "Unable to delete user." : "Nelze smazat uživatele.", @@ -54,10 +55,10 @@ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Oficiální aplikace jsou vyvíjeny komunitou. Poskytují klíčovou funkcionalitu a jsou připravené na produkční nasazení.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Schválené aplikace jsou vyvíjeny důvěryhodnými vývojáři a prošly zběžným bezpečnostním prověřením. Jsou aktivně udržovány v repozitáři s otevřeným kódem a jejich správci je považují za stabilní pro občasné až normální použití.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "U této aplikace nebyla provedena kontrola na bezpečnostní problémy. Aplikace je nová nebo nestabilní. Instalujte pouze na vlastní nebezpečí.", - "Enabling app …" : "Povolování aplikace …", "Error while disabling app" : "Chyba při zakazování aplikace", "Disable" : "Zakázat", "Enable" : "Povolit", + "Enabling app …" : "Povolování aplikace …", "Error while enabling app" : "Chyba při povolování aplikace", "Error: this app cannot be enabled because it makes the server unstable" : "Chyba: tuto aplikaci nelze zapnout, protože způsobuje nestabilitu serveru", "Error: could not disable broken app" : "Chyba: nezdařilo se vypnout rozbitou aplikaci", @@ -274,7 +275,6 @@ "Email" : "Email", "Your email address" : "Vaše emailová adresa", "No email address set" : "Emailová adresa není nastavena", - "For password recovery and notifications" : "Pro obnovení hesla a upozornění", "Phone number" : "Telefonní číslo", "Your phone number" : "Vlastní telefonní číslo", "Address" : "Adresa", @@ -317,6 +317,7 @@ "Show last log in" : "Poslední přihlášení", "Show user backend" : "Zobrazit vedení uživatelů", "Send email to new user" : "Poslat email novému uživateli", + "When the password of the new user is left empty an activation email with a link to set the password is send to the user" : "Pokud je heslo nového uživatele ponecháno prázdné, je uživateli poslán aktivační e-mail s odkazem na nastavení hesla", "Show email address" : "Zobrazit emailové adresy", "E-Mail" : "Email", "Create" : "Vytvořit", @@ -366,6 +367,7 @@ "Enable experimental apps" : "Povolit experimentální aplikace", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Ahoj,<br><br>toto je oznámení o nově vytvořeném %s účtu.<br><br>Uživatelské jméno: %s<br>Přihlásit se dá zde: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Ahoj,\n\ntoto je oznámení o nově vytvořeném %s účtu.\n\nUživatelské jméno: %s\nPřihlásit se dá zde: %s\n", + "For password recovery and notifications" : "Pro obnovení hesla a upozornění", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Chcete-li podpořit projekt\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">připojte se k vývoji</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">šiřte informace dál</a>!", "Add Group" : "Přidat skupinu", "Group" : "Skupina", diff --git a/settings/l10n/da.js b/settings/l10n/da.js index 474007513ce..0e2d660279c 100644 --- a/settings/l10n/da.js +++ b/settings/l10n/da.js @@ -185,7 +185,6 @@ OC.L10N.register( "Email" : "E-mail", "Your email address" : "Din e-mailadresse", "No email address set" : "Der er ikke angivet e-mailadresse", - "For password recovery and notifications" : "Angiv en e-mailadresse for at aktivere gendannelse af adgangskode og modtage notifikationer", "You are member of the following groups:" : "Der er medlem af følgende grupper:", "Password" : "Kodeord", "Current password" : "Nuværende adgangskode", @@ -246,6 +245,7 @@ OC.L10N.register( "Enable experimental apps" : "Aktiver eksperimentale programmer", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hejsa,<br><br>dette er blot en besked om, at du nu har en %s-konto.<br><br>Dit brugernavn: %s<br>Tilgå den: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hejsa,\n\ndette er blot en besked om, at du nu har en %s-konto.\n\nDit brugernavn: %s\nTilgå den: %s\n\n", + "For password recovery and notifications" : "Angiv en e-mailadresse for at aktivere gendannelse af adgangskode og modtage notifikationer", "Group" : "Gruppe" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/da.json b/settings/l10n/da.json index 70af6ed51a0..fc00b72efbb 100644 --- a/settings/l10n/da.json +++ b/settings/l10n/da.json @@ -183,7 +183,6 @@ "Email" : "E-mail", "Your email address" : "Din e-mailadresse", "No email address set" : "Der er ikke angivet e-mailadresse", - "For password recovery and notifications" : "Angiv en e-mailadresse for at aktivere gendannelse af adgangskode og modtage notifikationer", "You are member of the following groups:" : "Der er medlem af følgende grupper:", "Password" : "Kodeord", "Current password" : "Nuværende adgangskode", @@ -244,6 +243,7 @@ "Enable experimental apps" : "Aktiver eksperimentale programmer", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hejsa,<br><br>dette er blot en besked om, at du nu har en %s-konto.<br><br>Dit brugernavn: %s<br>Tilgå den: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hejsa,\n\ndette er blot en besked om, at du nu har en %s-konto.\n\nDit brugernavn: %s\nTilgå den: %s\n\n", + "For password recovery and notifications" : "Angiv en e-mailadresse for at aktivere gendannelse af adgangskode og modtage notifikationer", "Group" : "Gruppe" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/settings/l10n/de.js b/settings/l10n/de.js index 5c4fdba79fc..41ce1c0ed38 100644 --- a/settings/l10n/de.js +++ b/settings/l10n/de.js @@ -27,6 +27,7 @@ OC.L10N.register( "Invalid mail address" : "Ungültige E-Mail-Adresse", "No valid group selected" : "Keine gültige Gruppe ausgewählt", "A user with that name already exists." : "Ein Benutzer mit diesem Namen existiert bereits.", + "To send a password link to the user an email address is required." : "Um einen Passwort-Link an einen Benutzer zu versenden wird eine E-Mail-Adresse benötigt.", "Unable to create user." : "Benutzer konnte nicht erstellt werden.", "Your %s account was created" : "Dein %s-Konto wurde erstellt", "Unable to delete user." : "Benutzer konnte nicht gelöscht werden.", @@ -56,10 +57,10 @@ OC.L10N.register( "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Offizielle Apps werden von und innerhalb der Community entwickelt. Sie stellen die zentralen Funktionen bereit und sind für den produktiven Einsatz geeignet.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Geprüfte Apps werden von vertrauenswürdigen Entwicklern entwickelt und haben eine oberflächliche Sicherheitsprüfung durchlaufen. Sie werden innerhalb eines offenen Code-Repositorys aktiv gepflegt und ihre Betreuer erachten sie als stabil genug für für den gelegentlichen bis normalen Einsatz.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Diese App ist nicht auf Sicherheitsprobleme hin überprüft und ist neu oder bekanntermaßen instabil. Die Installation erfolgt auf eigenes Risiko.", - "Enabling app …" : "Aktiviere App ...", "Error while disabling app" : "Beim Deaktivieren der App ist ein Fehler aufgetreten", "Disable" : "Deaktivieren", "Enable" : "Aktivieren", + "Enabling app …" : "Aktiviere App ...", "Error while enabling app" : "Beim Aktivieren der App ist ein Fehler aufgetreten", "Error: this app cannot be enabled because it makes the server unstable" : "Fehler: Diese Anwendung kann nicht aktiviert werden, da sie den Server unstabil machen würde", "Error: could not disable broken app" : "Fehler: Die beschädigte Anwendung konnte nicht deaktiviert werden", @@ -254,7 +255,7 @@ OC.L10N.register( "Issued By" : "Ausgestellt von:", "Valid until %s" : "Gültig bis %s", "Import root certificate" : "Root-Zertifikat importieren", - "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "Hallo,<br><br>hier nur kurz die Mitteilung, dass du jetzt ein %s-Konto haben.<br><br>Dein Benutzername: <strong>%s</strong><br>Greife darauf zu: <strong><a href=\"%s\">%s</a></strong><br><br>", + "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "Hallo,<br><br>hier nur kurz die Mitteilung, dass du jetzt ein %s-Konto hast.<br><br>Dein Benutzername: <strong>%s</strong><br>Greife darauf zu: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "Noch einen schönen Tag!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hallo,\n\nhier nur kurz die Mitteilung, dass du jetzt ein %s-Konto hast.\n\nDein Benutzername: %s\nZugriff: %s\n", "Administrator documentation" : "Dokumentation für Administratoren", @@ -276,7 +277,7 @@ OC.L10N.register( "Email" : "E-Mail", "Your email address" : "Deine E-Mail-Adresse", "No email address set" : "Keine E-Mail-Adresse angegeben", - "For password recovery and notifications" : "Für Passwort-Wiederherstellung und Benachrichtigungen", + "For password reset and notifications" : "Für Passwort-Wiederherstellung und Benachrichtigungen", "Phone number" : "Telefonnummer", "Your phone number" : "Deine Telefonnummer", "Address" : "Adresse", @@ -319,6 +320,7 @@ OC.L10N.register( "Show last log in" : "Letzte Anmeldung anzeigen", "Show user backend" : "Benutzer-Backend anzeigen", "Send email to new user" : "E-Mail an neuen Benutzer senden", + "When the password of the new user is left empty an activation email with a link to set the password is send to the user" : "Wenn das Passwort für den neuen Benutzer leer gelassen wird, wird an ihn eine Aktivierungs-E-Mail mit einem Link zur Passwortvergabe versandt.", "Show email address" : "E-Mail-Adresse anzeigen", "E-Mail" : "E-Mail", "Create" : "Anlegen", @@ -368,6 +370,7 @@ OC.L10N.register( "Enable experimental apps" : "Experimentelle Apps aktivieren", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hallo,<br><br>hier nur kurz die Mitteilung, dass du jetzt ein %s-Konto hast.<br><br>Dein Benutzername: %s<br>Zugriff: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hallo,\n\nhier nur kurz die Mitteilung, dass du jetzt ein %s-Konto hast.\n\nDein Benutzername: %s\nLoslegen: %s\n\n", + "For password recovery and notifications" : "Für Passwort-Wiederherstellung und Benachrichtigungen", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Wenn Du das Projekt unterstützen möchtest ⇥⇥<a href=\"https://nextcloud.com/contribute\" ⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">hilf uns bei der Weiterentwicklung</a> ⇥⇥oder ⇥⇥<a href=\"https://nextcloud.com/contribute\" ⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">empfehle es weiter</a>!", "Add Group" : "Gruppe hinzufügen", "Group" : "Gruppe", diff --git a/settings/l10n/de.json b/settings/l10n/de.json index 93755105c2b..acb6a4524e3 100644 --- a/settings/l10n/de.json +++ b/settings/l10n/de.json @@ -25,6 +25,7 @@ "Invalid mail address" : "Ungültige E-Mail-Adresse", "No valid group selected" : "Keine gültige Gruppe ausgewählt", "A user with that name already exists." : "Ein Benutzer mit diesem Namen existiert bereits.", + "To send a password link to the user an email address is required." : "Um einen Passwort-Link an einen Benutzer zu versenden wird eine E-Mail-Adresse benötigt.", "Unable to create user." : "Benutzer konnte nicht erstellt werden.", "Your %s account was created" : "Dein %s-Konto wurde erstellt", "Unable to delete user." : "Benutzer konnte nicht gelöscht werden.", @@ -54,10 +55,10 @@ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Offizielle Apps werden von und innerhalb der Community entwickelt. Sie stellen die zentralen Funktionen bereit und sind für den produktiven Einsatz geeignet.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Geprüfte Apps werden von vertrauenswürdigen Entwicklern entwickelt und haben eine oberflächliche Sicherheitsprüfung durchlaufen. Sie werden innerhalb eines offenen Code-Repositorys aktiv gepflegt und ihre Betreuer erachten sie als stabil genug für für den gelegentlichen bis normalen Einsatz.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Diese App ist nicht auf Sicherheitsprobleme hin überprüft und ist neu oder bekanntermaßen instabil. Die Installation erfolgt auf eigenes Risiko.", - "Enabling app …" : "Aktiviere App ...", "Error while disabling app" : "Beim Deaktivieren der App ist ein Fehler aufgetreten", "Disable" : "Deaktivieren", "Enable" : "Aktivieren", + "Enabling app …" : "Aktiviere App ...", "Error while enabling app" : "Beim Aktivieren der App ist ein Fehler aufgetreten", "Error: this app cannot be enabled because it makes the server unstable" : "Fehler: Diese Anwendung kann nicht aktiviert werden, da sie den Server unstabil machen würde", "Error: could not disable broken app" : "Fehler: Die beschädigte Anwendung konnte nicht deaktiviert werden", @@ -252,7 +253,7 @@ "Issued By" : "Ausgestellt von:", "Valid until %s" : "Gültig bis %s", "Import root certificate" : "Root-Zertifikat importieren", - "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "Hallo,<br><br>hier nur kurz die Mitteilung, dass du jetzt ein %s-Konto haben.<br><br>Dein Benutzername: <strong>%s</strong><br>Greife darauf zu: <strong><a href=\"%s\">%s</a></strong><br><br>", + "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "Hallo,<br><br>hier nur kurz die Mitteilung, dass du jetzt ein %s-Konto hast.<br><br>Dein Benutzername: <strong>%s</strong><br>Greife darauf zu: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "Noch einen schönen Tag!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hallo,\n\nhier nur kurz die Mitteilung, dass du jetzt ein %s-Konto hast.\n\nDein Benutzername: %s\nZugriff: %s\n", "Administrator documentation" : "Dokumentation für Administratoren", @@ -274,7 +275,7 @@ "Email" : "E-Mail", "Your email address" : "Deine E-Mail-Adresse", "No email address set" : "Keine E-Mail-Adresse angegeben", - "For password recovery and notifications" : "Für Passwort-Wiederherstellung und Benachrichtigungen", + "For password reset and notifications" : "Für Passwort-Wiederherstellung und Benachrichtigungen", "Phone number" : "Telefonnummer", "Your phone number" : "Deine Telefonnummer", "Address" : "Adresse", @@ -317,6 +318,7 @@ "Show last log in" : "Letzte Anmeldung anzeigen", "Show user backend" : "Benutzer-Backend anzeigen", "Send email to new user" : "E-Mail an neuen Benutzer senden", + "When the password of the new user is left empty an activation email with a link to set the password is send to the user" : "Wenn das Passwort für den neuen Benutzer leer gelassen wird, wird an ihn eine Aktivierungs-E-Mail mit einem Link zur Passwortvergabe versandt.", "Show email address" : "E-Mail-Adresse anzeigen", "E-Mail" : "E-Mail", "Create" : "Anlegen", @@ -366,6 +368,7 @@ "Enable experimental apps" : "Experimentelle Apps aktivieren", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hallo,<br><br>hier nur kurz die Mitteilung, dass du jetzt ein %s-Konto hast.<br><br>Dein Benutzername: %s<br>Zugriff: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hallo,\n\nhier nur kurz die Mitteilung, dass du jetzt ein %s-Konto hast.\n\nDein Benutzername: %s\nLoslegen: %s\n\n", + "For password recovery and notifications" : "Für Passwort-Wiederherstellung und Benachrichtigungen", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Wenn Du das Projekt unterstützen möchtest ⇥⇥<a href=\"https://nextcloud.com/contribute\" ⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">hilf uns bei der Weiterentwicklung</a> ⇥⇥oder ⇥⇥<a href=\"https://nextcloud.com/contribute\" ⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">empfehle es weiter</a>!", "Add Group" : "Gruppe hinzufügen", "Group" : "Gruppe", diff --git a/settings/l10n/de_DE.js b/settings/l10n/de_DE.js index f83905eddc1..85fb3e3dc35 100644 --- a/settings/l10n/de_DE.js +++ b/settings/l10n/de_DE.js @@ -27,6 +27,7 @@ OC.L10N.register( "Invalid mail address" : "Ungültige E-Mail-Adresse", "No valid group selected" : "Keine gültige Gruppe ausgewählt", "A user with that name already exists." : "Ein Benutzer mit diesem Namen existiert bereits.", + "To send a password link to the user an email address is required." : "Um einen Passwort-Link an einen Benutzer zu versenden wird eine E-Mail-Adresse benötigt.", "Unable to create user." : "Benutzer konnte nicht erstellt werden.", "Your %s account was created" : "Ihr %s-Konto wurde erstellt", "Unable to delete user." : "Benutzer konnte nicht gelöscht werden.", @@ -56,16 +57,16 @@ OC.L10N.register( "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Offizielle Apps werden von und innerhalb der Community entwickelt. Sie stellen die zentralen Funktionen bereit und sind für den produktiven Einsatz geeignet.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Geprüfte Apps werden von vertrauenswürdigen Entwicklern entwickelt und haben eine oberflächliche Sicherheitsprüfung durchlaufen. Sie werden innerhalb eines offenen Code-Repositorys aktiv gepflegt und ihre Betreuer erachten sie als stabil genug für für den gelegentlichen bis normalen Einsatz.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Diese App ist nicht auf Sicherheitsprobleme hin überprüft und ist neu oder bekanntermaßen instabil. Die Installation erfolgt auf eigenes Risiko.", - "Enabling app …" : "Aktiviere App ...", "Error while disabling app" : "Beim Deaktivieren der App ist ein Fehler aufgetreten", "Disable" : "Deaktivieren", "Enable" : "Aktivieren", + "Enabling app …" : "Aktiviere App ...", "Error while enabling app" : "Beim Aktivieren der App ist ein Fehler aufgetreten", "Error: this app cannot be enabled because it makes the server unstable" : "Fehler: Diese App kann nicht aktiviert werden, da es den Server instabil macht.", "Error: could not disable broken app" : "Fehler: Die beschädigte Anwendung konnte nicht deaktiviert werden", "Error while disabling broken app" : "Beim Deaktivieren der defekten App ist ein Fehler aufgetreten", - "Updating...." : "Update…", - "Error while updating app" : "Es ist ein Fehler während des Updates aufgetreten", + "Updating...." : "Aktualisiere…", + "Error while updating app" : "Es ist ein Fehler während der Aktualisierung aufgetreten", "Updated" : "Aktualisiert", "Uninstalling ...." : "Wird deinstalliert…", "Error while uninstalling app" : "Fehler beim Deinstallieren der App", @@ -95,7 +96,7 @@ OC.L10N.register( "Not supported!" : "Nicht unterstützt!", "Press ⌘-C to copy." : "⌘-C zum Kopieren drücken.", "Press Ctrl-C to copy." : "Ctrl-C zum Kopieren drücken.", - "Error while loading browser sessions and device tokens" : "Fehler beim Laden der Browser-Sitzungen und Gerätetoken", + "Error while loading browser sessions and device tokens" : "Fehler beim Laden der Browser-Sitzungen und Geräte-Token", "Error while creating device token" : "Fehler beim Erstellen des Geräte-Tokens", "Error while deleting the token" : "Fehler beim Löschen des Geräte-Tokens", "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Es ist ein Fehler aufgetreten. Bitte laden Sie ein ASCII-kodiertes PEM-Zertifikat hoch.", @@ -106,7 +107,7 @@ OC.L10N.register( "Only visible to local users" : "Nur für lokale Benutzer sichtbar", "Only visible to you" : "Nur für Sie sichtbar", "Contacts" : "Kontakte", - "Visible to local users and to trusted servers" : "Sichtbar für lokale Nutzer und vertauenswürdige Server", + "Visible to local users and to trusted servers" : "Sichtbar für lokale Nutzer und vertrauenswürdige Server", "Public" : "Öffentlich", "Will be synced to a global and public address book" : "Wird mit einem globalen und einem öffentlichen Adressbuch synchronisiert", "Select a profile picture" : "Wählen Sie ein Profilbild", @@ -130,7 +131,7 @@ OC.L10N.register( "no group" : "Keine Gruppe", "Password successfully changed" : "Das Passwort wurde erfolgreich geändert", "Changing the password will result in data loss, because data recovery is not available for this user" : "Die Änderung des Passworts führt zu Datenverlust, weil die Datenwiederherstellung für diesen Benutzer nicht verfügbar ist", - "Could not change the users email" : "Die E-Mail Adresse des Nutzers konnte nicht geändert werden", + "Could not change the users email" : "Die E-Mail-Adresse des Nutzers konnte nicht geändert werden", "A valid username must be provided" : "Es muss ein gültiger Benutzername angegeben werden", "Error creating user: {message}" : "Fehler beim Erstellen eines Benutzers: {message}", "A valid password must be provided" : "Es muss ein gültiges Passwort angegeben werden", @@ -143,8 +144,8 @@ OC.L10N.register( "Sync clients" : "Sync-Clients", "None" : "Keine", "Login" : "Anmelden", - "Plain" : "Plain", - "NT LAN Manager" : "NT LAN Manager", + "Plain" : "Klartext", + "NT LAN Manager" : "NT-LAN-Manager", "SSL/TLS" : "SSL/TLS", "STARTTLS" : "STARTTLS", "Email server" : "E-Mail-Server", @@ -276,15 +277,15 @@ OC.L10N.register( "Email" : "E-Mail", "Your email address" : "Ihre E-Mail-Adresse", "No email address set" : "Keine E-Mail-Adresse angegeben", - "For password recovery and notifications" : "Für Passwort-Wiederherstellung und Benachrichtigungen", + "For password reset and notifications" : "Für Passwort-Wiederherstellung und Benachrichtigungen", "Phone number" : "Telefonnummer", "Your phone number" : "Ihre Telefonnummer", "Address" : "Adresse", "Your postal address" : "Ihre Postadresse", "Website" : "Webseite", - "Your website" : "Ihre Webseite", + "Your website" : "Ihre Internetseite", "Twitter" : "Twitter", - "Your Twitter handle" : "Ihr twitter-handle", + "Your Twitter handle" : "Ihr Twitter-Handle", "You are member of the following groups:" : "Sie sind Mitglied folgender Gruppen:", "Password" : "Passwort", "Current password" : "Aktuelles Passwort", @@ -319,6 +320,7 @@ OC.L10N.register( "Show last log in" : "Letzte Anmeldung anzeigen", "Show user backend" : "Benutzer-Backend anzeigen", "Send email to new user" : "E-Mail an neuen Benutzer senden", + "When the password of the new user is left empty an activation email with a link to set the password is send to the user" : "Wenn das Passwort für den neuen Benutzer leer gelassen wird, wird an ihn eine Aktivierungs-E-Mail mit einem Link zur Passwortvergabe versandt.", "Show email address" : "E-Mail Adresse anzeigen", "E-Mail" : "E-Mail", "Create" : "Erstellen", @@ -344,7 +346,7 @@ OC.L10N.register( "Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der admin-Gruppe löschen", "Unable to add user to group %s" : "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden", "Unable to remove user from group %s" : "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden", - "Are you really sure you want add \"{domain}\" as trusted domain?" : "Sind Sie sich wirklich sicher, dass Sie »{domain}« als vertrauenswürdige Domain hinzufügen möchten?", + "Are you really sure you want add \"{domain}\" as trusted domain?" : "Sind Sie sich wirklich sicher, dass Sie \"{domain}\" als vertrauenswürdige Domain hinzufügen möchten?", "Please wait...." : "Bitte warten…", "add group" : "Gruppe hinzufügen", "Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale Probleme, Fehler, Warnungen, Infos, Fehlerdiagnose)", @@ -368,6 +370,7 @@ OC.L10N.register( "Enable experimental apps" : "Experimentelle Apps aktivieren", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hallo,<br><br>hier nur kurz die Mitteilung, dass Sie jetzt ein %s-Konto haben.<br><br>Ihr Benutzername: %s<br>Greifen Sie darauf zu: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hallo,\n\nhier nur kurz die Mitteilung, dass Sie jetzt ein %s-Konto haben.\n\nIhr Benutzername: %s\nGreifen Sie darauf zu: %s\n\n", + "For password recovery and notifications" : "Für Passwort-Wiederherstellung und Benachrichtigungen", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Wenn Sie das Projekt unterstützen möchten ⇥⇥<a href=\"https://nextcloud.com/contribute\" ⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">helfen Sie bei der Weiterentwicklung</a> ⇥⇥oder ⇥⇥<a href=\"https://nextcloud.com/contribute\" ⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">empfehlen Sie es weiter</a>! ", "Add Group" : "Gruppe hinzufügen", "Group" : "Gruppe", diff --git a/settings/l10n/de_DE.json b/settings/l10n/de_DE.json index 065020da2aa..df2ad2b3844 100644 --- a/settings/l10n/de_DE.json +++ b/settings/l10n/de_DE.json @@ -25,6 +25,7 @@ "Invalid mail address" : "Ungültige E-Mail-Adresse", "No valid group selected" : "Keine gültige Gruppe ausgewählt", "A user with that name already exists." : "Ein Benutzer mit diesem Namen existiert bereits.", + "To send a password link to the user an email address is required." : "Um einen Passwort-Link an einen Benutzer zu versenden wird eine E-Mail-Adresse benötigt.", "Unable to create user." : "Benutzer konnte nicht erstellt werden.", "Your %s account was created" : "Ihr %s-Konto wurde erstellt", "Unable to delete user." : "Benutzer konnte nicht gelöscht werden.", @@ -54,16 +55,16 @@ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Offizielle Apps werden von und innerhalb der Community entwickelt. Sie stellen die zentralen Funktionen bereit und sind für den produktiven Einsatz geeignet.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Geprüfte Apps werden von vertrauenswürdigen Entwicklern entwickelt und haben eine oberflächliche Sicherheitsprüfung durchlaufen. Sie werden innerhalb eines offenen Code-Repositorys aktiv gepflegt und ihre Betreuer erachten sie als stabil genug für für den gelegentlichen bis normalen Einsatz.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Diese App ist nicht auf Sicherheitsprobleme hin überprüft und ist neu oder bekanntermaßen instabil. Die Installation erfolgt auf eigenes Risiko.", - "Enabling app …" : "Aktiviere App ...", "Error while disabling app" : "Beim Deaktivieren der App ist ein Fehler aufgetreten", "Disable" : "Deaktivieren", "Enable" : "Aktivieren", + "Enabling app …" : "Aktiviere App ...", "Error while enabling app" : "Beim Aktivieren der App ist ein Fehler aufgetreten", "Error: this app cannot be enabled because it makes the server unstable" : "Fehler: Diese App kann nicht aktiviert werden, da es den Server instabil macht.", "Error: could not disable broken app" : "Fehler: Die beschädigte Anwendung konnte nicht deaktiviert werden", "Error while disabling broken app" : "Beim Deaktivieren der defekten App ist ein Fehler aufgetreten", - "Updating...." : "Update…", - "Error while updating app" : "Es ist ein Fehler während des Updates aufgetreten", + "Updating...." : "Aktualisiere…", + "Error while updating app" : "Es ist ein Fehler während der Aktualisierung aufgetreten", "Updated" : "Aktualisiert", "Uninstalling ...." : "Wird deinstalliert…", "Error while uninstalling app" : "Fehler beim Deinstallieren der App", @@ -93,7 +94,7 @@ "Not supported!" : "Nicht unterstützt!", "Press ⌘-C to copy." : "⌘-C zum Kopieren drücken.", "Press Ctrl-C to copy." : "Ctrl-C zum Kopieren drücken.", - "Error while loading browser sessions and device tokens" : "Fehler beim Laden der Browser-Sitzungen und Gerätetoken", + "Error while loading browser sessions and device tokens" : "Fehler beim Laden der Browser-Sitzungen und Geräte-Token", "Error while creating device token" : "Fehler beim Erstellen des Geräte-Tokens", "Error while deleting the token" : "Fehler beim Löschen des Geräte-Tokens", "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Es ist ein Fehler aufgetreten. Bitte laden Sie ein ASCII-kodiertes PEM-Zertifikat hoch.", @@ -104,7 +105,7 @@ "Only visible to local users" : "Nur für lokale Benutzer sichtbar", "Only visible to you" : "Nur für Sie sichtbar", "Contacts" : "Kontakte", - "Visible to local users and to trusted servers" : "Sichtbar für lokale Nutzer und vertauenswürdige Server", + "Visible to local users and to trusted servers" : "Sichtbar für lokale Nutzer und vertrauenswürdige Server", "Public" : "Öffentlich", "Will be synced to a global and public address book" : "Wird mit einem globalen und einem öffentlichen Adressbuch synchronisiert", "Select a profile picture" : "Wählen Sie ein Profilbild", @@ -128,7 +129,7 @@ "no group" : "Keine Gruppe", "Password successfully changed" : "Das Passwort wurde erfolgreich geändert", "Changing the password will result in data loss, because data recovery is not available for this user" : "Die Änderung des Passworts führt zu Datenverlust, weil die Datenwiederherstellung für diesen Benutzer nicht verfügbar ist", - "Could not change the users email" : "Die E-Mail Adresse des Nutzers konnte nicht geändert werden", + "Could not change the users email" : "Die E-Mail-Adresse des Nutzers konnte nicht geändert werden", "A valid username must be provided" : "Es muss ein gültiger Benutzername angegeben werden", "Error creating user: {message}" : "Fehler beim Erstellen eines Benutzers: {message}", "A valid password must be provided" : "Es muss ein gültiges Passwort angegeben werden", @@ -141,8 +142,8 @@ "Sync clients" : "Sync-Clients", "None" : "Keine", "Login" : "Anmelden", - "Plain" : "Plain", - "NT LAN Manager" : "NT LAN Manager", + "Plain" : "Klartext", + "NT LAN Manager" : "NT-LAN-Manager", "SSL/TLS" : "SSL/TLS", "STARTTLS" : "STARTTLS", "Email server" : "E-Mail-Server", @@ -274,15 +275,15 @@ "Email" : "E-Mail", "Your email address" : "Ihre E-Mail-Adresse", "No email address set" : "Keine E-Mail-Adresse angegeben", - "For password recovery and notifications" : "Für Passwort-Wiederherstellung und Benachrichtigungen", + "For password reset and notifications" : "Für Passwort-Wiederherstellung und Benachrichtigungen", "Phone number" : "Telefonnummer", "Your phone number" : "Ihre Telefonnummer", "Address" : "Adresse", "Your postal address" : "Ihre Postadresse", "Website" : "Webseite", - "Your website" : "Ihre Webseite", + "Your website" : "Ihre Internetseite", "Twitter" : "Twitter", - "Your Twitter handle" : "Ihr twitter-handle", + "Your Twitter handle" : "Ihr Twitter-Handle", "You are member of the following groups:" : "Sie sind Mitglied folgender Gruppen:", "Password" : "Passwort", "Current password" : "Aktuelles Passwort", @@ -317,6 +318,7 @@ "Show last log in" : "Letzte Anmeldung anzeigen", "Show user backend" : "Benutzer-Backend anzeigen", "Send email to new user" : "E-Mail an neuen Benutzer senden", + "When the password of the new user is left empty an activation email with a link to set the password is send to the user" : "Wenn das Passwort für den neuen Benutzer leer gelassen wird, wird an ihn eine Aktivierungs-E-Mail mit einem Link zur Passwortvergabe versandt.", "Show email address" : "E-Mail Adresse anzeigen", "E-Mail" : "E-Mail", "Create" : "Erstellen", @@ -342,7 +344,7 @@ "Admins can't remove themself from the admin group" : "Administratoren können sich nicht selbst aus der admin-Gruppe löschen", "Unable to add user to group %s" : "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden", "Unable to remove user from group %s" : "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden", - "Are you really sure you want add \"{domain}\" as trusted domain?" : "Sind Sie sich wirklich sicher, dass Sie »{domain}« als vertrauenswürdige Domain hinzufügen möchten?", + "Are you really sure you want add \"{domain}\" as trusted domain?" : "Sind Sie sich wirklich sicher, dass Sie \"{domain}\" als vertrauenswürdige Domain hinzufügen möchten?", "Please wait...." : "Bitte warten…", "add group" : "Gruppe hinzufügen", "Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale Probleme, Fehler, Warnungen, Infos, Fehlerdiagnose)", @@ -366,6 +368,7 @@ "Enable experimental apps" : "Experimentelle Apps aktivieren", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hallo,<br><br>hier nur kurz die Mitteilung, dass Sie jetzt ein %s-Konto haben.<br><br>Ihr Benutzername: %s<br>Greifen Sie darauf zu: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hallo,\n\nhier nur kurz die Mitteilung, dass Sie jetzt ein %s-Konto haben.\n\nIhr Benutzername: %s\nGreifen Sie darauf zu: %s\n\n", + "For password recovery and notifications" : "Für Passwort-Wiederherstellung und Benachrichtigungen", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Wenn Sie das Projekt unterstützen möchten ⇥⇥<a href=\"https://nextcloud.com/contribute\" ⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">helfen Sie bei der Weiterentwicklung</a> ⇥⇥oder ⇥⇥<a href=\"https://nextcloud.com/contribute\" ⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">empfehlen Sie es weiter</a>! ", "Add Group" : "Gruppe hinzufügen", "Group" : "Gruppe", diff --git a/settings/l10n/el.js b/settings/l10n/el.js index b6175dfde52..d32fe21f958 100644 --- a/settings/l10n/el.js +++ b/settings/l10n/el.js @@ -240,7 +240,6 @@ OC.L10N.register( "Email" : "Ηλεκτρονικό ταχυδρομείο", "Your email address" : "Η διεύθυνση ηλ. ταχυδρομείου σας", "No email address set" : "Δεν ορίστηκε διεύθυνση email", - "For password recovery and notifications" : "Η ανάκτηση του συνθηματικού και οι ειδοποιήσεις", "Phone number" : "Αριθμός τηλεφώνου", "Your phone number" : "Ο αριθμός τηλεφώνου σας", "Address" : "Διεύθυνση", @@ -324,6 +323,7 @@ OC.L10N.register( "Enable experimental apps" : "Ενεργοποίηση πειραματικών εφαρμογών", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Χαίρεται,<br><br>απλά σας κάνουμε γνωστό ότι διαθέτετε έναν %s λογαριασμό.<br><br>Το όνομά σας είναι: %s<br>Έχετε πρόσβαση: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Χαίρεται, \nαπλά σας κάνουμε γνωστό ότι διαθέτετε έναν %s λογαριασμό.\nΤο όνομά σας είναι: %s\nΈχετε πρόσβαση: %s\n", + "For password recovery and notifications" : "Η ανάκτηση του συνθηματικού και οι ειδοποιήσεις", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Εάν θέλετε να υποστηρίξετε το έργο\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">συνεργαστείτε με τους προγραμματιστές</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">προωθήστε το</a>!", "Add Group" : "Προσθήκη ομάδας", "Group" : "Ομάδα", diff --git a/settings/l10n/el.json b/settings/l10n/el.json index 432d007bec1..4b8632e1936 100644 --- a/settings/l10n/el.json +++ b/settings/l10n/el.json @@ -238,7 +238,6 @@ "Email" : "Ηλεκτρονικό ταχυδρομείο", "Your email address" : "Η διεύθυνση ηλ. ταχυδρομείου σας", "No email address set" : "Δεν ορίστηκε διεύθυνση email", - "For password recovery and notifications" : "Η ανάκτηση του συνθηματικού και οι ειδοποιήσεις", "Phone number" : "Αριθμός τηλεφώνου", "Your phone number" : "Ο αριθμός τηλεφώνου σας", "Address" : "Διεύθυνση", @@ -322,6 +321,7 @@ "Enable experimental apps" : "Ενεργοποίηση πειραματικών εφαρμογών", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Χαίρεται,<br><br>απλά σας κάνουμε γνωστό ότι διαθέτετε έναν %s λογαριασμό.<br><br>Το όνομά σας είναι: %s<br>Έχετε πρόσβαση: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Χαίρεται, \nαπλά σας κάνουμε γνωστό ότι διαθέτετε έναν %s λογαριασμό.\nΤο όνομά σας είναι: %s\nΈχετε πρόσβαση: %s\n", + "For password recovery and notifications" : "Η ανάκτηση του συνθηματικού και οι ειδοποιήσεις", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Εάν θέλετε να υποστηρίξετε το έργο\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">συνεργαστείτε με τους προγραμματιστές</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">προωθήστε το</a>!", "Add Group" : "Προσθήκη ομάδας", "Group" : "Ομάδα", diff --git a/settings/l10n/en_GB.js b/settings/l10n/en_GB.js index 930205ba494..49fe129bc16 100644 --- a/settings/l10n/en_GB.js +++ b/settings/l10n/en_GB.js @@ -222,7 +222,6 @@ OC.L10N.register( "Email" : "Email", "Your email address" : "Your email address", "No email address set" : "No email address set", - "For password recovery and notifications" : "For password recovery and notifications", "You are member of the following groups:" : "You are member of the following groups:", "Password" : "Password", "Current password" : "Current password", @@ -287,6 +286,7 @@ OC.L10N.register( "Enable experimental apps" : "Enable experimental apps", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n", + "For password recovery and notifications" : "For password recovery and notifications", "Group" : "Group" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/en_GB.json b/settings/l10n/en_GB.json index 0584f6a5bb1..6893e48eb28 100644 --- a/settings/l10n/en_GB.json +++ b/settings/l10n/en_GB.json @@ -220,7 +220,6 @@ "Email" : "Email", "Your email address" : "Your email address", "No email address set" : "No email address set", - "For password recovery and notifications" : "For password recovery and notifications", "You are member of the following groups:" : "You are member of the following groups:", "Password" : "Password", "Current password" : "Current password", @@ -285,6 +284,7 @@ "Enable experimental apps" : "Enable experimental apps", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n", + "For password recovery and notifications" : "For password recovery and notifications", "Group" : "Group" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/settings/l10n/es.js b/settings/l10n/es.js index 342ef8284f6..6e3baf9291c 100644 --- a/settings/l10n/es.js +++ b/settings/l10n/es.js @@ -27,6 +27,7 @@ OC.L10N.register( "Invalid mail address" : "Dirección de correo inválida", "No valid group selected" : "No se ha seleccionado un grupo válido", "A user with that name already exists." : "Ya existe un usuario con ese nombre.", + "To send a password link to the user an email address is required." : "Para enviar un enlace de contraseña al usuario, se requiere una dirección de correo electrónico.", "Unable to create user." : "No se pudo crear el usuario.", "Your %s account was created" : "Se ha creado su cuenta de %s", "Unable to delete user." : "No se pudo eliminar el usuario.", @@ -56,10 +57,10 @@ OC.L10N.register( "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Las apps oficiales están desarrolladas por y dentro de la comunidad. Ofrecen una funcionalidad central y están preparadas para uso en producción.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Las aplicaciones aprobadas las desarrollan desarrolladores de confianza y han pasado un control de seguridad superficial. Estas se mantienen activamente en un repositorio de código abierto y sus encargados las consideran estables para un uso normal.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "No se han verificado los posibles problemas de seguridad de esta app. Es nueva o bien es conocida por ser inestable. Instálela bajo su propio riesgo.", - "Enabling app …" : "Activando app ...", "Error while disabling app" : "Error mientras se desactivaba la aplicación", "Disable" : "Desactivar", "Enable" : "Activar", + "Enabling app …" : "Activando app ...", "Error while enabling app" : "Error mientras se activaba la aplicación", "Error: this app cannot be enabled because it makes the server unstable" : "Error: Esta App no puede habilitarse porque el servidor se volveria inestable.", "Error: could not disable broken app" : "Error: No puedo deshabilitar la App dañada.", @@ -276,7 +277,7 @@ OC.L10N.register( "Email" : "Correo electrónico", "Your email address" : "Su dirección de correo", "No email address set" : "Ninguna dirección de correo establecida", - "For password recovery and notifications" : "Para la recuperación de contraseña y notificaciones", + "For password reset and notifications" : "Para notificaciones y cambio de contraseña", "Phone number" : "Número de teléfono", "Your phone number" : "Su número de teléfono", "Address" : "Dirección", @@ -319,6 +320,7 @@ OC.L10N.register( "Show last log in" : "Mostrar el último inicio de sesión", "Show user backend" : "Mostrar motor de usuario", "Send email to new user" : "Enviar correo al usuario nuevo", + "When the password of the new user is left empty an activation email with a link to set the password is send to the user" : "Cuando la contraseña del nuevo usuario se deja vacía, un correo electrónico de activación con un enlace para establecer la contraseña se envía al usuario", "Show email address" : "Mostrar dirección de correo electrónico", "E-Mail" : "Correo electrónico", "Create" : "Crear", @@ -368,6 +370,7 @@ OC.L10N.register( "Enable experimental apps" : "Habilitar aplicaciones experimentales", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "¿Qué tal?,<br><br>este mensaje es para hacerle saber que ahora tiene una %s cuenta.<br><br>Su nombre de usuario: %s<br>Acceda en: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hola, ¿qué tal?,\n\nEste mensaje es para hacerle saber que ahora tiene una cuenta %s.\n\nSu nombre de usuario: %s\nAcceda en: %s\n\n", + "For password recovery and notifications" : "Para la recuperación de contraseña y notificaciones", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">únase al desarrollo</a>\n\t\to\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">difunda la palabra</a>.", "Add Group" : "Agregar grupo", "Group" : "Grupo", diff --git a/settings/l10n/es.json b/settings/l10n/es.json index bbc1612cafe..92c4bb06528 100644 --- a/settings/l10n/es.json +++ b/settings/l10n/es.json @@ -25,6 +25,7 @@ "Invalid mail address" : "Dirección de correo inválida", "No valid group selected" : "No se ha seleccionado un grupo válido", "A user with that name already exists." : "Ya existe un usuario con ese nombre.", + "To send a password link to the user an email address is required." : "Para enviar un enlace de contraseña al usuario, se requiere una dirección de correo electrónico.", "Unable to create user." : "No se pudo crear el usuario.", "Your %s account was created" : "Se ha creado su cuenta de %s", "Unable to delete user." : "No se pudo eliminar el usuario.", @@ -54,10 +55,10 @@ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Las apps oficiales están desarrolladas por y dentro de la comunidad. Ofrecen una funcionalidad central y están preparadas para uso en producción.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Las aplicaciones aprobadas las desarrollan desarrolladores de confianza y han pasado un control de seguridad superficial. Estas se mantienen activamente en un repositorio de código abierto y sus encargados las consideran estables para un uso normal.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "No se han verificado los posibles problemas de seguridad de esta app. Es nueva o bien es conocida por ser inestable. Instálela bajo su propio riesgo.", - "Enabling app …" : "Activando app ...", "Error while disabling app" : "Error mientras se desactivaba la aplicación", "Disable" : "Desactivar", "Enable" : "Activar", + "Enabling app …" : "Activando app ...", "Error while enabling app" : "Error mientras se activaba la aplicación", "Error: this app cannot be enabled because it makes the server unstable" : "Error: Esta App no puede habilitarse porque el servidor se volveria inestable.", "Error: could not disable broken app" : "Error: No puedo deshabilitar la App dañada.", @@ -274,7 +275,7 @@ "Email" : "Correo electrónico", "Your email address" : "Su dirección de correo", "No email address set" : "Ninguna dirección de correo establecida", - "For password recovery and notifications" : "Para la recuperación de contraseña y notificaciones", + "For password reset and notifications" : "Para notificaciones y cambio de contraseña", "Phone number" : "Número de teléfono", "Your phone number" : "Su número de teléfono", "Address" : "Dirección", @@ -317,6 +318,7 @@ "Show last log in" : "Mostrar el último inicio de sesión", "Show user backend" : "Mostrar motor de usuario", "Send email to new user" : "Enviar correo al usuario nuevo", + "When the password of the new user is left empty an activation email with a link to set the password is send to the user" : "Cuando la contraseña del nuevo usuario se deja vacía, un correo electrónico de activación con un enlace para establecer la contraseña se envía al usuario", "Show email address" : "Mostrar dirección de correo electrónico", "E-Mail" : "Correo electrónico", "Create" : "Crear", @@ -366,6 +368,7 @@ "Enable experimental apps" : "Habilitar aplicaciones experimentales", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "¿Qué tal?,<br><br>este mensaje es para hacerle saber que ahora tiene una %s cuenta.<br><br>Su nombre de usuario: %s<br>Acceda en: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hola, ¿qué tal?,\n\nEste mensaje es para hacerle saber que ahora tiene una cuenta %s.\n\nSu nombre de usuario: %s\nAcceda en: %s\n\n", + "For password recovery and notifications" : "Para la recuperación de contraseña y notificaciones", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">únase al desarrollo</a>\n\t\to\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">difunda la palabra</a>.", "Add Group" : "Agregar grupo", "Group" : "Grupo", diff --git a/settings/l10n/eu.js b/settings/l10n/eu.js index ac332f20a21..e533f692df0 100644 --- a/settings/l10n/eu.js +++ b/settings/l10n/eu.js @@ -10,42 +10,105 @@ OC.L10N.register( "Authentication error" : "Autentifikazio errorea", "Please provide an admin recovery password, otherwise all user data will be lost" : "Mesedez eman berreskuratzeko administrazio pasahitza, bestela erabiltzaile datu guztiak galduko dira", "Wrong admin recovery password. Please check the password and try again." : "Administratzailearen berreskuratze pasahitza ez egokia. Mesedez egiaztatu pasahitza eta saiatu berriz.", + "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Backend doesn't support password change, but the user's encryption key was successfully updated.", + "installing and updating apps via the app store or Federated Cloud Sharing" : "installing and updating apps via the app store or Federated Cloud Sharing", "Federated Cloud Sharing" : "Federatutako Hodei Partekatzea", + "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably.", + "A problem occurred, please check your log files (Error: %s)" : "Arazo bat gertatu da, egiaztatu zure log fitxategiak (Error: %s)", + "Migration Completed" : "Migration Completed", "Group already exists." : "Taldea dagoeneko existitzen da", "Unable to add group." : "Ezin izan da taldea gehitu.", "Unable to delete group." : "Ezin izan da taldea ezabatu.", "test email settings" : "probatu eposta ezarpenak", + "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Arazo bat sortu da posta bidaltzerakoan. Berrikusi zure ezarpenak. (Error: %s)", "Email sent" : "Eposta bidalia", "You need to set your user email before being able to send test emails." : "Epostaren erabiltzailea zehaztu behar duzu probako eposta bidali aurretik.", "Invalid request" : "Baliogabeko eskaera", "Invalid mail address" : "Posta helbide baliogabea", + "No valid group selected" : "Aukeratutako taldea ez du balio", + "A user with that name already exists." : "Izen hori duen erabiltzaile bat bada jadanik.", + "To send a password link to the user an email address is required." : "Pasahitza ", "Unable to create user." : "Ezin izan da erabiltzailea sortu.", "Your %s account was created" : "Zure %s kontua sortu da", "Unable to delete user." : "Ezin izan da erabiltzailea ezabatu.", + "Settings saved" : "Ezarpenak gordeta", "Unable to change full name" : "Ezin izan da izena aldatu", + "Unable to change email address" : "Ezin da helbide elektronikoa aldatu", "Your full name has been changed." : "Zure izena aldatu egin da.", "Forbidden" : "Debekatuta", "Invalid user" : "Baliogabeko erabiiltzailea", "Unable to change mail address" : "Ezin izan da posta helbidea aldatu", "Email saved" : "Eposta gorde da", + "Password confirmation is required" : "Pasahitza konfirmatzea beharrezkoa da", "Couldn't remove app." : "Ezin izan da aplikazioa ezabatu..", "Couldn't update app." : "Ezin izan da aplikazioa eguneratu.", + "Are you really sure you want add {domain} as trusted domain?" : "Benetan ziur zaude {domain} gehitu domeinu fidagarri gisa nahi duzula?", "Add trusted domain" : "Gehitu domeinu fidagarria", + "Migration in progress. Please wait until the migration is finished" : "Migration in progress. Please wait until the migration is finished", + "Migration started …" : "Migration started …", + "Not saved" : "Ez da gorde", "Sending..." : "Bidaltzen...", + "Official" : "Ofiziala", "All" : "Denak", "Update to %s" : "Eguneratu %sra", + "_You have %n app update pending_::_You have %n app updates pending_" : ["Aplikazio %n daukazu eguneratzeko","%n aplikazio dituzu eguneratzeko"], + "No apps found for your version" : "Ez dira aplikaziorik aurkitu zure bertsiorako", + "The app will be downloaded from the app store" : "Aplikazioa aplikazio dendatik deskargatuko da", + "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Official apps are developed by and within the community. They offer central functionality and are ready for production use.", + "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use.", + "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "This app is not checked for security issues and is new or known to be unstable. Install at your own risk.", "Error while disabling app" : "Erroea izan da aplikazioa desgaitzerakoan", "Disable" : "Ez-gaitu", "Enable" : "Gaitu", + "Enabling app …" : "Aplikazioa gaitzen...", "Error while enabling app" : "Erroea izan da aplikazioa gaitzerakoan", + "Error: this app cannot be enabled because it makes the server unstable" : "Akatsa: Aplikazioa hau ezin da gaitu zerbitzaria ezegonkor izatea egiten duelako", + "Error: could not disable broken app" : "Akatsa: ezin da hondatutako aplikazioa desgaitu", + "Error while disabling broken app" : "Akatsa hondatutako aplikazioa desgaitzerakoan", "Updating...." : "Eguneratzen...", "Error while updating app" : "Errorea aplikazioa eguneratzen zen bitartean", "Updated" : "Eguneratuta", "Uninstalling ...." : "Desinstalatzen ...", "Error while uninstalling app" : "Erroea izan da aplikazioa desinstalatzerakoan", "Uninstall" : "Desinstalatu", + "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds.", + "App update" : "Aplikazio eguneratzea", + "Approved" : "Onartuta", + "Experimental" : "Esperimentala", + "No apps found for {query}" : "No apps found for {query}", + "Allow filesystem access" : "Onartu fitxategi sisteman sarbidea", + "Disconnect" : "Deskonektatu", + "Revoke" : "Ezeztatu", + "Internet Explorer" : "Internet Explorer", + "Edge" : "Edge", + "Firefox" : "Firefox", + "Google Chrome" : "Google Chrome", + "Safari" : "Safari", + "Google Chrome for Android" : "Google Chrome for Android", + "iPhone iOS" : "iPhone iOS", + "iPad iOS" : "iPad iOS", + "iOS Client" : "iOS Client", + "Android Client" : "Android Client", + "Sync client - {os}" : "Sinkronizatu bezeroaren - {os}", + "This session" : "Saio hau", + "Copy" : "Kopiatu", + "Copied!" : "Kopiatua!", + "Not supported!" : "Ez da onartzen!", + "Press ⌘-C to copy." : "Sakatu ⌘-C kopiatzeko.", + "Press Ctrl-C to copy." : "Sakatu Ctrl-C kopiatzeko.", + "Error while loading browser sessions and device tokens" : "Error while loading browser sessions and device tokens", + "Error while creating device token" : "Error while creating device token", + "Error while deleting the token" : "Error while deleting the token", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "An error occurred. Please upload an ASCII-encoded PEM certificate.", "Valid until {date}" : "{date} arte baliogarria", "Delete" : "Ezabatu", + "Local" : "Local", + "Private" : "Pribatua", + "Only visible to local users" : "Soilik bertako erabiltzaileentzako ikusgai", + "Only visible to you" : "Zuretzat bakarrik ikusgai", + "Contacts" : "Kontaktuak", + "Visible to local users and to trusted servers" : "Bertako erabiltzaile eta zerbitzarien jendearentzat ikusgai", + "Public" : "Publikoa", "Select a profile picture" : "Profilaren irudia aukeratu", "Very weak password" : "Pasahitz oso ahula", "Weak password" : "Pasahitz ahula", @@ -54,21 +117,38 @@ OC.L10N.register( "Strong password" : "Pasahitz sendoa", "Groups" : "Taldeak", "Unable to delete {objName}" : "Ezin izan da {objName} ezabatu", + "Error creating group: {message}" : "Akatsa taldea sortzerakoan: {mezua} ", "A valid group name must be provided" : "Baliozko talde izena eman behar da", "deleted {groupName}" : "{groupName} ezbatuta", "undo" : "desegin", "never" : "inoiz", "deleted {userName}" : "{userName} ezabatuta", + "Unable to add user to group {group}" : "Ezin erabiltzailea {group} taldera gehitu", + "Unable to remove user from group {group}" : "Ezin erabiltzailea {group} taldetik kendu", + "Add group" : "Taldea gehitu", + "Invalid quota value \"{val}\"" : "\"{val}\" kuota balioa ez du balio", + "no group" : "talderik ez", + "Password successfully changed" : "Pasahitza ongi aldatu da", "Changing the password will result in data loss, because data recovery is not available for this user" : "Pasahitza aldatzeak datuen galera eragingo du, erabiltzaile honetarako datuen berreskuratzea eskuragarri ez dagoelako", + "Could not change the users email" : "Ezin izan da erabiltzailearen posta-elektronikoa aldatu", "A valid username must be provided" : "Baliozko erabiltzaile izena eman behar da", + "Error creating user: {message}" : "Akatsa erabiltzailea sortzerakoan: {message}", "A valid password must be provided" : "Baliozko pasahitza eman behar da", "A valid email must be provided" : "Baliozko posta elektronikoa eman behar da", "__language_name__" : "Euskara", "Unlimited" : "Mugarik gabe", + "Personal info" : "Datu pertsonalak", + "Sessions" : "Saioak", + "App passwords" : "Aplikazioen pasahitzak", + "Sync clients" : "Sync clients", "None" : "Ezer", "Login" : "Saio hasiera", "Plain" : "Arrunta", "NT LAN Manager" : "NT LAN Manager", + "SSL/TLS" : "SSL/TLS", + "STARTTLS" : "STARTTLS", + "Email server" : "E-posta zerbitzaria", + "Open documentation" : "Ireki dokumentazioa", "This is used for sending out notifications." : "Hau jakinarazpenak bidaltzeko erabiltzen da.", "Send mode" : "Bidaltzeko modua", "Encryption" : "Enkriptazioa", @@ -84,6 +164,15 @@ OC.L10N.register( "Store credentials" : "Gorde kredentzialak", "Test email settings" : "Probatu eposta ezarpenak", "Send email" : "Bidali eposta", + "Server-side encryption" : "Zerbitzariaren aldeko enkriptaketa", + "Enable server-side encryption" : "Gaitu zerbitzariaren aldeko enkriptaketa", + "Please read carefully before activating server-side encryption: " : "Mesedez, irakurri arretaz zerbitzariaren aldeko enkriptaketa gaitu aurretik:", + "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." : "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met.", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases.", + "Be aware that encryption always increases the file size." : "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." : "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?" : "This is the final warning: Do you really want to enable encryption?", + "Enable encryption" : "Gaitu enkriptatzea", "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." : "Bakarrik irakurtzeko konfigurazioa gaitu da. Honek web-interfazearen bidez konfigurazio batzuk aldatzea ekiditzen du. Are gehiago, fitxategia eskuz ezarri behar da idazteko moduan eguneraketa bakoitzerako.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Badirudi PHP konfiguratuta dagoela lineako dokumentu blokeak aldatzeko. Honek zenbait oinarrizko aplikazio eskuraezin bihurtuko ditu.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Hau ziur aski cache/accelerator batek eragin du, hala nola Zend OPcache edo eAccelerator.", @@ -111,23 +200,56 @@ OC.L10N.register( "Restrict users to only share with users in their groups" : "Mugatu partekatzeak taldeko erabiltzaileetara", "Exclude groups from sharing" : "Baztertu taldeak partekatzean", "These groups will still be able to receive shares, but not to initiate them." : "Talde hauek oraindik jaso ahal izango dute partekatzeak, baina ezingo dute partekatu", + "Tips & tricks" : "Aholkuak eta trikimailuak", + "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>.", + "How to do backups" : "Nola egin babes kopiak", + "Advanced monitoring" : "Monitorizazio aurreratua", + "Performance tuning" : "Errendimendu ezarpenak", + "Improving the config.php" : "config.php hobetzen", + "Theming" : "Itxura", + "Hardening and security guidance" : "Gogortze eta segurtasun gida", + "Developer documentation" : "Garatzailearen dokumentazioa", + "by %s" : "by %s", + "%s-licensed" : "%s-lizentziapean", "Documentation:" : "Dokumentazioa:", + "User documentation" : "Erabiltzailearen dokumentazioa", + "Admin documentation" : "Administratzailearen dokumentazioa", + "Visit website" : "Web orria ikusi", + "Show description …" : "Erakutsi deskribapena ...", + "Hide description …" : "Ezkutatu deskribapena ...", + "This app has an update available." : "Aplikazio honek eguneraketa bat eskuragarri ditu.", + "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "This app has no minimum Nextcloud version assigned. This will be an error in the future.", + "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "This app has no maximum Nextcloud version assigned. This will be an error in the future.", "This app cannot be installed because the following dependencies are not fulfilled:" : "Aplikazioa ezin da instalatu hurrengo menpekotasunak betetzen ez direlako:", "Enable only for specific groups" : "Baimendu bakarri talde espezifikoetarako", + "Uninstall app" : "Desinstalatu aplikazioa", + "SSL Root Certificates" : "SSL Root Certificates", "Common Name" : "Izen arrunta", "Valid until" : "Data hau arte baliogarria", "Issued By" : "Honek bidalita", "Valid until %s" : "%s arte baliogarria", + "Import root certificate" : "Inportatu root ziurtagiria", "Cheers!" : "Ongi izan!", + "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Kaixo,\n\nJakinarazi nahi dizugu, badaukazula %s kontua.\n\nZure erabiltzaile izena: %s \nSar zaitez: %s\n", + "Administrator documentation" : "Administratzaile dokumentazioa", "Forum" : "Foroa", - "Profile picture" : "Profilaren irudia", + "Profile picture" : "Zure irudia", "Upload new" : "Igo berria", "Remove image" : "Irudia ezabatu", + "Picture provided by original account" : "Irudia jatorrizko kontutik hartuta", "Cancel" : "Ezeztatu", + "Choose as profile picture" : "Aukeratu profil irudi gisa", + "Full name" : "Izen osoa", "No display name set" : "Ez da bistaratze izena ezarri", "Email" : "E-posta", "Your email address" : "Zure e-posta", "No email address set" : "Ez da eposta helbidea ezarri", + "Phone number" : "Telefono zenbakia", + "Your phone number" : "Zure telefono zenbakia", + "Address" : "Helbidea", + "Your postal address" : "Zure helbidea", + "Website" : "Web orria", + "Your website" : "Zure web orria", "Password" : "Pasahitza", "Current password" : "Uneko pasahitza", "New password" : "Pasahitz berria", @@ -181,6 +303,7 @@ OC.L10N.register( "Uninstall App" : "Desinstalatu aplikazioa", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Kaixo,<br><br>orain %s kontu bat duzula esateko besterik ez.<br><br>Zure erabiltzailea: %s<br>Sar zaitez: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Kaixo,\n\norain %s kontu bat duzula esateko besterik ez.\n\nZure erabiltzailea: %s\nSar zaitez: %s\n\n", - "Group" : "Taldea" + "Group" : "Taldea", + "Full Name" : "Izen osoa" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/eu.json b/settings/l10n/eu.json index a7d45148ef3..b5421f74f07 100644 --- a/settings/l10n/eu.json +++ b/settings/l10n/eu.json @@ -8,42 +8,105 @@ "Authentication error" : "Autentifikazio errorea", "Please provide an admin recovery password, otherwise all user data will be lost" : "Mesedez eman berreskuratzeko administrazio pasahitza, bestela erabiltzaile datu guztiak galduko dira", "Wrong admin recovery password. Please check the password and try again." : "Administratzailearen berreskuratze pasahitza ez egokia. Mesedez egiaztatu pasahitza eta saiatu berriz.", + "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Backend doesn't support password change, but the user's encryption key was successfully updated.", + "installing and updating apps via the app store or Federated Cloud Sharing" : "installing and updating apps via the app store or Federated Cloud Sharing", "Federated Cloud Sharing" : "Federatutako Hodei Partekatzea", + "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably.", + "A problem occurred, please check your log files (Error: %s)" : "Arazo bat gertatu da, egiaztatu zure log fitxategiak (Error: %s)", + "Migration Completed" : "Migration Completed", "Group already exists." : "Taldea dagoeneko existitzen da", "Unable to add group." : "Ezin izan da taldea gehitu.", "Unable to delete group." : "Ezin izan da taldea ezabatu.", "test email settings" : "probatu eposta ezarpenak", + "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Arazo bat sortu da posta bidaltzerakoan. Berrikusi zure ezarpenak. (Error: %s)", "Email sent" : "Eposta bidalia", "You need to set your user email before being able to send test emails." : "Epostaren erabiltzailea zehaztu behar duzu probako eposta bidali aurretik.", "Invalid request" : "Baliogabeko eskaera", "Invalid mail address" : "Posta helbide baliogabea", + "No valid group selected" : "Aukeratutako taldea ez du balio", + "A user with that name already exists." : "Izen hori duen erabiltzaile bat bada jadanik.", + "To send a password link to the user an email address is required." : "Pasahitza ", "Unable to create user." : "Ezin izan da erabiltzailea sortu.", "Your %s account was created" : "Zure %s kontua sortu da", "Unable to delete user." : "Ezin izan da erabiltzailea ezabatu.", + "Settings saved" : "Ezarpenak gordeta", "Unable to change full name" : "Ezin izan da izena aldatu", + "Unable to change email address" : "Ezin da helbide elektronikoa aldatu", "Your full name has been changed." : "Zure izena aldatu egin da.", "Forbidden" : "Debekatuta", "Invalid user" : "Baliogabeko erabiiltzailea", "Unable to change mail address" : "Ezin izan da posta helbidea aldatu", "Email saved" : "Eposta gorde da", + "Password confirmation is required" : "Pasahitza konfirmatzea beharrezkoa da", "Couldn't remove app." : "Ezin izan da aplikazioa ezabatu..", "Couldn't update app." : "Ezin izan da aplikazioa eguneratu.", + "Are you really sure you want add {domain} as trusted domain?" : "Benetan ziur zaude {domain} gehitu domeinu fidagarri gisa nahi duzula?", "Add trusted domain" : "Gehitu domeinu fidagarria", + "Migration in progress. Please wait until the migration is finished" : "Migration in progress. Please wait until the migration is finished", + "Migration started …" : "Migration started …", + "Not saved" : "Ez da gorde", "Sending..." : "Bidaltzen...", + "Official" : "Ofiziala", "All" : "Denak", "Update to %s" : "Eguneratu %sra", + "_You have %n app update pending_::_You have %n app updates pending_" : ["Aplikazio %n daukazu eguneratzeko","%n aplikazio dituzu eguneratzeko"], + "No apps found for your version" : "Ez dira aplikaziorik aurkitu zure bertsiorako", + "The app will be downloaded from the app store" : "Aplikazioa aplikazio dendatik deskargatuko da", + "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Official apps are developed by and within the community. They offer central functionality and are ready for production use.", + "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use.", + "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "This app is not checked for security issues and is new or known to be unstable. Install at your own risk.", "Error while disabling app" : "Erroea izan da aplikazioa desgaitzerakoan", "Disable" : "Ez-gaitu", "Enable" : "Gaitu", + "Enabling app …" : "Aplikazioa gaitzen...", "Error while enabling app" : "Erroea izan da aplikazioa gaitzerakoan", + "Error: this app cannot be enabled because it makes the server unstable" : "Akatsa: Aplikazioa hau ezin da gaitu zerbitzaria ezegonkor izatea egiten duelako", + "Error: could not disable broken app" : "Akatsa: ezin da hondatutako aplikazioa desgaitu", + "Error while disabling broken app" : "Akatsa hondatutako aplikazioa desgaitzerakoan", "Updating...." : "Eguneratzen...", "Error while updating app" : "Errorea aplikazioa eguneratzen zen bitartean", "Updated" : "Eguneratuta", "Uninstalling ...." : "Desinstalatzen ...", "Error while uninstalling app" : "Erroea izan da aplikazioa desinstalatzerakoan", "Uninstall" : "Desinstalatu", + "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds.", + "App update" : "Aplikazio eguneratzea", + "Approved" : "Onartuta", + "Experimental" : "Esperimentala", + "No apps found for {query}" : "No apps found for {query}", + "Allow filesystem access" : "Onartu fitxategi sisteman sarbidea", + "Disconnect" : "Deskonektatu", + "Revoke" : "Ezeztatu", + "Internet Explorer" : "Internet Explorer", + "Edge" : "Edge", + "Firefox" : "Firefox", + "Google Chrome" : "Google Chrome", + "Safari" : "Safari", + "Google Chrome for Android" : "Google Chrome for Android", + "iPhone iOS" : "iPhone iOS", + "iPad iOS" : "iPad iOS", + "iOS Client" : "iOS Client", + "Android Client" : "Android Client", + "Sync client - {os}" : "Sinkronizatu bezeroaren - {os}", + "This session" : "Saio hau", + "Copy" : "Kopiatu", + "Copied!" : "Kopiatua!", + "Not supported!" : "Ez da onartzen!", + "Press ⌘-C to copy." : "Sakatu ⌘-C kopiatzeko.", + "Press Ctrl-C to copy." : "Sakatu Ctrl-C kopiatzeko.", + "Error while loading browser sessions and device tokens" : "Error while loading browser sessions and device tokens", + "Error while creating device token" : "Error while creating device token", + "Error while deleting the token" : "Error while deleting the token", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "An error occurred. Please upload an ASCII-encoded PEM certificate.", "Valid until {date}" : "{date} arte baliogarria", "Delete" : "Ezabatu", + "Local" : "Local", + "Private" : "Pribatua", + "Only visible to local users" : "Soilik bertako erabiltzaileentzako ikusgai", + "Only visible to you" : "Zuretzat bakarrik ikusgai", + "Contacts" : "Kontaktuak", + "Visible to local users and to trusted servers" : "Bertako erabiltzaile eta zerbitzarien jendearentzat ikusgai", + "Public" : "Publikoa", "Select a profile picture" : "Profilaren irudia aukeratu", "Very weak password" : "Pasahitz oso ahula", "Weak password" : "Pasahitz ahula", @@ -52,21 +115,38 @@ "Strong password" : "Pasahitz sendoa", "Groups" : "Taldeak", "Unable to delete {objName}" : "Ezin izan da {objName} ezabatu", + "Error creating group: {message}" : "Akatsa taldea sortzerakoan: {mezua} ", "A valid group name must be provided" : "Baliozko talde izena eman behar da", "deleted {groupName}" : "{groupName} ezbatuta", "undo" : "desegin", "never" : "inoiz", "deleted {userName}" : "{userName} ezabatuta", + "Unable to add user to group {group}" : "Ezin erabiltzailea {group} taldera gehitu", + "Unable to remove user from group {group}" : "Ezin erabiltzailea {group} taldetik kendu", + "Add group" : "Taldea gehitu", + "Invalid quota value \"{val}\"" : "\"{val}\" kuota balioa ez du balio", + "no group" : "talderik ez", + "Password successfully changed" : "Pasahitza ongi aldatu da", "Changing the password will result in data loss, because data recovery is not available for this user" : "Pasahitza aldatzeak datuen galera eragingo du, erabiltzaile honetarako datuen berreskuratzea eskuragarri ez dagoelako", + "Could not change the users email" : "Ezin izan da erabiltzailearen posta-elektronikoa aldatu", "A valid username must be provided" : "Baliozko erabiltzaile izena eman behar da", + "Error creating user: {message}" : "Akatsa erabiltzailea sortzerakoan: {message}", "A valid password must be provided" : "Baliozko pasahitza eman behar da", "A valid email must be provided" : "Baliozko posta elektronikoa eman behar da", "__language_name__" : "Euskara", "Unlimited" : "Mugarik gabe", + "Personal info" : "Datu pertsonalak", + "Sessions" : "Saioak", + "App passwords" : "Aplikazioen pasahitzak", + "Sync clients" : "Sync clients", "None" : "Ezer", "Login" : "Saio hasiera", "Plain" : "Arrunta", "NT LAN Manager" : "NT LAN Manager", + "SSL/TLS" : "SSL/TLS", + "STARTTLS" : "STARTTLS", + "Email server" : "E-posta zerbitzaria", + "Open documentation" : "Ireki dokumentazioa", "This is used for sending out notifications." : "Hau jakinarazpenak bidaltzeko erabiltzen da.", "Send mode" : "Bidaltzeko modua", "Encryption" : "Enkriptazioa", @@ -82,6 +162,15 @@ "Store credentials" : "Gorde kredentzialak", "Test email settings" : "Probatu eposta ezarpenak", "Send email" : "Bidali eposta", + "Server-side encryption" : "Zerbitzariaren aldeko enkriptaketa", + "Enable server-side encryption" : "Gaitu zerbitzariaren aldeko enkriptaketa", + "Please read carefully before activating server-side encryption: " : "Mesedez, irakurri arretaz zerbitzariaren aldeko enkriptaketa gaitu aurretik:", + "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." : "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met.", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases.", + "Be aware that encryption always increases the file size." : "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." : "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?" : "This is the final warning: Do you really want to enable encryption?", + "Enable encryption" : "Gaitu enkriptatzea", "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." : "Bakarrik irakurtzeko konfigurazioa gaitu da. Honek web-interfazearen bidez konfigurazio batzuk aldatzea ekiditzen du. Are gehiago, fitxategia eskuz ezarri behar da idazteko moduan eguneraketa bakoitzerako.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Badirudi PHP konfiguratuta dagoela lineako dokumentu blokeak aldatzeko. Honek zenbait oinarrizko aplikazio eskuraezin bihurtuko ditu.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Hau ziur aski cache/accelerator batek eragin du, hala nola Zend OPcache edo eAccelerator.", @@ -109,23 +198,56 @@ "Restrict users to only share with users in their groups" : "Mugatu partekatzeak taldeko erabiltzaileetara", "Exclude groups from sharing" : "Baztertu taldeak partekatzean", "These groups will still be able to receive shares, but not to initiate them." : "Talde hauek oraindik jaso ahal izango dute partekatzeak, baina ezingo dute partekatu", + "Tips & tricks" : "Aholkuak eta trikimailuak", + "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>.", + "How to do backups" : "Nola egin babes kopiak", + "Advanced monitoring" : "Monitorizazio aurreratua", + "Performance tuning" : "Errendimendu ezarpenak", + "Improving the config.php" : "config.php hobetzen", + "Theming" : "Itxura", + "Hardening and security guidance" : "Gogortze eta segurtasun gida", + "Developer documentation" : "Garatzailearen dokumentazioa", + "by %s" : "by %s", + "%s-licensed" : "%s-lizentziapean", "Documentation:" : "Dokumentazioa:", + "User documentation" : "Erabiltzailearen dokumentazioa", + "Admin documentation" : "Administratzailearen dokumentazioa", + "Visit website" : "Web orria ikusi", + "Show description …" : "Erakutsi deskribapena ...", + "Hide description …" : "Ezkutatu deskribapena ...", + "This app has an update available." : "Aplikazio honek eguneraketa bat eskuragarri ditu.", + "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "This app has no minimum Nextcloud version assigned. This will be an error in the future.", + "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "This app has no maximum Nextcloud version assigned. This will be an error in the future.", "This app cannot be installed because the following dependencies are not fulfilled:" : "Aplikazioa ezin da instalatu hurrengo menpekotasunak betetzen ez direlako:", "Enable only for specific groups" : "Baimendu bakarri talde espezifikoetarako", + "Uninstall app" : "Desinstalatu aplikazioa", + "SSL Root Certificates" : "SSL Root Certificates", "Common Name" : "Izen arrunta", "Valid until" : "Data hau arte baliogarria", "Issued By" : "Honek bidalita", "Valid until %s" : "%s arte baliogarria", + "Import root certificate" : "Inportatu root ziurtagiria", "Cheers!" : "Ongi izan!", + "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Kaixo,\n\nJakinarazi nahi dizugu, badaukazula %s kontua.\n\nZure erabiltzaile izena: %s \nSar zaitez: %s\n", + "Administrator documentation" : "Administratzaile dokumentazioa", "Forum" : "Foroa", - "Profile picture" : "Profilaren irudia", + "Profile picture" : "Zure irudia", "Upload new" : "Igo berria", "Remove image" : "Irudia ezabatu", + "Picture provided by original account" : "Irudia jatorrizko kontutik hartuta", "Cancel" : "Ezeztatu", + "Choose as profile picture" : "Aukeratu profil irudi gisa", + "Full name" : "Izen osoa", "No display name set" : "Ez da bistaratze izena ezarri", "Email" : "E-posta", "Your email address" : "Zure e-posta", "No email address set" : "Ez da eposta helbidea ezarri", + "Phone number" : "Telefono zenbakia", + "Your phone number" : "Zure telefono zenbakia", + "Address" : "Helbidea", + "Your postal address" : "Zure helbidea", + "Website" : "Web orria", + "Your website" : "Zure web orria", "Password" : "Pasahitza", "Current password" : "Uneko pasahitza", "New password" : "Pasahitz berria", @@ -179,6 +301,7 @@ "Uninstall App" : "Desinstalatu aplikazioa", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Kaixo,<br><br>orain %s kontu bat duzula esateko besterik ez.<br><br>Zure erabiltzailea: %s<br>Sar zaitez: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Kaixo,\n\norain %s kontu bat duzula esateko besterik ez.\n\nZure erabiltzailea: %s\nSar zaitez: %s\n\n", - "Group" : "Taldea" + "Group" : "Taldea", + "Full Name" : "Izen osoa" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/settings/l10n/fi_FI.js b/settings/l10n/fi_FI.js index dc9a7672601..42f1fa203ea 100644 --- a/settings/l10n/fi_FI.js +++ b/settings/l10n/fi_FI.js @@ -204,7 +204,6 @@ OC.L10N.register( "Email" : "Sähköpostiosoite", "Your email address" : "Sähköpostiosoitteesi", "No email address set" : "Sähköpostiosoitetta ei ole asetettu", - "For password recovery and notifications" : "Salasanan nollausta ja ilmoituksia varten", "You are member of the following groups:" : "Olet jäsenenä seuraavissa ryhmissä:", "Password" : "Salasana", "Current password" : "Nykyinen salasana", @@ -268,6 +267,7 @@ OC.L10N.register( "Enable experimental apps" : "Käytä kokeiluasteella olevia sovelluksia", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hei<br><br>Sinulla on nyt %s-tili.<br><br>Käyttäjätunnus: %s<br>Aloita käyttö: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hei\n\nSinulla on nyt %s-tili.\n\nKäyttäjätunnuksesi: %s\nAloita käyttö: %s\n\n", + "For password recovery and notifications" : "Salasanan nollausta ja ilmoituksia varten", "Group" : "Ryhmä" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/fi_FI.json b/settings/l10n/fi_FI.json index c241717a604..2527e5f5bd4 100644 --- a/settings/l10n/fi_FI.json +++ b/settings/l10n/fi_FI.json @@ -202,7 +202,6 @@ "Email" : "Sähköpostiosoite", "Your email address" : "Sähköpostiosoitteesi", "No email address set" : "Sähköpostiosoitetta ei ole asetettu", - "For password recovery and notifications" : "Salasanan nollausta ja ilmoituksia varten", "You are member of the following groups:" : "Olet jäsenenä seuraavissa ryhmissä:", "Password" : "Salasana", "Current password" : "Nykyinen salasana", @@ -266,6 +265,7 @@ "Enable experimental apps" : "Käytä kokeiluasteella olevia sovelluksia", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hei<br><br>Sinulla on nyt %s-tili.<br><br>Käyttäjätunnus: %s<br>Aloita käyttö: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hei\n\nSinulla on nyt %s-tili.\n\nKäyttäjätunnuksesi: %s\nAloita käyttö: %s\n\n", + "For password recovery and notifications" : "Salasanan nollausta ja ilmoituksia varten", "Group" : "Ryhmä" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/settings/l10n/fr.js b/settings/l10n/fr.js index 79c4cdf2651..bb9c84160a9 100644 --- a/settings/l10n/fr.js +++ b/settings/l10n/fr.js @@ -27,6 +27,7 @@ OC.L10N.register( "Invalid mail address" : "Adresse e-mail non valide", "No valid group selected" : "Aucun groupe valide sélectionné", "A user with that name already exists." : "Un utilisateur à ce nom existe déjà.", + "To send a password link to the user an email address is required." : "Pour envoyer un mot de passe par lien à l'utilisateur, une adresse mail est requise.", "Unable to create user." : "Impossible de créer l'utilisateur.", "Your %s account was created" : "Votre compte %s a été créé", "Unable to delete user." : "Impossible de supprimer l'utilisateur.", @@ -56,10 +57,10 @@ OC.L10N.register( "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Les applications officielles sont développées par et dans la communauté. Elles offrent les fonctionnalités indispensables et sont prêtes pour être utilisées en production.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Les applications approuvées sont créées par des développeurs de confiance et ont passé les tests de sécurité. Elles sont activement maintenues et leur code source est ouvert. Leurs développeurs les considèrent stables pour une utilisation normale.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Cette application est nouvelle ou instable, et sa sécurité n'a pas été vérifiée. Installez-la à vos risques et périls!", - "Enabling app …" : "Activation de l'application...", "Error while disabling app" : "Erreur lors de la désactivation de l'application", "Disable" : "Désactiver", "Enable" : "Activer", + "Enabling app …" : "Activation de l'application...", "Error while enabling app" : "Erreur lors de l'activation de l'application", "Error: this app cannot be enabled because it makes the server unstable" : "Erreur : Cette application ne peut pas être activer car cela le serveur instable .", "Error: could not disable broken app" : "Erreur : Impossible de désactiver l’application cassé ", @@ -276,7 +277,6 @@ OC.L10N.register( "Email" : "Adresse e-mail", "Your email address" : "Votre adresse e-mail", "No email address set" : "Aucune adresse e-mail configurée", - "For password recovery and notifications" : "Pour la récupération de mot de passe et les notifications", "Phone number" : "Numéro de téléphone", "Your phone number" : "Votre numéro de téléphone", "Address" : "Adresse", @@ -319,6 +319,7 @@ OC.L10N.register( "Show last log in" : "Montrer la dernière connexion", "Show user backend" : "Montrer la source de l'identifiant", "Send email to new user" : "Envoyer un e-mail aux utilisateurs créés", + "When the password of the new user is left empty an activation email with a link to set the password is send to the user" : "Quand le mot de passe du nouvel utilisateur est laissé vide, un mail d'activation avec un lien pour configurer le mot de passe est envoyé à l'utilisateur", "Show email address" : "Afficher l'adresse e-mail", "E-Mail" : "E-Mail", "Create" : "Créer", @@ -368,6 +369,7 @@ OC.L10N.register( "Enable experimental apps" : "Activer les applications expérimentales", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Bonjour,<br><br>Un compte %s a été créé pour vous.<br><br>Votre nom d'utilisateur est : %s<br>Visitez votre compte : <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Bonjour,<br><br>Un compte %s a été créé pour vous.<br><br>Votre nom d'utilisateur est : %s<br>Visitez votre compte : %s<br><br>\n", + "For password recovery and notifications" : "Pour la récupération de mot de passe et les notifications", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous voulez appuyer ce projet\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">rejoindre le développement</a>\n<or></or>\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">partager</a>!", "Add Group" : "Ajouter groupe", "Group" : "Groupe", diff --git a/settings/l10n/fr.json b/settings/l10n/fr.json index b7fb28256bd..516bae8d592 100644 --- a/settings/l10n/fr.json +++ b/settings/l10n/fr.json @@ -25,6 +25,7 @@ "Invalid mail address" : "Adresse e-mail non valide", "No valid group selected" : "Aucun groupe valide sélectionné", "A user with that name already exists." : "Un utilisateur à ce nom existe déjà.", + "To send a password link to the user an email address is required." : "Pour envoyer un mot de passe par lien à l'utilisateur, une adresse mail est requise.", "Unable to create user." : "Impossible de créer l'utilisateur.", "Your %s account was created" : "Votre compte %s a été créé", "Unable to delete user." : "Impossible de supprimer l'utilisateur.", @@ -54,10 +55,10 @@ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Les applications officielles sont développées par et dans la communauté. Elles offrent les fonctionnalités indispensables et sont prêtes pour être utilisées en production.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Les applications approuvées sont créées par des développeurs de confiance et ont passé les tests de sécurité. Elles sont activement maintenues et leur code source est ouvert. Leurs développeurs les considèrent stables pour une utilisation normale.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Cette application est nouvelle ou instable, et sa sécurité n'a pas été vérifiée. Installez-la à vos risques et périls!", - "Enabling app …" : "Activation de l'application...", "Error while disabling app" : "Erreur lors de la désactivation de l'application", "Disable" : "Désactiver", "Enable" : "Activer", + "Enabling app …" : "Activation de l'application...", "Error while enabling app" : "Erreur lors de l'activation de l'application", "Error: this app cannot be enabled because it makes the server unstable" : "Erreur : Cette application ne peut pas être activer car cela le serveur instable .", "Error: could not disable broken app" : "Erreur : Impossible de désactiver l’application cassé ", @@ -274,7 +275,6 @@ "Email" : "Adresse e-mail", "Your email address" : "Votre adresse e-mail", "No email address set" : "Aucune adresse e-mail configurée", - "For password recovery and notifications" : "Pour la récupération de mot de passe et les notifications", "Phone number" : "Numéro de téléphone", "Your phone number" : "Votre numéro de téléphone", "Address" : "Adresse", @@ -317,6 +317,7 @@ "Show last log in" : "Montrer la dernière connexion", "Show user backend" : "Montrer la source de l'identifiant", "Send email to new user" : "Envoyer un e-mail aux utilisateurs créés", + "When the password of the new user is left empty an activation email with a link to set the password is send to the user" : "Quand le mot de passe du nouvel utilisateur est laissé vide, un mail d'activation avec un lien pour configurer le mot de passe est envoyé à l'utilisateur", "Show email address" : "Afficher l'adresse e-mail", "E-Mail" : "E-Mail", "Create" : "Créer", @@ -366,6 +367,7 @@ "Enable experimental apps" : "Activer les applications expérimentales", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Bonjour,<br><br>Un compte %s a été créé pour vous.<br><br>Votre nom d'utilisateur est : %s<br>Visitez votre compte : <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Bonjour,<br><br>Un compte %s a été créé pour vous.<br><br>Votre nom d'utilisateur est : %s<br>Visitez votre compte : %s<br><br>\n", + "For password recovery and notifications" : "Pour la récupération de mot de passe et les notifications", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous voulez appuyer ce projet\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">rejoindre le développement</a>\n<or></or>\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">partager</a>!", "Add Group" : "Ajouter groupe", "Group" : "Groupe", diff --git a/settings/l10n/he.js b/settings/l10n/he.js index 8e9e2538327..7fd83c1ff84 100644 --- a/settings/l10n/he.js +++ b/settings/l10n/he.js @@ -217,7 +217,6 @@ OC.L10N.register( "Email" : "דואר אלקטרוני", "Your email address" : "כתובת הדואר האלקטרוני שלך", "No email address set" : "לא נקבעה כתובת דואר אלקטרוני", - "For password recovery and notifications" : "לשחזור סיסמא והודעות", "You are member of the following groups:" : "הקבוצות הבאות כוללות אותך:", "Password" : "סיסמא", "Current password" : "סיסמא נוכחית", @@ -281,6 +280,7 @@ OC.L10N.register( "Enable experimental apps" : "אפשר יישומים ניסיוניים", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "שלום,<br><br>רק רצינו להודיע שעכשיו יש לך %s חשבון.<br><br>Your שם משתמש: %s<br>כניסה: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "שלום,\n\nרק רצינו להודיע שעכשיו יש לך %s חשבון.\n\nשם המשתמש שלך: %s\nכניסה: %s\n\n", + "For password recovery and notifications" : "לשחזור סיסמא והודעות", "Group" : "קבוצה" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/he.json b/settings/l10n/he.json index 3eace55b4b8..ea1bf4e0388 100644 --- a/settings/l10n/he.json +++ b/settings/l10n/he.json @@ -215,7 +215,6 @@ "Email" : "דואר אלקטרוני", "Your email address" : "כתובת הדואר האלקטרוני שלך", "No email address set" : "לא נקבעה כתובת דואר אלקטרוני", - "For password recovery and notifications" : "לשחזור סיסמא והודעות", "You are member of the following groups:" : "הקבוצות הבאות כוללות אותך:", "Password" : "סיסמא", "Current password" : "סיסמא נוכחית", @@ -279,6 +278,7 @@ "Enable experimental apps" : "אפשר יישומים ניסיוניים", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "שלום,<br><br>רק רצינו להודיע שעכשיו יש לך %s חשבון.<br><br>Your שם משתמש: %s<br>כניסה: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "שלום,\n\nרק רצינו להודיע שעכשיו יש לך %s חשבון.\n\nשם המשתמש שלך: %s\nכניסה: %s\n\n", + "For password recovery and notifications" : "לשחזור סיסמא והודעות", "Group" : "קבוצה" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/settings/l10n/hu_HU.js b/settings/l10n/hu_HU.js index 71d6480de52..db8a7d96e46 100644 --- a/settings/l10n/hu_HU.js +++ b/settings/l10n/hu_HU.js @@ -55,10 +55,10 @@ OC.L10N.register( "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "A hivatalos alkalmazásokat a közösség fejleszti. Ezek adják a központi funkcionalitásokat és éles rendszerekben használhatóak.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "A jóváhagyott alkalmazásokat megbízható fejlesztők készítik, amik megfelelnek a felületes biztonsági ellenőrzésnek. Nyílt forráskódú tárolóban aktívan karbantartják és biztosítják a stabil használatot.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Ez az alkalmazás még nincs biztonságilag ellenőrizve és vagy új, vagy ismert instabil. Telepítés csak saját felelősségre!", - "Enabling app …" : "Alkalmazás engedélyezése ...", "Error while disabling app" : "Hiba az alkalmazás letiltása közben", "Disable" : "Letiltás", "Enable" : "Engedélyezés", + "Enabling app …" : "Alkalmazás engedélyezése ...", "Error while enabling app" : "Hiba az alkalmazás engedélyezése közben", "Error: this app cannot be enabled because it makes the server unstable" : "Hiba: ezt az alkalmzást nem lehet engedélyezni, mert a szerver instabilitását eredményezné", "Error: could not disable broken app" : "Hiba: nem lehet tiltani a megtört alkalmazást", @@ -273,7 +273,6 @@ OC.L10N.register( "Email" : "E-mail", "Your email address" : "Az Ön e-mail címe", "No email address set" : "Nincs e-mail cím beállítva", - "For password recovery and notifications" : "Jelszó helyreállításhoz és értesítésekhez", "Phone number" : "Telefonszám", "Your phone number" : "A telefonszámod", "Address" : "Cím", @@ -365,6 +364,7 @@ OC.L10N.register( "Enable experimental apps" : "Kísérleti alkalmazások engedélyezése", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Üdv!<br><br>Értesítünk, hogy van egy %s fiókja.<br><br>Felhasználónév: %s<br>Hozzáférés: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Üdv!\n\nÉrtesítünk, hogy van egy %s fiókja.\n\nFelhasználónév: %s\nHozzáférés: %s\n\n", + "For password recovery and notifications" : "Jelszó helyreállításhoz és értesítésekhez", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ha támogatni szeretnéd a projektet\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">csatlakozz a fejlesztőkhöz</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">terjeszd</a>!", "Add Group" : "csoport hozzáadása", "Group" : "Csoport", diff --git a/settings/l10n/hu_HU.json b/settings/l10n/hu_HU.json index b46a6ba6e55..aeb13e98bb6 100644 --- a/settings/l10n/hu_HU.json +++ b/settings/l10n/hu_HU.json @@ -53,10 +53,10 @@ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "A hivatalos alkalmazásokat a közösség fejleszti. Ezek adják a központi funkcionalitásokat és éles rendszerekben használhatóak.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "A jóváhagyott alkalmazásokat megbízható fejlesztők készítik, amik megfelelnek a felületes biztonsági ellenőrzésnek. Nyílt forráskódú tárolóban aktívan karbantartják és biztosítják a stabil használatot.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Ez az alkalmazás még nincs biztonságilag ellenőrizve és vagy új, vagy ismert instabil. Telepítés csak saját felelősségre!", - "Enabling app …" : "Alkalmazás engedélyezése ...", "Error while disabling app" : "Hiba az alkalmazás letiltása közben", "Disable" : "Letiltás", "Enable" : "Engedélyezés", + "Enabling app …" : "Alkalmazás engedélyezése ...", "Error while enabling app" : "Hiba az alkalmazás engedélyezése közben", "Error: this app cannot be enabled because it makes the server unstable" : "Hiba: ezt az alkalmzást nem lehet engedélyezni, mert a szerver instabilitását eredményezné", "Error: could not disable broken app" : "Hiba: nem lehet tiltani a megtört alkalmazást", @@ -271,7 +271,6 @@ "Email" : "E-mail", "Your email address" : "Az Ön e-mail címe", "No email address set" : "Nincs e-mail cím beállítva", - "For password recovery and notifications" : "Jelszó helyreállításhoz és értesítésekhez", "Phone number" : "Telefonszám", "Your phone number" : "A telefonszámod", "Address" : "Cím", @@ -363,6 +362,7 @@ "Enable experimental apps" : "Kísérleti alkalmazások engedélyezése", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Üdv!<br><br>Értesítünk, hogy van egy %s fiókja.<br><br>Felhasználónév: %s<br>Hozzáférés: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Üdv!\n\nÉrtesítünk, hogy van egy %s fiókja.\n\nFelhasználónév: %s\nHozzáférés: %s\n\n", + "For password recovery and notifications" : "Jelszó helyreállításhoz és értesítésekhez", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ha támogatni szeretnéd a projektet\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">csatlakozz a fejlesztőkhöz</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">terjeszd</a>!", "Add Group" : "csoport hozzáadása", "Group" : "Csoport", diff --git a/settings/l10n/ia.js b/settings/l10n/ia.js index 168a792f5da..50e705ab695 100644 --- a/settings/l10n/ia.js +++ b/settings/l10n/ia.js @@ -52,12 +52,12 @@ OC.L10N.register( "Update to %s" : "Actualisar a %s", "_You have %n app update pending_::_You have %n app updates pending_" : ["Tu ha %n application preste a actualisar se","Tu ha %n applicationes preste a actualisar se"], "No apps found for your version" : "Nulle application trovate pro tu version", - "Enabling app …" : "Activante application...", "Error while disabling app" : "Error durante disactivation del application...", "Disable" : "Disactivar", "Enable" : "Activar", + "Enabling app …" : "Activante application...", "Error while enabling app" : "Error durante activation del application...", - "Error: this app cannot be enabled because it makes the server unstable" : "Error: iste application non pote esser activate proque illo torna le servitor instabile", + "Error: this app cannot be enabled because it makes the server unstable" : "Error: iste application non pote esser activate proque illo face le servitor esser instabile", "Updating...." : "Actualisante...", "Error while updating app" : "Error durante actualisation del application", "Updated" : "Actualisate", @@ -88,6 +88,7 @@ OC.L10N.register( "Not supported!" : "Non supportate!", "Press ⌘-C to copy." : "Pulsa ⌘-C pro copiar.", "Press Ctrl-C to copy." : "Pulsa Ctrl-C pro copiar.", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Un error occurreva. Per favor, incarga un certificato PEM codificate in ASCII", "Valid until {date}" : "Valide usque {date}", "Delete" : "Deler", "Local" : "Local", @@ -97,7 +98,7 @@ OC.L10N.register( "Contacts" : "Contactos", "Visible to local users and to trusted servers" : "Visibile a usatores local e a servitores fiduciari", "Public" : "Public", - "Select a profile picture" : "Selige un pictura de profilo", + "Select a profile picture" : "Selectiona un pictura de profilo", "Very weak password" : "Contrasigno multo debile", "Weak password" : "Contrasigno debile", "So-so password" : "Contrasigno plus o minus acceptabile", @@ -114,15 +115,58 @@ OC.L10N.register( "Unable to add user to group {group}" : "Impossibile adder usator a gruppo {group}", "Unable to remove user from group {group}" : "Impossibile remover usator de gruppo {group}", "Add group" : "Adder gruppo", + "Invalid quota value \"{val}\"" : "Valor de quota non valide \"{val}\"", + "no group" : "nulle gruppo", + "Password successfully changed" : "Contrasigno cambiate con successo", + "Changing the password will result in data loss, because data recovery is not available for this user" : "Cambiar le contrasigno resultara in perdita de datos, proque le recuperation de datos non es disponibile a iste usator", + "Could not change the users email" : "Impossibile cambiar le adresse de e-posta de usatores", + "A valid username must be provided" : "Un nomine de usator valide debe esser providite", + "Error creating user: {message}" : "Error durante creation de usator: {message}", + "A valid password must be provided" : "Un contrasigno valide debe esser providite", + "A valid email must be provided" : "Un adresse de e-posta valide debe esser providite", + "__language_name__" : "Interlingua de IALA", + "Unlimited" : "Ilimitate", "Personal info" : "Information personal", "Sessions" : "Sessiones", "App passwords" : "Contrasignos de applicationes", + "None" : "Nulle", + "SSL/TLS" : "SSL/TLS", + "STARTTLS" : "STARTTLS", "Email server" : "Servitor de e-posta", + "Open documentation" : "Aperir documentation", + "This is used for sending out notifications." : "Isto es usate pro inviar notificationes.", + "Send mode" : "Modo de invio", "Encryption" : "Cryptographia", + "From address" : "De adresse", + "Authentication method" : "Methodo de authentication", + "Authentication required" : "Authentication requirite", + "Server address" : "Adresse del servitor", + "Port" : "Porto", + "Credentials" : "Datos de authentication", + "SMTP Username" : "Nomine de usator SMTP", + "SMTP Password" : "Contrasigno SMTP", + "Store credentials" : "Salveguardar datos de authentication", + "Test email settings" : "Testar configurationes de e-posta", + "Send email" : "Inviar message de e-posta", + "Enable encryption" : "Activar cryptographia", + "Select default encryption module:" : "Selectionar modulo de cryptographia standard", + "Start migration" : "Initiar migration", + "Security & setup warnings" : "Securitate e advertimentos de configuration", "Version" : "Version", + "Allow users to share via link" : "Permitter usatores compartir via ligamine", + "Allow public uploads" : "Permitter incargas public", + "Enforce password protection" : "Exiger protection per contrasigno", + "Set default expiration date" : "Assignar data predefinite de expiration", + "Expire after " : "Expirar post", "days" : "dies", + "Enforce expiration date" : "Exiger data de expiration", "Tips & tricks" : "Consilios e maneos", - "Theming" : "Themas", + "How to do backups" : "Como facer retrocopias", + "Improving the config.php" : "Meliorante config.php", + "Theming" : "Personalisante themas", + "Developer documentation" : "Documentation de disveloppator", + "by %s" : "per %s", + "%s-licensed" : "Licentiate como %s", "Documentation:" : "Documentation:", "User documentation" : "Documentation de usator", "Admin documentation" : "Documentation de administrator", @@ -130,17 +174,37 @@ OC.L10N.register( "Report a bug" : "Reportar un defecto", "Show description …" : "Monstrar description...", "Hide description …" : "Celar description...", + "This app has an update available." : "Iste application ha un actualisation disponibile", + "Enable only for specific groups" : "Activar solmente a gruppos specific", + "Uninstall app" : "De-installar application", + "SSL Root Certificates" : "Certificatos Root SSL", "Common Name" : "Nomine Commun", "Valid until" : "Valide usque", + "Issued By" : "Emittite per", "Valid until %s" : "Valide usque %s", "Import root certificate" : "Importar certificato root", + "Cheers!" : "Congratulationes!", "Administrator documentation" : "Documentation de administrator", "Online documentation" : "Documentation in linea", "Forum" : "Foro", + "Getting help" : "Obtener adjuta", "Commercial support" : "Supporto commercial", + "You are using <strong>%s</strong> of <strong>%s</strong>" : "Tu usa <strong>%s</strong> de <strong>%s</strong>", + "Profile picture" : "Pictura de profilo", "Upload new" : "Incargar nove", + "Select from Files" : "Selectionar de Files", "Remove image" : "Remover imagine", + "png or jpg, max. 20 MB" : "formato png o jpg, dimension maxime 20 MB", + "Picture provided by original account" : "Pictura fornite per conto original", "Cancel" : "Cancellar", + "Choose as profile picture" : "Selectiona como pictura de profilo", + "Full name" : "Nomine complete", + "Email" : "E-posta", + "Your email address" : "Tu adresse de e-posta", + "No email address set" : "Nulle adresse de e-posta definite", + "For password reset and notifications" : "Pro reinitialisation de contrasigno e invio de notificationes", + "Phone number" : "Numero de telephono", + "Your phone number" : "Tu numero de telephono", "Address" : "Adresse", "Your postal address" : "Tu adresse postal", "Website" : "Sito web", @@ -153,7 +217,12 @@ OC.L10N.register( "Change password" : "Cambiar contrasigno", "Language" : "Lingua", "Help translate" : "Adjuta a traducer", + "Desktop client" : "Cliente de Scriptorio", + "Android app" : "Application Android", + "iOS app" : "Application iOS", + "Show First Run Wizard again" : "Monstrar le Assistente del Prime Execution de novo", "Device" : "Dispositivo", + "Last activity" : "Ultime activitate", "Passcodes that give an app or device permissions to access your account." : "Contrasignos que dona a tu application o dispositivo le permissiones pro acceder a tu conto.", "Name" : "Nomine", "App name" : "Nomine del application", @@ -162,21 +231,35 @@ OC.L10N.register( "Username" : "Nomine de usator", "Done" : "Preste", "Follow us on Google Plus!" : "Seque nos in Google Plus!", + "Subscribe to our twitter channel!" : "Subscribe a nostre canal Twitter!", + "Subscribe to our news feed!" : "Subscribe a nostre syndication de novas!", + "Show storage location" : "Monstrar loco de immagazinage", + "Send email to new user" : "Inviar message de e-posta a nove usator", + "Show email address" : "Monstrar adresse de e-posta", "E-Mail" : "E-posta", "Create" : "Crear", + "Admin Recovery Password" : "Recuperation de Contrasigno del Administrator", "Group name" : "Nomine del gruppo", "Everyone" : "Totos", "Admins" : "Administratores", "Default quota" : "Quota predefinite", + "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Per favor, scribe le quota de immagazinage (p.ex. \"512 MB\" o \"12 GB\")", "Other" : "Altere", "Quota" : "Quota", "Please wait...." : "Per favor attende...", "add group" : "adder gruppo", + "Everything (fatal issues, errors, warnings, info, debug)" : "Toto (problemas fatal, errores, advertimentos, informationes, registros pro correction de errores)", + "Info, warnings, errors and fatal issues" : "Informationes, advertimentos, errores e problemas fatal", + "Warnings, errors and fatal issues" : "Advertimentos, errores e problemas fatal", + "Errors and fatal issues" : "Errores e problemas fatal", + "Fatal issues only" : "Solo problemas fatal", "Log" : "Registro", "What to log" : "Que registrar?", "Download logfile" : "Discargar file de registro", "More" : "Plus", "Less" : "Minus", + "Uninstall App" : "De-installar Application", + "Enable experimental apps" : "Activar applicationes experimental", "Add Group" : "Adder Gruppo", "Group" : "Gruppo" }, diff --git a/settings/l10n/ia.json b/settings/l10n/ia.json index 9fae63fdaa2..82b1ea79f10 100644 --- a/settings/l10n/ia.json +++ b/settings/l10n/ia.json @@ -50,12 +50,12 @@ "Update to %s" : "Actualisar a %s", "_You have %n app update pending_::_You have %n app updates pending_" : ["Tu ha %n application preste a actualisar se","Tu ha %n applicationes preste a actualisar se"], "No apps found for your version" : "Nulle application trovate pro tu version", - "Enabling app …" : "Activante application...", "Error while disabling app" : "Error durante disactivation del application...", "Disable" : "Disactivar", "Enable" : "Activar", + "Enabling app …" : "Activante application...", "Error while enabling app" : "Error durante activation del application...", - "Error: this app cannot be enabled because it makes the server unstable" : "Error: iste application non pote esser activate proque illo torna le servitor instabile", + "Error: this app cannot be enabled because it makes the server unstable" : "Error: iste application non pote esser activate proque illo face le servitor esser instabile", "Updating...." : "Actualisante...", "Error while updating app" : "Error durante actualisation del application", "Updated" : "Actualisate", @@ -86,6 +86,7 @@ "Not supported!" : "Non supportate!", "Press ⌘-C to copy." : "Pulsa ⌘-C pro copiar.", "Press Ctrl-C to copy." : "Pulsa Ctrl-C pro copiar.", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Un error occurreva. Per favor, incarga un certificato PEM codificate in ASCII", "Valid until {date}" : "Valide usque {date}", "Delete" : "Deler", "Local" : "Local", @@ -95,7 +96,7 @@ "Contacts" : "Contactos", "Visible to local users and to trusted servers" : "Visibile a usatores local e a servitores fiduciari", "Public" : "Public", - "Select a profile picture" : "Selige un pictura de profilo", + "Select a profile picture" : "Selectiona un pictura de profilo", "Very weak password" : "Contrasigno multo debile", "Weak password" : "Contrasigno debile", "So-so password" : "Contrasigno plus o minus acceptabile", @@ -112,15 +113,58 @@ "Unable to add user to group {group}" : "Impossibile adder usator a gruppo {group}", "Unable to remove user from group {group}" : "Impossibile remover usator de gruppo {group}", "Add group" : "Adder gruppo", + "Invalid quota value \"{val}\"" : "Valor de quota non valide \"{val}\"", + "no group" : "nulle gruppo", + "Password successfully changed" : "Contrasigno cambiate con successo", + "Changing the password will result in data loss, because data recovery is not available for this user" : "Cambiar le contrasigno resultara in perdita de datos, proque le recuperation de datos non es disponibile a iste usator", + "Could not change the users email" : "Impossibile cambiar le adresse de e-posta de usatores", + "A valid username must be provided" : "Un nomine de usator valide debe esser providite", + "Error creating user: {message}" : "Error durante creation de usator: {message}", + "A valid password must be provided" : "Un contrasigno valide debe esser providite", + "A valid email must be provided" : "Un adresse de e-posta valide debe esser providite", + "__language_name__" : "Interlingua de IALA", + "Unlimited" : "Ilimitate", "Personal info" : "Information personal", "Sessions" : "Sessiones", "App passwords" : "Contrasignos de applicationes", + "None" : "Nulle", + "SSL/TLS" : "SSL/TLS", + "STARTTLS" : "STARTTLS", "Email server" : "Servitor de e-posta", + "Open documentation" : "Aperir documentation", + "This is used for sending out notifications." : "Isto es usate pro inviar notificationes.", + "Send mode" : "Modo de invio", "Encryption" : "Cryptographia", + "From address" : "De adresse", + "Authentication method" : "Methodo de authentication", + "Authentication required" : "Authentication requirite", + "Server address" : "Adresse del servitor", + "Port" : "Porto", + "Credentials" : "Datos de authentication", + "SMTP Username" : "Nomine de usator SMTP", + "SMTP Password" : "Contrasigno SMTP", + "Store credentials" : "Salveguardar datos de authentication", + "Test email settings" : "Testar configurationes de e-posta", + "Send email" : "Inviar message de e-posta", + "Enable encryption" : "Activar cryptographia", + "Select default encryption module:" : "Selectionar modulo de cryptographia standard", + "Start migration" : "Initiar migration", + "Security & setup warnings" : "Securitate e advertimentos de configuration", "Version" : "Version", + "Allow users to share via link" : "Permitter usatores compartir via ligamine", + "Allow public uploads" : "Permitter incargas public", + "Enforce password protection" : "Exiger protection per contrasigno", + "Set default expiration date" : "Assignar data predefinite de expiration", + "Expire after " : "Expirar post", "days" : "dies", + "Enforce expiration date" : "Exiger data de expiration", "Tips & tricks" : "Consilios e maneos", - "Theming" : "Themas", + "How to do backups" : "Como facer retrocopias", + "Improving the config.php" : "Meliorante config.php", + "Theming" : "Personalisante themas", + "Developer documentation" : "Documentation de disveloppator", + "by %s" : "per %s", + "%s-licensed" : "Licentiate como %s", "Documentation:" : "Documentation:", "User documentation" : "Documentation de usator", "Admin documentation" : "Documentation de administrator", @@ -128,17 +172,37 @@ "Report a bug" : "Reportar un defecto", "Show description …" : "Monstrar description...", "Hide description …" : "Celar description...", + "This app has an update available." : "Iste application ha un actualisation disponibile", + "Enable only for specific groups" : "Activar solmente a gruppos specific", + "Uninstall app" : "De-installar application", + "SSL Root Certificates" : "Certificatos Root SSL", "Common Name" : "Nomine Commun", "Valid until" : "Valide usque", + "Issued By" : "Emittite per", "Valid until %s" : "Valide usque %s", "Import root certificate" : "Importar certificato root", + "Cheers!" : "Congratulationes!", "Administrator documentation" : "Documentation de administrator", "Online documentation" : "Documentation in linea", "Forum" : "Foro", + "Getting help" : "Obtener adjuta", "Commercial support" : "Supporto commercial", + "You are using <strong>%s</strong> of <strong>%s</strong>" : "Tu usa <strong>%s</strong> de <strong>%s</strong>", + "Profile picture" : "Pictura de profilo", "Upload new" : "Incargar nove", + "Select from Files" : "Selectionar de Files", "Remove image" : "Remover imagine", + "png or jpg, max. 20 MB" : "formato png o jpg, dimension maxime 20 MB", + "Picture provided by original account" : "Pictura fornite per conto original", "Cancel" : "Cancellar", + "Choose as profile picture" : "Selectiona como pictura de profilo", + "Full name" : "Nomine complete", + "Email" : "E-posta", + "Your email address" : "Tu adresse de e-posta", + "No email address set" : "Nulle adresse de e-posta definite", + "For password reset and notifications" : "Pro reinitialisation de contrasigno e invio de notificationes", + "Phone number" : "Numero de telephono", + "Your phone number" : "Tu numero de telephono", "Address" : "Adresse", "Your postal address" : "Tu adresse postal", "Website" : "Sito web", @@ -151,7 +215,12 @@ "Change password" : "Cambiar contrasigno", "Language" : "Lingua", "Help translate" : "Adjuta a traducer", + "Desktop client" : "Cliente de Scriptorio", + "Android app" : "Application Android", + "iOS app" : "Application iOS", + "Show First Run Wizard again" : "Monstrar le Assistente del Prime Execution de novo", "Device" : "Dispositivo", + "Last activity" : "Ultime activitate", "Passcodes that give an app or device permissions to access your account." : "Contrasignos que dona a tu application o dispositivo le permissiones pro acceder a tu conto.", "Name" : "Nomine", "App name" : "Nomine del application", @@ -160,21 +229,35 @@ "Username" : "Nomine de usator", "Done" : "Preste", "Follow us on Google Plus!" : "Seque nos in Google Plus!", + "Subscribe to our twitter channel!" : "Subscribe a nostre canal Twitter!", + "Subscribe to our news feed!" : "Subscribe a nostre syndication de novas!", + "Show storage location" : "Monstrar loco de immagazinage", + "Send email to new user" : "Inviar message de e-posta a nove usator", + "Show email address" : "Monstrar adresse de e-posta", "E-Mail" : "E-posta", "Create" : "Crear", + "Admin Recovery Password" : "Recuperation de Contrasigno del Administrator", "Group name" : "Nomine del gruppo", "Everyone" : "Totos", "Admins" : "Administratores", "Default quota" : "Quota predefinite", + "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Per favor, scribe le quota de immagazinage (p.ex. \"512 MB\" o \"12 GB\")", "Other" : "Altere", "Quota" : "Quota", "Please wait...." : "Per favor attende...", "add group" : "adder gruppo", + "Everything (fatal issues, errors, warnings, info, debug)" : "Toto (problemas fatal, errores, advertimentos, informationes, registros pro correction de errores)", + "Info, warnings, errors and fatal issues" : "Informationes, advertimentos, errores e problemas fatal", + "Warnings, errors and fatal issues" : "Advertimentos, errores e problemas fatal", + "Errors and fatal issues" : "Errores e problemas fatal", + "Fatal issues only" : "Solo problemas fatal", "Log" : "Registro", "What to log" : "Que registrar?", "Download logfile" : "Discargar file de registro", "More" : "Plus", "Less" : "Minus", + "Uninstall App" : "De-installar Application", + "Enable experimental apps" : "Activar applicationes experimental", "Add Group" : "Adder Gruppo", "Group" : "Gruppo" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/settings/l10n/id.js b/settings/l10n/id.js index 34a36e2480d..c346d06a3cc 100644 --- a/settings/l10n/id.js +++ b/settings/l10n/id.js @@ -239,7 +239,6 @@ OC.L10N.register( "Email" : "Email", "Your email address" : "Alamat email Anda", "No email address set" : "Alamat email tidak diatur", - "For password recovery and notifications" : "Untuk pemulihan sandi dan pemberitahuan", "You are member of the following groups:" : "Anda adalah anggota dari grup berikut:", "Password" : "Sandi", "Current password" : "Sandi saat ini", @@ -316,6 +315,7 @@ OC.L10N.register( "Enable experimental apps" : "Aktifkan aplikasi percobaan", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hai,<br><br>sekedar memberi tahu bahwa Andaa sekarang memiliki akun %s.<br><br>Nama Pengguna Anda: %s<br>Akses di: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hai,\n\nsekedar memberi tahu bahwa Andaa sekarang memiliki akun %s.\n\nNama Pengguna Anda: %s\nAkses di: %s\n", + "For password recovery and notifications" : "Untuk pemulihan sandi dan pemberitahuan", "Add Group" : "Tambah Grup", "Group" : "Grup", "Default Quota" : "Kuota Standar", diff --git a/settings/l10n/id.json b/settings/l10n/id.json index 9773c6d91ab..64557e098d4 100644 --- a/settings/l10n/id.json +++ b/settings/l10n/id.json @@ -237,7 +237,6 @@ "Email" : "Email", "Your email address" : "Alamat email Anda", "No email address set" : "Alamat email tidak diatur", - "For password recovery and notifications" : "Untuk pemulihan sandi dan pemberitahuan", "You are member of the following groups:" : "Anda adalah anggota dari grup berikut:", "Password" : "Sandi", "Current password" : "Sandi saat ini", @@ -314,6 +313,7 @@ "Enable experimental apps" : "Aktifkan aplikasi percobaan", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hai,<br><br>sekedar memberi tahu bahwa Andaa sekarang memiliki akun %s.<br><br>Nama Pengguna Anda: %s<br>Akses di: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hai,\n\nsekedar memberi tahu bahwa Andaa sekarang memiliki akun %s.\n\nNama Pengguna Anda: %s\nAkses di: %s\n", + "For password recovery and notifications" : "Untuk pemulihan sandi dan pemberitahuan", "Add Group" : "Tambah Grup", "Group" : "Grup", "Default Quota" : "Kuota Standar", diff --git a/settings/l10n/is.js b/settings/l10n/is.js index be2a61f0b31..8d65591e5db 100644 --- a/settings/l10n/is.js +++ b/settings/l10n/is.js @@ -27,6 +27,7 @@ OC.L10N.register( "Invalid mail address" : "Ógilt tölvupóstfang", "No valid group selected" : "Enginn gildur hópur valinn", "A user with that name already exists." : "Nú þegar til notandi með þetta nafn.", + "To send a password link to the user an email address is required." : "Til að fá sendan tengil á staðfestingu lykilorðs verður notandinn að hafa gefið upp tölvupóstfangið sitt.", "Unable to create user." : "Gat ekki búið til notanda.", "Your %s account was created" : "%s notandaaðgangurinn þinn var búinn til", "Unable to delete user." : "Get ekki eytt notanda.", @@ -56,10 +57,10 @@ OC.L10N.register( "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Opinber forrit eru þróuð af og innan samfélagsins. Þau bjóða upp á ýmsa kjarnaeiginleika og eru tilbúin til notkunar í raunvinnslu.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Samþykkt forrit eru þróuð af treystum forriturum og hafa gengist undir lauslegar öryggisprófanir. Þau eru í virku viðhaldi í opnum hugbúnaðarsöfnum og umsjónarmenn þeirra dæma þau nógu stöðug til notkunar í allri venjulegri vinnslu.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Þetta forrit hefur ekki verið öryggisprófað, er nýtt erða þekkt fyrir ótöðugleika við vissar aðstæður. Uppsetning er á þína ábyrgð.", - "Enabling app …" : "Virkja forrit …", "Error while disabling app" : "Villa við að afvirkja forrit", "Disable" : "Gera óvirkt", "Enable" : "Virkja", + "Enabling app …" : "Virkja forrit …", "Error while enabling app" : "Villa við að virkja forrit", "Error: this app cannot be enabled because it makes the server unstable" : "Villa: ekki er hægt að virkja þetta forrit því það gerir þjóninn óstöðugan", "Error: could not disable broken app" : "Villa: gat ekki gert bilaða forritið óvirkt", @@ -136,7 +137,7 @@ OC.L10N.register( "A valid password must be provided" : "Skráðu inn gilt lykilorð", "A valid email must be provided" : "Skráðu inn gilt tölvupóstfang", "__language_name__" : "Íslenska", - "Unlimited" : "Ótakmarkað", + "Unlimited" : "ótakmörkuðu", "Personal info" : "Persónulegar upplýsingar", "Sessions" : "Setur", "App passwords" : "Lykilorð forrita", @@ -258,7 +259,7 @@ OC.L10N.register( "Forum" : "Vefspjall", "Getting help" : "Til að fá hjálp", "Commercial support" : "Gjaldskyld tækniaðstoð", - "You are using <strong>%s</strong> of <strong>%s</strong>" : "Þú notar <strong>%s</strong> frá <strong>%s</strong>", + "You are using <strong>%s</strong> of <strong>%s</strong>" : "Þú notar <strong>%s</strong> af <strong>%s</strong>", "Profile picture" : "Einkennismynd", "Upload new" : "Senda inn nýtt", "Select from Files" : "Veldu skrár", @@ -272,7 +273,7 @@ OC.L10N.register( "Email" : "Netfang", "Your email address" : "Netfangið þitt", "No email address set" : "Ekkert tölvupóstfang sett", - "For password recovery and notifications" : "Fyrir tilkynningar og endurheimtingu lykilorðs", + "For password reset and notifications" : "Fyrir tilkynningar og endurstillingu lykilorðs", "Phone number" : "Símanúmer", "Your phone number" : "Símanúmerið þitt", "Address" : "Heimilisfang", @@ -315,6 +316,7 @@ OC.L10N.register( "Show last log in" : "Birta síðustu innskráningu", "Show user backend" : "Birta bakenda notanda", "Send email to new user" : "Senda tölvupóst til nýs notanda", + "When the password of the new user is left empty an activation email with a link to set the password is send to the user" : "Þegar lykilorð nýs notanda er skilið eftir autt, mun honum verða sendur tölvupóstur með tengli til að virkja aðganginn sinn", "Show email address" : "Birta tölvupóstfang", "E-Mail" : "Tölvupóstfang", "Create" : "Búa til", @@ -364,6 +366,7 @@ OC.L10N.register( "Enable experimental apps" : "Virkja forrit á tilraunastigi", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hæ þú,<br><br>bara að láta þig vita að þú átt núna %s aðgang.<br><br>Notandanafnið þitt: %s<br>Tengstu honum: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hæ þú,\n\nbara að láta þig vita að þú átt núna %s aðgang.\n\nNotandanafnið þitt: %s\nTengstu honum: %s\n\n", + "For password recovery and notifications" : "Fyrir tilkynningar og endurheimtingu lykilorðs", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ef þú vilt styðja við verkefnið\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">taktu þátt í þróuninni</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">láttu orð út ganga</a>!", "Add Group" : "Bæta við hópi", "Group" : "Hópur", diff --git a/settings/l10n/is.json b/settings/l10n/is.json index 2ceedfb7ba9..fc6dc6f3d8a 100644 --- a/settings/l10n/is.json +++ b/settings/l10n/is.json @@ -25,6 +25,7 @@ "Invalid mail address" : "Ógilt tölvupóstfang", "No valid group selected" : "Enginn gildur hópur valinn", "A user with that name already exists." : "Nú þegar til notandi með þetta nafn.", + "To send a password link to the user an email address is required." : "Til að fá sendan tengil á staðfestingu lykilorðs verður notandinn að hafa gefið upp tölvupóstfangið sitt.", "Unable to create user." : "Gat ekki búið til notanda.", "Your %s account was created" : "%s notandaaðgangurinn þinn var búinn til", "Unable to delete user." : "Get ekki eytt notanda.", @@ -54,10 +55,10 @@ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Opinber forrit eru þróuð af og innan samfélagsins. Þau bjóða upp á ýmsa kjarnaeiginleika og eru tilbúin til notkunar í raunvinnslu.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Samþykkt forrit eru þróuð af treystum forriturum og hafa gengist undir lauslegar öryggisprófanir. Þau eru í virku viðhaldi í opnum hugbúnaðarsöfnum og umsjónarmenn þeirra dæma þau nógu stöðug til notkunar í allri venjulegri vinnslu.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Þetta forrit hefur ekki verið öryggisprófað, er nýtt erða þekkt fyrir ótöðugleika við vissar aðstæður. Uppsetning er á þína ábyrgð.", - "Enabling app …" : "Virkja forrit …", "Error while disabling app" : "Villa við að afvirkja forrit", "Disable" : "Gera óvirkt", "Enable" : "Virkja", + "Enabling app …" : "Virkja forrit …", "Error while enabling app" : "Villa við að virkja forrit", "Error: this app cannot be enabled because it makes the server unstable" : "Villa: ekki er hægt að virkja þetta forrit því það gerir þjóninn óstöðugan", "Error: could not disable broken app" : "Villa: gat ekki gert bilaða forritið óvirkt", @@ -134,7 +135,7 @@ "A valid password must be provided" : "Skráðu inn gilt lykilorð", "A valid email must be provided" : "Skráðu inn gilt tölvupóstfang", "__language_name__" : "Íslenska", - "Unlimited" : "Ótakmarkað", + "Unlimited" : "ótakmörkuðu", "Personal info" : "Persónulegar upplýsingar", "Sessions" : "Setur", "App passwords" : "Lykilorð forrita", @@ -256,7 +257,7 @@ "Forum" : "Vefspjall", "Getting help" : "Til að fá hjálp", "Commercial support" : "Gjaldskyld tækniaðstoð", - "You are using <strong>%s</strong> of <strong>%s</strong>" : "Þú notar <strong>%s</strong> frá <strong>%s</strong>", + "You are using <strong>%s</strong> of <strong>%s</strong>" : "Þú notar <strong>%s</strong> af <strong>%s</strong>", "Profile picture" : "Einkennismynd", "Upload new" : "Senda inn nýtt", "Select from Files" : "Veldu skrár", @@ -270,7 +271,7 @@ "Email" : "Netfang", "Your email address" : "Netfangið þitt", "No email address set" : "Ekkert tölvupóstfang sett", - "For password recovery and notifications" : "Fyrir tilkynningar og endurheimtingu lykilorðs", + "For password reset and notifications" : "Fyrir tilkynningar og endurstillingu lykilorðs", "Phone number" : "Símanúmer", "Your phone number" : "Símanúmerið þitt", "Address" : "Heimilisfang", @@ -313,6 +314,7 @@ "Show last log in" : "Birta síðustu innskráningu", "Show user backend" : "Birta bakenda notanda", "Send email to new user" : "Senda tölvupóst til nýs notanda", + "When the password of the new user is left empty an activation email with a link to set the password is send to the user" : "Þegar lykilorð nýs notanda er skilið eftir autt, mun honum verða sendur tölvupóstur með tengli til að virkja aðganginn sinn", "Show email address" : "Birta tölvupóstfang", "E-Mail" : "Tölvupóstfang", "Create" : "Búa til", @@ -362,6 +364,7 @@ "Enable experimental apps" : "Virkja forrit á tilraunastigi", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hæ þú,<br><br>bara að láta þig vita að þú átt núna %s aðgang.<br><br>Notandanafnið þitt: %s<br>Tengstu honum: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hæ þú,\n\nbara að láta þig vita að þú átt núna %s aðgang.\n\nNotandanafnið þitt: %s\nTengstu honum: %s\n\n", + "For password recovery and notifications" : "Fyrir tilkynningar og endurheimtingu lykilorðs", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ef þú vilt styðja við verkefnið\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">taktu þátt í þróuninni</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">láttu orð út ganga</a>!", "Add Group" : "Bæta við hópi", "Group" : "Hópur", diff --git a/settings/l10n/it.js b/settings/l10n/it.js index 53760cbfa2b..a8bab51421a 100644 --- a/settings/l10n/it.js +++ b/settings/l10n/it.js @@ -56,10 +56,10 @@ OC.L10N.register( "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Le applicazioni ufficiali sono sviluppate dalla comunità. Esse offrono nuove funzionalità e sono pronte per l'uso in produzione.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Le applicazioni approvate sono sviluppate da sviluppatori affidabili e hanno passato un rapido controllo di sicurezza. Sono attivamente mantenute in un deposito aperto del codice e i loro responsabili le ritengono pronte sia per un utilizzo casuale che per un utilizzo continuativo.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Questa applicazione non è stata sottoposta a controlli di sicurezza, è nuova o notoriamente instabile. Installala a tuo rischio.", - "Enabling app …" : "Abilitazione applicazione...", "Error while disabling app" : "Errore durante la disattivazione", "Disable" : "Disabilita", "Enable" : "Abilita", + "Enabling app …" : "Abilitazione applicazione...", "Error while enabling app" : "Errore durante l'attivazione", "Error: this app cannot be enabled because it makes the server unstable" : "Errore: questa applicazione non può essere abilitata perché rende il server instabile", "Error: could not disable broken app" : "Errore: impossibile disabilitare l'applicazione danneggiata", @@ -276,7 +276,6 @@ OC.L10N.register( "Email" : "Posta elettronica", "Your email address" : "Il tuo indirizzo email", "No email address set" : "Nessun indirizzo email impostato", - "For password recovery and notifications" : "Per il ripristino della password e per le notifiche", "Phone number" : "Numero di telefono", "Your phone number" : "Il tuo numero di telefono", "Address" : "Indirizzo", @@ -368,6 +367,7 @@ OC.L10N.register( "Enable experimental apps" : "Abilita le applicazioni sperimentali", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Ciao,<br><br>volevo informarti che ora hai un account %s.<br><br>Il tuo nome utente: %s<br>Accedi: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Ciao,\n\nvolevo informarti che ora hai un account %s.\n\nIl tuo nome utente: %s\nAccedi: %s\n\n", + "For password recovery and notifications" : "Per il ripristino della password e per le notifiche", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Se desideri supportare il progetto\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">contribuisci allo sviluppo</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">diffondi il verbo</a>!", "Add Group" : "Aggiungi gruppo", "Group" : "Gruppo", diff --git a/settings/l10n/it.json b/settings/l10n/it.json index 42ce513b1cc..45d807eb723 100644 --- a/settings/l10n/it.json +++ b/settings/l10n/it.json @@ -54,10 +54,10 @@ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Le applicazioni ufficiali sono sviluppate dalla comunità. Esse offrono nuove funzionalità e sono pronte per l'uso in produzione.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Le applicazioni approvate sono sviluppate da sviluppatori affidabili e hanno passato un rapido controllo di sicurezza. Sono attivamente mantenute in un deposito aperto del codice e i loro responsabili le ritengono pronte sia per un utilizzo casuale che per un utilizzo continuativo.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Questa applicazione non è stata sottoposta a controlli di sicurezza, è nuova o notoriamente instabile. Installala a tuo rischio.", - "Enabling app …" : "Abilitazione applicazione...", "Error while disabling app" : "Errore durante la disattivazione", "Disable" : "Disabilita", "Enable" : "Abilita", + "Enabling app …" : "Abilitazione applicazione...", "Error while enabling app" : "Errore durante l'attivazione", "Error: this app cannot be enabled because it makes the server unstable" : "Errore: questa applicazione non può essere abilitata perché rende il server instabile", "Error: could not disable broken app" : "Errore: impossibile disabilitare l'applicazione danneggiata", @@ -274,7 +274,6 @@ "Email" : "Posta elettronica", "Your email address" : "Il tuo indirizzo email", "No email address set" : "Nessun indirizzo email impostato", - "For password recovery and notifications" : "Per il ripristino della password e per le notifiche", "Phone number" : "Numero di telefono", "Your phone number" : "Il tuo numero di telefono", "Address" : "Indirizzo", @@ -366,6 +365,7 @@ "Enable experimental apps" : "Abilita le applicazioni sperimentali", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Ciao,<br><br>volevo informarti che ora hai un account %s.<br><br>Il tuo nome utente: %s<br>Accedi: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Ciao,\n\nvolevo informarti che ora hai un account %s.\n\nIl tuo nome utente: %s\nAccedi: %s\n\n", + "For password recovery and notifications" : "Per il ripristino della password e per le notifiche", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Se desideri supportare il progetto\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">contribuisci allo sviluppo</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">diffondi il verbo</a>!", "Add Group" : "Aggiungi gruppo", "Group" : "Gruppo", diff --git a/settings/l10n/ja.js b/settings/l10n/ja.js index 51712ff6f0e..410186013da 100644 --- a/settings/l10n/ja.js +++ b/settings/l10n/ja.js @@ -55,10 +55,10 @@ OC.L10N.register( "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "公式アプリは ownCloud コミュニティにより開発されています。公式アプリは ownCloud の中心的な機能を提供し、製品として可能です。", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "承認されたアプリは信頼された開発者により開発され、大まかなセキュリティチェックに合格しています。アプリは積極的にオープンソースコードレポジトリでメンテナンスされ、メンテナは通常の用途では安定していると考えます。", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "このアプリはセキュリティチェックされていません、新規アプリか安定性が確認されていないアプリです。自己責任でインストールしてください。", - "Enabling app …" : "アプリを有効 ...", "Error while disabling app" : "アプリ無効化中にエラーが発生", "Disable" : "無効にする", "Enable" : "有効にする", + "Enabling app …" : "アプリを有効 ...", "Error while enabling app" : "アプリを有効にする際にエラーが発生", "Error: this app cannot be enabled because it makes the server unstable" : "エラー:このアプリは、サーバーを不安定にするため、有効にすることができません。", "Error: could not disable broken app" : "エラー: 壊れたアプリを無効にできませんでした", @@ -275,7 +275,6 @@ OC.L10N.register( "Email" : "メール", "Your email address" : "あなたのメールアドレス", "No email address set" : "メールアドレスが設定されていません", - "For password recovery and notifications" : "パスワード回復と通知用", "Phone number" : "電話番号", "Your phone number" : "あなたの電話番号", "Address" : "住所", @@ -367,6 +366,7 @@ OC.L10N.register( "Enable experimental apps" : "実験的なアプリを有効にする", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "こんにちは、<br><br>あなたのアカウント %s が利用可能になったことをお知らせします。<br><br>ユーザー名: %s<br>以下のURLからアクセス: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "こんにちは、\n\nあなたのアカウント %s が利用可能になったことをお知らせします。\n\nユーザー名: %s\n接続URL: %s\n\n", + "For password recovery and notifications" : "パスワード回復と通知用", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "プロジェクトをサポートしたい場合\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">開発に参加</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">もしくは拡散</a>!", "Add Group" : "グループを追加する", "Group" : "グループ", diff --git a/settings/l10n/ja.json b/settings/l10n/ja.json index 3afdf53f5d0..01c81b0941a 100644 --- a/settings/l10n/ja.json +++ b/settings/l10n/ja.json @@ -53,10 +53,10 @@ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "公式アプリは ownCloud コミュニティにより開発されています。公式アプリは ownCloud の中心的な機能を提供し、製品として可能です。", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "承認されたアプリは信頼された開発者により開発され、大まかなセキュリティチェックに合格しています。アプリは積極的にオープンソースコードレポジトリでメンテナンスされ、メンテナは通常の用途では安定していると考えます。", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "このアプリはセキュリティチェックされていません、新規アプリか安定性が確認されていないアプリです。自己責任でインストールしてください。", - "Enabling app …" : "アプリを有効 ...", "Error while disabling app" : "アプリ無効化中にエラーが発生", "Disable" : "無効にする", "Enable" : "有効にする", + "Enabling app …" : "アプリを有効 ...", "Error while enabling app" : "アプリを有効にする際にエラーが発生", "Error: this app cannot be enabled because it makes the server unstable" : "エラー:このアプリは、サーバーを不安定にするため、有効にすることができません。", "Error: could not disable broken app" : "エラー: 壊れたアプリを無効にできませんでした", @@ -273,7 +273,6 @@ "Email" : "メール", "Your email address" : "あなたのメールアドレス", "No email address set" : "メールアドレスが設定されていません", - "For password recovery and notifications" : "パスワード回復と通知用", "Phone number" : "電話番号", "Your phone number" : "あなたの電話番号", "Address" : "住所", @@ -365,6 +364,7 @@ "Enable experimental apps" : "実験的なアプリを有効にする", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "こんにちは、<br><br>あなたのアカウント %s が利用可能になったことをお知らせします。<br><br>ユーザー名: %s<br>以下のURLからアクセス: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "こんにちは、\n\nあなたのアカウント %s が利用可能になったことをお知らせします。\n\nユーザー名: %s\n接続URL: %s\n\n", + "For password recovery and notifications" : "パスワード回復と通知用", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "プロジェクトをサポートしたい場合\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">開発に参加</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">もしくは拡散</a>!", "Add Group" : "グループを追加する", "Group" : "グループ", diff --git a/settings/l10n/ko.js b/settings/l10n/ko.js index a140403dc2a..64dabd6ce7b 100644 --- a/settings/l10n/ko.js +++ b/settings/l10n/ko.js @@ -269,7 +269,6 @@ OC.L10N.register( "Email" : "이메일", "Your email address" : "이메일 주소", "No email address set" : "이메일 주소가 설정되지 않음", - "For password recovery and notifications" : "암호 복구와 알림에 사용", "Phone number" : "휴대폰 번호", "Your phone number" : "내 휴대폰 번호", "Address" : "주소", @@ -361,6 +360,7 @@ OC.L10N.register( "Enable experimental apps" : "실험적인 앱 사용", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "안녕하세요.<br><br>%s 계정을 사용할 수 있음을 알려 드립니다.<br><br>사용자 이름: %s<br>접근 링크: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "안녕하세요.\n\n%s 계정을 사용할 수 있음을 알려 드립니다.\n\n사용자 이름: %s\n접근 링크: %s\n\n", + "For password recovery and notifications" : "암호 복구와 알림에 사용", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "이 프로젝트를 지원하려면 <a href=\"https://nextcloud.com/contribute\" target=\"_blank\" rel=\"noreferrer\">개발에 참여</a>하거나 <a href=\"https://nextcloud.com/contribute\" target=\"_blank\" rel=\"noreferrer\">주변에 알려주세요</a>!", "Add Group" : "그룹 추가", "Group" : "그룹", diff --git a/settings/l10n/ko.json b/settings/l10n/ko.json index 78059f5c3c4..9a279519be0 100644 --- a/settings/l10n/ko.json +++ b/settings/l10n/ko.json @@ -267,7 +267,6 @@ "Email" : "이메일", "Your email address" : "이메일 주소", "No email address set" : "이메일 주소가 설정되지 않음", - "For password recovery and notifications" : "암호 복구와 알림에 사용", "Phone number" : "휴대폰 번호", "Your phone number" : "내 휴대폰 번호", "Address" : "주소", @@ -359,6 +358,7 @@ "Enable experimental apps" : "실험적인 앱 사용", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "안녕하세요.<br><br>%s 계정을 사용할 수 있음을 알려 드립니다.<br><br>사용자 이름: %s<br>접근 링크: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "안녕하세요.\n\n%s 계정을 사용할 수 있음을 알려 드립니다.\n\n사용자 이름: %s\n접근 링크: %s\n\n", + "For password recovery and notifications" : "암호 복구와 알림에 사용", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "이 프로젝트를 지원하려면 <a href=\"https://nextcloud.com/contribute\" target=\"_blank\" rel=\"noreferrer\">개발에 참여</a>하거나 <a href=\"https://nextcloud.com/contribute\" target=\"_blank\" rel=\"noreferrer\">주변에 알려주세요</a>!", "Add Group" : "그룹 추가", "Group" : "그룹", diff --git a/settings/l10n/lt_LT.js b/settings/l10n/lt_LT.js index 617b531d8f8..c69534e1617 100644 --- a/settings/l10n/lt_LT.js +++ b/settings/l10n/lt_LT.js @@ -36,10 +36,10 @@ OC.L10N.register( "Official" : "Oficiali", "All" : "Viskas", "Update to %s" : "Atnaujinti į %s", - "Enabling app …" : "Programėlė įjungiama", "Error while disabling app" : "Klaida, išjungiant programėlę", "Disable" : "Išjungti", "Enable" : "Įjungti", + "Enabling app …" : "Programėlė įjungiama", "Error while enabling app" : "Klaida, įjungiant programėlę", "Updating...." : "Atnaujinama...", "Error while updating app" : "Įvyko klaida atnaujinant programą", @@ -64,6 +64,9 @@ OC.L10N.register( "Copy" : "Kopijuoti", "Copied!" : "Nukopijuota!", "Not supported!" : "Nepalaikoma!", + "Error while loading browser sessions and device tokens" : "Klaida, įkeliant naršyklės seansus ir įrenginio prieigos raktus", + "Error while creating device token" : "Klaida, kuriant įrenginio prieigos raktą", + "Error while deleting the token" : "Klaida, ištrinant prieigos raktą", "Valid until {date}" : "Galioja iki {date}", "Delete" : "Ištrinti", "Only visible to local users" : "Matoma tik vietiniams naudotojams", @@ -136,7 +139,6 @@ OC.L10N.register( "Cancel" : "Atsisakyti", "Email" : "El. Paštas", "Your email address" : "Jūsų el. pašto adresas", - "For password recovery and notifications" : "Skirtas slaptažodžio atkūrimui ir pranešimams", "Phone number" : "Telefono numeris", "Your phone number" : "Jūsų telefono numeris", "Address" : "Adresas", @@ -184,6 +186,7 @@ OC.L10N.register( "More" : "Daugiau", "Less" : "Mažiau", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Žurnalo failo dydis yra daugiau nei 100 MB. Jo atsiuntimas gali šiek tiek užtrukti!", + "For password recovery and notifications" : "Skirtas slaptažodžio atkūrimui ir pranešimams", "Add Group" : "Pridėti grupę", "Group" : "Grupė" }, diff --git a/settings/l10n/lt_LT.json b/settings/l10n/lt_LT.json index 5bebcdaa5ae..b3fbe0ae8fd 100644 --- a/settings/l10n/lt_LT.json +++ b/settings/l10n/lt_LT.json @@ -34,10 +34,10 @@ "Official" : "Oficiali", "All" : "Viskas", "Update to %s" : "Atnaujinti į %s", - "Enabling app …" : "Programėlė įjungiama", "Error while disabling app" : "Klaida, išjungiant programėlę", "Disable" : "Išjungti", "Enable" : "Įjungti", + "Enabling app …" : "Programėlė įjungiama", "Error while enabling app" : "Klaida, įjungiant programėlę", "Updating...." : "Atnaujinama...", "Error while updating app" : "Įvyko klaida atnaujinant programą", @@ -62,6 +62,9 @@ "Copy" : "Kopijuoti", "Copied!" : "Nukopijuota!", "Not supported!" : "Nepalaikoma!", + "Error while loading browser sessions and device tokens" : "Klaida, įkeliant naršyklės seansus ir įrenginio prieigos raktus", + "Error while creating device token" : "Klaida, kuriant įrenginio prieigos raktą", + "Error while deleting the token" : "Klaida, ištrinant prieigos raktą", "Valid until {date}" : "Galioja iki {date}", "Delete" : "Ištrinti", "Only visible to local users" : "Matoma tik vietiniams naudotojams", @@ -134,7 +137,6 @@ "Cancel" : "Atsisakyti", "Email" : "El. Paštas", "Your email address" : "Jūsų el. pašto adresas", - "For password recovery and notifications" : "Skirtas slaptažodžio atkūrimui ir pranešimams", "Phone number" : "Telefono numeris", "Your phone number" : "Jūsų telefono numeris", "Address" : "Adresas", @@ -182,6 +184,7 @@ "More" : "Daugiau", "Less" : "Mažiau", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Žurnalo failo dydis yra daugiau nei 100 MB. Jo atsiuntimas gali šiek tiek užtrukti!", + "For password recovery and notifications" : "Skirtas slaptažodžio atkūrimui ir pranešimams", "Add Group" : "Pridėti grupę", "Group" : "Grupė" },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);" diff --git a/settings/l10n/lv.js b/settings/l10n/lv.js index 120e640a25f..b7d2793cce1 100644 --- a/settings/l10n/lv.js +++ b/settings/l10n/lv.js @@ -27,6 +27,7 @@ OC.L10N.register( "Invalid mail address" : "Nepareiza e-pasta adrese", "No valid group selected" : "Atlasītā grupa nav derīga", "A user with that name already exists." : "Jau pastāv lietotājs ar šo vārdu.", + "To send a password link to the user an email address is required." : "Lai nosūtītu paroles saites lietotājam, e-pasta adrese jānorāda obligāti.", "Unable to create user." : "Nevar izveidot lietotāju.", "Your %s account was created" : "Konts %s ir izveidots", "Unable to delete user." : "Nevar izdzēst lietotāju.", @@ -53,6 +54,7 @@ OC.L10N.register( "Error while disabling app" : "Kļūda, atvienojot programmu", "Disable" : "Deaktivēt", "Enable" : "Aktivēt", + "Enabling app …" : "Iespējojot programmu …", "Error while enabling app" : "Kļūda, pievienojot programmu", "Updating...." : "Atjaunina....", "Error while updating app" : "Kļūda, atjauninot programmu", @@ -124,7 +126,7 @@ OC.L10N.register( "App passwords" : "Programmu paroles", "Sync clients" : "Sinhronizācijas lietotnes", "None" : "Nav", - "Login" : "Ierakstīties", + "Login" : "Autorizēties", "Plain" : "vienkāršs teksts", "NT LAN Manager" : "NT LAN Pārvaldnieks", "SSL/TLS" : "SSL/TLS", @@ -161,7 +163,7 @@ OC.L10N.register( "Cron" : "Cron", "Execute one task with each page loaded" : "Izpildīt vienu uzdevumu ar katru ielādēto lapu", "Version" : "Versija", - "Sharing" : "Dalīšanās", + "Sharing" : "Koplietošana", "Allow apps to use the Share API" : "Ļaut programmām izmantot koplietošanas API", "Allow users to share via link" : "Ļaut lietotājiem koplietot caur saitēm", "Allow public uploads" : "Atļaut publisko augšupielādi", @@ -174,6 +176,7 @@ OC.L10N.register( "Allow sharing with groups" : "Atļaut koplietošanu ar grupu", "Restrict users to only share with users in their groups" : "Ierobežot lietotājiem koplietot tikai ar lietotājiem savās grupās", "Exclude groups from sharing" : "Izslēgt grupu no koplietošanas", + "Tips & tricks" : "Padomi un ieteikumi", "This is particularly recommended when using the desktop client for file synchronisation." : "Tas ir īpaši ieteicams, ja, izmantojot darbvirsmas klientu, lai veiktu failu sinhronizāciju.", "How to do backups" : "Kā veikt dublēšanu", "Advanced monitoring" : "Papildu uzraudzība", @@ -194,6 +197,7 @@ OC.L10N.register( "Enable only for specific groups" : "Iespējot tikai konkrētām grupām", "Uninstall app" : "Atinstalēt programmu", "SSL Root Certificates" : "SSL Root Sertifikāti", + "Common Name" : "Kopīgais nosaukums", "Valid until" : "Derīgs līdz", "Issued By" : "Izsniedza", "Valid until %s" : "Derīgs līdz %s", @@ -217,7 +221,6 @@ OC.L10N.register( "Email" : "E-pasts", "Your email address" : "Jūsu e-pasta adrese", "No email address set" : "Nav norādīts e-pasts", - "For password recovery and notifications" : "Paroles atjaunošanai un paziņojumiem", "Phone number" : "Tālruņa numurs", "Your phone number" : "Jūsu tālruņa numurs", "Address" : "Adrese", @@ -246,6 +249,7 @@ OC.L10N.register( "For security reasons this password will only be shown once." : "Drošības apsvērumu dēļ šī parole, tiks parādīta tikai vienreiz.", "Username" : "Lietotājvārds", "Done" : "Pabeigts", + "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Izstrādātās {communityopen}Nextcloud kopiena {linkclose}, {githubopen} avota kods {linkclose} licencēts saskaņā ar {licenseopen}AGPL{linkclose}.", "Follow us on Google Plus!" : "Seko mums Google Plus!", "Subscribe to our newsletter!" : "Abonēt mūsu jaunumus!", "Show storage location" : "Rādīt krātuves atrašanās vietu", @@ -293,6 +297,7 @@ OC.L10N.register( "Allow users to send mail notification for shared files to other users" : "Atļaut lietotājiem nosūtīt e-pasta paziņojumu par koplietojamiem failiem citiem lietotājiem", "Uninstall App" : "Atinstalēt programmu", "Enable experimental apps" : "Atļaut eksperimentālās programmas", + "For password recovery and notifications" : "Paroles atjaunošanai un paziņojumiem", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ja vēlaties atbalstīt projektu\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">pievienoties attīstībai</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">izplatīt vārdu</a>!", "Add Group" : "Pievienot grupu", "Group" : "Grupa", diff --git a/settings/l10n/lv.json b/settings/l10n/lv.json index b184963401d..de94a4d22d6 100644 --- a/settings/l10n/lv.json +++ b/settings/l10n/lv.json @@ -25,6 +25,7 @@ "Invalid mail address" : "Nepareiza e-pasta adrese", "No valid group selected" : "Atlasītā grupa nav derīga", "A user with that name already exists." : "Jau pastāv lietotājs ar šo vārdu.", + "To send a password link to the user an email address is required." : "Lai nosūtītu paroles saites lietotājam, e-pasta adrese jānorāda obligāti.", "Unable to create user." : "Nevar izveidot lietotāju.", "Your %s account was created" : "Konts %s ir izveidots", "Unable to delete user." : "Nevar izdzēst lietotāju.", @@ -51,6 +52,7 @@ "Error while disabling app" : "Kļūda, atvienojot programmu", "Disable" : "Deaktivēt", "Enable" : "Aktivēt", + "Enabling app …" : "Iespējojot programmu …", "Error while enabling app" : "Kļūda, pievienojot programmu", "Updating...." : "Atjaunina....", "Error while updating app" : "Kļūda, atjauninot programmu", @@ -122,7 +124,7 @@ "App passwords" : "Programmu paroles", "Sync clients" : "Sinhronizācijas lietotnes", "None" : "Nav", - "Login" : "Ierakstīties", + "Login" : "Autorizēties", "Plain" : "vienkāršs teksts", "NT LAN Manager" : "NT LAN Pārvaldnieks", "SSL/TLS" : "SSL/TLS", @@ -159,7 +161,7 @@ "Cron" : "Cron", "Execute one task with each page loaded" : "Izpildīt vienu uzdevumu ar katru ielādēto lapu", "Version" : "Versija", - "Sharing" : "Dalīšanās", + "Sharing" : "Koplietošana", "Allow apps to use the Share API" : "Ļaut programmām izmantot koplietošanas API", "Allow users to share via link" : "Ļaut lietotājiem koplietot caur saitēm", "Allow public uploads" : "Atļaut publisko augšupielādi", @@ -172,6 +174,7 @@ "Allow sharing with groups" : "Atļaut koplietošanu ar grupu", "Restrict users to only share with users in their groups" : "Ierobežot lietotājiem koplietot tikai ar lietotājiem savās grupās", "Exclude groups from sharing" : "Izslēgt grupu no koplietošanas", + "Tips & tricks" : "Padomi un ieteikumi", "This is particularly recommended when using the desktop client for file synchronisation." : "Tas ir īpaši ieteicams, ja, izmantojot darbvirsmas klientu, lai veiktu failu sinhronizāciju.", "How to do backups" : "Kā veikt dublēšanu", "Advanced monitoring" : "Papildu uzraudzība", @@ -192,6 +195,7 @@ "Enable only for specific groups" : "Iespējot tikai konkrētām grupām", "Uninstall app" : "Atinstalēt programmu", "SSL Root Certificates" : "SSL Root Sertifikāti", + "Common Name" : "Kopīgais nosaukums", "Valid until" : "Derīgs līdz", "Issued By" : "Izsniedza", "Valid until %s" : "Derīgs līdz %s", @@ -215,7 +219,6 @@ "Email" : "E-pasts", "Your email address" : "Jūsu e-pasta adrese", "No email address set" : "Nav norādīts e-pasts", - "For password recovery and notifications" : "Paroles atjaunošanai un paziņojumiem", "Phone number" : "Tālruņa numurs", "Your phone number" : "Jūsu tālruņa numurs", "Address" : "Adrese", @@ -244,6 +247,7 @@ "For security reasons this password will only be shown once." : "Drošības apsvērumu dēļ šī parole, tiks parādīta tikai vienreiz.", "Username" : "Lietotājvārds", "Done" : "Pabeigts", + "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Izstrādātās {communityopen}Nextcloud kopiena {linkclose}, {githubopen} avota kods {linkclose} licencēts saskaņā ar {licenseopen}AGPL{linkclose}.", "Follow us on Google Plus!" : "Seko mums Google Plus!", "Subscribe to our newsletter!" : "Abonēt mūsu jaunumus!", "Show storage location" : "Rādīt krātuves atrašanās vietu", @@ -291,6 +295,7 @@ "Allow users to send mail notification for shared files to other users" : "Atļaut lietotājiem nosūtīt e-pasta paziņojumu par koplietojamiem failiem citiem lietotājiem", "Uninstall App" : "Atinstalēt programmu", "Enable experimental apps" : "Atļaut eksperimentālās programmas", + "For password recovery and notifications" : "Paroles atjaunošanai un paziņojumiem", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ja vēlaties atbalstīt projektu\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">pievienoties attīstībai</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">izplatīt vārdu</a>!", "Add Group" : "Pievienot grupu", "Group" : "Grupa", diff --git a/settings/l10n/nb_NO.js b/settings/l10n/nb_NO.js index 1c337f96d42..dc8636da085 100644 --- a/settings/l10n/nb_NO.js +++ b/settings/l10n/nb_NO.js @@ -27,6 +27,7 @@ OC.L10N.register( "Invalid mail address" : "Ugyldig e-postadresse", "No valid group selected" : "Ingen gyldig gruppe valgt", "A user with that name already exists." : "Det finnes allerede en bruker med det navnet.", + "To send a password link to the user an email address is required." : "Krever epost for å sende link til bruker.", "Unable to create user." : "Kan ikke opprette bruker.", "Your %s account was created" : "%s-kontoen din ble opprettet", "Unable to delete user." : "Kan ikke slette bruker.", @@ -56,10 +57,10 @@ OC.L10N.register( "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Offisielle apper er utviklet av og innenfor miljøet, de byr på sentral funksjonalitet og er klare for bruk i produksjon.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Godkjente apper er utviklet av tiltrodde utviklere og har gjennomgått en rask sikkerhetssjekk. De vedlikeholdes aktivt i et åpent kode-depot og utviklerne anser dem for å være stabile for tidvis eller normal bruk.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Denne appen er ikke sjekket for sikkerhetsproblemer og er ny eller ansett for å være ustabil. Installer på egen risiko.", - "Enabling app …" : "Aktiverer app ...", "Error while disabling app" : "Deaktivering av app feilet", "Disable" : "Deaktiver ", "Enable" : "Aktiver", + "Enabling app …" : "Aktiverer app ...", "Error while enabling app" : "Aktivering av app feilet", "Error: this app cannot be enabled because it makes the server unstable" : "Feil: Denne appen kan ikke aktiveres fordi den gjør tjeneren ustabil", "Error: could not disable broken app" : "Feil: Kunne ikke deaktivere ustabil app", @@ -276,7 +277,7 @@ OC.L10N.register( "Email" : "Epost", "Your email address" : "Din e-postadresse", "No email address set" : "E-postadresse ikke satt", - "For password recovery and notifications" : "For passord-gjenoppretting og varsler", + "For password reset and notifications" : "For å nullstille passord og melinger.", "Phone number" : "Telefonnummer", "Your phone number" : "Ditt telefonnummer", "Address" : "Adresse", @@ -319,6 +320,7 @@ OC.L10N.register( "Show last log in" : "Vis site innlogging", "Show user backend" : "Vis bruker-server", "Send email to new user" : "Send e-post til ny bruker", + "When the password of the new user is left empty an activation email with a link to set the password is send to the user" : "Når passordet til den nye brukeren er utelatt, vil det sendes en aktiveringslink til brukeren.", "Show email address" : "Vis e-postadresse", "E-Mail" : "E-post", "Create" : "Opprett", @@ -368,6 +370,7 @@ OC.L10N.register( "Enable experimental apps" : "Aktiver eksperimentelle apper", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hei,<br><br>vil bare informere om at du nå har en %s-konto.<br><br>Brukernavnet ditt: %s<br>Gå dit: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hei,\n\nVil bare informere om at du nå har en %s-konto.\n\nBrukernavnet ditt: %s\nGå dit: %s\n\n", + "For password recovery and notifications" : "For passord-gjenoppretting og varsler", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Hvis du vil støtte prosjektet \n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">delta i utviklingen</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spre ordet</a>!", "Add Group" : "Legg til gruppe", "Group" : "Gruppe", diff --git a/settings/l10n/nb_NO.json b/settings/l10n/nb_NO.json index f1774c13bdb..694821cb7f9 100644 --- a/settings/l10n/nb_NO.json +++ b/settings/l10n/nb_NO.json @@ -25,6 +25,7 @@ "Invalid mail address" : "Ugyldig e-postadresse", "No valid group selected" : "Ingen gyldig gruppe valgt", "A user with that name already exists." : "Det finnes allerede en bruker med det navnet.", + "To send a password link to the user an email address is required." : "Krever epost for å sende link til bruker.", "Unable to create user." : "Kan ikke opprette bruker.", "Your %s account was created" : "%s-kontoen din ble opprettet", "Unable to delete user." : "Kan ikke slette bruker.", @@ -54,10 +55,10 @@ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Offisielle apper er utviklet av og innenfor miljøet, de byr på sentral funksjonalitet og er klare for bruk i produksjon.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Godkjente apper er utviklet av tiltrodde utviklere og har gjennomgått en rask sikkerhetssjekk. De vedlikeholdes aktivt i et åpent kode-depot og utviklerne anser dem for å være stabile for tidvis eller normal bruk.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Denne appen er ikke sjekket for sikkerhetsproblemer og er ny eller ansett for å være ustabil. Installer på egen risiko.", - "Enabling app …" : "Aktiverer app ...", "Error while disabling app" : "Deaktivering av app feilet", "Disable" : "Deaktiver ", "Enable" : "Aktiver", + "Enabling app …" : "Aktiverer app ...", "Error while enabling app" : "Aktivering av app feilet", "Error: this app cannot be enabled because it makes the server unstable" : "Feil: Denne appen kan ikke aktiveres fordi den gjør tjeneren ustabil", "Error: could not disable broken app" : "Feil: Kunne ikke deaktivere ustabil app", @@ -274,7 +275,7 @@ "Email" : "Epost", "Your email address" : "Din e-postadresse", "No email address set" : "E-postadresse ikke satt", - "For password recovery and notifications" : "For passord-gjenoppretting og varsler", + "For password reset and notifications" : "For å nullstille passord og melinger.", "Phone number" : "Telefonnummer", "Your phone number" : "Ditt telefonnummer", "Address" : "Adresse", @@ -317,6 +318,7 @@ "Show last log in" : "Vis site innlogging", "Show user backend" : "Vis bruker-server", "Send email to new user" : "Send e-post til ny bruker", + "When the password of the new user is left empty an activation email with a link to set the password is send to the user" : "Når passordet til den nye brukeren er utelatt, vil det sendes en aktiveringslink til brukeren.", "Show email address" : "Vis e-postadresse", "E-Mail" : "E-post", "Create" : "Opprett", @@ -366,6 +368,7 @@ "Enable experimental apps" : "Aktiver eksperimentelle apper", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hei,<br><br>vil bare informere om at du nå har en %s-konto.<br><br>Brukernavnet ditt: %s<br>Gå dit: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hei,\n\nVil bare informere om at du nå har en %s-konto.\n\nBrukernavnet ditt: %s\nGå dit: %s\n\n", + "For password recovery and notifications" : "For passord-gjenoppretting og varsler", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Hvis du vil støtte prosjektet \n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">delta i utviklingen</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spre ordet</a>!", "Add Group" : "Legg til gruppe", "Group" : "Gruppe", diff --git a/settings/l10n/nl.js b/settings/l10n/nl.js index 69cd6ca9b00..4e080a3871c 100644 --- a/settings/l10n/nl.js +++ b/settings/l10n/nl.js @@ -27,6 +27,7 @@ OC.L10N.register( "Invalid mail address" : "Ongeldig e-mailadres", "No valid group selected" : "Geen geldige groep geselecteerd", "A user with that name already exists." : "Er bestaat al een gebruiker met die naam.", + "To send a password link to the user an email address is required." : "Om een wachtwoord naar de gebruiker te versturen, is een e-mailadres verplicht.", "Unable to create user." : "Kan gebruiker niet aanmaken.", "Your %s account was created" : "Je %s account is aangemaakt", "Unable to delete user." : "Kan de gebruiker niet verwijderen.", @@ -56,10 +57,10 @@ OC.L10N.register( "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Officiële apps worden ontwikkeld door en binnen de community. Ze bieden centrale functionaliteit en zijn klaar voor productie.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Goedgekeurde apps zijn ontwikkeld door vertrouwde ontwikkelaars en hebben een beveiligingscontrole ondergaan. Ze worden actief onderhouden in een open code repository en hun ontwikkelaars vinden ze stabiel genoeg voor informeel of normaal gebruik.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Deze app is niet gecontroleerd op beveiligingsproblemen en is nieuw of staat bekend als onstabiel. Installeren op eigen risico.", - "Enabling app …" : "Activeren app ...", "Error while disabling app" : "Fout tijdens het uitschakelen van de app", "Disable" : "Uitschakelen", "Enable" : "Activeer", + "Enabling app …" : "Activeren app ...", "Error while enabling app" : "Fout tijdens het inschakelen van het programma", "Error: this app cannot be enabled because it makes the server unstable" : "Fout: deze app kan niet geïnstalleerd worden, omdat het de server onstabiel maakt", "Error: could not disable broken app" : "Fout: kan de beschadigde app niet uitschakelen", @@ -276,7 +277,7 @@ OC.L10N.register( "Email" : "E-mailadres", "Your email address" : "Uw e-mailadres", "No email address set" : "Geen e-mailadres opgegeven", - "For password recovery and notifications" : "Voor wachtwoordherstel en meldingen", + "For password reset and notifications" : "Voor paswoord reset en notificaties", "Phone number" : "Telefoonnummer", "Your phone number" : "Jouw telefoonnummer", "Address" : "Adres", @@ -319,6 +320,7 @@ OC.L10N.register( "Show last log in" : "Toon laatste inlog", "Show user backend" : "Toon backend gebruiker", "Send email to new user" : "Verstuur e-mail aan nieuwe gebruiker", + "When the password of the new user is left empty an activation email with a link to set the password is send to the user" : "Als het wachtwoord van de nieuwe gebruiker blanco blijft, wordt een activeringsmailtje naar de gebruiker gestuurd met een link om het wachtwoord in te stellen", "Show email address" : "Toon e-mailadres", "E-Mail" : "E-mail", "Create" : "Aanmaken", @@ -368,6 +370,7 @@ OC.L10N.register( "Enable experimental apps" : "Inschakelen experimentele apps", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hallo daar,<br><br>we willen je laten weten dat je nu een %s account hebt.<br><br>Je gebruikersnaam: %s<br>Ga naar: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hallo,\n\nwe willen je laten weten dat je nu een %s account hebt.\n\nJe gebruikersnaam: %s\nGa naar: %s\n\n", + "For password recovery and notifications" : "Voor wachtwoordherstel en meldingen", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ondersteun het project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">ontwikkel het mee</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">verkondig het woord</a>!", "Add Group" : "Groep toevoegen", "Group" : "Groep", diff --git a/settings/l10n/nl.json b/settings/l10n/nl.json index eed5f670d51..4fbd25bd9c1 100644 --- a/settings/l10n/nl.json +++ b/settings/l10n/nl.json @@ -25,6 +25,7 @@ "Invalid mail address" : "Ongeldig e-mailadres", "No valid group selected" : "Geen geldige groep geselecteerd", "A user with that name already exists." : "Er bestaat al een gebruiker met die naam.", + "To send a password link to the user an email address is required." : "Om een wachtwoord naar de gebruiker te versturen, is een e-mailadres verplicht.", "Unable to create user." : "Kan gebruiker niet aanmaken.", "Your %s account was created" : "Je %s account is aangemaakt", "Unable to delete user." : "Kan de gebruiker niet verwijderen.", @@ -54,10 +55,10 @@ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Officiële apps worden ontwikkeld door en binnen de community. Ze bieden centrale functionaliteit en zijn klaar voor productie.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Goedgekeurde apps zijn ontwikkeld door vertrouwde ontwikkelaars en hebben een beveiligingscontrole ondergaan. Ze worden actief onderhouden in een open code repository en hun ontwikkelaars vinden ze stabiel genoeg voor informeel of normaal gebruik.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Deze app is niet gecontroleerd op beveiligingsproblemen en is nieuw of staat bekend als onstabiel. Installeren op eigen risico.", - "Enabling app …" : "Activeren app ...", "Error while disabling app" : "Fout tijdens het uitschakelen van de app", "Disable" : "Uitschakelen", "Enable" : "Activeer", + "Enabling app …" : "Activeren app ...", "Error while enabling app" : "Fout tijdens het inschakelen van het programma", "Error: this app cannot be enabled because it makes the server unstable" : "Fout: deze app kan niet geïnstalleerd worden, omdat het de server onstabiel maakt", "Error: could not disable broken app" : "Fout: kan de beschadigde app niet uitschakelen", @@ -274,7 +275,7 @@ "Email" : "E-mailadres", "Your email address" : "Uw e-mailadres", "No email address set" : "Geen e-mailadres opgegeven", - "For password recovery and notifications" : "Voor wachtwoordherstel en meldingen", + "For password reset and notifications" : "Voor paswoord reset en notificaties", "Phone number" : "Telefoonnummer", "Your phone number" : "Jouw telefoonnummer", "Address" : "Adres", @@ -317,6 +318,7 @@ "Show last log in" : "Toon laatste inlog", "Show user backend" : "Toon backend gebruiker", "Send email to new user" : "Verstuur e-mail aan nieuwe gebruiker", + "When the password of the new user is left empty an activation email with a link to set the password is send to the user" : "Als het wachtwoord van de nieuwe gebruiker blanco blijft, wordt een activeringsmailtje naar de gebruiker gestuurd met een link om het wachtwoord in te stellen", "Show email address" : "Toon e-mailadres", "E-Mail" : "E-mail", "Create" : "Aanmaken", @@ -366,6 +368,7 @@ "Enable experimental apps" : "Inschakelen experimentele apps", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hallo daar,<br><br>we willen je laten weten dat je nu een %s account hebt.<br><br>Je gebruikersnaam: %s<br>Ga naar: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hallo,\n\nwe willen je laten weten dat je nu een %s account hebt.\n\nJe gebruikersnaam: %s\nGa naar: %s\n\n", + "For password recovery and notifications" : "Voor wachtwoordherstel en meldingen", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ondersteun het project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">ontwikkel het mee</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">verkondig het woord</a>!", "Add Group" : "Groep toevoegen", "Group" : "Groep", diff --git a/settings/l10n/pl.js b/settings/l10n/pl.js index d8accea5336..6515819190c 100644 --- a/settings/l10n/pl.js +++ b/settings/l10n/pl.js @@ -27,6 +27,7 @@ OC.L10N.register( "Invalid mail address" : "Nieprawidłowy adres email", "No valid group selected" : "Nie wybrano poprawnej grupy", "A user with that name already exists." : "Użytkownik o tej nazwie już istnieje.", + "To send a password link to the user an email address is required." : "Aby wysłać link z hasłem innemu użytkownikowi wymagany jest adres e-mail.", "Unable to create user." : "Nie można utworzyć użytkownika.", "Your %s account was created" : "Twoje konto %s zostało stworzone", "Unable to delete user." : "Nie można usunąć użytkownika.", @@ -56,10 +57,10 @@ OC.L10N.register( "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Oficjalne aplikacje są tworzone przez i wewnątrz społeczności. Oferują one centralną funkcjonalność i są gotowe do użycia produkcyjnego.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Zaakceptowane aplikacje są wytwarzane przez zaufanych programistów i przeszły pobieżne kontrole bezpieczeństwa. Są one aktywnie utrzymywane w repozytorium otwartego kodu i ich opiekunowie uznają je za stabilne do używania sporadycznego i normalnego.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Ta aplikacja nie została sprawdzona pod kątem bezpieczeństwa i jest nowa lub znana jako niestabilna. Instalujesz ją na własne ryzyko.", - "Enabling app …" : "Włączam aplikację...", "Error while disabling app" : "Błąd podczas wyłączania aplikacji", "Disable" : "Wyłącz", "Enable" : "Włącz", + "Enabling app …" : "Włączam aplikację...", "Error while enabling app" : "Błąd podczas włączania aplikacji", "Error: this app cannot be enabled because it makes the server unstable" : "Błąd: ta aplikacja nie może być włączona, ponieważ sprawia, że serwer jest niestabilny", "Error: could not disable broken app" : "Błąd: nie można wyłączyć zepsutą aplikację", @@ -276,7 +277,7 @@ OC.L10N.register( "Email" : "Email", "Your email address" : "Twój adres e-mail", "No email address set" : "Brak adresu email", - "For password recovery and notifications" : "W celu odzyskania hasła i powiadomień", + "For password reset and notifications" : "Dla resetowania hasła i powiadomień", "Phone number" : "Numer telefonu", "Your phone number" : "Twój numer telefonu", "Address" : "Adres", @@ -319,6 +320,7 @@ OC.L10N.register( "Show last log in" : "Pokaż ostatni login", "Show user backend" : "Pokaż moduł użytkownika", "Send email to new user" : "Wyślij email do nowego użytkownika", + "When the password of the new user is left empty an activation email with a link to set the password is send to the user" : "Kiedy hasło nowego użytkownika jest puste użytkownikowi jest wysyłany e-mieil aktywacyjny z linkiem do ustawienia hasła", "Show email address" : "Pokaż adres email", "E-Mail" : "E-mail", "Create" : "Utwórz", @@ -368,6 +370,7 @@ OC.L10N.register( "Enable experimental apps" : "Włącz eksperymentalne aplikacje", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Witaj,<br><br>informujemy, że teraz masz konto na %s .<br><br>Twoja nazwa użytkownika: %s<br>Dostęp pod adresem: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Witaj,\n\ninformujemy, że teraz masz konto na %s .\n\nTwoja nazwa użytkownika:: %s\nDostęp pod adresem: %s\n\n", + "For password recovery and notifications" : "W celu odzyskania hasła i powiadomień", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Jeśli chcesz wesprzeć projekt\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">dołącz do programowania</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">głoś słowo</a>!", "Add Group" : "Dodaj grupę", "Group" : "Grupa", diff --git a/settings/l10n/pl.json b/settings/l10n/pl.json index 876396e6324..c058858fc4f 100644 --- a/settings/l10n/pl.json +++ b/settings/l10n/pl.json @@ -25,6 +25,7 @@ "Invalid mail address" : "Nieprawidłowy adres email", "No valid group selected" : "Nie wybrano poprawnej grupy", "A user with that name already exists." : "Użytkownik o tej nazwie już istnieje.", + "To send a password link to the user an email address is required." : "Aby wysłać link z hasłem innemu użytkownikowi wymagany jest adres e-mail.", "Unable to create user." : "Nie można utworzyć użytkownika.", "Your %s account was created" : "Twoje konto %s zostało stworzone", "Unable to delete user." : "Nie można usunąć użytkownika.", @@ -54,10 +55,10 @@ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Oficjalne aplikacje są tworzone przez i wewnątrz społeczności. Oferują one centralną funkcjonalność i są gotowe do użycia produkcyjnego.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Zaakceptowane aplikacje są wytwarzane przez zaufanych programistów i przeszły pobieżne kontrole bezpieczeństwa. Są one aktywnie utrzymywane w repozytorium otwartego kodu i ich opiekunowie uznają je za stabilne do używania sporadycznego i normalnego.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Ta aplikacja nie została sprawdzona pod kątem bezpieczeństwa i jest nowa lub znana jako niestabilna. Instalujesz ją na własne ryzyko.", - "Enabling app …" : "Włączam aplikację...", "Error while disabling app" : "Błąd podczas wyłączania aplikacji", "Disable" : "Wyłącz", "Enable" : "Włącz", + "Enabling app …" : "Włączam aplikację...", "Error while enabling app" : "Błąd podczas włączania aplikacji", "Error: this app cannot be enabled because it makes the server unstable" : "Błąd: ta aplikacja nie może być włączona, ponieważ sprawia, że serwer jest niestabilny", "Error: could not disable broken app" : "Błąd: nie można wyłączyć zepsutą aplikację", @@ -274,7 +275,7 @@ "Email" : "Email", "Your email address" : "Twój adres e-mail", "No email address set" : "Brak adresu email", - "For password recovery and notifications" : "W celu odzyskania hasła i powiadomień", + "For password reset and notifications" : "Dla resetowania hasła i powiadomień", "Phone number" : "Numer telefonu", "Your phone number" : "Twój numer telefonu", "Address" : "Adres", @@ -317,6 +318,7 @@ "Show last log in" : "Pokaż ostatni login", "Show user backend" : "Pokaż moduł użytkownika", "Send email to new user" : "Wyślij email do nowego użytkownika", + "When the password of the new user is left empty an activation email with a link to set the password is send to the user" : "Kiedy hasło nowego użytkownika jest puste użytkownikowi jest wysyłany e-mieil aktywacyjny z linkiem do ustawienia hasła", "Show email address" : "Pokaż adres email", "E-Mail" : "E-mail", "Create" : "Utwórz", @@ -366,6 +368,7 @@ "Enable experimental apps" : "Włącz eksperymentalne aplikacje", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Witaj,<br><br>informujemy, że teraz masz konto na %s .<br><br>Twoja nazwa użytkownika: %s<br>Dostęp pod adresem: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Witaj,\n\ninformujemy, że teraz masz konto na %s .\n\nTwoja nazwa użytkownika:: %s\nDostęp pod adresem: %s\n\n", + "For password recovery and notifications" : "W celu odzyskania hasła i powiadomień", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Jeśli chcesz wesprzeć projekt\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">dołącz do programowania</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">głoś słowo</a>!", "Add Group" : "Dodaj grupę", "Group" : "Grupa", diff --git a/settings/l10n/pt_BR.js b/settings/l10n/pt_BR.js index e53bf31fedc..289b955de68 100644 --- a/settings/l10n/pt_BR.js +++ b/settings/l10n/pt_BR.js @@ -27,6 +27,7 @@ OC.L10N.register( "Invalid mail address" : "Endereço de e-mail inválido", "No valid group selected" : "Nenhum grupo válido foi selecionado", "A user with that name already exists." : "Um usuário com esse nome já existe.", + "To send a password link to the user an email address is required." : "Para envio da senha ao usuário um endereço de email é necessário.", "Unable to create user." : "Não é possível criar usuário.", "Your %s account was created" : "Sua conta %s foi criada", "Unable to delete user." : "Não é possível excluir o usuário.", @@ -56,10 +57,10 @@ OC.L10N.register( "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Aplicativos oficiais são desenvolvidos pela comunidade e dentro da comunidade. Eles oferecem funcionalidades centrais e estão prontos para uso em produção.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Aplicativos aprovados são desenvolvidos pelos desenvolvedores confiáveis e passaram por uma verificação de segurança superficial. Eles são ativamente mantidos em um repositório de código aberto e seus mantenedores consideram que eles para sejam estáveis para um casual uso normal.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Este aplicativo não foi verificado para as questões de segurança e é novo ou conhecido por ser instável. Instale por seu próprio risco.", - "Enabling app …" : "Ativando app ...", "Error while disabling app" : "Erro enquanto desabilitava o aplicativo", "Disable" : "Desabilitar", "Enable" : "Habilitar", + "Enabling app …" : "Ativando app ...", "Error while enabling app" : "Erro enquanto habilitava o aplicativo", "Error: this app cannot be enabled because it makes the server unstable" : "Erro: este aplicativo não pode ser habilitado porque faz com que o servidor fique instável", "Error: could not disable broken app" : "Erro: Não foi possível desativar o aplicativo quebrado", @@ -276,7 +277,7 @@ OC.L10N.register( "Email" : "E-mail", "Your email address" : "Seu endereço de e-mail", "No email address set" : "Nenhum endereço de email foi configurado", - "For password recovery and notifications" : "Para recuperação de senha e notificações", + "For password reset and notifications" : "Para redefinição de senha e notificações", "Phone number" : "Numero de telefone", "Your phone number" : "Seu numero de telefone", "Address" : "Endereço", @@ -319,6 +320,7 @@ OC.L10N.register( "Show last log in" : "Mostrar o último acesso", "Show user backend" : "Mostrar administrador do usuário", "Send email to new user" : "Enviar um email para o novo usuário", + "When the password of the new user is left empty an activation email with a link to set the password is send to the user" : "Quando a senha do novo usuário é deixada em branco, um e-mail de ativação com um link para definir a senha é enviado para o usuário", "Show email address" : "Mostrar o endereço de email", "E-Mail" : "E-Mail", "Create" : "Criar", @@ -368,6 +370,7 @@ OC.L10N.register( "Enable experimental apps" : "Habilitar aplicativos experimentais", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Olá,<br><br>somente para lembrar que agora você tem uma conta %s.<br><br>Seu nome de usuário é: %s<br>Acesse em: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Olá,\n\nsomente para lembrar que agora você tem uma conta %s.\n\nSeu nome de usuário é: %s\nAcesse em: %s\n\n", + "For password recovery and notifications" : "Para recuperação de senha e notificações", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Se quiser dar suporte ao projeto\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">junte-se ao desenvolvimento</a>\n\t\t<or>ou</or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">espalhe pelo mundo</a>!", "Add Group" : "Adicionar grupo", "Group" : "Grupo", diff --git a/settings/l10n/pt_BR.json b/settings/l10n/pt_BR.json index ce939d03a0f..e6d49971579 100644 --- a/settings/l10n/pt_BR.json +++ b/settings/l10n/pt_BR.json @@ -25,6 +25,7 @@ "Invalid mail address" : "Endereço de e-mail inválido", "No valid group selected" : "Nenhum grupo válido foi selecionado", "A user with that name already exists." : "Um usuário com esse nome já existe.", + "To send a password link to the user an email address is required." : "Para envio da senha ao usuário um endereço de email é necessário.", "Unable to create user." : "Não é possível criar usuário.", "Your %s account was created" : "Sua conta %s foi criada", "Unable to delete user." : "Não é possível excluir o usuário.", @@ -54,10 +55,10 @@ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Aplicativos oficiais são desenvolvidos pela comunidade e dentro da comunidade. Eles oferecem funcionalidades centrais e estão prontos para uso em produção.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Aplicativos aprovados são desenvolvidos pelos desenvolvedores confiáveis e passaram por uma verificação de segurança superficial. Eles são ativamente mantidos em um repositório de código aberto e seus mantenedores consideram que eles para sejam estáveis para um casual uso normal.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Este aplicativo não foi verificado para as questões de segurança e é novo ou conhecido por ser instável. Instale por seu próprio risco.", - "Enabling app …" : "Ativando app ...", "Error while disabling app" : "Erro enquanto desabilitava o aplicativo", "Disable" : "Desabilitar", "Enable" : "Habilitar", + "Enabling app …" : "Ativando app ...", "Error while enabling app" : "Erro enquanto habilitava o aplicativo", "Error: this app cannot be enabled because it makes the server unstable" : "Erro: este aplicativo não pode ser habilitado porque faz com que o servidor fique instável", "Error: could not disable broken app" : "Erro: Não foi possível desativar o aplicativo quebrado", @@ -274,7 +275,7 @@ "Email" : "E-mail", "Your email address" : "Seu endereço de e-mail", "No email address set" : "Nenhum endereço de email foi configurado", - "For password recovery and notifications" : "Para recuperação de senha e notificações", + "For password reset and notifications" : "Para redefinição de senha e notificações", "Phone number" : "Numero de telefone", "Your phone number" : "Seu numero de telefone", "Address" : "Endereço", @@ -317,6 +318,7 @@ "Show last log in" : "Mostrar o último acesso", "Show user backend" : "Mostrar administrador do usuário", "Send email to new user" : "Enviar um email para o novo usuário", + "When the password of the new user is left empty an activation email with a link to set the password is send to the user" : "Quando a senha do novo usuário é deixada em branco, um e-mail de ativação com um link para definir a senha é enviado para o usuário", "Show email address" : "Mostrar o endereço de email", "E-Mail" : "E-Mail", "Create" : "Criar", @@ -366,6 +368,7 @@ "Enable experimental apps" : "Habilitar aplicativos experimentais", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Olá,<br><br>somente para lembrar que agora você tem uma conta %s.<br><br>Seu nome de usuário é: %s<br>Acesse em: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Olá,\n\nsomente para lembrar que agora você tem uma conta %s.\n\nSeu nome de usuário é: %s\nAcesse em: %s\n\n", + "For password recovery and notifications" : "Para recuperação de senha e notificações", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Se quiser dar suporte ao projeto\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">junte-se ao desenvolvimento</a>\n\t\t<or>ou</or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">espalhe pelo mundo</a>!", "Add Group" : "Adicionar grupo", "Group" : "Grupo", diff --git a/settings/l10n/pt_PT.js b/settings/l10n/pt_PT.js index 3662b709bc9..5958f9b73a5 100644 --- a/settings/l10n/pt_PT.js +++ b/settings/l10n/pt_PT.js @@ -215,7 +215,6 @@ OC.L10N.register( "Email" : "Email", "Your email address" : "O seu endereço de email", "No email address set" : "Nenhum endereço de email estabelecido", - "For password recovery and notifications" : "Para recuperação da palavra-passe e notificações", "You are member of the following groups:" : "Você é membro dos seguintes grupos:", "Password" : "Palavra-passe", "Current password" : "Palavra-passe atual", @@ -277,6 +276,7 @@ OC.L10N.register( "Enable experimental apps" : "Ativar apps experimentais", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Olá,<br><br>apenas para informar que você tem uma conta %s.<br><br>O seu nome de utilizador: %s<br>Acesse à sua conta: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Olá,\n\napenas para informar que você tem uma conta %s.\n\nO seu nome de utilizador: %s\nAcesse à sua conta: %s\n\n", + "For password recovery and notifications" : "Para recuperação da palavra-passe e notificações", "Group" : "Grupo" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/pt_PT.json b/settings/l10n/pt_PT.json index 28f83d064dd..4130cdd8f79 100644 --- a/settings/l10n/pt_PT.json +++ b/settings/l10n/pt_PT.json @@ -213,7 +213,6 @@ "Email" : "Email", "Your email address" : "O seu endereço de email", "No email address set" : "Nenhum endereço de email estabelecido", - "For password recovery and notifications" : "Para recuperação da palavra-passe e notificações", "You are member of the following groups:" : "Você é membro dos seguintes grupos:", "Password" : "Palavra-passe", "Current password" : "Palavra-passe atual", @@ -275,6 +274,7 @@ "Enable experimental apps" : "Ativar apps experimentais", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Olá,<br><br>apenas para informar que você tem uma conta %s.<br><br>O seu nome de utilizador: %s<br>Acesse à sua conta: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Olá,\n\napenas para informar que você tem uma conta %s.\n\nO seu nome de utilizador: %s\nAcesse à sua conta: %s\n\n", + "For password recovery and notifications" : "Para recuperação da palavra-passe e notificações", "Group" : "Grupo" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/settings/l10n/ru.js b/settings/l10n/ru.js index a44f2b1b9a1..a9b89077364 100644 --- a/settings/l10n/ru.js +++ b/settings/l10n/ru.js @@ -27,6 +27,7 @@ OC.L10N.register( "Invalid mail address" : "Некорректный адрес электронной почты", "No valid group selected" : "Не выбрана верная группа", "A user with that name already exists." : "Пользователь с таким именем уже существует.", + "To send a password link to the user an email address is required." : "Для отправки пользователю запароленный ссылки требуется указать адрес эл.почты.", "Unable to create user." : "Невозможно создать пользователя.", "Your %s account was created" : "Учетная запись %s создана", "Unable to delete user." : "Невозможно удалить пользователя.", @@ -56,10 +57,10 @@ OC.L10N.register( "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Официальные приложения разработаны вместе с сообществом. Они предлагают базовую функциональность и готовы для использования.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Подтвержденные приложения разработаны доверенными разработчиками и прошли краткую проверку на наличие проблем с безопасностью. Они активно поддерживаются в открытых репозиториях и сопровождающие их разработчики подтверждают, что приложения достаточно стабильны для нормальной работы.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Это приложение не проверялось на наличие проблем с безопасностью, также оно может работать нестабильно. Устанавливайте на свой страх и риск.", - "Enabling app …" : "Включение приложения", "Error while disabling app" : "Ошибка при отключении приложения", "Disable" : "Отключить", "Enable" : "Включить", + "Enabling app …" : "Включение приложения", "Error while enabling app" : "Ошибка при включении приложения", "Error: this app cannot be enabled because it makes the server unstable" : "Ошибка: это приложение не может быть включено, так как оно делает сервер нестабильным", "Error: could not disable broken app" : "Ошибка: невозможно отключить сломанное приложение", @@ -276,7 +277,6 @@ OC.L10N.register( "Email" : "Почта", "Your email address" : "Ваш адрес электронной почты", "No email address set" : "Адрес не указан", - "For password recovery and notifications" : "Для восстановления пароля и уведомлений", "Phone number" : "Номер телефона", "Your phone number" : "Ваш номер телефона", "Address" : "Адрес", @@ -319,6 +319,7 @@ OC.L10N.register( "Show last log in" : "Показать последний вход в систему", "Show user backend" : "Показать механизм учёта пользователей", "Send email to new user" : "Отправлять письмо новому пользователю", + "When the password of the new user is left empty an activation email with a link to set the password is send to the user" : "Если поле пароля нового пользователя оставить пустым, то пользователю будет отправлено эл.письмо, содержащее ссылку на страницу установки пароля.", "Show email address" : "Показывать адрес электронной почты", "E-Mail" : "Почта", "Create" : "Создать", @@ -368,6 +369,7 @@ OC.L10N.register( "Enable experimental apps" : "Включить экспериментальные приложения", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Здравствуйте,<br><br>просто хотим сообщить, что теперь у вас есть учетная запись на %s.<br><br>Ваше имя пользователя: %s<br>Зайти: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Здравствуйте,\n\nПросто хотим сообщить, что теперь у вас есть учетная запись на %s.\n\nИмя пользователя: %s\nЗайти: %s\n", + "For password recovery and notifications" : "Для восстановления пароля и уведомлений", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Если вы хотите поддержать проект\n\t<a href=\"https://nextcloud.com/contribute\"\n\ttarget=\"_blank\" rel=\"noreferrer\">присоединяйтесь к разработке</a>\n\tили\n\t<a href=\"https://nextcloud.com/contribute\"\n\ttarget=\"_blank\" rel=\"noreferrer\">расскажите о нас</a>!", "Add Group" : "Добавить группу", "Group" : "Группа", diff --git a/settings/l10n/ru.json b/settings/l10n/ru.json index 2b4830cecab..dc07ac1c411 100644 --- a/settings/l10n/ru.json +++ b/settings/l10n/ru.json @@ -25,6 +25,7 @@ "Invalid mail address" : "Некорректный адрес электронной почты", "No valid group selected" : "Не выбрана верная группа", "A user with that name already exists." : "Пользователь с таким именем уже существует.", + "To send a password link to the user an email address is required." : "Для отправки пользователю запароленный ссылки требуется указать адрес эл.почты.", "Unable to create user." : "Невозможно создать пользователя.", "Your %s account was created" : "Учетная запись %s создана", "Unable to delete user." : "Невозможно удалить пользователя.", @@ -54,10 +55,10 @@ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Официальные приложения разработаны вместе с сообществом. Они предлагают базовую функциональность и готовы для использования.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Подтвержденные приложения разработаны доверенными разработчиками и прошли краткую проверку на наличие проблем с безопасностью. Они активно поддерживаются в открытых репозиториях и сопровождающие их разработчики подтверждают, что приложения достаточно стабильны для нормальной работы.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Это приложение не проверялось на наличие проблем с безопасностью, также оно может работать нестабильно. Устанавливайте на свой страх и риск.", - "Enabling app …" : "Включение приложения", "Error while disabling app" : "Ошибка при отключении приложения", "Disable" : "Отключить", "Enable" : "Включить", + "Enabling app …" : "Включение приложения", "Error while enabling app" : "Ошибка при включении приложения", "Error: this app cannot be enabled because it makes the server unstable" : "Ошибка: это приложение не может быть включено, так как оно делает сервер нестабильным", "Error: could not disable broken app" : "Ошибка: невозможно отключить сломанное приложение", @@ -274,7 +275,6 @@ "Email" : "Почта", "Your email address" : "Ваш адрес электронной почты", "No email address set" : "Адрес не указан", - "For password recovery and notifications" : "Для восстановления пароля и уведомлений", "Phone number" : "Номер телефона", "Your phone number" : "Ваш номер телефона", "Address" : "Адрес", @@ -317,6 +317,7 @@ "Show last log in" : "Показать последний вход в систему", "Show user backend" : "Показать механизм учёта пользователей", "Send email to new user" : "Отправлять письмо новому пользователю", + "When the password of the new user is left empty an activation email with a link to set the password is send to the user" : "Если поле пароля нового пользователя оставить пустым, то пользователю будет отправлено эл.письмо, содержащее ссылку на страницу установки пароля.", "Show email address" : "Показывать адрес электронной почты", "E-Mail" : "Почта", "Create" : "Создать", @@ -366,6 +367,7 @@ "Enable experimental apps" : "Включить экспериментальные приложения", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Здравствуйте,<br><br>просто хотим сообщить, что теперь у вас есть учетная запись на %s.<br><br>Ваше имя пользователя: %s<br>Зайти: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Здравствуйте,\n\nПросто хотим сообщить, что теперь у вас есть учетная запись на %s.\n\nИмя пользователя: %s\nЗайти: %s\n", + "For password recovery and notifications" : "Для восстановления пароля и уведомлений", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Если вы хотите поддержать проект\n\t<a href=\"https://nextcloud.com/contribute\"\n\ttarget=\"_blank\" rel=\"noreferrer\">присоединяйтесь к разработке</a>\n\tили\n\t<a href=\"https://nextcloud.com/contribute\"\n\ttarget=\"_blank\" rel=\"noreferrer\">расскажите о нас</a>!", "Add Group" : "Добавить группу", "Group" : "Группа", diff --git a/settings/l10n/sk_SK.js b/settings/l10n/sk_SK.js index 57a56c57234..37091947ce0 100644 --- a/settings/l10n/sk_SK.js +++ b/settings/l10n/sk_SK.js @@ -50,10 +50,10 @@ OC.L10N.register( "_You have %n app update pending_::_You have %n app updates pending_" : ["Prebieha aktualizácia %n aplikácie","Prebieha aktualizácia %n aplikácií","Prebieha aktualizácia %n aplikácií"], "No apps found for your version" : "Aplikácie pre vašu verziu sa nenašli", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Táto aplikácia nie je skontrolovaná na bezpečnostné chyby, je nová, alebo patrí medzi nestabilné. Inštalácia na vlastné riziko.", - "Enabling app …" : "Povoľujem aplikáciu …", "Error while disabling app" : "Chyba pri zakázaní aplikácie", "Disable" : "Zakázať", "Enable" : "Zapnúť", + "Enabling app …" : "Povoľujem aplikáciu …", "Error while enabling app" : "Chyba pri povoľovaní aplikácie", "Error: this app cannot be enabled because it makes the server unstable" : "Chyba: aplikáciu nie je možné povoliť, lebo naruší stabilitu servera", "Error: could not disable broken app" : "Chyba: nebolo možné zakázať poškodenú aplikáciu", @@ -242,7 +242,6 @@ OC.L10N.register( "Email" : "Email", "Your email address" : "Vaša emailová adresa", "No email address set" : "Emailová adresa nie je nastavená", - "For password recovery and notifications" : "Pre obnovu hesla a oznámenia", "Phone number" : "Telefónne číslo", "Your phone number" : "Vaše telefónne číslo", "Address" : "Adresa", @@ -328,6 +327,7 @@ OC.L10N.register( "Enable experimental apps" : "Povoliť experimentálne aplikácie", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Dobrý deň,<br><br>toto je oznámenie o novo vytvorenom účte %s.<br><br>Vaše používateľské meno: %s<br>Prihlásiť sa môžete tu: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Ahoj,\n\ntoto je oznámenie o novo vytvorenom účte %s.\n\nVaše používateľské meno: %s\nPrihlásiť sa môžete tu: %s\n\n", + "For password recovery and notifications" : "Pre obnovu hesla a oznámenia", "Add Group" : "Pridať skupinu", "Group" : "Skupina", "Default Quota" : "Predvolená kvóta", diff --git a/settings/l10n/sk_SK.json b/settings/l10n/sk_SK.json index 0165f3b5ebe..75d7983d4a4 100644 --- a/settings/l10n/sk_SK.json +++ b/settings/l10n/sk_SK.json @@ -48,10 +48,10 @@ "_You have %n app update pending_::_You have %n app updates pending_" : ["Prebieha aktualizácia %n aplikácie","Prebieha aktualizácia %n aplikácií","Prebieha aktualizácia %n aplikácií"], "No apps found for your version" : "Aplikácie pre vašu verziu sa nenašli", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Táto aplikácia nie je skontrolovaná na bezpečnostné chyby, je nová, alebo patrí medzi nestabilné. Inštalácia na vlastné riziko.", - "Enabling app …" : "Povoľujem aplikáciu …", "Error while disabling app" : "Chyba pri zakázaní aplikácie", "Disable" : "Zakázať", "Enable" : "Zapnúť", + "Enabling app …" : "Povoľujem aplikáciu …", "Error while enabling app" : "Chyba pri povoľovaní aplikácie", "Error: this app cannot be enabled because it makes the server unstable" : "Chyba: aplikáciu nie je možné povoliť, lebo naruší stabilitu servera", "Error: could not disable broken app" : "Chyba: nebolo možné zakázať poškodenú aplikáciu", @@ -240,7 +240,6 @@ "Email" : "Email", "Your email address" : "Vaša emailová adresa", "No email address set" : "Emailová adresa nie je nastavená", - "For password recovery and notifications" : "Pre obnovu hesla a oznámenia", "Phone number" : "Telefónne číslo", "Your phone number" : "Vaše telefónne číslo", "Address" : "Adresa", @@ -326,6 +325,7 @@ "Enable experimental apps" : "Povoliť experimentálne aplikácie", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Dobrý deň,<br><br>toto je oznámenie o novo vytvorenom účte %s.<br><br>Vaše používateľské meno: %s<br>Prihlásiť sa môžete tu: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Ahoj,\n\ntoto je oznámenie o novo vytvorenom účte %s.\n\nVaše používateľské meno: %s\nPrihlásiť sa môžete tu: %s\n\n", + "For password recovery and notifications" : "Pre obnovu hesla a oznámenia", "Add Group" : "Pridať skupinu", "Group" : "Skupina", "Default Quota" : "Predvolená kvóta", diff --git a/settings/l10n/sl.js b/settings/l10n/sl.js index 35b1758f16b..2256e596b59 100644 --- a/settings/l10n/sl.js +++ b/settings/l10n/sl.js @@ -201,7 +201,6 @@ OC.L10N.register( "Email" : "Elektronski naslov", "Your email address" : "Osebni elektronski naslov", "No email address set" : "Poštni naslov ni nastavljen", - "For password recovery and notifications" : "Za obnovo gesla in obveščanje", "You are member of the following groups:" : "Ste član naslednjih skupin:", "Password" : "Geslo", "Current password" : "Trenutno geslo", @@ -264,6 +263,7 @@ OC.L10N.register( "Enable experimental apps" : "Omogoči preizkusne programe", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Pozdravljeni,<br><br>obveščamo vas, da je račun %s pripravljen.<br><br>Uporabniško ime: %s<br>Dostop: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Pozdravljeni,\n\nobveščamo vas, da je račun %s pripravljen.\n\nUporabniško ime: %s\nDostop: %s\n", + "For password recovery and notifications" : "Za obnovo gesla in obveščanje", "Group" : "Skupina" }, "nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"); diff --git a/settings/l10n/sl.json b/settings/l10n/sl.json index e4a83311a03..dde1dcf41aa 100644 --- a/settings/l10n/sl.json +++ b/settings/l10n/sl.json @@ -199,7 +199,6 @@ "Email" : "Elektronski naslov", "Your email address" : "Osebni elektronski naslov", "No email address set" : "Poštni naslov ni nastavljen", - "For password recovery and notifications" : "Za obnovo gesla in obveščanje", "You are member of the following groups:" : "Ste član naslednjih skupin:", "Password" : "Geslo", "Current password" : "Trenutno geslo", @@ -262,6 +261,7 @@ "Enable experimental apps" : "Omogoči preizkusne programe", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Pozdravljeni,<br><br>obveščamo vas, da je račun %s pripravljen.<br><br>Uporabniško ime: %s<br>Dostop: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Pozdravljeni,\n\nobveščamo vas, da je račun %s pripravljen.\n\nUporabniško ime: %s\nDostop: %s\n", + "For password recovery and notifications" : "Za obnovo gesla in obveščanje", "Group" : "Skupina" },"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);" }
\ No newline at end of file diff --git a/settings/l10n/sq.js b/settings/l10n/sq.js index 9d0227543a2..daa7b2f1f5a 100644 --- a/settings/l10n/sq.js +++ b/settings/l10n/sq.js @@ -55,10 +55,10 @@ OC.L10N.register( "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Aplikacionet zyrtare zhvillohen nga komuniteti dhe brenta tij. Ato ofrojnë funksionalitet qëndror dhe janë gati për përdorim.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Aplikacionet e miratuara ndërtohen nga zhvillues të besuar dhe kanë kaluar një kontroll të përciptë sigurie. Mirëmbahen aktivisht në një depo të hapur kodi dhe mirëmbajtësit e tyre i konsiderojnë të qëndrueshme për përdorime nga të rastit deri në ato normale.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Ky aplikacion s’është kontrolluar për probleme sigurie dhe është i ri ose i njohur si i paqëndrueshëm. Instalojeni duke e mbajtur vetë përgjegjësinë.", - "Enabling app …" : "Duke aktivizuar aplikacionin ...", "Error while disabling app" : "Gabim në çaktivizimin e aplikacionit", "Disable" : "Çaktivizoje", "Enable" : "Aktivizoje", + "Enabling app …" : "Duke aktivizuar aplikacionin ...", "Error while enabling app" : "Gabim në aktivizimin e aplikacionit", "Error: this app cannot be enabled because it makes the server unstable" : "Gabim: ky aplikacion s’u aktivizua dot, ngaqë e bën shërbyesin të paqëndrueshëm.", "Error: could not disable broken app" : "Gabim: s’u çaktivizua dot aplikacion i dëmtuar", @@ -273,7 +273,6 @@ OC.L10N.register( "Email" : "Email", "Your email address" : "Adresa juaj email", "No email address set" : "S’është caktuar adresë email", - "For password recovery and notifications" : "Për rimarrje fjalëkalimesh dhe njoftime ", "Phone number" : "Numri i telefonit", "Your phone number" : "Numri juaj i telefonit", "Address" : "Adresa", @@ -365,6 +364,7 @@ OC.L10N.register( "Enable experimental apps" : "Aktivizo aplikacione eksperimentale", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Njatjeta,<br><br>thjesht po ju bëjmë të ditur që tani keni një llogar %s.<br><br>Emri juaj i përdoruesit: %s<br>Hyni në të te: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Njatjeta,\n\nthjesht po ju bëjmë të ditur që tani keni një llogari %s.\n\nEmri juaj i përdoruesit: %s\nHyni në të te: %s\n\n", + "For password recovery and notifications" : "Për rimarrje fjalëkalimesh dhe njoftime ", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Nëse doni të mbështesni projektin\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">bashkohu skuadrës së zhvillimit</a>\n⇥⇥<or></or>\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">shpërndaj fjalën</a>!", "Add Group" : "Shtoni Grup", "Group" : "Grup", diff --git a/settings/l10n/sq.json b/settings/l10n/sq.json index 50db2b51edd..035a7bbc1ac 100644 --- a/settings/l10n/sq.json +++ b/settings/l10n/sq.json @@ -53,10 +53,10 @@ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Aplikacionet zyrtare zhvillohen nga komuniteti dhe brenta tij. Ato ofrojnë funksionalitet qëndror dhe janë gati për përdorim.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Aplikacionet e miratuara ndërtohen nga zhvillues të besuar dhe kanë kaluar një kontroll të përciptë sigurie. Mirëmbahen aktivisht në një depo të hapur kodi dhe mirëmbajtësit e tyre i konsiderojnë të qëndrueshme për përdorime nga të rastit deri në ato normale.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Ky aplikacion s’është kontrolluar për probleme sigurie dhe është i ri ose i njohur si i paqëndrueshëm. Instalojeni duke e mbajtur vetë përgjegjësinë.", - "Enabling app …" : "Duke aktivizuar aplikacionin ...", "Error while disabling app" : "Gabim në çaktivizimin e aplikacionit", "Disable" : "Çaktivizoje", "Enable" : "Aktivizoje", + "Enabling app …" : "Duke aktivizuar aplikacionin ...", "Error while enabling app" : "Gabim në aktivizimin e aplikacionit", "Error: this app cannot be enabled because it makes the server unstable" : "Gabim: ky aplikacion s’u aktivizua dot, ngaqë e bën shërbyesin të paqëndrueshëm.", "Error: could not disable broken app" : "Gabim: s’u çaktivizua dot aplikacion i dëmtuar", @@ -271,7 +271,6 @@ "Email" : "Email", "Your email address" : "Adresa juaj email", "No email address set" : "S’është caktuar adresë email", - "For password recovery and notifications" : "Për rimarrje fjalëkalimesh dhe njoftime ", "Phone number" : "Numri i telefonit", "Your phone number" : "Numri juaj i telefonit", "Address" : "Adresa", @@ -363,6 +362,7 @@ "Enable experimental apps" : "Aktivizo aplikacione eksperimentale", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Njatjeta,<br><br>thjesht po ju bëjmë të ditur që tani keni një llogar %s.<br><br>Emri juaj i përdoruesit: %s<br>Hyni në të te: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Njatjeta,\n\nthjesht po ju bëjmë të ditur që tani keni një llogari %s.\n\nEmri juaj i përdoruesit: %s\nHyni në të te: %s\n\n", + "For password recovery and notifications" : "Për rimarrje fjalëkalimesh dhe njoftime ", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Nëse doni të mbështesni projektin\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">bashkohu skuadrës së zhvillimit</a>\n⇥⇥<or></or>\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">shpërndaj fjalën</a>!", "Add Group" : "Shtoni Grup", "Group" : "Grup", diff --git a/settings/l10n/sv.js b/settings/l10n/sv.js index 887191f5e74..d0e9eed1672 100644 --- a/settings/l10n/sv.js +++ b/settings/l10n/sv.js @@ -55,10 +55,10 @@ OC.L10N.register( "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Officiella appar är utvecklade av Nextclouds community. De erbjuder central funktionalitet och är redo för att användas i produktion.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Godkända appar är utvecklade av betrodda utvecklare och har genomgått enklare säkerhetstester. De är aktivt utvecklade i ett öppet kodbibliotek och deras underhållare anser dom stabila nog för enklare till normalt användande.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Denna applikation är ej kontrollerad för säkerhetsbrister och är ny eller känd att orsaka instabilitetsproblem. Installera på egen risk.", - "Enabling app …" : "Aktiverar app ...", "Error while disabling app" : "Fel vid inaktivering av app", "Disable" : "Inaktivera", "Enable" : "Aktivera", + "Enabling app …" : "Aktiverar app ...", "Error while enabling app" : "Fel vid aktivering av app", "Error: this app cannot be enabled because it makes the server unstable" : "Fel uppstod: Denna applikation kan ej startas för det gör servern ostabil.", "Error: could not disable broken app" : "Fel: Gick inte att inaktivera trasig applikation.", @@ -273,7 +273,6 @@ OC.L10N.register( "Email" : "E-post", "Your email address" : "Din e-postadress", "No email address set" : "Ingen e-postadress angiven", - "For password recovery and notifications" : "För lösenordsåterställning och notifieringar", "Phone number" : "Telefonnummer", "Your phone number" : "Ditt telefonnummer", "Address" : "Adress", @@ -365,6 +364,7 @@ OC.L10N.register( "Enable experimental apps" : "Aktivera experimentiella applikationer", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hej där,<br><br>Tänkte bara informera dig om att du nu har ett %s konto.<br><br>Ditt användarnamn: %s<br>Accessa det här: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hej där,\n\nTänkte bara informera dig om att du nu har ett %s konto.\n\nDitt användarnamn: %s\nAccessa det här: %s\n", + "For password recovery and notifications" : "För lösenordsåterställning och notifieringar", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Om du vill stödja projektet\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">delta i uvecklingen</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">sprid det vidare</a>!", "Add Group" : "Lägg till Grupp", "Group" : "Grupp", diff --git a/settings/l10n/sv.json b/settings/l10n/sv.json index 1b7661f8879..fa5119479df 100644 --- a/settings/l10n/sv.json +++ b/settings/l10n/sv.json @@ -53,10 +53,10 @@ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Officiella appar är utvecklade av Nextclouds community. De erbjuder central funktionalitet och är redo för att användas i produktion.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Godkända appar är utvecklade av betrodda utvecklare och har genomgått enklare säkerhetstester. De är aktivt utvecklade i ett öppet kodbibliotek och deras underhållare anser dom stabila nog för enklare till normalt användande.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Denna applikation är ej kontrollerad för säkerhetsbrister och är ny eller känd att orsaka instabilitetsproblem. Installera på egen risk.", - "Enabling app …" : "Aktiverar app ...", "Error while disabling app" : "Fel vid inaktivering av app", "Disable" : "Inaktivera", "Enable" : "Aktivera", + "Enabling app …" : "Aktiverar app ...", "Error while enabling app" : "Fel vid aktivering av app", "Error: this app cannot be enabled because it makes the server unstable" : "Fel uppstod: Denna applikation kan ej startas för det gör servern ostabil.", "Error: could not disable broken app" : "Fel: Gick inte att inaktivera trasig applikation.", @@ -271,7 +271,6 @@ "Email" : "E-post", "Your email address" : "Din e-postadress", "No email address set" : "Ingen e-postadress angiven", - "For password recovery and notifications" : "För lösenordsåterställning och notifieringar", "Phone number" : "Telefonnummer", "Your phone number" : "Ditt telefonnummer", "Address" : "Adress", @@ -363,6 +362,7 @@ "Enable experimental apps" : "Aktivera experimentiella applikationer", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hej där,<br><br>Tänkte bara informera dig om att du nu har ett %s konto.<br><br>Ditt användarnamn: %s<br>Accessa det här: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hej där,\n\nTänkte bara informera dig om att du nu har ett %s konto.\n\nDitt användarnamn: %s\nAccessa det här: %s\n", + "For password recovery and notifications" : "För lösenordsåterställning och notifieringar", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Om du vill stödja projektet\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">delta i uvecklingen</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">sprid det vidare</a>!", "Add Group" : "Lägg till Grupp", "Group" : "Grupp", diff --git a/settings/l10n/th_TH.js b/settings/l10n/th_TH.js index f2a1d599c1d..80dfc1d91eb 100644 --- a/settings/l10n/th_TH.js +++ b/settings/l10n/th_TH.js @@ -205,7 +205,6 @@ OC.L10N.register( "Email" : "อีเมล", "Your email address" : "ที่อยู่อีเมล์ของคุณ", "No email address set" : "ไม่ได้ตั้งค่าที่อยู่อีเมล", - "For password recovery and notifications" : "สำหรับการกู้คืนรหัสผ่านและการแจ้งเตือน", "You are member of the following groups:" : "คุณเป็นสมาชิกของกลุ่มต่อไปนี้:", "Password" : "รหัสผ่าน", "Current password" : "รหัสผ่านปัจจุบัน", @@ -267,6 +266,7 @@ OC.L10N.register( "Enable experimental apps" : "เปิดใช้งานแอพพลิเคชั่นทดลอง", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "นี่คุณ<br><br>อยากจะแจ้งให้คุณทราบว่าขณะนี้คุณมีบัญชี %s<br><br>ชื่อผู้ใช้ของคุณคือ: %s<br>เข้าไปงานได้ที่: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "นี่คุณ\n\nอยากให้คุณทราบว่าขณะนี้คุณมี %s บัญชี\n\nชื่อผู้ใช้ของคุณ: %s\nดูได้ที่: %s\n", + "For password recovery and notifications" : "สำหรับการกู้คืนรหัสผ่านและการแจ้งเตือน", "Group" : "กลุ่ม" }, "nplurals=1; plural=0;"); diff --git a/settings/l10n/th_TH.json b/settings/l10n/th_TH.json index e3cc8835b53..51358f435fe 100644 --- a/settings/l10n/th_TH.json +++ b/settings/l10n/th_TH.json @@ -203,7 +203,6 @@ "Email" : "อีเมล", "Your email address" : "ที่อยู่อีเมล์ของคุณ", "No email address set" : "ไม่ได้ตั้งค่าที่อยู่อีเมล", - "For password recovery and notifications" : "สำหรับการกู้คืนรหัสผ่านและการแจ้งเตือน", "You are member of the following groups:" : "คุณเป็นสมาชิกของกลุ่มต่อไปนี้:", "Password" : "รหัสผ่าน", "Current password" : "รหัสผ่านปัจจุบัน", @@ -265,6 +264,7 @@ "Enable experimental apps" : "เปิดใช้งานแอพพลิเคชั่นทดลอง", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "นี่คุณ<br><br>อยากจะแจ้งให้คุณทราบว่าขณะนี้คุณมีบัญชี %s<br><br>ชื่อผู้ใช้ของคุณคือ: %s<br>เข้าไปงานได้ที่: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "นี่คุณ\n\nอยากให้คุณทราบว่าขณะนี้คุณมี %s บัญชี\n\nชื่อผู้ใช้ของคุณ: %s\nดูได้ที่: %s\n", + "For password recovery and notifications" : "สำหรับการกู้คืนรหัสผ่านและการแจ้งเตือน", "Group" : "กลุ่ม" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/settings/l10n/tr.js b/settings/l10n/tr.js index e5501e7c7ee..fdec5d738a3 100644 --- a/settings/l10n/tr.js +++ b/settings/l10n/tr.js @@ -54,10 +54,10 @@ OC.L10N.register( "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Resmi uygulamalar topluluk tarafından geliştirilmiştir. Merkezi işlevleri yerine getirdikleri gibi kullanıma da hazırdırlar.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Onaylanan uygulamalar güvenilir geliştiriciler tarafından geliştirilir ve detaylı olmayan bir güvenlik kontrolünden geçirilir. Bunlar açık kaynak kod deposunda bulunmakta ve normal kullanım için kararlı oldukları varsayılmaktadır.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Bu uygulama güvenlik kontrolünden geçmedi veya yeni ya da kararsız olarak bilinmektedir. Kendiniz bu riski alarak yükleyebilirsiniz.", - "Enabling app …" : "Uygulama etkinleştiriliyor", "Error while disabling app" : "Uygulama devre dışı bırakılırken hata", "Disable" : "Devre Dışı Bırak", "Enable" : "Etkinleştir", + "Enabling app …" : "Uygulama etkinleştiriliyor", "Error while enabling app" : "Uygulama etkinleştirilirken hata", "Error: this app cannot be enabled because it makes the server unstable" : "Hata: bu uygulama etkinleştirilemez çünkü sunucuyu kararsız yapıyor", "Error: could not disable broken app" : "Hata: bozuk uygulama devre dışı bırakılamadı", @@ -256,7 +256,6 @@ OC.L10N.register( "Email" : "E-posta", "Your email address" : "E-posta adresiniz", "No email address set" : "E-posta adresi ayarlanmamış", - "For password recovery and notifications" : "Parola kurtarma ve bildirimler için", "Phone number" : "Telefon numarası", "Your phone number" : "Telefon numaran", "Address" : "Adres", @@ -341,6 +340,7 @@ OC.L10N.register( "Enable experimental apps" : "Deneysel uygulamaları etkinleştir", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Merhaba,<br><br>Sadece artık bir %s hesabınızın olduğunu söylemek istedim.<br><br>Kullanıcı adınız: %s<br>Şuradan erişin: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Merhaba,\n\nSadece, artık bir %s hesabınızın olduğunu söylemek istedim.\n\nKullanıcı adınız: %s\nErişim: %s\n\n", + "For password recovery and notifications" : "Parola kurtarma ve bildirimler için", "Add Group" : "Grup Ekle", "Group" : "Grup", "Default Quota" : "Öntanımlı Kota", diff --git a/settings/l10n/tr.json b/settings/l10n/tr.json index d661c47966e..21862f8ae9c 100644 --- a/settings/l10n/tr.json +++ b/settings/l10n/tr.json @@ -52,10 +52,10 @@ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Resmi uygulamalar topluluk tarafından geliştirilmiştir. Merkezi işlevleri yerine getirdikleri gibi kullanıma da hazırdırlar.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Onaylanan uygulamalar güvenilir geliştiriciler tarafından geliştirilir ve detaylı olmayan bir güvenlik kontrolünden geçirilir. Bunlar açık kaynak kod deposunda bulunmakta ve normal kullanım için kararlı oldukları varsayılmaktadır.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Bu uygulama güvenlik kontrolünden geçmedi veya yeni ya da kararsız olarak bilinmektedir. Kendiniz bu riski alarak yükleyebilirsiniz.", - "Enabling app …" : "Uygulama etkinleştiriliyor", "Error while disabling app" : "Uygulama devre dışı bırakılırken hata", "Disable" : "Devre Dışı Bırak", "Enable" : "Etkinleştir", + "Enabling app …" : "Uygulama etkinleştiriliyor", "Error while enabling app" : "Uygulama etkinleştirilirken hata", "Error: this app cannot be enabled because it makes the server unstable" : "Hata: bu uygulama etkinleştirilemez çünkü sunucuyu kararsız yapıyor", "Error: could not disable broken app" : "Hata: bozuk uygulama devre dışı bırakılamadı", @@ -254,7 +254,6 @@ "Email" : "E-posta", "Your email address" : "E-posta adresiniz", "No email address set" : "E-posta adresi ayarlanmamış", - "For password recovery and notifications" : "Parola kurtarma ve bildirimler için", "Phone number" : "Telefon numarası", "Your phone number" : "Telefon numaran", "Address" : "Adres", @@ -339,6 +338,7 @@ "Enable experimental apps" : "Deneysel uygulamaları etkinleştir", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Merhaba,<br><br>Sadece artık bir %s hesabınızın olduğunu söylemek istedim.<br><br>Kullanıcı adınız: %s<br>Şuradan erişin: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Merhaba,\n\nSadece, artık bir %s hesabınızın olduğunu söylemek istedim.\n\nKullanıcı adınız: %s\nErişim: %s\n\n", + "For password recovery and notifications" : "Parola kurtarma ve bildirimler için", "Add Group" : "Grup Ekle", "Group" : "Grup", "Default Quota" : "Öntanımlı Kota", diff --git a/settings/l10n/zh_CN.js b/settings/l10n/zh_CN.js index 87955c3962a..219b56e00e0 100644 --- a/settings/l10n/zh_CN.js +++ b/settings/l10n/zh_CN.js @@ -27,6 +27,7 @@ OC.L10N.register( "Invalid mail address" : "无效的电子邮件地址", "No valid group selected" : "没有选择有效的分组", "A user with that name already exists." : "使用该名称的用户已存在.", + "To send a password link to the user an email address is required." : "发送密码链接给用户需要一个电子邮箱地址.", "Unable to create user." : "无法创建用户.", "Your %s account was created" : "你的帐户 %s 已创建", "Unable to delete user." : "无法删除用户", @@ -56,10 +57,10 @@ OC.L10N.register( "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "官方应用由社区和内部开发. 其可以提供核心功能并保证生产用途.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "认证应用由值得信赖的开发者开发, 并通过了一个粗略的安全检查. 其在开放的代码库中活跃地维护, 他们的维护者认为在普通用途足够稳定.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "此应用没有检查安全问题, 它是新的或已知不稳定的. 安装风险自担.", - "Enabling app …" : "正在启用应用程序...", "Error while disabling app" : "禁用应用时出错", "Disable" : "禁用", "Enable" : "启用", + "Enabling app …" : "正在启用应用程序...", "Error while enabling app" : "启用应用时出错", "Error: this app cannot be enabled because it makes the server unstable" : "错误: 无法启用应用因为它会导致服务器不稳定", "Error: could not disable broken app" : "错误: 无法禁用损坏的应用", @@ -276,7 +277,7 @@ OC.L10N.register( "Email" : "电子邮件", "Your email address" : "您的电子邮件", "No email address set" : "尚未设置 Email 地址", - "For password recovery and notifications" : "用于密码恢复和通知", + "For password reset and notifications" : "密码重置和通知", "Phone number" : "电话号码", "Your phone number" : "您的电话号码", "Address" : "地址", @@ -319,6 +320,7 @@ OC.L10N.register( "Show last log in" : "显示最后登录", "Show user backend" : "显示用户来源", "Send email to new user" : "发送电子邮件给新用户", + "When the password of the new user is left empty an activation email with a link to set the password is send to the user" : "当新用户密码为空时, 一个需要设置密码的激活邮件将会发送给用户.", "Show email address" : "显示邮件地址", "E-Mail" : "E-Mail", "Create" : "创建", @@ -368,6 +370,7 @@ OC.L10N.register( "Enable experimental apps" : "启用实验性应用程序", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "亲,<br><br>现在我们为你开通了 %s 私有云帐户。<br><br>你的用户名: %s<br>访问网址: <a href=\\\"%s\\\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "亲,\\n\\n 现在我们为你开通了 %s 私有去帐户。\\n\\n 你的用户名: %s\\n 访问网址: %s\\n 你的初始密码需要咨询系统管理员。或者你也可以在登录页面输入任意密码登录,\\n登录窗口将出现忘记密码链接,点击通过注册邮箱重设初始密码。\\n\\n", + "For password recovery and notifications" : "用于密码恢复和通知", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "如果您想支持这个项目\n\t<a href=\"https://nextcloud.com/contribute\" target=\"_blank\" rel=\"noreferrer\">一起开发</a>\n\t<or></or>\n\t<a href=\"https://nextcloud.com/contribute\" target=\"_blank\" rel=\"noreferrer\">帮助传播</a>!", "Add Group" : "添加分组", "Group" : "分组", diff --git a/settings/l10n/zh_CN.json b/settings/l10n/zh_CN.json index fe7b650cfd0..6856c9be2c5 100644 --- a/settings/l10n/zh_CN.json +++ b/settings/l10n/zh_CN.json @@ -25,6 +25,7 @@ "Invalid mail address" : "无效的电子邮件地址", "No valid group selected" : "没有选择有效的分组", "A user with that name already exists." : "使用该名称的用户已存在.", + "To send a password link to the user an email address is required." : "发送密码链接给用户需要一个电子邮箱地址.", "Unable to create user." : "无法创建用户.", "Your %s account was created" : "你的帐户 %s 已创建", "Unable to delete user." : "无法删除用户", @@ -54,10 +55,10 @@ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "官方应用由社区和内部开发. 其可以提供核心功能并保证生产用途.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "认证应用由值得信赖的开发者开发, 并通过了一个粗略的安全检查. 其在开放的代码库中活跃地维护, 他们的维护者认为在普通用途足够稳定.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "此应用没有检查安全问题, 它是新的或已知不稳定的. 安装风险自担.", - "Enabling app …" : "正在启用应用程序...", "Error while disabling app" : "禁用应用时出错", "Disable" : "禁用", "Enable" : "启用", + "Enabling app …" : "正在启用应用程序...", "Error while enabling app" : "启用应用时出错", "Error: this app cannot be enabled because it makes the server unstable" : "错误: 无法启用应用因为它会导致服务器不稳定", "Error: could not disable broken app" : "错误: 无法禁用损坏的应用", @@ -274,7 +275,7 @@ "Email" : "电子邮件", "Your email address" : "您的电子邮件", "No email address set" : "尚未设置 Email 地址", - "For password recovery and notifications" : "用于密码恢复和通知", + "For password reset and notifications" : "密码重置和通知", "Phone number" : "电话号码", "Your phone number" : "您的电话号码", "Address" : "地址", @@ -317,6 +318,7 @@ "Show last log in" : "显示最后登录", "Show user backend" : "显示用户来源", "Send email to new user" : "发送电子邮件给新用户", + "When the password of the new user is left empty an activation email with a link to set the password is send to the user" : "当新用户密码为空时, 一个需要设置密码的激活邮件将会发送给用户.", "Show email address" : "显示邮件地址", "E-Mail" : "E-Mail", "Create" : "创建", @@ -366,6 +368,7 @@ "Enable experimental apps" : "启用实验性应用程序", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "亲,<br><br>现在我们为你开通了 %s 私有云帐户。<br><br>你的用户名: %s<br>访问网址: <a href=\\\"%s\\\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "亲,\\n\\n 现在我们为你开通了 %s 私有去帐户。\\n\\n 你的用户名: %s\\n 访问网址: %s\\n 你的初始密码需要咨询系统管理员。或者你也可以在登录页面输入任意密码登录,\\n登录窗口将出现忘记密码链接,点击通过注册邮箱重设初始密码。\\n\\n", + "For password recovery and notifications" : "用于密码恢复和通知", "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "如果您想支持这个项目\n\t<a href=\"https://nextcloud.com/contribute\" target=\"_blank\" rel=\"noreferrer\">一起开发</a>\n\t<or></or>\n\t<a href=\"https://nextcloud.com/contribute\" target=\"_blank\" rel=\"noreferrer\">帮助传播</a>!", "Add Group" : "添加分组", "Group" : "分组", diff --git a/settings/l10n/zh_TW.js b/settings/l10n/zh_TW.js index 89c1fb6e0bf..722ba682b83 100644 --- a/settings/l10n/zh_TW.js +++ b/settings/l10n/zh_TW.js @@ -215,7 +215,6 @@ OC.L10N.register( "Email" : "信箱", "Your email address" : "您的電子郵件信箱", "No email address set" : "未設定電子郵件信箱", - "For password recovery and notifications" : "用於密碼重設和通知", "You are member of the following groups:" : "您的帳號屬於這些群組:", "Password" : "密碼", "Current password" : "目前密碼", @@ -276,6 +275,7 @@ OC.L10N.register( "Enable experimental apps" : "啟用實驗性質的應用程式", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "嗨,<br><br>通知您一聲,您現在有了 %s 的帳號。<br><br>您的帳號: %s<br>開通帳號: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "嗨,\n\n通知您一聲,您現在有了 %s 的帳號。\n\n您的帳號:%s\n開通帳號:%s\n\n", + "For password recovery and notifications" : "用於密碼重設和通知", "Group" : "群組" }, "nplurals=1; plural=0;"); diff --git a/settings/l10n/zh_TW.json b/settings/l10n/zh_TW.json index 569d3e1c01a..e8b1bbbebd8 100644 --- a/settings/l10n/zh_TW.json +++ b/settings/l10n/zh_TW.json @@ -213,7 +213,6 @@ "Email" : "信箱", "Your email address" : "您的電子郵件信箱", "No email address set" : "未設定電子郵件信箱", - "For password recovery and notifications" : "用於密碼重設和通知", "You are member of the following groups:" : "您的帳號屬於這些群組:", "Password" : "密碼", "Current password" : "目前密碼", @@ -274,6 +273,7 @@ "Enable experimental apps" : "啟用實驗性質的應用程式", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "嗨,<br><br>通知您一聲,您現在有了 %s 的帳號。<br><br>您的帳號: %s<br>開通帳號: <a href=\"%s\">%s</a><br><br>", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "嗨,\n\n通知您一聲,您現在有了 %s 的帳號。\n\n您的帳號:%s\n開通帳號:%s\n\n", + "For password recovery and notifications" : "用於密碼重設和通知", "Group" : "群組" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/settings/templates/personal.php b/settings/templates/personal.php index ecbf1ff5c5f..31aa268f776 100644 --- a/settings/templates/personal.php +++ b/settings/templates/personal.php @@ -99,7 +99,7 @@ <?php } ?> <?php if($_['displayNameChangeSupported']) { ?> <br /> - <em><?php p($l->t('For password recovery and notifications')); ?></em> + <em><?php p($l->t('For password reset and notifications')); ?></em> <?php } ?> <span class="icon-checkmark hidden"/> <input type="hidden" id="emailscope" value="<?php p($_['emailScope']) ?>"> diff --git a/settings/templates/users/main.php b/settings/templates/users/main.php index b363a4c4da8..59ddf6a1dd7 100644 --- a/settings/templates/users/main.php +++ b/settings/templates/users/main.php @@ -72,6 +72,9 @@ translation('settings'); <?php p($l->t('Send email to new user')) ?> </label> </p> + <p class="info-text"> + <?php p($l->t('When the password of the new user is left empty an activation email with a link to set the password is send to the user')) ?> + </p> <p> <input type="checkbox" name="EmailAddress" value="EmailAddress" id="CheckboxEmailAddress" class="checkbox" <?php if ($_['show_email'] === 'true') print_unescaped('checked="checked"'); ?> /> diff --git a/tests/Core/Command/Encryption/DecryptAllTest.php b/tests/Core/Command/Encryption/DecryptAllTest.php index 8f674aa5b44..1b01231ac57 100644 --- a/tests/Core/Command/Encryption/DecryptAllTest.php +++ b/tests/Core/Command/Encryption/DecryptAllTest.php @@ -77,7 +77,7 @@ class DecryptAllTest extends TestCase { $this->config->expects($this->any()) ->method('getSystemValue') - ->with('singleuser', false) + ->with('maintenance', false) ->willReturn(false); $this->appManager->expects($this->any()) ->method('isEnabledForUser') @@ -85,12 +85,12 @@ class DecryptAllTest extends TestCase { } - public function testSingleUserAndTrashbin() { + public function testMaintenanceAndTrashbin() { // on construct we enable single-user-mode and disable the trash bin $this->config->expects($this->at(1)) ->method('setSystemValue') - ->with('singleuser', true); + ->with('maintenance', true); $this->appManager->expects($this->once()) ->method('disableApp') ->with('files_trashbin'); @@ -98,7 +98,7 @@ class DecryptAllTest extends TestCase { // on destruct wi disable single-user-mode again and enable the trash bin $this->config->expects($this->at(2)) ->method('setSystemValue') - ->with('singleuser', false); + ->with('maintenance', false); $this->appManager->expects($this->once()) ->method('enableApp') ->with('files_trashbin'); @@ -110,16 +110,16 @@ class DecryptAllTest extends TestCase { $this->decryptAll, $this->questionHelper ); - $this->invokePrivate($instance, 'forceSingleUserAndTrashbin'); + $this->invokePrivate($instance, 'forceMaintenanceAndTrashbin'); $this->assertTrue( $this->invokePrivate($instance, 'wasTrashbinEnabled') ); $this->assertFalse( - $this->invokePrivate($instance, 'wasSingleUserModeEnabled') + $this->invokePrivate($instance, 'wasMaintenanceModeEnabled') ); - $this->invokePrivate($instance, 'resetSingleUserAndTrashbin'); + $this->invokePrivate($instance, 'resetMaintenanceAndTrashbin'); } /** diff --git a/tests/Core/Command/Encryption/EncryptAllTest.php b/tests/Core/Command/Encryption/EncryptAllTest.php index 00895541782..554560a35b7 100644 --- a/tests/Core/Command/Encryption/EncryptAllTest.php +++ b/tests/Core/Command/Encryption/EncryptAllTest.php @@ -88,13 +88,13 @@ class EncryptAllTest extends TestCase { $this->appManager->expects($this->once())->method('disableApp')->with('files_trashbin'); // enable single user mode to avoid that other user login during encryption // destructor should disable the single user mode again - $this->config->expects($this->once())->method('getSystemValue')->with('singleuser', false)->willReturn(false); - $this->config->expects($this->at(1))->method('setSystemValue')->with('singleuser', true); - $this->config->expects($this->at(2))->method('setSystemValue')->with('singleuser', false); + $this->config->expects($this->once())->method('getSystemValue')->with('maintenance', false)->willReturn(false); + $this->config->expects($this->at(1))->method('setSystemValue')->with('maintenance', true); + $this->config->expects($this->at(2))->method('setSystemValue')->with('maintenance', false); $instance = new EncryptAll($this->encryptionManager, $this->appManager, $this->config, $this->questionHelper); - $this->invokePrivate($instance, 'forceSingleUserAndTrashbin'); - $this->invokePrivate($instance, 'resetSingleUserAndTrashbin'); + $this->invokePrivate($instance, 'forceMaintenanceAndTrashbin'); + $this->invokePrivate($instance, 'resetMaintenanceAndTrashbin'); } /** diff --git a/tests/Core/Command/Maintenance/SingleUserTest.php b/tests/Core/Command/Maintenance/SingleUserTest.php deleted file mode 100644 index 13efebacb0a..00000000000 --- a/tests/Core/Command/Maintenance/SingleUserTest.php +++ /dev/null @@ -1,132 +0,0 @@ -<?php -/** - * @author Morris Jobke <hey@morrisjobke.de> - * - * @copyright Copyright (c) 2015, ownCloud, Inc. - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace Tests\Core\Command\Maintenance; - - -use OC\Core\Command\Maintenance\SingleUser; -use OCP\IConfig; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Output\OutputInterface; -use Test\TestCase; - -class SingleUserTest extends TestCase { - /** @var \PHPUnit_Framework_MockObject_MockObject */ - protected $config; - /** @var \PHPUnit_Framework_MockObject_MockObject */ - protected $consoleInput; - /** @var \PHPUnit_Framework_MockObject_MockObject */ - protected $consoleOutput; - - /** @var \Symfony\Component\Console\Command\Command */ - protected $command; - - protected function setUp() { - parent::setUp(); - - $config = $this->config = $this->getMockBuilder(IConfig::class) - ->disableOriginalConstructor() - ->getMock(); - $this->consoleInput = $this->getMockBuilder(InputInterface::class)->getMock(); - $this->consoleOutput = $this->getMockBuilder(OutputInterface::class)->getMock(); - - /** @var \OCP\IConfig $config */ - $this->command = new SingleUser($config); - } - - public function testChangeStateToOn() { - - $this->consoleInput->expects($this->once()) - ->method('getOption') - ->with('on') - ->willReturn(true); - - $this->config->expects($this->once()) - ->method('setSystemValue') - ->with('singleuser', true); - - $this->consoleOutput->expects($this->once()) - ->method('writeln') - ->with('Single user mode enabled'); - - self::invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]); - } - - public function testChangeStateToOff() { - - $this->consoleInput->expects($this->at(0)) - ->method('getOption') - ->with('on') - ->willReturn(false); - - $this->consoleInput->expects($this->at(1)) - ->method('getOption') - ->with('off') - ->willReturn(true); - - $this->config->expects($this->once()) - ->method('setSystemValue') - ->with('singleuser', false); - - $this->consoleOutput->expects($this->once()) - ->method('writeln') - ->with('Single user mode disabled'); - - self::invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]); - } - - public function stateData() { - return [ - [ true, 'Single user mode is currently enabled' ], - [ false, 'Single user mode is currently disabled' ], - ]; - } - - /** - * @dataProvider stateData - * - * @param $state - * @param $expectedOutput - */ - public function testState($state, $expectedOutput) { - - $this->consoleInput->expects($this->at(0)) - ->method('getOption') - ->with('on') - ->willReturn(false); - - $this->consoleInput->expects($this->at(1)) - ->method('getOption') - ->with('off') - ->willReturn(false); - - $this->config->expects($this->once()) - ->method('getSystemValue') - ->with('singleuser', false) - ->willReturn($state); - - $this->consoleOutput->expects($this->once()) - ->method('writeln') - ->with($expectedOutput); - - self::invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]); - } -} diff --git a/tests/Settings/Controller/UsersControllerTest.php b/tests/Settings/Controller/UsersControllerTest.php index 4f10fed1a2f..3cdde1b2d27 100644 --- a/tests/Settings/Controller/UsersControllerTest.php +++ b/tests/Settings/Controller/UsersControllerTest.php @@ -16,6 +16,7 @@ use OC\Settings\Controller\UsersController; use OCP\App\IAppManager; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; +use OCP\AppFramework\Utility\ITimeFactory; use OCP\IAvatar; use OCP\IAvatarManager; use OCP\IConfig; @@ -29,6 +30,8 @@ use OCP\IUser; use OCP\IUserManager; use OCP\IUserSession; use OCP\Mail\IMailer; +use OCP\Security\ICrypto; +use OCP\Security\ISecureRandom; /** * @group DB @@ -59,8 +62,14 @@ class UsersControllerTest extends \Test\TestCase { private $avatarManager; /** @var IL10N|\PHPUnit_Framework_MockObject_MockObject */ private $l; - /** @var AccountManager | \PHPUnit_Framework_MockObject_MockObject */ + /** @var AccountManager | \PHPUnit_Framework_MockObject_MockObject */ private $accountManager; + /** @var ISecureRandom | \PHPUnit_Framework_MockObject_MockObject */ + private $secureRandom; + /** @var ITimeFactory | \PHPUnit_Framework_MockObject_MockObject */ + private $timeFactory; + /** @var ICrypto | \PHPUnit_Framework_MockObject_MockObject */ + private $crypto; protected function setUp() { parent::setUp(); @@ -76,6 +85,9 @@ class UsersControllerTest extends \Test\TestCase { $this->appManager = $this->createMock(IAppManager::class); $this->avatarManager = $this->createMock(IAvatarManager::class); $this->accountManager = $this->createMock(AccountManager::class); + $this->secureRandom = $this->createMock(ISecureRandom::class); + $this->timeFactory = $this->createMock(ITimeFactory::class); + $this->crypto = $this->createMock(ICrypto::class); $this->l = $this->createMock(IL10N::class); $this->l->method('t') ->will($this->returnCallback(function ($text, $parameters = []) { @@ -120,7 +132,10 @@ class UsersControllerTest extends \Test\TestCase { $this->urlGenerator, $this->appManager, $this->avatarManager, - $this->accountManager + $this->accountManager, + $this->secureRandom, + $this->timeFactory, + $this->crypto ); } else { return $this->getMockBuilder(UsersController::class) @@ -141,7 +156,10 @@ class UsersControllerTest extends \Test\TestCase { $this->urlGenerator, $this->appManager, $this->avatarManager, - $this->accountManager + $this->accountManager, + $this->secureRandom, + $this->timeFactory, + $this->crypto ] )->setMethods($mockedMethods)->getMock(); } @@ -2227,4 +2245,148 @@ class UsersControllerTest extends \Test\TestCase { $response = $controller->setEMailAddress($user->getUID(), $mailAddress); $this->assertSame($responseCode, $response->getStatus()); } + + public function testCreateUnsuccessfulWithoutPasswordAndEmail() { + $controller = $this->getController(true); + + $expectedResponse = new DataResponse( + array( + 'message' => 'To send a password link to the user an email address is required.' + ), + Http::STATUS_UNPROCESSABLE_ENTITY + ); + $response = $controller->create('foo', '', array(), ''); + $this->assertEquals($expectedResponse, $response); + } + + + + public function testCreateSuccessfulWithoutPasswordAndWithEmail() { + $controller = $this->getController(true); + + $user = $this->getMockBuilder('\OC\User\User') + ->disableOriginalConstructor()->getMock(); + $user + ->method('getHome') + ->will($this->returnValue('/home/user')); + $user + ->method('getUID') + ->will($this->returnValue('foo')); + $user + ->expects($this->once()) + ->method('getBackendClassName') + ->will($this->returnValue('bar')); + + $this->userManager + ->expects($this->once()) + ->method('createUser') + ->will($this->onConsecutiveCalls($user)); + + $subadmin = $this->getMockBuilder('\OC\SubAdmin') + ->disableOriginalConstructor() + ->getMock(); + $subadmin + ->expects($this->any()) + ->method('getSubAdminsGroups') + ->with($user) + ->will($this->returnValue([])); + $this->groupManager + ->expects($this->any()) + ->method('getSubAdmin') + ->will($this->returnValue($subadmin)); + + $this->secureRandom + ->expects($this->at(0)) + ->method('generate') + ->with(32) + ->will($this->returnValue('abc123')); + $this->secureRandom + ->expects($this->at(1)) + ->method('generate') + ->with(21, + ISecureRandom::CHAR_DIGITS . + ISecureRandom::CHAR_LOWER . + ISecureRandom::CHAR_UPPER) + ->will($this->returnValue('mytoken')); + $this->urlGenerator + ->expects($this->once()) + ->method('linkToRouteAbsolute') + ->with('core.lost.resetform', ['userId' => 'foo', 'token' => 'mytoken']) + ->will($this->returnValue('link-with-my-token')); + + $controller = $this->getController(true); + $message = $this->getMockBuilder('\OC\Mail\Message') + ->disableOriginalConstructor()->getMock(); + $message + ->expects($this->at(0)) + ->method('setTo') + ->with(['abc@example.org' => 'foo']); + $message + ->expects($this->at(1)) + ->method('setSubject') + ->with('Your account was created'); + $htmlBody = new Http\TemplateResponse( + 'settings', + 'email.new_user', + [ + 'username' => 'foo', + 'url' => 'link-with-my-token', + ], + 'blank' + ); + $message + ->expects($this->at(2)) + ->method('setHtmlBody') + ->with($htmlBody->render()); + $plainBody = new Http\TemplateResponse( + 'settings', + 'email.new_user_plain_text', + [ + 'username' => 'foo', + 'url' => 'link-with-my-token', + ], + 'blank' + ); + $message + ->expects($this->at(3)) + ->method('setPlainBody') + ->with($plainBody->render()); + $message + ->expects($this->at(4)) + ->method('setFrom') + ->with(['no-reply@owncloud.com' => null]); + + $this->mailer + ->expects($this->at(0)) + ->method('validateMailAddress') + ->with('abc@example.org') + ->will($this->returnValue(true)); + $this->mailer + ->expects($this->at(1)) + ->method('createMessage') + ->will($this->returnValue($message)); + $this->mailer + ->expects($this->at(2)) + ->method('send') + ->with($message); + + $expectedResponse = new DataResponse( + array( + 'name' => 'foo', + 'groups' => null, + 'storageLocation' => '/home/user', + 'backend' => 'bar', + 'lastLogin' => null, + 'displayname' => null, + 'quota' => null, + 'subadmin' => array(), + 'email' => null, + 'isRestoreDisabled' => false, + 'isAvatarAvailable' => true, + ), + Http::STATUS_CREATED + ); + $response = $controller->create('foo', '', array(), 'abc@example.org'); + $this->assertEquals($expectedResponse, $response); + } } diff --git a/tests/lib/App/AppStore/Fetcher/AppFetcherTest.php b/tests/lib/App/AppStore/Fetcher/AppFetcherTest.php index 9d09898bb95..4a5222fa915 100644 --- a/tests/lib/App/AppStore/Fetcher/AppFetcherTest.php +++ b/tests/lib/App/AppStore/Fetcher/AppFetcherTest.php @@ -59,11 +59,10 @@ EOD; $this->config = $this->createMock(IConfig::class); $this->config - ->expects($this->atLeastOnce()) + ->expects($this->at(0)) ->method('getSystemValue') ->with('version') ->willReturn('11.0.0.2'); - $this->fetcher = new AppFetcher( $this->appData, $this->clientService, @@ -73,6 +72,27 @@ EOD; } public function testGetWithFilter() { + $this->config + ->expects($this->at(0)) + ->method('getSystemValue') + ->with('appstoreenabled', true) + ->willReturn(true); + $this->config + ->expects($this->at(1)) + ->method('getSystemValue') + ->with('appstoreenabled', true) + ->willReturn(true); + $this->config + ->expects($this->at(2)) + ->method('getSystemValue') + ->with('version') + ->willReturn('11.0.0.2'); + $this->config + ->expects($this->at(3)) + ->method('getSystemValue') + ->with('version') + ->willReturn('11.0.0.2'); + $file = $this->createMock(ISimpleFile::class); $folder = $this->createMock(ISimpleFolder::class); $folder @@ -1920,4 +1940,17 @@ EJL3BaQAQaASSsvFrcozYxrQG4VzEg== $this->assertEquals($expected['data'], $this->fetcher->get()); } + + public function testAppstoreDisabled() { + $this->config + ->expects($this->once()) + ->method('getSystemValue') + ->with('appstoreenabled', true) + ->willReturn(false); + $this->appData + ->expects($this->never()) + ->method('getFolder'); + + $this->assertEquals([], $this->fetcher->get()); + } } diff --git a/tests/lib/App/AppStore/Fetcher/CategoryFetcherTest.php b/tests/lib/App/AppStore/Fetcher/CategoryFetcherTest.php index 9955715bca4..27f33bed997 100644 --- a/tests/lib/App/AppStore/Fetcher/CategoryFetcherTest.php +++ b/tests/lib/App/AppStore/Fetcher/CategoryFetcherTest.php @@ -36,4 +36,18 @@ class CategoryFetcherTest extends FetcherBase { $this->config ); } + + public function testAppstoreDisabled() { + $this->config + ->expects($this->once()) + ->method('getSystemValue') + ->with('appstoreenabled', true) + ->willReturn(false); + $this->appData + ->expects($this->never()) + ->method('getFolder'); + + $this->assertEquals([], $this->fetcher->get()); + + } } diff --git a/tests/lib/App/AppStore/Fetcher/FetcherBase.php b/tests/lib/App/AppStore/Fetcher/FetcherBase.php index 73fcbbaab6f..1cec5270000 100644 --- a/tests/lib/App/AppStore/Fetcher/FetcherBase.php +++ b/tests/lib/App/AppStore/Fetcher/FetcherBase.php @@ -55,16 +55,22 @@ abstract class FetcherBase extends TestCase { $this->clientService = $this->createMock(IClientService::class); $this->timeFactory = $this->createMock(ITimeFactory::class); $this->config = $this->createMock(IConfig::class); + } + public function testGetWithAlreadyExistingFileAndUpToDateTimestampAndVersion() { $this->config + ->expects($this->at(0)) + ->method('getSystemValue') + ->with('appstoreenabled', true) + ->willReturn(true); + $this->config + ->expects($this->at(1)) ->method('getSystemValue') ->with( $this->equalTo('version'), $this->anything() )->willReturn('11.0.0.2'); - } - public function testGetWithAlreadyExistingFileAndUpToDateTimestampAndVersion() { $folder = $this->createMock(ISimpleFolder::class); $file = $this->createMock(ISimpleFile::class); $this->appData @@ -95,6 +101,24 @@ abstract class FetcherBase extends TestCase { } public function testGetWithNotExistingFileAndUpToDateTimestampAndVersion() { + $this->config + ->expects($this->at(0)) + ->method('getSystemValue') + ->with('appstoreenabled', true) + ->willReturn(true); + $this->config + ->expects($this->at(1)) + ->method('getSystemValue') + ->with('appstoreenabled', true) + ->willReturn(true); + $this->config + ->expects($this->at(2)) + ->method('getSystemValue') + ->with( + $this->equalTo('version'), + $this->anything() + )->willReturn('11.0.0.2'); + $folder = $this->createMock(ISimpleFolder::class); $file = $this->createMock(ISimpleFile::class); $this->appData @@ -157,6 +181,24 @@ abstract class FetcherBase extends TestCase { } public function testGetWithAlreadyExistingFileAndOutdatedTimestamp() { + $this->config + ->expects($this->at(0)) + ->method('getSystemValue') + ->with('appstoreenabled', true) + ->willReturn(true); + $this->config + ->expects($this->at(1)) + ->method('getSystemValue') + ->with('appstoreenabled', true) + ->willReturn(true); + $this->config + ->expects($this->at(2)) + ->method('getSystemValue') + ->with( + $this->equalTo('version'), + $this->anything() + )->willReturn('11.0.0.2'); + $folder = $this->createMock(ISimpleFolder::class); $file = $this->createMock(ISimpleFile::class); $this->appData @@ -222,6 +264,24 @@ abstract class FetcherBase extends TestCase { } public function testGetWithAlreadyExistingFileAndNoVersion() { + $this->config + ->expects($this->at(0)) + ->method('getSystemValue') + ->with('appstoreenabled', true) + ->willReturn(true); + $this->config + ->expects($this->at(1)) + ->method('getSystemValue') + ->with('appstoreenabled', true) + ->willReturn(true); + $this->config + ->expects($this->at(2)) + ->method('getSystemValue') + ->with( + $this->equalTo('version'), + $this->anything() + )->willReturn('11.0.0.2'); + $folder = $this->createMock(ISimpleFolder::class); $file = $this->createMock(ISimpleFile::class); $this->appData @@ -283,6 +343,24 @@ abstract class FetcherBase extends TestCase { } public function testGetWithAlreadyExistingFileAndOutdatedVersion() { + $this->config + ->expects($this->at(0)) + ->method('getSystemValue') + ->with('appstoreenabled', true) + ->willReturn(true); + $this->config + ->expects($this->at(1)) + ->method('getSystemValue') + ->with('appstoreenabled', true) + ->willReturn(true); + $this->config + ->expects($this->at(2)) + ->method('getSystemValue') + ->with( + $this->equalTo('version'), + $this->anything() + )->willReturn('11.0.0.2'); + $folder = $this->createMock(ISimpleFolder::class); $file = $this->createMock(ISimpleFile::class); $this->appData @@ -343,6 +421,17 @@ abstract class FetcherBase extends TestCase { } public function testGetWithExceptionInClient() { + $this->config + ->expects($this->at(0)) + ->method('getSystemValue') + ->with('appstoreenabled', true) + ->willReturn(true); + $this->config + ->expects($this->at(1)) + ->method('getSystemValue') + ->with('appstoreenabled', true) + ->willReturn(true); + $folder = $this->createMock(ISimpleFolder::class); $file = $this->createMock(ISimpleFile::class); $this->appData @@ -378,6 +467,24 @@ abstract class FetcherBase extends TestCase { } public function testGetMatchingETag() { + $this->config + ->expects($this->at(0)) + ->method('getSystemValue') + ->with('appstoreenabled', true) + ->willReturn(true); + $this->config + ->expects($this->at(1)) + ->method('getSystemValue') + ->with('appstoreenabled', true) + ->willReturn(true); + $this->config + ->expects($this->at(2)) + ->method('getSystemValue') + ->with( + $this->equalTo('version'), + $this->anything() + )->willReturn('11.0.0.2'); + $folder = $this->createMock(ISimpleFolder::class); $file = $this->createMock(ISimpleFile::class); $this->appData @@ -447,6 +554,24 @@ abstract class FetcherBase extends TestCase { } public function testGetNoMatchingETag() { + $this->config + ->expects($this->at(0)) + ->method('getSystemValue') + ->with('appstoreenabled', true) + ->willReturn(true); + $this->config + ->expects($this->at(1)) + ->method('getSystemValue') + ->with('appstoreenabled', true) + ->willReturn(true); + $this->config + ->expects($this->at(2)) + ->method('getSystemValue') + ->with( + $this->equalTo('version'), + $this->anything() + )->willReturn('11.0.0.2'); + $folder = $this->createMock(ISimpleFolder::class); $file = $this->createMock(ISimpleFile::class); $this->appData diff --git a/tests/lib/ImageTest.php b/tests/lib/ImageTest.php index 9176b8cf6c9..b7255ccdbd6 100644 --- a/tests/lib/ImageTest.php +++ b/tests/lib/ImageTest.php @@ -9,6 +9,7 @@ namespace Test; use OC; +use OCP\IConfig; class ImageTest extends \Test\TestCase { public static function tearDownAfterClass() { @@ -133,7 +134,12 @@ class ImageTest extends \Test\TestCase { $expected = ob_get_clean(); $this->assertEquals($expected, $img->data()); - $img = new \OC_Image(OC::$SERVERROOT.'/tests/data/testimage.jpg'); + $config = $this->createMock(IConfig::class); + $config->expects($this->once()) + ->method('getAppValue') + ->with('preview', 'jpeg_quality', 90) + ->willReturn(null); + $img = new \OC_Image(OC::$SERVERROOT.'/tests/data/testimage.jpg', null, $config); $raw = imagecreatefromstring(file_get_contents(OC::$SERVERROOT.'/tests/data/testimage.jpg')); ob_start(); imagejpeg($raw); diff --git a/tests/lib/Repair/DropOldJobsTest.php b/tests/lib/Repair/DropOldJobsTest.php deleted file mode 100644 index d83ecbe59c4..00000000000 --- a/tests/lib/Repair/DropOldJobsTest.php +++ /dev/null @@ -1,48 +0,0 @@ -<?php -/** - * Copyright (c) 2015 Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. - */ - -namespace Test\Repair; - -use OCP\BackgroundJob\IJobList; -use OCP\Migration\IOutput; - -/** - * Tests for the dropping old tables - * - * @group DB - * - * @see \OC\Repair\DropOldTables - */ -class DropOldJobsTest extends \Test\TestCase { - /** @var IJobList */ - protected $jobList; - - protected function setUp() { - parent::setUp(); - - $this->jobList = \OC::$server->getJobList(); - $this->jobList->add('OC\Cache\FileGlobalGC'); - $this->jobList->add('OC_Cache_FileGlobalGC'); - } - - public function testRun() { - $this->assertTrue($this->jobList->has('OC\Cache\FileGlobalGC', null), 'Asserting that the job OC\Cache\FileGlobalGC exists before repairing'); - $this->assertTrue($this->jobList->has('OC_Cache_FileGlobalGC', null), 'Asserting that the job OC_Cache_FileGlobalGC exists before repairing'); - - /** @var IOutput | \PHPUnit_Framework_MockObject_MockObject $outputMock */ - $outputMock = $this->getMockBuilder('\OCP\Migration\IOutput') - ->disableOriginalConstructor() - ->getMock(); - - $repair = new \OC\Repair\DropOldJobs($this->jobList); - $repair->run($outputMock); - - $this->assertFalse($this->jobList->has('OC\Cache\FileGlobalGC', null), 'Asserting that the job OC\Cache\FileGlobalGC does not exist after repairing'); - $this->assertFalse($this->jobList->has('OC_Cache_FileGlobalGC', null), 'Asserting that the job OC_Cache_FileGlobalGC does not exist after repairing'); - } -} diff --git a/tests/lib/Repair/DropOldTablesTest.php b/tests/lib/Repair/DropOldTablesTest.php deleted file mode 100644 index 1f5a4c15295..00000000000 --- a/tests/lib/Repair/DropOldTablesTest.php +++ /dev/null @@ -1,46 +0,0 @@ -<?php -/** - * Copyright (c) 2015 Joas Schilling <nickvergessen@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. - */ - -namespace Test\Repair; -use OCP\Migration\IOutput; - -/** - * Tests for the dropping old tables - * - * @group DB - * - * @see \OC\Repair\DropOldTables - */ -class DropOldTablesTest extends \Test\TestCase { - /** @var \OCP\IDBConnection */ - protected $connection; - - protected function setUp() { - parent::setUp(); - - $this->connection = \OC::$server->getDatabaseConnection(); - $manager = new \OC\DB\MDB2SchemaManager($this->connection); - $manager->createDbFromStructure(__DIR__ . '/fixtures/dropoldtables.xml'); - } - - public function testRun() { - $this->assertFalse($this->connection->tableExists('sharing'), 'Asserting that the table oc_sharing does not exist before repairing'); - $this->assertTrue($this->connection->tableExists('permissions'), 'Asserting that the table oc_permissions does exist before repairing'); - - /** @var IOutput | \PHPUnit_Framework_MockObject_MockObject $outputMock */ - $outputMock = $this->getMockBuilder('\OCP\Migration\IOutput') - ->disableOriginalConstructor() - ->getMock(); - - $repair = new \OC\Repair\DropOldTables($this->connection); - $repair->run($outputMock); - - $this->assertFalse($this->connection->tableExists('sharing'), 'Asserting that the table oc_sharing does not exist after repairing'); - $this->assertFalse($this->connection->tableExists('permissions'), 'Asserting that the table oc_permissions does not exist after repairing'); - } -} diff --git a/tests/lib/Repair/RemoveGetETagEntriesTest.php b/tests/lib/Repair/RemoveGetETagEntriesTest.php deleted file mode 100644 index c00923228d0..00000000000 --- a/tests/lib/Repair/RemoveGetETagEntriesTest.php +++ /dev/null @@ -1,90 +0,0 @@ -<?php -/** - * @author Morris Jobke <hey@morrisjobke.de> - * - * @copyright Copyright (c) 2015, ownCloud, Inc. - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace Test\Repair; - -use OC\Repair\RemoveGetETagEntries; -use OCP\Migration\IOutput; -use Test\TestCase; - -/** - * Class RemoveGetETagEntriesTest - * - * @group DB - * - * @package Test\Repair - */ -class RemoveGetETagEntriesTest extends TestCase { - /** @var \OCP\IDBConnection */ - protected $connection; - - protected function setUp() { - parent::setUp(); - - $this->connection = \OC::$server->getDatabaseConnection(); - } - - public function testRun() { - - $userName = 'removePropertiesUser'; - $data = [ - [$userName, '/abc.def.txt', '{DAV:}getetag', 'abcdef'], - [$userName, '/abc.def.txt', '{DAV:}anotherRandomProperty', 'ghi'], - ]; - - // insert test data - $sqlToInsertProperties = 'INSERT INTO `*PREFIX*properties` (`userid`, `propertypath`, `propertyname`, `propertyvalue`) VALUES (?, ?, ? ,?)'; - foreach ($data as $entry) { - $this->connection->executeUpdate($sqlToInsertProperties, $entry); - } - - // check if test data is written to DB - $sqlToFetchProperties = 'SELECT `userid`, `propertypath`, `propertyname`, `propertyvalue` FROM `*PREFIX*properties` WHERE `userid` = ?'; - $stmt = $this->connection->executeQuery($sqlToFetchProperties, [$userName]); - $entries = $stmt->fetchAll(\PDO::FETCH_NUM); - - $this->assertCount(2, $entries, 'Asserts that two entries are returned as we have inserted two'); - foreach($entries as $entry) { - $this->assertTrue(in_array($entry, $data), 'Asserts that the entries are the ones from the test data set'); - } - - /** @var IOutput | \PHPUnit_Framework_MockObject_MockObject $outputMock */ - $outputMock = $this->getMockBuilder('\OCP\Migration\IOutput') - ->disableOriginalConstructor() - ->getMock(); - - // run repair step - $repair = new RemoveGetETagEntries($this->connection); - $repair->run($outputMock); - - // check if test data is correctly modified in DB - $stmt = $this->connection->executeQuery($sqlToFetchProperties, [$userName]); - $entries = $stmt->fetchAll(\PDO::FETCH_NUM); - - $this->assertCount(1, $entries, 'Asserts that only one entry is returned after the repair step - the other one has to be removed'); - $this->assertSame($data[1], $entries[0], 'Asserts that the returned entry is the correct one from the test data set'); - - // remove test data - $sqlToRemoveProperties = 'DELETE FROM `*PREFIX*properties` WHERE `userid` = ?'; - $this->connection->executeUpdate($sqlToRemoveProperties, [$userName]); - } - -} diff --git a/tests/lib/Repair/RemoveOldSharesTest.php b/tests/lib/Repair/RemoveOldSharesTest.php deleted file mode 100644 index ac30585bdc5..00000000000 --- a/tests/lib/Repair/RemoveOldSharesTest.php +++ /dev/null @@ -1,160 +0,0 @@ -<?php -/** - * @author Roeland Jago Douma <rullzer@owncloud.com> - * - * @copyright Copyright (c) 2016, ownCloud, Inc. - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ -namespace Test\Repair; - -use OC\Repair\RemoveOldShares; -use OCP\IDBConnection; -use OCP\Migration\IOutput; - -/** - * Class RemoveOldSharesTest - * - * @package Test\Repair - * @group DB - */ -class RemoveOldSharesTest extends \Test\TestCase { - - /** @var RemoveOldShares */ - protected $repair; - - /** @var IDBConnection */ - protected $connection; - - /** @var IOutput */ - private $outputMock; - - protected function setUp() { - parent::setUp(); - - $this->outputMock = $this->getMockBuilder('\OCP\Migration\IOutput') - ->disableOriginalConstructor() - ->getMock(); - - $this->connection = \OC::$server->getDatabaseConnection(); - $this->repair = new RemoveOldShares($this->connection); - } - - protected function tearDown() { - $qb = $this->connection->getQueryBuilder(); - $qb->delete('share'); - $qb->execute(); - - return parent::tearDown(); - } - - public function testRun() { - $qb = $this->connection->getQueryBuilder(); - $qb->insert('share') - ->values([ - 'share_type' => $qb->createNamedParameter(0), - 'share_with' => $qb->createNamedParameter('foo'), - 'uid_owner' => $qb->createNamedParameter('owner'), - 'item_type' => $qb->createNamedParameter('file'), - 'item_source' => $qb->createNamedParameter(42), - 'item_target' => $qb->createNamedParameter('/target'), - 'file_source' => $qb->createNamedParameter(42), - 'file_target' => $qb->createNamedParameter('/target'), - 'permissions' => $qb->createNamedParameter(1), - ]); - $qb->execute(); - - $qb = $this->connection->getQueryBuilder(); - $qb->insert('share') - ->values([ - 'share_type' => $qb->createNamedParameter(0), - 'share_with' => $qb->createNamedParameter('foo'), - 'uid_owner' => $qb->createNamedParameter('owner'), - 'item_type' => $qb->createNamedParameter('calendar'), - 'item_source' => $qb->createNamedParameter(42), - 'item_target' => $qb->createNamedParameter('/target'), - 'file_source' => $qb->createNamedParameter(42), - 'file_target' => $qb->createNamedParameter('/target'), - 'permissions' => $qb->createNamedParameter(1), - ]); - $qb->execute(); - - $qb = $this->connection->getQueryBuilder(); - $qb->insert('share') - ->values([ - 'share_type' => $qb->createNamedParameter(0), - 'share_with' => $qb->createNamedParameter('foo'), - 'uid_owner' => $qb->createNamedParameter('owner'), - 'item_type' => $qb->createNamedParameter('event'), - 'item_source' => $qb->createNamedParameter(42), - 'item_target' => $qb->createNamedParameter('/target'), - 'file_source' => $qb->createNamedParameter(42), - 'file_target' => $qb->createNamedParameter('/target'), - 'permissions' => $qb->createNamedParameter(1), - ]); - $qb->execute(); - - $qb = $this->connection->getQueryBuilder(); - $qb->insert('share') - ->values([ - 'share_type' => $qb->createNamedParameter(0), - 'share_with' => $qb->createNamedParameter('foo'), - 'uid_owner' => $qb->createNamedParameter('owner'), - 'item_type' => $qb->createNamedParameter('contact'), - 'item_source' => $qb->createNamedParameter(42), - 'item_target' => $qb->createNamedParameter('/target'), - 'file_source' => $qb->createNamedParameter(42), - 'file_target' => $qb->createNamedParameter('/target'), - 'permissions' => $qb->createNamedParameter(1), - ]); - $qb->execute(); - - $qb = $this->connection->getQueryBuilder(); - $qb->insert('share') - ->values([ - 'share_type' => $qb->createNamedParameter(0), - 'share_with' => $qb->createNamedParameter('foo'), - 'uid_owner' => $qb->createNamedParameter('owner'), - 'item_type' => $qb->createNamedParameter('addressbook'), - 'item_source' => $qb->createNamedParameter(42), - 'item_target' => $qb->createNamedParameter('/target'), - 'file_source' => $qb->createNamedParameter(42), - 'file_target' => $qb->createNamedParameter('/target'), - 'permissions' => $qb->createNamedParameter(1), - ]); - $qb->execute(); - - $qb = $this->connection->getQueryBuilder(); - $qb->selectAlias($qb->createFunction('COUNT(*)'), 'count') - ->from('share'); - - $cursor = $qb->execute(); - $data = $cursor->fetchAll(); - $cursor->closeCursor(); - $this->assertEquals(5, $data[0]['count']); - - $this->repair->run($this->outputMock); - - $qb = $this->connection->getQueryBuilder(); - $qb->select('*') - ->from('share'); - - $cursor = $qb->execute(); - $data = $cursor->fetchAll(); - $cursor->closeCursor(); - $this->assertCount(1, $data); - $this->assertEquals('file', $data[0]['item_type']); - } -} diff --git a/tests/lib/Repair/RepairInnoDBTest.php b/tests/lib/Repair/RepairInnoDBTest.php deleted file mode 100644 index 1258dad73f5..00000000000 --- a/tests/lib/Repair/RepairInnoDBTest.php +++ /dev/null @@ -1,78 +0,0 @@ -<?php -/** - * Copyright (c) 2014 Thomas Müller <deepdiver@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. - */ -namespace Test\Repair; -use OCP\Migration\IOutput; -use OCP\Migration\IRepairStep; - -/** - * Tests for the converting of MySQL tables to InnoDB engine - * - * @group DB - * - * @see \OC\Repair\RepairMimeTypes - */ -class RepairInnoDBTest extends \Test\TestCase { - - /** @var IRepairStep */ - private $repair; - - /** @var \Doctrine\DBAL\Connection */ - private $connection; - - /** @var string */ - private $tableName; - - protected function setUp() { - parent::setUp(); - - $this->connection = \OC::$server->getDatabaseConnection(); - if (!$this->connection->getDatabasePlatform() instanceof \Doctrine\DBAL\Platforms\MySqlPlatform) { - $this->markTestSkipped("Test only relevant on MySql"); - } - - $dbPrefix = \OC::$server->getConfig()->getSystemValue("dbtableprefix"); - $this->tableName = $this->getUniqueID($dbPrefix . "_innodb_test"); - $this->connection->exec("CREATE TABLE $this->tableName(id INT) ENGINE MyISAM"); - - $this->repair = new \OC\Repair\InnoDB(); - } - - protected function tearDown() { - $this->connection->getSchemaManager()->dropTable($this->tableName); - parent::tearDown(); - } - - public function testInnoDBConvert() { - $result = $this->countMyIsamTables(); - $this->assertEquals(1, $result); - - /** @var IOutput | \PHPUnit_Framework_MockObject_MockObject $outputMock */ - $outputMock = $this->getMockBuilder('\OCP\Migration\IOutput') - ->disableOriginalConstructor() - ->getMock(); - - $this->repair->run($outputMock); - - $result = $this->countMyIsamTables(); - $this->assertEquals(0, $result); - } - - /** - * @param $dbName - * @return mixed - */ - private function countMyIsamTables() { - $dbName = \OC::$server->getConfig()->getSystemValue("dbname"); - - $result = $this->connection->fetchColumn( - "SELECT count(*) FROM information_schema.tables WHERE table_schema = ? and table_name = ? AND engine = 'MyISAM'", - array($dbName, $this->tableName) - ); - return $result; - } -} diff --git a/tests/lib/Repair/RepairInvalidSharesTest.php b/tests/lib/Repair/RepairInvalidSharesTest.php index 83dbed7d202..fa75f58472a 100644 --- a/tests/lib/Repair/RepairInvalidSharesTest.php +++ b/tests/lib/Repair/RepairInvalidSharesTest.php @@ -39,7 +39,7 @@ class RepairInvalidSharesTest extends TestCase { $config->expects($this->any()) ->method('getSystemValue') ->with('version') - ->will($this->returnValue('8.0.0.0')); + ->will($this->returnValue('12.0.0.0')); $this->connection = \OC::$server->getDatabaseConnection(); $this->deleteAllShares(); @@ -60,157 +60,6 @@ class RepairInvalidSharesTest extends TestCase { } /** - * Test remove expiration date for non-link shares - */ - public function testRemoveExpirationDateForNonLinkShares() { - // user share with bogus expiration date - $qb = $this->connection->getQueryBuilder(); - $qb->insert('share') - ->values([ - 'share_type' => $qb->expr()->literal(Constants::SHARE_TYPE_USER), - 'share_with' => $qb->expr()->literal('recipientuser1'), - 'uid_owner' => $qb->expr()->literal('user1'), - 'item_type' => $qb->expr()->literal('folder'), - 'item_source' => $qb->expr()->literal(123), - 'item_target' => $qb->expr()->literal('/123'), - 'file_source' => $qb->expr()->literal(123), - 'file_target' => $qb->expr()->literal('/test'), - 'permissions' => $qb->expr()->literal(1), - 'stime' => $qb->expr()->literal(time()), - 'expiration' => $qb->expr()->literal('2015-09-25 00:00:00') - ]) - ->execute(); - - $bogusShareId = $this->getLastShareId(); - - // link share with expiration date - $qb = $this->connection->getQueryBuilder(); - $qb->insert('share') - ->values([ - 'share_type' => $qb->expr()->literal(Constants::SHARE_TYPE_LINK), - 'uid_owner' => $qb->expr()->literal('user1'), - 'item_type' => $qb->expr()->literal('folder'), - 'item_source' => $qb->expr()->literal(123), - 'item_target' => $qb->expr()->literal('/123'), - 'file_source' => $qb->expr()->literal(123), - 'file_target' => $qb->expr()->literal('/test'), - 'permissions' => $qb->expr()->literal(1), - 'stime' => $qb->expr()->literal(time()), - 'expiration' => $qb->expr()->literal('2015-09-25 00:00:00'), - 'token' => $qb->expr()->literal('abcdefg') - ])->execute(); - - /** @var IOutput | \PHPUnit_Framework_MockObject_MockObject $outputMock */ - $outputMock = $this->getMockBuilder('\OCP\Migration\IOutput') - ->disableOriginalConstructor() - ->getMock(); - - $this->repair->run($outputMock); - - $results = $this->connection->getQueryBuilder() - ->select('*') - ->from('share') - ->orderBy('share_type', 'ASC') - ->execute() - ->fetchAll(); - - $this->assertCount(2, $results); - - $userShare = $results[0]; - $linkShare = $results[1]; - $this->assertEquals($bogusShareId, $userShare['id'], 'sanity check'); - $this->assertNull($userShare['expiration'], 'bogus expiration date was removed'); - $this->assertNotNull($linkShare['expiration'], 'valid link share expiration date still there'); - } - - /** - * Test remove expiration date for non-link shares - */ - public function testAddShareLinkDeletePermission() { - $oldPerms = \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE; - $newPerms = \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE; - - // share with old permissions - $qb = $this->connection->getQueryBuilder(); - $qb->insert('share') - ->values([ - 'share_type' => $qb->expr()->literal(Constants::SHARE_TYPE_LINK), - 'uid_owner' => $qb->expr()->literal('user1'), - 'item_type' => $qb->expr()->literal('folder'), - 'item_source' => $qb->expr()->literal(123), - 'item_target' => $qb->expr()->literal('/123'), - 'file_source' => $qb->expr()->literal(123), - 'file_target' => $qb->expr()->literal('/test'), - 'permissions' => $qb->expr()->literal($oldPerms), - 'stime' => $qb->expr()->literal(time()), - ]) - ->execute(); - - $bogusShareId = $this->getLastShareId(); - - // share with read-only permissions - $qb = $this->connection->getQueryBuilder(); - $qb->insert('share') - ->values([ - 'share_type' => $qb->expr()->literal(Constants::SHARE_TYPE_LINK), - 'uid_owner' => $qb->expr()->literal('user1'), - 'item_type' => $qb->expr()->literal('folder'), - 'item_source' => $qb->expr()->literal(123), - 'item_target' => $qb->expr()->literal('/123'), - 'file_source' => $qb->expr()->literal(123), - 'file_target' => $qb->expr()->literal('/test'), - 'permissions' => $qb->expr()->literal(\OCP\Constants::PERMISSION_READ), - 'stime' => $qb->expr()->literal(time()), - ]) - ->execute(); - - $keepThisShareId = $this->getLastShareId(); - - // user share to keep - $qb = $this->connection->getQueryBuilder(); - $qb->insert('share') - ->values([ - 'share_type' => $qb->expr()->literal(Constants::SHARE_TYPE_USER), - 'share_with' => $qb->expr()->literal('recipientuser1'), - 'uid_owner' => $qb->expr()->literal('user1'), - 'item_type' => $qb->expr()->literal('folder'), - 'item_source' => $qb->expr()->literal(123), - 'item_target' => $qb->expr()->literal('/123'), - 'file_source' => $qb->expr()->literal(123), - 'file_target' => $qb->expr()->literal('/test'), - 'permissions' => $qb->expr()->literal(3), - 'stime' => $qb->expr()->literal(time()), - ]) - ->execute(); - - $keepThisShareId2 = $this->getLastShareId(); - - /** @var IOutput | \PHPUnit_Framework_MockObject_MockObject $outputMock */ - $outputMock = $this->getMockBuilder('\OCP\Migration\IOutput') - ->disableOriginalConstructor() - ->getMock(); - - $this->repair->run($outputMock); - - $results = $this->connection->getQueryBuilder() - ->select('*') - ->from('share') - ->orderBy('permissions', 'ASC') - ->execute() - ->fetchAll(); - - $this->assertCount(3, $results); - - $untouchedShare = $results[0]; - $untouchedShare2 = $results[1]; - $updatedShare = $results[2]; - $this->assertEquals($keepThisShareId, $untouchedShare['id'], 'sanity check'); - $this->assertEquals($keepThisShareId2, $untouchedShare2['id'], 'sanity check'); - $this->assertEquals($bogusShareId, $updatedShare['id'], 'sanity check'); - $this->assertEquals($newPerms, $updatedShare['permissions'], 'delete permission was added'); - } - - /** * Test remove shares where the parent share does not exist anymore */ public function testSharesNonExistingParent() { diff --git a/tests/lib/Repair/RepairMimeTypesTest.php b/tests/lib/Repair/RepairMimeTypesTest.php index 6a42b016938..ef1412b2fd2 100644 --- a/tests/lib/Repair/RepairMimeTypesTest.php +++ b/tests/lib/Repair/RepairMimeTypesTest.php @@ -45,7 +45,7 @@ class RepairMimeTypesTest extends \Test\TestCase { $config->expects($this->any()) ->method('getSystemValue') ->with('version') - ->will($this->returnValue('8.0.0.0')); + ->will($this->returnValue('11.0.0.0')); $this->storage = new \OC\Files\Storage\Temporary([]); @@ -90,20 +90,6 @@ class RepairMimeTypesTest extends \Test\TestCase { } } - /** - * Returns the id of a given mime type or null - * if it does not exist. - */ - private function getMimeTypeIdFromDB($mimeType) { - $sql = 'SELECT `id` FROM `*PREFIX*mimetypes` WHERE `mimetype` = ?'; - $results = \OC_DB::executeAudited($sql, [$mimeType]); - $result = $results->fetchOne(); - if ($result) { - return $result['id']; - } - return null; - } - private function renameMimeTypes($currentMimeTypes, $fixedMimeTypes) { $this->addEntries($currentMimeTypes); @@ -121,344 +107,27 @@ class RepairMimeTypesTest extends \Test\TestCase { } /** - * Test renaming and splitting old office mime types - */ - public function testRenameOfficeMimeTypes() { - $currentMimeTypes = [ - ['test.doc', 'application/msword'], - ['test.docx', 'application/msword'], - ['test.xls', 'application/msexcel'], - ['test.xlsx', 'application/msexcel'], - ['test.ppt', 'application/mspowerpoint'], - ['test.pptx', 'application/mspowerpoint'], - ]; - - $fixedMimeTypes = [ - ['test.doc', 'application/msword'], - ['test.docx', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'], - ['test.xls', 'application/vnd.ms-excel'], - ['test.xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'], - ['test.ppt', 'application/vnd.ms-powerpoint'], - ['test.pptx', 'application/vnd.openxmlformats-officedocument.presentationml.presentation'], - ]; - - $this->renameMimeTypes($currentMimeTypes, $fixedMimeTypes); - } - - /** - * Test renaming old fonts mime types - */ - public function testRenameFontsMimeTypes() { - $currentMimeTypes = [ - ['test.ttf', 'application/x-font-ttf'], - ['test.otf', 'font/opentype'], - ['test.pfb', 'application/octet-stream'], - ]; - - $fixedMimeTypes = [ - ['test.ttf', 'application/font-sfnt'], - ['test.otf', 'application/font-sfnt'], - ['test.pfb', 'application/x-font'], - ]; - - $this->renameMimeTypes($currentMimeTypes, $fixedMimeTypes); - } - - /** - * Test renaming the APK mime type - */ - public function testRenameAPKMimeType() { - $currentMimeTypes = [ - ['test.apk', 'application/octet-stream'], - ['bogus.apk', 'application/vnd.android.package-archive'], - ['bogus2.apk', 'application/wrong'], - ]; - - $fixedMimeTypes = [ - ['test.apk', 'application/vnd.android.package-archive'], - ['bogus.apk', 'application/vnd.android.package-archive'], - ['bogus2.apk', 'application/vnd.android.package-archive'], - ]; - - $this->renameMimeTypes($currentMimeTypes, $fixedMimeTypes); - } - - /** - * Test renaming the postscript mime types - */ - public function testRenamePostscriptMimeType() { - $currentMimeTypes = [ - ['test.eps', 'application/octet-stream'], - ['test.ps', 'application/octet-stream'], - ]; - - $fixedMimeTypes = [ - ['test.eps', 'application/postscript'], - ['test.ps', 'application/postscript'], - ]; - - $this->renameMimeTypes($currentMimeTypes, $fixedMimeTypes); - } - - /** - * Test renaming the Raw mime types - */ - public function testRenameRawMimeType() { - $currentMimeTypes = [ - ['test.arw', 'application/octet-stream'], - ['test.cr2', 'application/octet-stream'], - ['test.dcr', 'application/octet-stream'], - ['test.dng', 'application/octet-stream'], - ['test.erf', 'application/octet-stream'], - ['test.iiq', 'application/octet-stream'], - ['test.k25', 'application/octet-stream'], - ['test.kdc', 'application/octet-stream'], - ['test.mef', 'application/octet-stream'], - ['test.nef', 'application/octet-stream'], - ['test.orf', 'application/octet-stream'], - ['test.pef', 'application/octet-stream'], - ['test.raf', 'application/octet-stream'], - ['test.rw2', 'application/octet-stream'], - ['test.srf', 'application/octet-stream'], - ['test.sr2', 'application/octet-stream'], - ['test.xrf', 'application/octet-stream'], - ['CapitalExtension.DNG', 'application/octet-stream'], - ]; - - $fixedMimeTypes = [ - ['test.arw', 'image/x-dcraw'], - ['test.cr2', 'image/x-dcraw'], - ['test.dcr', 'image/x-dcraw'], - ['test.dng', 'image/x-dcraw'], - ['test.erf', 'image/x-dcraw'], - ['test.iiq', 'image/x-dcraw'], - ['test.k25', 'image/x-dcraw'], - ['test.kdc', 'image/x-dcraw'], - ['test.mef', 'image/x-dcraw'], - ['test.nef', 'image/x-dcraw'], - ['test.orf', 'image/x-dcraw'], - ['test.pef', 'image/x-dcraw'], - ['test.raf', 'image/x-dcraw'], - ['test.rw2', 'image/x-dcraw'], - ['test.srf', 'image/x-dcraw'], - ['test.sr2', 'image/x-dcraw'], - ['test.xrf', 'image/x-dcraw'], - ['CapitalExtension.DNG', 'image/x-dcraw'], - ]; - - $this->renameMimeTypes($currentMimeTypes, $fixedMimeTypes); - } - - /** - * Test renaming the 3D image media type - */ - public function testRename3dImagesMimeType() { - $currentMimeTypes = [ - ['test.jps', 'application/octet-stream'], - ['test.mpo', 'application/octet-stream'], - ]; - - $fixedMimeTypes = [ - ['test.jps', 'image/jpeg'], - ['test.mpo', 'image/jpeg'], - ]; - - $this->renameMimeTypes($currentMimeTypes, $fixedMimeTypes); - } - - /** - * Test renaming the conf/cnf media type - */ - public function testRenameConfMimeType() { - $currentMimeTypes = [ - ['test.conf', 'application/octet-stream'], - ['test.cnf', 'application/octet-stream'], - ]; - - $fixedMimeTypes = [ - ['test.conf', 'text/plain'], - ['test.cnf', 'text/plain'], - ]; - - $this->renameMimeTypes($currentMimeTypes, $fixedMimeTypes); - } - - /** - * Test renaming the yaml media type - */ - public function testRenameYamlMimeType() { - $currentMimeTypes = [ - ['test.yaml', 'application/octet-stream'], - ['test.yml', 'application/octet-stream'], - ]; - - $fixedMimeTypes = [ - ['test.yaml', 'application/yaml'], - ['test.yml', 'application/yaml'], - ]; - - $this->renameMimeTypes($currentMimeTypes, $fixedMimeTypes); - } - - /** - * Test renaming the java mime types - */ - public function testRenameJavaMimeType() { - $currentMimeTypes = [ - ['test.java', 'application/octet-stream'], - ['test.class', 'application/octet-stream'], - ]; - - $fixedMimeTypes = [ - ['test.java', 'text/x-java-source'], - ['test.class', 'application/java'], - ]; - - $this->renameMimeTypes($currentMimeTypes, $fixedMimeTypes); - } - - /** - * Test renaming the hpp mime type - */ - public function testRenameHppMimeType() { - $currentMimeTypes = [ - ['test.hpp', 'application/octet-stream'], - ]; - - $fixedMimeTypes = [ - ['test.hpp', 'text/x-h'], - ]; - - $this->renameMimeTypes($currentMimeTypes, $fixedMimeTypes); - } - - /** - * Test renaming the rss mime type - */ - public function testRenameRssMimeType() { - $currentMimeTypes = [ - ['test.rss', 'application/octet-stream'], - ]; - - $fixedMimeTypes = [ - ['test.rss', 'application/rss+xml'], - ]; - - $this->renameMimeTypes($currentMimeTypes, $fixedMimeTypes); - } - - /** - * Test renaming the hpp mime type - */ - public function testRenameRtfMimeType() { - $currentMimeTypes = [ - ['test.rtf', 'application/octet-stream'], - ]; - - $fixedMimeTypes = [ - ['test.rtf', 'text/rtf'], - ]; - - $this->renameMimeTypes($currentMimeTypes, $fixedMimeTypes); - } - - /** * Test renaming the richdocuments additional office mime types */ - public function testRenameRichDocumentsMimeTypes() { + public function testRenameWindowsProgramTypes() { $currentMimeTypes = [ - ['test.lwp', 'application/octet-stream'], - ['test.one', 'application/octet-stream'], - ['test.vsd', 'application/octet-stream'], - ['test.wpd', 'application/octet-stream'], + ['test.htaccess', 'application/octet-stream'], + ['.htaccess', 'application/octet-stream'], + ['test.bat', 'application/octet-stream'], + ['test.cmd', 'application/octet-stream'], ]; $fixedMimeTypes = [ - ['test.lwp', 'application/vnd.lotus-wordpro'], - ['test.one', 'application/msonenote'], - ['test.vsd', 'application/vnd.visio'], - ['test.wpd', 'application/vnd.wordperfect'], + ['test.htaccess', 'text/plain'], + ['.htaccess', 'text/plain'], + ['test.bat', 'application/x-msdos-program'], + ['test.cmd', 'application/cmd'], ]; $this->renameMimeTypes($currentMimeTypes, $fixedMimeTypes); } /** - * Test renaming and splitting old office mime types when - * new ones already exist - */ - public function testRenameOfficeMimeTypesWhenExist() { - $currentMimeTypes = [ - ['test.doc', 'application/msword'], - ['test.docx', 'application/msword'], - ['test.xls', 'application/msexcel'], - ['test.xlsx', 'application/msexcel'], - ['test.ppt', 'application/mspowerpoint'], - ['test.pptx', 'application/mspowerpoint'], - // make it so that the new mimetypes already exist - ['bogus.docx', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'], - ['bogus.xlsx', 'application/vnd.ms-excel'], - ['bogus.pptx', 'application/vnd.ms-powerpoint'], - ['bogus2.docx', 'application/wrong'], - ['bogus2.xlsx', 'application/wrong'], - ['bogus2.pptx', 'application/wrong'], - ]; - - $fixedMimeTypes = [ - ['test.doc', 'application/msword'], - ['test.docx', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'], - ['test.xls', 'application/vnd.ms-excel'], - ['test.xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'], - ['test.ppt', 'application/vnd.ms-powerpoint'], - ['test.pptx', 'application/vnd.openxmlformats-officedocument.presentationml.presentation'], - ['bogus.docx', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'], - ['bogus.xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'], - ['bogus.pptx', 'application/vnd.openxmlformats-officedocument.presentationml.presentation'], - ['bogus2.docx', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'], - ['bogus2.xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'], - ['bogus2.pptx', 'application/vnd.openxmlformats-officedocument.presentationml.presentation'], - ]; - - $this->renameMimeTypes($currentMimeTypes, $fixedMimeTypes); - - // wrong mimetypes are gone - $this->assertNull($this->getMimeTypeIdFromDB('application/msexcel')); - $this->assertNull($this->getMimeTypeIdFromDB('application/mspowerpoint')); - } - - /** - * Test renaming old fonts mime types when - * new ones already exist - */ - public function testRenameFontsMimeTypesWhenExist() { - $currentMimeTypes = [ - ['test.ttf', 'application/x-font-ttf'], - ['test.otf', 'font/opentype'], - // make it so that the new mimetypes already exist - ['bogus.ttf', 'application/font-sfnt'], - ['bogus.otf', 'application/font-sfnt'], - ['bogus2.ttf', 'application/wrong'], - ['bogus2.otf', 'application/wrong'], - ]; - - $fixedMimeTypes = [ - ['test.ttf', 'application/font-sfnt'], - ['test.otf', 'application/font-sfnt'], - ['bogus.ttf', 'application/font-sfnt'], - ['bogus.otf', 'application/font-sfnt'], - ['bogus2.ttf', 'application/font-sfnt'], - ['bogus2.otf', 'application/font-sfnt'], - ]; - - $this->renameMimeTypes($currentMimeTypes, $fixedMimeTypes); - - // wrong mimetypes are gone - $this->assertNull($this->getMimeTypeIdFromDB('application/x-font-ttf')); - $this->assertNull($this->getMimeTypeIdFromDB('font')); - $this->assertNull($this->getMimeTypeIdFromDB('font/opentype')); - } - - /** * Test that nothing happens and no error happens when all mimetypes are * already correct and no old ones exist.. */ @@ -509,6 +178,10 @@ class RepairMimeTypesTest extends \Test\TestCase { ['test.one', 'application/msonenote'], ['test.vsd', 'application/vnd.visio'], ['test.wpd', 'application/vnd.wordperfect'], + ['test.htaccess', 'text/plain'], + ['.htaccess', 'text/plain'], + ['test.bat', 'application/x-msdos-program'], + ['test.cmd', 'application/cmd'], ]; $fixedMimeTypes = [ @@ -557,6 +230,10 @@ class RepairMimeTypesTest extends \Test\TestCase { ['test.one', 'application/msonenote'], ['test.vsd', 'application/vnd.visio'], ['test.wpd', 'application/vnd.wordperfect'], + ['test.htaccess', 'text/plain'], + ['.htaccess', 'text/plain'], + ['test.bat', 'application/x-msdos-program'], + ['test.cmd', 'application/cmd'], ]; $this->renameMimeTypes($currentMimeTypes, $fixedMimeTypes); diff --git a/tests/lib/Repair/RepairSharePropagationTest.php b/tests/lib/Repair/RepairSharePropagationTest.php deleted file mode 100644 index d6010cf5706..00000000000 --- a/tests/lib/Repair/RepairSharePropagationTest.php +++ /dev/null @@ -1,58 +0,0 @@ -<?php -/** - * Copyright (c) 2016 Robin Appelman <icewind@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. - */ - -namespace Test\Repair; - -use OC\Repair\SharePropagation; -use OCP\IConfig; -use OCP\Migration\IOutput; - -class RepairSharePropagationTest extends \Test\TestCase { - public function keyProvider() { - return [ - [['1', '2'], ['1', '2']], - [['1', '2', 'foo'], ['1', '2']], - [['foo'], []], - ]; - } - - /** - * @dataProvider keyProvider - * @param array $startKeys - * @param array $expectedRemovedKeys - */ - public function testRemovePropagationEntries(array $startKeys, array $expectedRemovedKeys) { - /** @var \PHPUnit_Framework_MockObject_MockObject|\OCP\IConfig $config */ - $config = $this->createMock(IConfig::class); - $config->expects($this->once()) - ->method('getAppKeys') - ->with('files_sharing') - ->will($this->returnValue($startKeys)); - - $removedKeys = []; - - $config->expects($this->any()) - ->method('deleteAppValue') - ->will($this->returnCallback(function ($app, $key) use (&$removedKeys) { - $removedKeys[] = $key; - })); - - /** @var IOutput | \PHPUnit_Framework_MockObject_MockObject $outputMock */ - $outputMock = $this->getMockBuilder('\OCP\Migration\IOutput') - ->disableOriginalConstructor() - ->getMock(); - - $step = new SharePropagation($config); - $step->run($outputMock); - - sort($expectedRemovedKeys); - sort($removedKeys); - - $this->assertEquals($expectedRemovedKeys, $removedKeys); - } -} diff --git a/tests/lib/Repair/RepairUnmergedSharesTest.php b/tests/lib/Repair/RepairUnmergedSharesTest.php deleted file mode 100644 index 2834cfe94b8..00000000000 --- a/tests/lib/Repair/RepairUnmergedSharesTest.php +++ /dev/null @@ -1,575 +0,0 @@ -<?php -/** - * @author Vincent Petry <pvince81@owncloud.com> - * - * @copyright Copyright (c) 2016, ownCloud, Inc. - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace Test\Repair; - - -use OC\Repair\RepairUnmergedShares; -use OC\Share\Constants; -use OCP\IUser; -use OCP\Migration\IOutput; -use OCP\Migration\IRepairStep; -use Test\TestCase; -use OC\Share20\DefaultShareProvider; -use OCP\IUserManager; -use OCP\IGroupManager; - -/** - * Tests for repairing invalid shares - * - * @group DB - * - * @see \OC\Repair\RepairUnmergedShares - */ -class RepairUnmergedSharesTest extends TestCase { - - /** @var IRepairStep */ - private $repair; - - /** @var \OCP\IDBConnection */ - private $connection; - - /** @var int */ - private $lastShareTime; - - /** @var IUserManager */ - private $userManager; - - /** @var IGroupManager */ - private $groupManager; - - protected function setUp() { - parent::setUp(); - - $config = $this->getMockBuilder('OCP\IConfig') - ->disableOriginalConstructor() - ->getMock(); - $config->expects($this->any()) - ->method('getSystemValue') - ->with('version') - ->will($this->returnValue('9.0.3.0')); - - $this->connection = \OC::$server->getDatabaseConnection(); - $this->deleteAllShares(); - - $this->userManager = $this->createMock(IUserManager::class); - $this->groupManager = $this->createMock(IGroupManager::class); - - // used to generate incremental stimes - $this->lastShareTime = time(); - - /** @var \OCP\IConfig $config */ - $this->repair = new RepairUnmergedShares($config, $this->connection, $this->userManager, $this->groupManager); - } - - protected function tearDown() { - $this->deleteAllShares(); - - parent::tearDown(); - } - - protected function deleteAllShares() { - $qb = $this->connection->getQueryBuilder(); - $qb->delete('share')->execute(); - } - - private function createShare($type, $sourceId, $recipient, $targetName, $permissions, $parentId = null) { - $this->lastShareTime += 100; - $qb = $this->connection->getQueryBuilder(); - $values = [ - 'share_type' => $qb->expr()->literal($type), - 'share_with' => $qb->expr()->literal($recipient), - 'uid_owner' => $qb->expr()->literal('user1'), - 'item_type' => $qb->expr()->literal('folder'), - 'item_source' => $qb->expr()->literal($sourceId), - 'item_target' => $qb->expr()->literal('/' . $sourceId), - 'file_source' => $qb->expr()->literal($sourceId), - 'file_target' => $qb->expr()->literal($targetName), - 'permissions' => $qb->expr()->literal($permissions), - 'stime' => $qb->expr()->literal($this->lastShareTime), - ]; - if ($parentId !== null) { - $values['parent'] = $qb->expr()->literal($parentId); - } - $qb->insert('share') - ->values($values) - ->execute(); - - return $this->connection->lastInsertId('*PREFIX*share'); - } - - private function getShareById($id) { - $query = $this->connection->getQueryBuilder(); - $results = $query - ->select('*') - ->from('share') - ->where($query->expr()->eq('id', $query->expr()->literal($id))) - ->execute() - ->fetchAll(); - - if (!empty($results)) { - return $results[0]; - } - return null; - } - - public function sharesDataProvider() { - /** - * For all these test cases we have the following situation: - * - * - "user1" is the share owner - * - "user2" is the recipient, and member of "recipientgroup1" and "recipientgroup2" - * - "user1" is member of "samegroup1", "samegroup2" for same group tests - */ - return [ - [ - // #0 legitimate share: - // - outsider shares with group1, group2 - // - recipient renamed, resulting in subshares - // - one subshare for each group share - // - targets of subshare all match - [ - [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup1', '/test', 31], - [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup2', '/test', 31], - // child of the previous ones - [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test renamed', 31, 0], - // child of the previous ones - [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test renamed', 31, 1], - // different unrelated share - [Constants::SHARE_TYPE_GROUP, 456, 'recipientgroup1', '/test (4)', 31], - ], - [ - ['/test', 31], - ['/test', 31], - // leave them alone - ['/test renamed', 31], - ['/test renamed', 31], - // leave unrelated alone - ['/test (4)', 31], - ] - ], - [ - // #1 broken share: - // - outsider shares with group1, group2 - // - only one subshare for two group shares - [ - [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup1', '/test', 31], - [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup2', '/test', 31], - // child of the previous one - [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test (2)', 31, 1], - // different unrelated share - [Constants::SHARE_TYPE_GROUP, 456, 'recipientgroup1', '/test (4)', 31], - ], - [ - ['/test', 31], - ['/test', 31], - ['/test', 31], - // leave unrelated alone - ['/test (4)', 31], - ] - ], - [ - // #2 bogus share - // - outsider shares with group1, group2 - // - one subshare for each group share, both with parenthesis - // - but the targets do not match when grouped - [ - [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup1', '/test', 31], - [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup2', '/test', 31], - // child of the previous ones - [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test (2)', 31, 0], - [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test (3)', 31, 1], - // different unrelated share - [Constants::SHARE_TYPE_GROUP, 456, 'recipientgroup1', '/test (4)', 31], - ], - [ - ['/test', 31], - ['/test', 31], - // reset to original name as the sub-names have parenthesis - ['/test', 31], - ['/test', 31], - // leave unrelated alone - ['/test (4)', 31], - ] - ], - [ - // #3 bogus share - // - outsider shares with group1, group2 - // - one subshare for each group share, both renamed manually - // - but the targets do not match when grouped - [ - [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup1', '/test', 31], - [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup2', '/test', 31], - // child of the previous ones - [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test_renamed (1 legit paren)', 31, 0], - [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test_renamed (2 legit paren)', 31, 1], - // different unrelated share - [Constants::SHARE_TYPE_GROUP, 456, 'recipientgroup1', '/test (4)', 31], - ], - [ - ['/test', 31], - ['/test', 31], - // reset to less recent subshare name - ['/test_renamed (2 legit paren)', 31], - ['/test_renamed (2 legit paren)', 31], - // leave unrelated alone - ['/test (4)', 31], - ] - ], - [ - // #4 bogus share - // - outsider shares with group1, group2 - // - one subshare for each group share, one with parenthesis - // - but the targets do not match when grouped - [ - [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup1', '/test', 31], - [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup2', '/test', 31], - // child of the previous ones - [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test (2)', 31, 0], - [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test_renamed', 31, 1], - // different unrelated share - [Constants::SHARE_TYPE_GROUP, 456, 'recipientgroup1', '/test (4)', 31], - ], - [ - ['/test', 31], - ['/test', 31], - // reset to less recent subshare name but without parenthesis - ['/test_renamed', 31], - ['/test_renamed', 31], - // leave unrelated alone - ['/test (4)', 31], - ] - ], - [ - // #5 bogus share - // - outsider shares with group1, group2 - // - one subshare for each group share - // - first subshare not renamed (as in real world scenario) - // - but the targets do not match when grouped - [ - [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup1', '/test', 31], - [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup2', '/test', 31], - // child of the previous ones - [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test', 31, 0], - [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test (2)', 31, 1], - // different unrelated share - [Constants::SHARE_TYPE_GROUP, 456, 'recipientgroup1', '/test (4)', 31], - ], - [ - ['/test', 31], - ['/test', 31], - // reset to original name - ['/test', 31], - ['/test', 31], - // leave unrelated alone - ['/test (4)', 31], - ] - ], - [ - // #6 bogus share: - // - outsider shares with group1, group2 - // - one subshare for each group share - // - non-matching targets - // - recipient deletes one duplicate (unshare from self, permissions 0) - [ - [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup1', '/test', 31], - [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup2', '/test', 15], - // child of the previous ones - [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test (2)', 0, 0], - [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test (3)', 15, 1], - // different unrelated share - [Constants::SHARE_TYPE_GROUP, 456, 'recipientgroup1', '/test (4)', 31], - ], - [ - ['/test', 31], - ['/test', 15], - // subshares repaired and permissions restored to the max allowed - ['/test', 31], - ['/test', 15], - // leave unrelated alone - ['/test (4)', 31], - ] - ], - [ - // #7 bogus share: - // - outsider shares with group1, group2 - // - one subshare for each group share - // - non-matching targets - // - recipient deletes ALL duplicates (unshare from self, permissions 0) - [ - [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup1', '/test', 31], - [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup2', '/test', 15], - // child of the previous ones - [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test (2)', 0, 0], - [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test (3)', 0, 1], - // different unrelated share - [Constants::SHARE_TYPE_GROUP, 456, 'recipientgroup1', '/test (4)', 31], - ], - [ - ['/test', 31], - ['/test', 15], - // subshares target repaired but left "deleted" as it was the user's choice - ['/test', 0], - ['/test', 0], - // leave unrelated alone - ['/test (4)', 31], - ] - ], - [ - // #8 bogus share: - // - outsider shares with group1, group2 and also user2 - // - one subshare for each group share - // - one extra share entry for direct share to user2 - // - non-matching targets - // - user share has more permissions - [ - [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup1', '/test', 1], - [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup2', '/test', 15], - // child of the previous ones - [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test (2)', 1, 0], - [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test (3)', 15, 1], - [Constants::SHARE_TYPE_USER, 123, 'user2', '/test (4)', 31], - // different unrelated share - [Constants::SHARE_TYPE_GROUP, 456, 'recipientgroup1', '/test (5)', 31], - ], - [ - ['/test', 1], - ['/test', 15], - // subshares repaired - ['/test', 1], - ['/test', 15], - ['/test', 31], - // leave unrelated alone - ['/test (5)', 31], - ] - ], - [ - // #9 bogus share: - // - outsider shares with group1 and also user2 - // - no subshare at all - // - one extra share entry for direct share to user2 - // - non-matching targets - // - user share has more permissions - [ - [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup1', '/test', 1], - [Constants::SHARE_TYPE_USER, 123, 'user2', '/test (2)', 31], - // different unrelated share - [Constants::SHARE_TYPE_GROUP, 456, 'recipientgroup1', '/test (5)', 31], - ], - [ - ['/test', 1], - // user share repaired - ['/test', 31], - // leave unrelated alone - ['/test (5)', 31], - ] - ], - [ - // #10 legitimate share with own group: - // - insider shares with both groups the user is already in - // - no subshares in this case - [ - [Constants::SHARE_TYPE_GROUP, 123, 'samegroup1', '/test', 31], - [Constants::SHARE_TYPE_GROUP, 123, 'samegroup2', '/test', 31], - // different unrelated share - [Constants::SHARE_TYPE_GROUP, 456, 'recipientgroup1', '/test (4)', 31], - ], - [ - // leave all alone - ['/test', 31], - ['/test', 31], - // leave unrelated alone - ['/test (4)', 31], - ] - ], - [ - // #11 legitimate shares: - // - group share with same group - // - group share with other group - // - user share where recipient renamed - // - user share where recipient did not rename - [ - [Constants::SHARE_TYPE_GROUP, 123, 'samegroup1', '/test', 31], - [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup1', '/test', 31], - [Constants::SHARE_TYPE_USER, 123, 'user3', '/test legit rename', 31], - [Constants::SHARE_TYPE_USER, 123, 'user4', '/test', 31], - // different unrelated share - [Constants::SHARE_TYPE_GROUP, 456, 'recipientgroup1', '/test (4)', 31], - ], - [ - // leave all alone - ['/test', 31], - ['/test', 31], - ['/test legit rename', 31], - ['/test', 31], - // leave unrelated alone - ['/test (4)', 31], - ] - ], - [ - // #12 legitimate share: - // - outsider shares with group and user directly with different permissions - // - no subshares - // - same targets - [ - [Constants::SHARE_TYPE_GROUP, 123, 'samegroup1', '/test', 1], - [Constants::SHARE_TYPE_USER, 123, 'user3', '/test', 31], - // different unrelated share - [Constants::SHARE_TYPE_GROUP, 456, 'recipientgroup1', '/test (4)', 31], - ], - [ - // leave all alone - ['/test', 1], - ['/test', 31], - // leave unrelated alone - ['/test (4)', 31], - ] - ], - [ - // #13 bogus share: - // - outsider shares with group1, user2 and then group2 - // - user renamed share as soon as it arrived before the next share (order) - // - one subshare for each group share - // - one extra share entry for direct share to user2 - // - non-matching targets - [ - // first share with group - [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup1', '/test', 31], - // recipient renames - [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/first', 31, 0], - // then direct share, user renames too - [Constants::SHARE_TYPE_USER, 123, 'user2', '/second', 31], - // another share with the second group - [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup2', '/test', 31], - // use renames it - [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/third', 31, 1], - // different unrelated share - [Constants::SHARE_TYPE_GROUP, 456, 'recipientgroup1', '/test (5)', 31], - ], - [ - // group share with group1 left alone - ['/test', 31], - // first subshare repaired - ['/third', 31], - // direct user share repaired - ['/third', 31], - // group share with group2 left alone - ['/test', 31], - // second subshare repaired - ['/third', 31], - // leave unrelated alone - ['/test (5)', 31], - ] - ], - ]; - } - - /** - * Test merge shares from group shares - * - * @dataProvider sharesDataProvider - */ - public function testMergeGroupShares($shares, $expectedShares) { - $user1 = $this->createMock(IUser::class); - $user1->expects($this->any()) - ->method('getUID') - ->will($this->returnValue('user1')); - - $user2 = $this->createMock(IUser::class); - $user2->expects($this->any()) - ->method('getUID') - ->will($this->returnValue('user2')); - - $users = [$user1, $user2]; - - $this->groupManager->expects($this->any()) - ->method('getUserGroupIds') - ->will($this->returnValueMap([ - // owner - [$user1, ['samegroup1', 'samegroup2']], - // recipient - [$user2, ['recipientgroup1', 'recipientgroup2']], - ])); - - $this->userManager->expects($this->once()) - ->method('countUsers') - ->will($this->returnValue([2])); - $this->userManager->expects($this->once()) - ->method('callForAllUsers') - ->will($this->returnCallback(function(\Closure $closure) use ($users) { - foreach ($users as $user) { - $closure($user); - } - })); - - $shareIds = []; - - foreach ($shares as $share) { - // if parent - if (isset($share[5])) { - // adjust to real id - $share[5] = $shareIds[$share[5]]; - } else { - $share[5] = null; - } - $shareIds[] = $this->createShare($share[0], $share[1], $share[2], $share[3], $share[4], $share[5]); - } - - /** @var IOutput | \PHPUnit_Framework_MockObject_MockObject $outputMock */ - $outputMock = $this->getMockBuilder('\OCP\Migration\IOutput') - ->disableOriginalConstructor() - ->getMock(); - - $this->repair->run($outputMock); - - foreach ($expectedShares as $index => $expectedShare) { - $share = $this->getShareById($shareIds[$index]); - $this->assertEquals($expectedShare[0], $share['file_target']); - $this->assertEquals($expectedShare[1], $share['permissions']); - } - } - - public function duplicateNamesProvider() { - return [ - // matching - ['filename (1).txt', true], - ['folder (2)', true], - ['filename (1)(2).txt', true], - // non-matching - ['filename ().txt', false], - ['folder ()', false], - ['folder (1x)', false], - ['folder (x1)', false], - ['filename (a)', false], - ['filename (1).', false], - ['filename (1).txt.txt', false], - ['filename (1)..txt', false], - ]; - } - - /** - * @dataProvider duplicateNamesProvider - */ - public function testIsPotentialDuplicateName($name, $expectedResult) { - $this->assertEquals($expectedResult, $this->invokePrivate($this->repair, 'isPotentialDuplicateName', [$name])); - } -} - diff --git a/tests/lib/Repair/UpdateOutdatedOcsIdsTest.php b/tests/lib/Repair/UpdateOutdatedOcsIdsTest.php deleted file mode 100644 index eb80e63a202..00000000000 --- a/tests/lib/Repair/UpdateOutdatedOcsIdsTest.php +++ /dev/null @@ -1,80 +0,0 @@ -<?php -/** - * @author Lukas Reschke <l8kas@owncloud.com> - * - * @copyright Copyright (c) 2015, ownCloud, Inc. - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace Test\Repair; - -use OCP\IConfig; -use Test\TestCase; - -/** - * Class UpdateOutdatedOcsIds - * - * @package Test\Repair - */ -class UpdateOutdatedOcsIdsTest extends TestCase { - /** @var IConfig | \PHPUnit_Framework_MockObject_MockObject */ - private $config; - /** @var \OC\Repair\UpdateOutdatedOcsIds */ - private $updateOutdatedOcsIds; - - public function setUp() { - parent::setUp(); - $this->config = $this->getMockBuilder('\\OCP\\IConfig')->getMock(); - $this->updateOutdatedOcsIds = new \OC\Repair\UpdateOutdatedOcsIds($this->config); - } - - public function testGetName() { - $this->assertSame('Repair outdated OCS IDs', $this->updateOutdatedOcsIds->getName()); - } - - public function testFixOcsIdNoOcsId() { - $this->config - ->expects($this->once()) - ->method('getAppValue') - ->with('MyNotInstalledApp', 'ocsid') - ->will($this->returnValue('')); - $this->assertFalse($this->updateOutdatedOcsIds->fixOcsId('MyNotInstalledApp', '1337', '0815')); - } - - public function testFixOcsIdUpdateOcsId() { - $this->config - ->expects($this->at(0)) - ->method('getAppValue') - ->with('MyInstalledApp', 'ocsid') - ->will($this->returnValue('1337')); - $this->config - ->expects($this->at(1)) - ->method('setAppValue') - ->with('MyInstalledApp', 'ocsid', '0815'); - - $this->assertTrue($this->updateOutdatedOcsIds->fixOcsId('MyInstalledApp', '1337', '0815')); - } - - public function testFixOcsIdAlreadyFixed() { - $this->config - ->expects($this->once()) - ->method('getAppValue') - ->with('MyAlreadyFixedAppId', 'ocsid') - ->will($this->returnValue('0815')); - - $this->assertFalse($this->updateOutdatedOcsIds->fixOcsId('MyAlreadyFixedAppId', '1337', '0815')); - } -} diff --git a/tests/lib/Repair/fixtures/dropoldtables.xml b/tests/lib/Repair/fixtures/dropoldtables.xml deleted file mode 100644 index 6c42a8f90a7..00000000000 --- a/tests/lib/Repair/fixtures/dropoldtables.xml +++ /dev/null @@ -1,24 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<database> - - <name>*dbname*</name> - <create>true</create> - <overwrite>false</overwrite> - - <charset>utf8</charset> - - <table> - - <name>*dbprefix*permissions</name> - - <declaration> - <field> - <name>textfield</name> - <type>text</type> - <default>foo</default> - <notnull>true</notnull> - <length>32</length> - </field> - </declaration> - </table> -</database> |