diff options
657 files changed, 10073 insertions, 2111 deletions
diff --git a/apps/comments/css/comments.css b/apps/comments/css/comments.css index 796a550227b..2d794d52708 100644 --- a/apps/comments/css/comments.css +++ b/apps/comments/css/comments.css @@ -54,7 +54,6 @@ #commentsTabView .comment { position: relative; - z-index: 1; margin-bottom: 30px; } @@ -108,6 +107,11 @@ vertical-align: middle; } +#commentsTabView .authorRow>div.hidden { + display: none !important; +} + +#commentsTabView .comments li .message .avatar-name-wrapper, #commentsTabView .comment .authorRow { position: relative; } diff --git a/apps/comments/js/commentstabview.js b/apps/comments/js/commentstabview.js index 2256bea943e..ace0862ad2e 100644 --- a/apps/comments/js/commentstabview.js +++ b/apps/comments/js/commentstabview.js @@ -232,6 +232,21 @@ var $this = $(this); $this.avatar($this.attr('data-username'), 32); }); + + var username = $el.find('.avatar').data('username'); + if (username !== oc_current_user) { + $el.find('.authorRow .avatar, .authorRow .author').contactsMenu( + username, 0, $el.find('.authorRow')); + } + + var message = $el.find('.message'); + message.find('.avatar').each(function() { + var avatar = $(this); + var strong = $(this).next(); + var appendTo = $(this).parent(); + + $.merge(avatar, strong).contactsMenu(avatar.data('user'), 0, appendTo); + }); }, /** @@ -251,7 +266,10 @@ // escape possible regex characters in the name mention = mention.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - var displayName = avatar + ' <strong>'+ _.escape(mentions[i].mentionDisplayName)+'</strong>'; + var displayName = '' + + '<span class="avatar-name-wrapper">' + + avatar + ' <strong>'+ _.escape(mentions[i].mentionDisplayName)+'</strong>' + + '</span>'; // replace every mention either at the start of the input or after a whitespace // followed by a non-word character. diff --git a/apps/comments/l10n/ko.js b/apps/comments/l10n/ko.js index 9b47580715b..b9c19edc400 100644 --- a/apps/comments/l10n/ko.js +++ b/apps/comments/l10n/ko.js @@ -2,30 +2,33 @@ OC.L10N.register( "comments", { "Comments" : "댓글", - "Unknown user" : "알려지지 않은 사용자", - "New comment …" : "새로운 댓글 ...", + "Unknown user" : "알 수 없는 사용자", + "New comment …" : "새로운 댓글 …", "Delete comment" : "댓글 삭제", "Post" : "게시", "Cancel" : "취소", "Edit comment" : "댓글 편집", "[Deleted user]" : "[삭제된 사용자]", - "No comments yet, start the conversation!" : "아직 댓글이 없습니다. 대화를 시작합니다!", - "More comments …" : "더 많은 댓글...", + "No comments yet, start the conversation!" : "아직 댓글이 없습니다. 대화를 시작하십시오!", + "More comments …" : "더 많은 댓글 …", "Save" : "저장", "Allowed characters {count} of {max}" : "{count}/{max} 글자 사용 가능", - "Error occurred while retrieving comment with id {id}" : "댓글을 가져오는 중 오류가 발생했습니다 {ID}", - "Error occurred while updating comment with id {id}" : "댓글을 업데이트하는 동안 오류가 발생했습니다 {ID}", + "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개"], "Comment" : "설명", - "You commented" : "댓글을 달았습니다", + "You commented" : "댓글 남김", "%1$s commented" : "%1$s 님의 댓글", + "{author} commented" : "{author} 님이 댓글 남김", + "You commented on %1$s" : "%1$s에 댓글 남김", + "You commented on {file}" : "{file}에 댓글 남김", "%1$s commented on %2$s" : "%2$s에 %1$s 님이 댓글 남김", + "{author} commented on {file}" : "{author} 님이 {file}에 댓글 남김", "<strong>Comments</strong> for files" : "파일의 <strong>댓글</strong>", - "Type in a new comment..." : "새 댓글을 입력하십시오...", - "No other comments available" : "더 이상 댓글 없음", - "More comments..." : "더 많은 댓글...", - "{count} unread comments" : "읽지 않은 댓글 {count}개", - "You commented on %2$s" : "%2$s에 댓글 남김" + "A (now) deleted user mentioned you in a comment on “%s”" : "(현재) 삭제된 사용자가 “%s”에 남긴 댓글에서 여러분을 언급함", + "A (now) deleted user mentioned you in a comment on “{file}”" : "(현재) 삭제된 사용자가 “{file}”에 남긴 댓글에서 여러분을 언급함", + "%1$s mentioned you in a comment on “%2$s”" : "%1$s 님이 “%2$s”에 남긴 댓글에서 여러분을 언급함", + "{user} mentioned you in a comment on “{file}”" : "{user} 님이 “{file}”에 남긴 댓글에서 여러분을 언급함" }, "nplurals=1; plural=0;"); diff --git a/apps/comments/l10n/ko.json b/apps/comments/l10n/ko.json index 2a85af253a0..0f994e92580 100644 --- a/apps/comments/l10n/ko.json +++ b/apps/comments/l10n/ko.json @@ -1,29 +1,32 @@ { "translations": { "Comments" : "댓글", - "Unknown user" : "알려지지 않은 사용자", - "New comment …" : "새로운 댓글 ...", + "Unknown user" : "알 수 없는 사용자", + "New comment …" : "새로운 댓글 …", "Delete comment" : "댓글 삭제", "Post" : "게시", "Cancel" : "취소", "Edit comment" : "댓글 편집", "[Deleted user]" : "[삭제된 사용자]", - "No comments yet, start the conversation!" : "아직 댓글이 없습니다. 대화를 시작합니다!", - "More comments …" : "더 많은 댓글...", + "No comments yet, start the conversation!" : "아직 댓글이 없습니다. 대화를 시작하십시오!", + "More comments …" : "더 많은 댓글 …", "Save" : "저장", "Allowed characters {count} of {max}" : "{count}/{max} 글자 사용 가능", - "Error occurred while retrieving comment with id {id}" : "댓글을 가져오는 중 오류가 발생했습니다 {ID}", - "Error occurred while updating comment with id {id}" : "댓글을 업데이트하는 동안 오류가 발생했습니다 {ID}", + "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개"], "Comment" : "설명", - "You commented" : "댓글을 달았습니다", + "You commented" : "댓글 남김", "%1$s commented" : "%1$s 님의 댓글", + "{author} commented" : "{author} 님이 댓글 남김", + "You commented on %1$s" : "%1$s에 댓글 남김", + "You commented on {file}" : "{file}에 댓글 남김", "%1$s commented on %2$s" : "%2$s에 %1$s 님이 댓글 남김", + "{author} commented on {file}" : "{author} 님이 {file}에 댓글 남김", "<strong>Comments</strong> for files" : "파일의 <strong>댓글</strong>", - "Type in a new comment..." : "새 댓글을 입력하십시오...", - "No other comments available" : "더 이상 댓글 없음", - "More comments..." : "더 많은 댓글...", - "{count} unread comments" : "읽지 않은 댓글 {count}개", - "You commented on %2$s" : "%2$s에 댓글 남김" + "A (now) deleted user mentioned you in a comment on “%s”" : "(현재) 삭제된 사용자가 “%s”에 남긴 댓글에서 여러분을 언급함", + "A (now) deleted user mentioned you in a comment on “{file}”" : "(현재) 삭제된 사용자가 “{file}”에 남긴 댓글에서 여러분을 언급함", + "%1$s mentioned you in a comment on “%2$s”" : "%1$s 님이 “%2$s”에 남긴 댓글에서 여러분을 언급함", + "{user} mentioned you in a comment on “{file}”" : "{user} 님이 “{file}”에 남긴 댓글에서 여러분을 언급함" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/comments/tests/js/commentstabviewSpec.js b/apps/comments/tests/js/commentstabviewSpec.js index 0bbfaa1f295..c961548d806 100644 --- a/apps/comments/tests/js/commentstabviewSpec.js +++ b/apps/comments/tests/js/commentstabviewSpec.js @@ -153,7 +153,7 @@ describe('OCA.Comments.CommentsTabView tests', function() { expect($comment.find('strong:first').text()).toEqual('Thane of Cawdor'); expect($comment.find('.avatar[data-user=banquo]').length).toEqual(1); - expect($comment.find('strong:last-child').text()).toEqual('Lord Banquo'); + expect($comment.find('.avatar-name-wrapper:last-child strong').text()).toEqual('Lord Banquo'); }); }); diff --git a/apps/dav/appinfo/database.xml b/apps/dav/appinfo/database.xml index 0efd2a46d61..b3a69de070c 100644 --- a/apps/dav/appinfo/database.xml +++ b/apps/dav/appinfo/database.xml @@ -671,6 +671,78 @@ CREATE TABLE calendarobjects ( </table> <table> + <name>*dbprefix*calendarobjects_props</name> + <declaration> + <field> + <name>id</name> + <type>integer</type> + <default>0</default> + <notnull>true</notnull> + <autoincrement>1</autoincrement> + <unsigned>true</unsigned> + <length>11</length> + </field> + <field> + <name>calendarid</name> + <type>integer</type> + <default></default> + <notnull>true</notnull> + <length>11</length> + </field> + <field> + <name>objectid</name> + <type>integer</type> + <default></default> + <notnull>true</notnull> + <unsigned>true</unsigned> + <length>11</length> + </field> + <field> + <name>name</name> + <type>text</type> + <default></default> + <notnull>false</notnull> + <length>64</length> + </field> + <field> + <name>parameter</name> + <type>text</type> + <default></default> + <notnull>false</notnull> + <length>64</length> + </field> + <field> + <name>value</name> + <type>text</type> + <default></default> + <notnull>false</notnull> + <length>255</length> + </field> + <index> + <name>calendarobject_index</name> + <field> + <name>objectid</name> + <sorting>ascending</sorting> + </field> + </index> + <index> + <name>calendarobject_name_index</name> + <field> + <name>name</name> + <sorting>ascending</sorting> + </field> + </index> + <index> + <name>calendarobject_value_index</name> + <field> + <name>value</name> + <sorting>ascending</sorting> + </field> + </index> + </declaration> + </table> + + <table> <name>*dbprefix*dav_shares</name> <declaration> <field> diff --git a/apps/dav/appinfo/info.xml b/apps/dav/appinfo/info.xml index 0902c487247..2d9f73b3f43 100644 --- a/apps/dav/appinfo/info.xml +++ b/apps/dav/appinfo/info.xml @@ -5,7 +5,7 @@ <description>WebDAV endpoint</description> <licence>AGPL</licence> <author>owncloud.org</author> - <version>1.2.0</version> + <version>1.3.0</version> <default_enable/> <types> <filesystem/> @@ -24,6 +24,7 @@ <post-migration> <step>OCA\DAV\Migration\FixBirthdayCalendarComponent</step> <step>OCA\DAV\Migration\CalDAVRemoveEmptyValue</step> + <step>OCA\DAV\Migration\BuildCalendarSearchIndex</step> </post-migration> </repair-steps> <commands> diff --git a/apps/dav/l10n/ko.js b/apps/dav/l10n/ko.js new file mode 100644 index 00000000000..af429509986 --- /dev/null +++ b/apps/dav/l10n/ko.js @@ -0,0 +1,49 @@ +OC.L10N.register( + "dav", + { + "Calendar" : "달력", + "Todos" : "할 일", + "{actor} created calendar {calendar}" : "{actor} 님이 달력 {calendar}을(를) 생성함", + "You created calendar {calendar}" : "달력 {calendar}을(를) 생성함", + "{actor} deleted calendar {calendar}" : "{actor} 님이 달력 {calendar}을(를) 삭제함", + "You deleted calendar {calendar}" : "달력 {calendar}을(를) 삭제함", + "{actor} updated calendar {calendar}" : "{actor} 님이 달력 {calendar}을(를) 업데이트함", + "You updated calendar {calendar}" : "달력 {calendar}을(를) 업데이트함", + "{actor} shared calendar {calendar} with you" : "{actor} 님이 내게 달력 {calendar}을(를) 공유함", + "You shared calendar {calendar} with {user}" : "{user} 님과 달력 {calendar}을(를) 공유함", + "{actor} shared calendar {calendar} with {user}" : "{actor} 님이 {user} 님과 달력 {calendar}을(를) 공유함", + "{actor} unshared calendar {calendar} from you" : "{actor} 님이 달력 {calendar}의 공유를 중단함", + "You unshared calendar {calendar} from {user}" : "{user} 님과 달력 {calendar}의 공유를 중단함", + "{actor} unshared calendar {calendar} from {user}" : "{actor} 님이 {user} 님과 {calendar} 달력의 공유를 중단함", + "{actor} unshared calendar {calendar} from themselves" : "{actor} 님이 달력 {calendar}의 공유를 해제함", + "You shared calendar {calendar} with group {group}" : "달력 {calendar}을(를) 그룹 {group}와(과) 공유함", + "{actor} shared calendar {calendar} with group {group}" : "{actor} 님이 달력 {calendar}을(를) 그룹 {group}와(과) 공유함", + "You unshared calendar {calendar} from group {group}" : "달력 {calendar}을(를) 그룹 {group}와(과) 공유하지 않음", + "{actor} unshared calendar {calendar} from group {group}" : "{actor} 님이 달력 {calendar}을(를) 그룹 {group}와(과) 공유하지 않음", + "{actor} created event {event} in calendar {calendar}" : "{actor} 님이 행사 {event}을(를) 달력 {calendar}에 생성함", + "You created event {event} in calendar {calendar}" : "행사 {event}을(를) 달력 {calendar}에 생성함", + "{actor} deleted event {event} from calendar {calendar}" : "{actor} 님이 행사 {event}을(를) 달력 {calendar}에서 삭제함", + "You deleted event {event} from calendar {calendar}" : "행사 {event}을(를) 달력 {calendar}에서 삭제함", + "{actor} updated event {event} in calendar {calendar}" : "{actor} 님이 달력 {calendar}의 행사 {event}을(를) 업데이트함", + "You updated event {event} in calendar {calendar}" : "달력 {calendar}의 행사 {event}을(를) 업데이트함", + "{actor} created todo {todo} in list {calendar}" : "{actor} 님이 목록 {calendar}에 할 일 {todo}을(를) 생성함", + "You created todo {todo} in list {calendar}" : "목록 {calendar}에 할 일 {todo}을(를) 생성함", + "{actor} deleted todo {todo} from list {calendar}" : "{actor} 님이 목록 {calendar}에서 할 일 {todo}을(를) 삭제함", + "You deleted todo {todo} from list {calendar}" : "목록 {calendar}에서 할 일 {todo}을(를) 삭제함", + "{actor} updated todo {todo} in list {calendar}" : "{actor} 님이 목록 {calendar}의 할 일 {todo}을(를) 업데이트함", + "You updated todo {todo} in list {calendar}" : "목록 {calendar}의 할 일 {todo}을(를) 업데이트함", + "{actor} solved todo {todo} in list {calendar}" : "{actor} 님이 목록 {calendar}의 할 일 {todo}을(를) 끝냄", + "You solved todo {todo} in list {calendar}" : "목록 {calendar}의 할 일 {todo}을(를) 끝냄", + "{actor} reopened todo {todo} in list {calendar}" : "{actor} 님이 목록 {calendar}의 할 일 {todo}을(를) 다시 염", + "You reopened todo {todo} in list {calendar}" : "목록 {calendar}의 할 일 {todo}을(를) 다시 염", + "A <strong>calendar</strong> was modified" : "<strong>달력</strong>이 수정됨", + "A calendar <strong>event</strong> was modified" : "달력 <strong>행사</strong>가 수정됨", + "A calendar <strong>todo</strong> was modified" : "달력의 <strong>할 일</strong>이 수정됨", + "Contact birthdays" : "연락처에 등록된 생일", + "Personal" : "개인", + "Contacts" : "연락처", + "Technical details" : "기술 정보", + "Remote Address: %s" : "원격 주소: %s", + "Request ID: %s" : "요청 ID: %s" +}, +"nplurals=1; plural=0;"); diff --git a/apps/dav/l10n/ko.json b/apps/dav/l10n/ko.json new file mode 100644 index 00000000000..7731c7140ae --- /dev/null +++ b/apps/dav/l10n/ko.json @@ -0,0 +1,47 @@ +{ "translations": { + "Calendar" : "달력", + "Todos" : "할 일", + "{actor} created calendar {calendar}" : "{actor} 님이 달력 {calendar}을(를) 생성함", + "You created calendar {calendar}" : "달력 {calendar}을(를) 생성함", + "{actor} deleted calendar {calendar}" : "{actor} 님이 달력 {calendar}을(를) 삭제함", + "You deleted calendar {calendar}" : "달력 {calendar}을(를) 삭제함", + "{actor} updated calendar {calendar}" : "{actor} 님이 달력 {calendar}을(를) 업데이트함", + "You updated calendar {calendar}" : "달력 {calendar}을(를) 업데이트함", + "{actor} shared calendar {calendar} with you" : "{actor} 님이 내게 달력 {calendar}을(를) 공유함", + "You shared calendar {calendar} with {user}" : "{user} 님과 달력 {calendar}을(를) 공유함", + "{actor} shared calendar {calendar} with {user}" : "{actor} 님이 {user} 님과 달력 {calendar}을(를) 공유함", + "{actor} unshared calendar {calendar} from you" : "{actor} 님이 달력 {calendar}의 공유를 중단함", + "You unshared calendar {calendar} from {user}" : "{user} 님과 달력 {calendar}의 공유를 중단함", + "{actor} unshared calendar {calendar} from {user}" : "{actor} 님이 {user} 님과 {calendar} 달력의 공유를 중단함", + "{actor} unshared calendar {calendar} from themselves" : "{actor} 님이 달력 {calendar}의 공유를 해제함", + "You shared calendar {calendar} with group {group}" : "달력 {calendar}을(를) 그룹 {group}와(과) 공유함", + "{actor} shared calendar {calendar} with group {group}" : "{actor} 님이 달력 {calendar}을(를) 그룹 {group}와(과) 공유함", + "You unshared calendar {calendar} from group {group}" : "달력 {calendar}을(를) 그룹 {group}와(과) 공유하지 않음", + "{actor} unshared calendar {calendar} from group {group}" : "{actor} 님이 달력 {calendar}을(를) 그룹 {group}와(과) 공유하지 않음", + "{actor} created event {event} in calendar {calendar}" : "{actor} 님이 행사 {event}을(를) 달력 {calendar}에 생성함", + "You created event {event} in calendar {calendar}" : "행사 {event}을(를) 달력 {calendar}에 생성함", + "{actor} deleted event {event} from calendar {calendar}" : "{actor} 님이 행사 {event}을(를) 달력 {calendar}에서 삭제함", + "You deleted event {event} from calendar {calendar}" : "행사 {event}을(를) 달력 {calendar}에서 삭제함", + "{actor} updated event {event} in calendar {calendar}" : "{actor} 님이 달력 {calendar}의 행사 {event}을(를) 업데이트함", + "You updated event {event} in calendar {calendar}" : "달력 {calendar}의 행사 {event}을(를) 업데이트함", + "{actor} created todo {todo} in list {calendar}" : "{actor} 님이 목록 {calendar}에 할 일 {todo}을(를) 생성함", + "You created todo {todo} in list {calendar}" : "목록 {calendar}에 할 일 {todo}을(를) 생성함", + "{actor} deleted todo {todo} from list {calendar}" : "{actor} 님이 목록 {calendar}에서 할 일 {todo}을(를) 삭제함", + "You deleted todo {todo} from list {calendar}" : "목록 {calendar}에서 할 일 {todo}을(를) 삭제함", + "{actor} updated todo {todo} in list {calendar}" : "{actor} 님이 목록 {calendar}의 할 일 {todo}을(를) 업데이트함", + "You updated todo {todo} in list {calendar}" : "목록 {calendar}의 할 일 {todo}을(를) 업데이트함", + "{actor} solved todo {todo} in list {calendar}" : "{actor} 님이 목록 {calendar}의 할 일 {todo}을(를) 끝냄", + "You solved todo {todo} in list {calendar}" : "목록 {calendar}의 할 일 {todo}을(를) 끝냄", + "{actor} reopened todo {todo} in list {calendar}" : "{actor} 님이 목록 {calendar}의 할 일 {todo}을(를) 다시 염", + "You reopened todo {todo} in list {calendar}" : "목록 {calendar}의 할 일 {todo}을(를) 다시 염", + "A <strong>calendar</strong> was modified" : "<strong>달력</strong>이 수정됨", + "A calendar <strong>event</strong> was modified" : "달력 <strong>행사</strong>가 수정됨", + "A calendar <strong>todo</strong> was modified" : "달력의 <strong>할 일</strong>이 수정됨", + "Contact birthdays" : "연락처에 등록된 생일", + "Personal" : "개인", + "Contacts" : "연락처", + "Technical details" : "기술 정보", + "Remote Address: %s" : "원격 주소: %s", + "Request ID: %s" : "요청 ID: %s" +},"pluralForm" :"nplurals=1; plural=0;" +}
\ No newline at end of file diff --git a/apps/dav/lib/CalDAV/CalDavBackend.php b/apps/dav/lib/CalDAV/CalDavBackend.php index a4fed4f1982..fcf73cb0f31 100644 --- a/apps/dav/lib/CalDAV/CalDavBackend.php +++ b/apps/dav/lib/CalDAV/CalDavBackend.php @@ -1,11 +1,13 @@ <?php /** * @copyright Copyright (c) 2016, ownCloud, Inc. + * @copyright Copyright (c) 2017 Georg Ehrke * * @author Joas Schilling <coding@schilljs.com> * @author Stefan Weil <sw@weilnetz.de> * @author Thomas Citharel <tcit@tcit.fr> * @author Thomas Müller <thomas.mueller@tmit.eu> + * @author Georg Ehrke <oc.list@georgehrke.com> * * @license AGPL-3.0 * @@ -44,6 +46,7 @@ use Sabre\DAV\Exception\Forbidden; use Sabre\DAV\Exception\NotFound; use Sabre\DAV\PropPatch; use Sabre\HTTP\URLUtil; +use Sabre\VObject\Component\VCalendar; use Sabre\VObject\DateTimeParser; use Sabre\VObject\Reader; use Sabre\VObject\Recur\EventIterator; @@ -108,6 +111,17 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription '{http://calendarserver.org/ns/}subscribed-strip-attachments' => 'stripattachments', ]; + /** @var array properties to index */ + public static $indexProperties = ['CATEGORIES', 'COMMENT', 'DESCRIPTION', + 'LOCATION', 'RESOURCES', 'STATUS', 'SUMMARY', 'ATTENDEE', 'CONTACT', + 'ORGANIZER']; + + /** @var array parameters to index */ + public static $indexParameters = [ + 'ATTENDEE' => ['CN'], + 'ORGANIZER' => ['CN'], + ]; + /** * @var string[] Map of uid => display name */ @@ -134,6 +148,9 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription /** @var bool */ private $legacyEndpoint; + /** @var string */ + private $dbObjectPropertiesTable = 'calendarobjects_props'; + /** * CalDavBackend constructor. * @@ -746,6 +763,11 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription $stmt->execute([$calendarId]); $this->sharingBackend->deleteAllShares($calendarId); + + $query = $this->db->getQueryBuilder(); + $query->delete($this->dbObjectPropertiesTable) + ->where($query->expr()->eq('calendarid', $query->createNamedParameter($calendarId))) + ->execute(); } /** @@ -940,6 +962,8 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription ]) ->execute(); + $this->updateProperties($calendarId, $objectUri, $calendarData); + $this->dispatcher->dispatch('\OCA\DAV\CalDAV\CalDavBackend::createCalendarObject', new GenericEvent( '\OCA\DAV\CalDAV\CalDavBackend::createCalendarObject', [ @@ -990,6 +1014,8 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription ->andWhere($query->expr()->eq('uri', $query->createNamedParameter($objectUri))) ->execute(); + $this->updateProperties($calendarId, $objectUri, $calendarData); + $data = $this->getCalendarObject($calendarId, $objectUri); if (is_array($data)) { $this->dispatcher->dispatch('\OCA\DAV\CalDAV\CalDavBackend::updateCalendarObject', new GenericEvent( @@ -1050,6 +1076,8 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription $stmt = $this->db->prepare('DELETE FROM `*PREFIX*calendarobjects` WHERE `calendarid` = ? AND `uri` = ?'); $stmt->execute([$calendarId, $objectUri]); + $this->purgeProperties($calendarId, $data['id']); + $this->addChange($calendarId, $objectUri, 3); } @@ -1168,6 +1196,125 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription } /** + * custom Nextcloud search extension for CalDAV + * + * @param string $principalUri + * @param array $filters + * @param integer|null $limit + * @param integer|null $offset + * @return array + */ + public function calendarSearch($principalUri, array $filters, $limit=null, $offset=null) { + $calendars = $this->getCalendarsForUser($principalUri); + $ownCalendars = []; + $sharedCalendars = []; + + $uriMapper = []; + + foreach($calendars as $calendar) { + if ($calendar['{http://owncloud.org/ns}owner-principal'] === $principalUri) { + $ownCalendars[] = $calendar['id']; + } else { + $sharedCalendars[] = $calendar['id']; + } + $uriMapper[$calendar['id']] = $calendar['uri']; + } + if (count($ownCalendars) === 0 && count($sharedCalendars) === 0) { + return []; + } + + $query = $this->db->getQueryBuilder(); + // Calendar id expressions + $calendarExpressions = []; + foreach($ownCalendars as $id) { + $calendarExpressions[] = $query->expr() + ->eq('c.calendarid', $query->createNamedParameter($id)); + } + foreach($sharedCalendars as $id) { + $calendarExpressions[] = $query->expr()->andX( + $query->expr()->eq('c.calendarid', + $query->createNamedParameter($id)), + $query->expr()->eq('c.classification', + $query->createNamedParameter(self::CLASSIFICATION_PUBLIC)) + ); + } + + if (count($calendarExpressions) === 1) { + $calExpr = $calendarExpressions[0]; + } else { + $calExpr = call_user_func_array([$query->expr(), 'orX'], $calendarExpressions); + } + + // Component expressions + $compExpressions = []; + foreach($filters['comps'] as $comp) { + $compExpressions[] = $query->expr() + ->eq('c.componenttype', $query->createNamedParameter($comp)); + } + + if (count($compExpressions) === 1) { + $compExpr = $compExpressions[0]; + } else { + $compExpr = call_user_func_array([$query->expr(), 'orX'], $compExpressions); + } + + if (!isset($filters['props'])) { + $filters['props'] = []; + } + if (!isset($filters['params'])) { + $filters['params'] = []; + } + + $propParamExpressions = []; + foreach($filters['props'] as $prop) { + $propParamExpressions[] = $query->expr()->andX( + $query->expr()->eq('i.name', $query->createNamedParameter($prop)), + $query->expr()->isNull('i.parameter') + ); + } + foreach($filters['params'] as $param) { + $propParamExpressions[] = $query->expr()->andX( + $query->expr()->eq('i.name', $query->createNamedParameter($param['property'])), + $query->expr()->eq('i.parameter', $query->createNamedParameter($param['parameter'])) + ); + } + + if (count($propParamExpressions) === 1) { + $propParamExpr = $propParamExpressions[0]; + } else { + $propParamExpr = call_user_func_array([$query->expr(), 'orX'], $propParamExpressions); + } + + $query->select(['c.calendarid', 'c.uri']) + ->from($this->dbObjectPropertiesTable, 'i') + ->join('i', 'calendarobjects', 'c', $query->expr()->eq('i.objectid', 'c.id')) + ->where($calExpr) + ->andWhere($compExpr) + ->andWhere($propParamExpr) + ->andWhere($query->expr()->iLike('i.value', + $query->createNamedParameter('%'.$this->db->escapeLikeParameter($filters['search-term']).'%'))); + + if ($offset) { + $query->setFirstResult($offset); + } + if ($limit) { + $query->setMaxResults($limit); + } + + $stmt = $query->execute(); + + $result = []; + while($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { + $path = $uriMapper[$row['calendarid']] . '/' . $row['uri']; + if (!in_array($path, $result)) { + $result[] = $path; + } + } + + return $result; + } + + /** * Searches through all of a users calendars and calendar objects to find * an object with a specific UID. * @@ -1820,6 +1967,130 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription return $this->sharingBackend->applyShareAcl($resourceId, $acl); } + + + /** + * update properties table + * + * @param int $calendarId + * @param string $objectUri + * @param string $calendarData + */ + public function updateProperties($calendarId, $objectUri, $calendarData) { + $objectId = $this->getCalendarObjectId($calendarId, $objectUri); + + try { + $vCalendar = $this->readCalendarData($calendarData); + } catch (\Exception $ex) { + return; + } + + $this->purgeProperties($calendarId, $objectId); + + $query = $this->db->getQueryBuilder(); + $query->insert($this->dbObjectPropertiesTable) + ->values( + [ + 'calendarid' => $query->createNamedParameter($calendarId), + 'objectid' => $query->createNamedParameter($objectId), + 'name' => $query->createParameter('name'), + 'parameter' => $query->createParameter('parameter'), + 'value' => $query->createParameter('value'), + ] + ); + + $indexComponents = ['VEVENT', 'VJOURNAL', 'VTODO']; + foreach ($vCalendar->getComponents() as $component) { + if (!in_array($component->name, $indexComponents)) { + continue; + } + + foreach ($component->children() as $property) { + if (in_array($property->name, self::$indexProperties)) { + $value = $property->getValue(); + // is this a shitty db? + if ($this->db->supports4ByteText()) { + $value = preg_replace('/[\x{10000}-\x{10FFFF}]/u', "\xEF\xBF\xBD", $value); + } + $value = substr($value, 0, 254); + + $query->setParameter('name', $property->name); + $query->setParameter('parameter', null); + $query->setParameter('value', $value); + $query->execute(); + } + + if (in_array($property->name, array_keys(self::$indexParameters))) { + $parameters = $property->parameters(); + $indexedParametersForProperty = self::$indexParameters[$property->name]; + + foreach ($parameters as $key => $value) { + if (in_array($key, $indexedParametersForProperty)) { + // is this a shitty db? + if ($this->db->supports4ByteText()) { + $value = preg_replace('/[\x{10000}-\x{10FFFF}]/u', "\xEF\xBF\xBD", $value); + } + $value = substr($value, 0, 254); + + $query->setParameter('name', $property->name); + $query->setParameter('parameter', substr($key, 0, 254)); + $query->setParameter('value', substr($value, 0, 254)); + $query->execute(); + } + } + } + } + } + } + + /** + * read VCalendar data into a VCalendar object + * + * @param string $objectData + * @return VCalendar + */ + protected function readCalendarData($objectData) { + return Reader::read($objectData); + } + + /** + * delete all properties from a given calendar object + * + * @param int $calendarId + * @param int $objectId + */ + protected function purgeProperties($calendarId, $objectId) { + $query = $this->db->getQueryBuilder(); + $query->delete($this->dbObjectPropertiesTable) + ->where($query->expr()->eq('objectid', $query->createNamedParameter($objectId))) + ->andWhere($query->expr()->eq('calendarid', $query->createNamedParameter($calendarId))); + $query->execute(); + } + + /** + * get ID from a given calendar object + * + * @param int $calendarId + * @param string $uri + * @return int + */ + protected function getCalendarObjectId($calendarId, $uri) { + $query = $this->db->getQueryBuilder(); + $query->select('id')->from('calendarobjects') + ->where($query->expr()->eq('uri', $query->createNamedParameter($uri))) + ->andWhere($query->expr()->eq('calendarid', $query->createNamedParameter($calendarId))); + + $result = $query->execute(); + $objectIds = $result->fetch(); + $result->closeCursor(); + + if (!isset($objectIds['id'])) { + throw new \InvalidArgumentException('Calendarobject does not exists: ' . $uri); + } + + return (int)$objectIds['id']; + } + private function convertPrincipal($principalUri, $toV2) { if ($this->principalBackend->getPrincipalPrefix() === 'principals') { list(, $name) = URLUtil::splitPath($principalUri); diff --git a/apps/dav/lib/CalDAV/CalendarHome.php b/apps/dav/lib/CalDAV/CalendarHome.php index 7320754e6df..2aa2c9caa36 100644 --- a/apps/dav/lib/CalDAV/CalendarHome.php +++ b/apps/dav/lib/CalDAV/CalendarHome.php @@ -111,4 +111,14 @@ class CalendarHome extends \Sabre\CalDAV\CalendarHome { throw new NotFound('Node with name \'' . $name . '\' could not be found'); } + + /** + * @param array $filters + * @param integer|null $limit + * @param integer|null $offset + */ + function calendarSearch(array $filters, $limit=null, $offset=null) { + $principalUri = $this->principalInfo['uri']; + return $this->caldavBackend->calendarSearch($principalUri, $filters, $limit, $offset); + } } diff --git a/apps/dav/lib/CalDAV/Search/SearchPlugin.php b/apps/dav/lib/CalDAV/Search/SearchPlugin.php new file mode 100644 index 00000000000..d658a50437d --- /dev/null +++ b/apps/dav/lib/CalDAV/Search/SearchPlugin.php @@ -0,0 +1,159 @@ +<?php +/** + * @author Georg Ehrke <oc.list@georgehrke.com> + * + * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com> + * @license GNU AGPL version 3 or any later version + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ +namespace OCA\DAV\CalDAV\Search; + +use Sabre\DAV\Server; +use Sabre\DAV\ServerPlugin; +use OCA\DAV\CalDAV\CalendarHome; + +class SearchPlugin extends ServerPlugin { + const NS_Nextcloud = 'http://nextcloud.com/ns'; + + /** + * Reference to SabreDAV server object. + * + * @var \Sabre\DAV\Server + */ + protected $server; + + /** + * This method should return a list of server-features. + * + * This is for example 'versioning' and is added to the DAV: header + * in an OPTIONS response. + * + * @return string[] + */ + public function getFeatures() { + // May have to be changed to be detected + return ['nc-calendar-search']; + } + + /** + * Returns a plugin name. + * + * Using this name other plugins will be able to access other plugins + * using Sabre\DAV\Server::getPlugin + * + * @return string + */ + public function getPluginName() { + return 'nc-calendar-search'; + } + + /** + * This initializes the plugin. + * + * This function is called by Sabre\DAV\Server, after + * addPlugin is called. + * + * This method should set up the required event subscriptions. + * + * @param Server $server + */ + public function initialize(Server $server) { + $this->server = $server; + + $server->on('report', [$this, 'report']); + + $server->xml->elementMap['{' . self::NS_Nextcloud . '}calendar-search'] = + 'OCA\\DAV\\CalDAV\\Search\\Xml\\Request\\CalendarSearchReport'; + } + + /** + * This functions handles REPORT requests specific to CalDAV + * + * @param string $reportName + * @param mixed $report + * @param mixed $path + * @return bool + */ + public function report($reportName, $report, $path) { + switch ($reportName) { + case '{' . self::NS_Nextcloud . '}calendar-search': + $this->server->transactionType = 'report-nc-calendar-search'; + $this->calendarSearch($report); + return false; + } + } + + /** + * Returns a list of reports this plugin supports. + * + * This will be used in the {DAV:}supported-report-set property. + * Note that you still need to subscribe to the 'report' event to actually + * implement them + * + * @param string $uri + * @return array + */ + public function getSupportedReportSet($uri) { + $node = $this->server->tree->getNodeForPath($uri); + + $reports = []; + if ($node instanceof CalendarHome) { + $reports[] = '{' . self::NS_Nextcloud . '}calendar-search'; + } + + return $reports; + } + + /** + * This function handles the calendar-query REPORT + * + * This report is used by clients to request calendar objects based on + * complex conditions. + * + * @param Xml\Request\CalendarSearchReport $report + * @return void + */ + private function calendarSearch($report) { + $node = $this->server->tree->getNodeForPath($this->server->getRequestUri()); + $depth = $this->server->getHTTPDepth(2); + + // The default result is an empty array + $result = []; + + // If we're dealing with the calendar home, the calendar home itself is + // responsible for the calendar-query + if ($node instanceof CalendarHome && $depth == 2) { + + $nodePaths = $node->calendarSearch($report->filters, $report->limit, $report->offset); + + foreach ($nodePaths as $path) { + list($properties) = $this->server->getPropertiesForPath( + $this->server->getRequestUri() . '/' . $path, + $report->properties); + $result[] = $properties; + } + } + + $prefer = $this->server->getHTTPPrefer(); + + $this->server->httpResponse->setStatus(207); + $this->server->httpResponse->setHeader('Content-Type', + 'application/xml; charset=utf-8'); + $this->server->httpResponse->setHeader('Vary', 'Brief,Prefer'); + $this->server->httpResponse->setBody( + $this->server->generateMultiStatus($result, + $prefer['return'] === 'minimal')); + } +}
\ No newline at end of file diff --git a/apps/dav/lib/CalDAV/Search/Xml/Filter/CompFilter.php b/apps/dav/lib/CalDAV/Search/Xml/Filter/CompFilter.php new file mode 100644 index 00000000000..a2a3c910f05 --- /dev/null +++ b/apps/dav/lib/CalDAV/Search/Xml/Filter/CompFilter.php @@ -0,0 +1,47 @@ +<?php +/** + * @author Georg Ehrke <oc.list@georgehrke.com> + * + * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com> + * @license GNU AGPL version 3 or any later version + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ +namespace OCA\DAV\CalDAV\Search\Xml\Filter; + +use Sabre\DAV\Exception\BadRequest; +use Sabre\Xml\Reader; +use Sabre\Xml\XmlDeserializable; +use OCA\DAV\CalDAV\Search\SearchPlugin; + +class CompFilter implements XmlDeserializable { + + /** + * @param Reader $reader + * @throws BadRequest + * @return string + */ + static function xmlDeserialize(Reader $reader) { + $att = $reader->parseAttributes(); + $componentName = $att['name']; + + $reader->parseInnerTree(); + + if (!is_string($componentName)) { + throw new BadRequest('The {' . SearchPlugin::NS_Nextcloud . '}comp-filter requires a valid name attribute'); + } + + return $componentName; + } +} diff --git a/apps/dav/lib/CalDAV/Search/Xml/Filter/LimitFilter.php b/apps/dav/lib/CalDAV/Search/Xml/Filter/LimitFilter.php new file mode 100644 index 00000000000..f5de78b539c --- /dev/null +++ b/apps/dav/lib/CalDAV/Search/Xml/Filter/LimitFilter.php @@ -0,0 +1,43 @@ +<?php +/** + * @author Georg Ehrke <oc.list@georgehrke.com> + * + * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com> + * @license GNU AGPL version 3 or any later version + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ +namespace OCA\DAV\CalDAV\Search\Xml\Filter; + +use Sabre\DAV\Exception\BadRequest; +use Sabre\Xml\Reader; +use Sabre\Xml\XmlDeserializable; +use OCA\DAV\CalDAV\Search\SearchPlugin; + +class LimitFilter implements XmlDeserializable { + + /** + * @param Reader $reader + * @throws BadRequest + * @return int + */ + static function xmlDeserialize(Reader $reader) { + $value = $reader->parseInnerTree(); + if (!is_int($value) && !is_string($value)) { + throw new BadRequest('The {' . SearchPlugin::NS_Nextcloud . '}limit has illegal value'); + } + + return intval($value); + } +}
\ No newline at end of file diff --git a/apps/dav/lib/CalDAV/Search/Xml/Filter/OffsetFilter.php b/apps/dav/lib/CalDAV/Search/Xml/Filter/OffsetFilter.php new file mode 100644 index 00000000000..7257e1e72f9 --- /dev/null +++ b/apps/dav/lib/CalDAV/Search/Xml/Filter/OffsetFilter.php @@ -0,0 +1,43 @@ +<?php +/** + * @author Georg Ehrke <oc.list@georgehrke.com> + * + * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com> + * @license GNU AGPL version 3 or any later version + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ +namespace OCA\DAV\CalDAV\Search\Xml\Filter; + +use Sabre\DAV\Exception\BadRequest; +use Sabre\Xml\Reader; +use Sabre\Xml\XmlDeserializable; +use OCA\DAV\CalDAV\Search\SearchPlugin; + +class OffsetFilter implements XmlDeserializable { + + /** + * @param Reader $reader + * @throws BadRequest + * @return int + */ + static function xmlDeserialize(Reader $reader) { + $value = $reader->parseInnerTree(); + if (!is_int($value) && !is_string($value)) { + throw new BadRequest('The {' . SearchPlugin::NS_Nextcloud . '}offset has illegal value'); + } + + return intval($value); + } +}
\ No newline at end of file diff --git a/apps/dav/lib/CalDAV/Search/Xml/Filter/ParamFilter.php b/apps/dav/lib/CalDAV/Search/Xml/Filter/ParamFilter.php new file mode 100644 index 00000000000..1c443763daf --- /dev/null +++ b/apps/dav/lib/CalDAV/Search/Xml/Filter/ParamFilter.php @@ -0,0 +1,55 @@ +<?php +/** + * @author Georg Ehrke <oc.list@georgehrke.com> + * + * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com> + * @license GNU AGPL version 3 or any later version + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ +namespace OCA\DAV\CalDAV\Search\Xml\Filter; + +use Sabre\DAV\Exception\BadRequest; +use Sabre\Xml\Reader; +use Sabre\Xml\XmlDeserializable; +use OCA\DAV\CalDAV\Search\SearchPlugin; + +class ParamFilter implements XmlDeserializable { + + /** + * @param Reader $reader + * @throws BadRequest + * @return string + */ + static function xmlDeserialize(Reader $reader) { + $att = $reader->parseAttributes(); + $property = $att['property']; + $parameter = $att['name']; + + $reader->parseInnerTree(); + + if (!is_string($property)) { + throw new BadRequest('The {' . SearchPlugin::NS_Nextcloud . '}param-filter requires a valid property attribute'); + + } + if (!is_string($parameter)) { + throw new BadRequest('The {' . SearchPlugin::NS_Nextcloud . '}param-filter requires a valid parameter attribute'); + } + + return [ + 'property' => $property, + 'parameter' => $parameter, + ]; + } +} diff --git a/apps/dav/lib/CalDAV/Search/Xml/Filter/PropFilter.php b/apps/dav/lib/CalDAV/Search/Xml/Filter/PropFilter.php new file mode 100644 index 00000000000..06b41d91c6e --- /dev/null +++ b/apps/dav/lib/CalDAV/Search/Xml/Filter/PropFilter.php @@ -0,0 +1,47 @@ +<?php +/** + * @author Georg Ehrke <oc.list@georgehrke.com> + * + * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com> + * @license GNU AGPL version 3 or any later version + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ +namespace OCA\DAV\CalDAV\Search\Xml\Filter; + +use Sabre\DAV\Exception\BadRequest; +use Sabre\Xml\Reader; +use Sabre\Xml\XmlDeserializable; +use OCA\DAV\CalDAV\Search\SearchPlugin; + +class PropFilter implements XmlDeserializable { + + /** + * @param Reader $reader + * @throws BadRequest + * @return string + */ + static function xmlDeserialize(Reader $reader) { + $att = $reader->parseAttributes(); + $componentName = $att['name']; + + $reader->parseInnerTree(); + + if (!is_string($componentName)) { + throw new BadRequest('The {' . SearchPlugin::NS_Nextcloud . '}prop-filter requires a valid name attribute'); + } + + return $componentName; + } +} diff --git a/apps/dav/lib/CalDAV/Search/Xml/Filter/SearchTermFilter.php b/apps/dav/lib/CalDAV/Search/Xml/Filter/SearchTermFilter.php new file mode 100644 index 00000000000..8779e2b3940 --- /dev/null +++ b/apps/dav/lib/CalDAV/Search/Xml/Filter/SearchTermFilter.php @@ -0,0 +1,43 @@ +<?php +/** + * @author Georg Ehrke <oc.list@georgehrke.com> + * + * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com> + * @license GNU AGPL version 3 or any later version + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ +namespace OCA\DAV\CalDAV\Search\Xml\Filter; + +use Sabre\DAV\Exception\BadRequest; +use Sabre\Xml\Reader; +use Sabre\Xml\XmlDeserializable; +use OCA\DAV\CalDAV\Search\SearchPlugin; + +class SearchTermFilter implements XmlDeserializable { + + /** + * @param Reader $reader + * @throws BadRequest + * @return string + */ + static function xmlDeserialize(Reader $reader) { + $value = $reader->parseInnerTree(); + if (!is_string($value)) { + throw new BadRequest('The {' . SearchPlugin::NS_Nextcloud . '}search-term has illegal value'); + } + + return $value; + } +}
\ No newline at end of file diff --git a/apps/dav/lib/CalDAV/Search/Xml/Request/CalendarSearchReport.php b/apps/dav/lib/CalDAV/Search/Xml/Request/CalendarSearchReport.php new file mode 100644 index 00000000000..4d22f310c24 --- /dev/null +++ b/apps/dav/lib/CalDAV/Search/Xml/Request/CalendarSearchReport.php @@ -0,0 +1,167 @@ +<?php +/** + * @author Georg Ehrke <oc.list@georgehrke.com> + * + * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com> + * @license GNU AGPL version 3 or any later version + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ +namespace OCA\DAV\CalDAV\Search\Xml\Request; + +use Sabre\DAV\Exception\BadRequest; +use Sabre\Xml\Reader; +use Sabre\Xml\XmlDeserializable; +use OCA\DAV\CalDAV\Search\SearchPlugin; + +/** + * CalendarSearchReport request parser. + * + * This class parses the {urn:ietf:params:xml:ns:caldav}calendar-query + * REPORT, as defined in: + * + * https:// link to standard + */ +class CalendarSearchReport implements XmlDeserializable { + + /** + * An array with requested properties. + * + * @var array + */ + public $properties; + + /** + * List of property/component filters. + * + * @var array + */ + public $filters; + + /** + * @var int + */ + public $limit; + + /** + * @var int + */ + public $offset; + + /** + * The deserialize method is called during xml parsing. + * + * This method is called statically, this is because in theory this method + * may be used as a type of constructor, or factory method. + * + * Often you want to return an instance of the current class, but you are + * free to return other data as well. + * + * You are responsible for advancing the reader to the next element. Not + * doing anything will result in a never-ending loop. + * + * If you just want to skip parsing for this element altogether, you can + * just call $reader->next(); + * + * $reader->parseInnerTree() will parse the entire sub-tree, and advance to + * the next element. + * + * @param Reader $reader + * @return mixed + */ + static function xmlDeserialize(Reader $reader) { + $elems = $reader->parseInnerTree([ + '{http://nextcloud.com/ns}comp-filter' => 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\CompFilter', + '{http://nextcloud.com/ns}prop-filter' => 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\PropFilter', + '{http://nextcloud.com/ns}param-filter' => 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\ParamFilter', + '{http://nextcloud.com/ns}search-term' => 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\SearchTermFilter', + '{http://nextcloud.com/ns}limit' => 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\LimitFilter', + '{http://nextcloud.com/ns}offset' => 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\OffsetFilter', + '{DAV:}prop' => 'Sabre\\Xml\\Element\\KeyValue', + ]); + + $newProps = [ + 'filters' => [], + 'properties' => [], + 'limit' => null, + 'offset' => null + ]; + + if (!is_array($elems)) { + $elems = []; + } + + foreach ($elems as $elem) { + switch ($elem['name']) { + case '{DAV:}prop': + $newProps['properties'] = array_keys($elem['value']); + break; + case '{' . SearchPlugin::NS_Nextcloud . '}filter': + foreach ($elem['value'] as $subElem) { + if ($subElem['name'] === '{' . SearchPlugin::NS_Nextcloud . '}comp-filter') { + if (!isset($newProps['filters']['comps']) || !is_array($newProps['filters']['comps'])) { + $newProps['filters']['comps'] = []; + } + $newProps['filters']['comps'][] = $subElem['value']; + } elseif ($subElem['name'] === '{' . SearchPlugin::NS_Nextcloud . '}prop-filter') { + if (!isset($newProps['filters']['props']) || !is_array($newProps['filters']['props'])) { + $newProps['filters']['props'] = []; + } + $newProps['filters']['props'][] = $subElem['value']; + } elseif ($subElem['name'] === '{' . SearchPlugin::NS_Nextcloud . '}param-filter') { + if (!isset($newProps['filters']['params']) || !is_array($newProps['filters']['params'])) { + $newProps['filters']['params'] = []; + } + $newProps['filters']['params'][] = $subElem['value']; + } elseif ($subElem['name'] === '{' . SearchPlugin::NS_Nextcloud . '}search-term') { + $newProps['filters']['search-term'] = $subElem['value']; + } + } + break; + case '{' . SearchPlugin::NS_Nextcloud . '}limit': + $newProps['limit'] = $elem['value']; + break; + case '{' . SearchPlugin::NS_Nextcloud . '}offset': + $newProps['offset'] = $elem['value']; + break; + + } + } + + if (empty($newProps['filters'])) { + throw new BadRequest('The {' . SearchPlugin::NS_Nextcloud . '}filter element is required for this request'); + } + + $propsOrParamsDefined = (!empty($newProps['filters']['props']) || !empty($newProps['filters']['params'])); + $noCompsDefined = empty($newProps['filters']['comps']); + if ($propsOrParamsDefined && $noCompsDefined) { + throw new BadRequest('{' . SearchPlugin::NS_Nextcloud . '}prop-filter or {' . SearchPlugin::NS_Nextcloud . '}param-filter given without any {' . SearchPlugin::NS_Nextcloud . '}comp-filter'); + } + + if (!isset($newProps['filters']['search-term'])) { + throw new BadRequest('{' . SearchPlugin::NS_Nextcloud . '}search-term is required for this request'); + } + + if (empty($newProps['filters']['props']) && empty($newProps['filters']['params'])) { + throw new BadRequest('At least one{' . SearchPlugin::NS_Nextcloud . '}prop-filter or {' . SearchPlugin::NS_Nextcloud . '}param-filter is required for this request'); + } + + + $obj = new self(); + foreach ($newProps as $key => $value) { + $obj->$key = $value; + } + return $obj; + } +} diff --git a/apps/dav/lib/CardDAV/CardDavBackend.php b/apps/dav/lib/CardDAV/CardDavBackend.php index cd010b87f08..5deb648fa7f 100644 --- a/apps/dav/lib/CardDAV/CardDavBackend.php +++ b/apps/dav/lib/CardDAV/CardDavBackend.php @@ -882,16 +882,15 @@ class CardDavBackend implements BackendInterface, SyncSupport { public function search($addressBookId, $pattern, $searchProperties) { $query = $this->db->getQueryBuilder(); $query2 = $this->db->getQueryBuilder(); + $query2->selectDistinct('cp.cardid')->from($this->dbCardsPropertiesTable, 'cp'); + $query2->andWhere($query2->expr()->eq('cp.addressbookid', $query->createNamedParameter($addressBookId))); + $or = $query2->expr()->orX(); foreach ($searchProperties as $property) { - $query2->orWhere( - $query2->expr()->andX( - $query2->expr()->eq('cp.name', $query->createNamedParameter($property)), - $query2->expr()->ilike('cp.value', $query->createNamedParameter('%' . $this->db->escapeLikeParameter($pattern) . '%')) - ) - ); + $or->add($query2->expr()->eq('cp.name', $query->createNamedParameter($property))); } - $query2->andWhere($query2->expr()->eq('cp.addressbookid', $query->createNamedParameter($addressBookId))); + $query2->andWhere($or); + $query2->andWhere($query2->expr()->ilike('cp.value', $query->createNamedParameter('%' . $this->db->escapeLikeParameter($pattern) . '%'))); $query->select('c.carddata', 'c.uri')->from($this->dbCardsTable, 'c') ->where($query->expr()->in('c.id', $query->createFunction($query2->getSQL()))); diff --git a/apps/dav/lib/Connector/Sabre/Directory.php b/apps/dav/lib/Connector/Sabre/Directory.php index 25cca40a889..435f47ee561 100644 --- a/apps/dav/lib/Connector/Sabre/Directory.php +++ b/apps/dav/lib/Connector/Sabre/Directory.php @@ -34,12 +34,20 @@ use OCA\DAV\Connector\Sabre\Exception\Forbidden; use OCA\DAV\Connector\Sabre\Exception\InvalidPath; use OCA\DAV\Connector\Sabre\Exception\FileLocked; use OCP\Files\ForbiddenException; +use OCP\Files\InvalidPathException; +use OCP\Files\StorageNotAvailableException; use OCP\Lock\ILockingProvider; use OCP\Lock\LockedException; use Sabre\DAV\Exception\Locked; +use Sabre\DAV\Exception\ServiceUnavailable; +use Sabre\DAV\INode; +use Sabre\DAV\Exception\BadRequest; +use OC\Files\Mount\MoveableMount; +use Sabre\DAV\IFile; +use Sabre\DAV\Exception\NotFound; class Directory extends \OCA\DAV\Connector\Sabre\Node - implements \Sabre\DAV\ICollection, \Sabre\DAV\IQuota { + implements \Sabre\DAV\ICollection, \Sabre\DAV\IQuota, \Sabre\DAV\IMoveTarget { /** * Cached directory content @@ -113,9 +121,9 @@ class Directory extends \OCA\DAV\Connector\Sabre\Node if (isset($_SERVER['HTTP_OC_CHUNKED'])) { // exit if we can't create a new file and we don't updatable existing file - $info = \OC_FileChunking::decodeName($name); + $chunkInfo = \OC_FileChunking::decodeName($name); if (!$this->fileView->isCreatable($this->path) && - !$this->fileView->isUpdatable($this->path . '/' . $info['name']) + !$this->fileView->isUpdatable($this->path . '/' . $chunkInfo['name']) ) { throw new \Sabre\DAV\Exception\Forbidden(); } @@ -130,14 +138,18 @@ class Directory extends \OCA\DAV\Connector\Sabre\Node $this->fileView->verifyPath($this->path, $name); $path = $this->fileView->getAbsolutePath($this->path) . '/' . $name; - // using a dummy FileInfo is acceptable here since it will be refreshed after the put is complete - $info = new \OC\Files\FileInfo($path, null, null, array(), null); + // in case the file already exists/overwriting + $info = $this->fileView->getFileInfo($this->path . '/' . $name); + if (!$info) { + // use a dummy FileInfo which is acceptable here since it will be refreshed after the put is complete + $info = new \OC\Files\FileInfo($path, null, null, [], null); + } $node = new \OCA\DAV\Connector\Sabre\File($this->fileView, $info); $node->acquireLock(ILockingProvider::LOCK_SHARED); return $node->put($data); } catch (\OCP\Files\StorageNotAvailableException $e) { throw new \Sabre\DAV\Exception\ServiceUnavailable($e->getMessage()); - } catch (\OCP\Files\InvalidPathException $ex) { + } catch (InvalidPathException $ex) { throw new InvalidPath($ex->getMessage()); } catch (ForbiddenException $ex) { throw new Forbidden($ex->getMessage(), $ex->getRetry()); @@ -168,7 +180,7 @@ class Directory extends \OCA\DAV\Connector\Sabre\Node } } catch (\OCP\Files\StorageNotAvailableException $e) { throw new \Sabre\DAV\Exception\ServiceUnavailable($e->getMessage()); - } catch (\OCP\Files\InvalidPathException $ex) { + } catch (InvalidPathException $ex) { throw new InvalidPath($ex->getMessage()); } catch (ForbiddenException $ex) { throw new Forbidden($ex->getMessage(), $ex->getRetry()); @@ -188,6 +200,11 @@ class Directory extends \OCA\DAV\Connector\Sabre\Node * @throws \Sabre\DAV\Exception\ServiceUnavailable */ public function getChild($name, $info = null) { + if (!$this->info->isReadable()) { + // avoid detecting files through this way + throw new NotFound(); + } + $path = $this->path . '/' . $name; if (is_null($info)) { try { @@ -195,7 +212,7 @@ class Directory extends \OCA\DAV\Connector\Sabre\Node $info = $this->fileView->getFileInfo($path); } catch (\OCP\Files\StorageNotAvailableException $e) { throw new \Sabre\DAV\Exception\ServiceUnavailable($e->getMessage()); - } catch (\OCP\Files\InvalidPathException $ex) { + } catch (InvalidPathException $ex) { throw new InvalidPath($ex->getMessage()); } catch (ForbiddenException $e) { throw new \Sabre\DAV\Exception\Forbidden(); @@ -221,12 +238,19 @@ class Directory extends \OCA\DAV\Connector\Sabre\Node * Returns an array with all the child nodes * * @return \Sabre\DAV\INode[] + * @throws \Sabre\DAV\Exception\Locked + * @throws \OCA\DAV\Connector\Sabre\Exception\Forbidden */ public function getChildren() { if (!is_null($this->dirContent)) { return $this->dirContent; } try { + if (!$this->info->isReadable()) { + // return 403 instead of 404 because a 404 would make + // the caller believe that the collection itself does not exist + throw new Forbidden('No read permissions'); + } $folderContent = $this->fileView->getDirectoryContent($this->path); } catch (LockedException $e) { throw new Locked(); @@ -311,4 +335,109 @@ class Directory extends \OCA\DAV\Connector\Sabre\Node } } + /** + * Moves a node into this collection. + * + * It is up to the implementors to: + * 1. Create the new resource. + * 2. Remove the old resource. + * 3. Transfer any properties or other data. + * + * Generally you should make very sure that your collection can easily move + * the move. + * + * If you don't, just return false, which will trigger sabre/dav to handle + * the move itself. If you return true from this function, the assumption + * is that the move was successful. + * + * @param string $targetName New local file/collection name. + * @param string $fullSourcePath Full path to source node + * @param INode $sourceNode Source node itself + * @return bool + * @throws BadRequest + * @throws ServiceUnavailable + * @throws Forbidden + * @throws FileLocked + * @throws \Sabre\DAV\Exception\Forbidden + */ + public function moveInto($targetName, $fullSourcePath, INode $sourceNode) { + if (!$sourceNode instanceof Node) { + // it's a file of another kind, like FutureFile + if ($sourceNode instanceof IFile) { + // fallback to default copy+delete handling + return false; + } + throw new BadRequest('Incompatible node types'); + } + + if (!$this->fileView) { + throw new ServiceUnavailable('filesystem not setup'); + } + + $destinationPath = $this->getPath() . '/' . $targetName; + + + $targetNodeExists = $this->childExists($targetName); + + // at getNodeForPath we also check the path for isForbiddenFileOrDir + // with that we have covered both source and destination + if ($sourceNode instanceof Directory && $targetNodeExists) { + throw new \Sabre\DAV\Exception\Forbidden('Could not copy directory ' . $sourceNode->getName() . ', target exists'); + } + + list($sourceDir,) = \Sabre\HTTP\URLUtil::splitPath($sourceNode->getPath()); + $destinationDir = $this->getPath(); + + $sourcePath = $sourceNode->getPath(); + + $isMovableMount = false; + $sourceMount = \OC::$server->getMountManager()->find($this->fileView->getAbsolutePath($sourcePath)); + $internalPath = $sourceMount->getInternalPath($this->fileView->getAbsolutePath($sourcePath)); + if ($sourceMount instanceof MoveableMount && $internalPath === '') { + $isMovableMount = true; + } + + try { + $sameFolder = ($sourceDir === $destinationDir); + // if we're overwriting or same folder + if ($targetNodeExists || $sameFolder) { + // note that renaming a share mount point is always allowed + if (!$this->fileView->isUpdatable($destinationDir) && !$isMovableMount) { + throw new \Sabre\DAV\Exception\Forbidden(); + } + } else { + if (!$this->fileView->isCreatable($destinationDir)) { + throw new \Sabre\DAV\Exception\Forbidden(); + } + } + + if (!$sameFolder) { + // moving to a different folder, source will be gone, like a deletion + // note that moving a share mount point is always allowed + if (!$this->fileView->isDeletable($sourcePath) && !$isMovableMount) { + throw new \Sabre\DAV\Exception\Forbidden(); + } + } + + $fileName = basename($destinationPath); + try { + $this->fileView->verifyPath($destinationDir, $fileName); + } catch (InvalidPathException $ex) { + throw new InvalidPath($ex->getMessage()); + } + + $renameOkay = $this->fileView->rename($sourcePath, $destinationPath); + if (!$renameOkay) { + throw new \Sabre\DAV\Exception\Forbidden(''); + } + } catch (StorageNotAvailableException $e) { + throw new ServiceUnavailable($e->getMessage()); + } catch (ForbiddenException $ex) { + throw new Forbidden($ex->getMessage(), $ex->getRetry()); + } catch (LockedException $e) { + throw new FileLocked($e->getMessage(), $e->getCode(), $e); + } + + return true; + } } diff --git a/apps/dav/lib/Connector/Sabre/File.php b/apps/dav/lib/Connector/Sabre/File.php index 1f878df1564..25c455a1bb7 100644 --- a/apps/dav/lib/Connector/Sabre/File.php +++ b/apps/dav/lib/Connector/Sabre/File.php @@ -54,6 +54,7 @@ use Sabre\DAV\Exception\Forbidden; use Sabre\DAV\Exception\NotImplemented; use Sabre\DAV\Exception\ServiceUnavailable; use Sabre\DAV\IFile; +use Sabre\DAV\Exception\NotFound; class File extends Node implements IFile { @@ -307,6 +308,10 @@ class File extends Node implements IFile { public function get() { //throw exception if encryption is disabled but files are still encrypted try { + if (!$this->info->isReadable()) { + // do a if the file did not exist + throw new NotFound(); + } $res = $this->fileView->fopen(ltrim($this->path, '/'), 'rb'); if ($res === false) { throw new ServiceUnavailable("Could not open file"); @@ -512,6 +517,7 @@ class File extends Node implements IFile { // TODO: in the future use ChunkHandler provided by storage return !$storage->instanceOfStorage('OCA\Files_Sharing\External\Storage') && !$storage->instanceOfStorage('OC\Files\Storage\OwnCloud') && + !$storage->instanceOfStorage('OC\Files\ObjectStore\ObjectStoreStorage') && $storage->needsPartFile(); } diff --git a/apps/dav/lib/Connector/Sabre/FilesPlugin.php b/apps/dav/lib/Connector/Sabre/FilesPlugin.php index 1b1f43df9ea..4c426dd1052 100644 --- a/apps/dav/lib/Connector/Sabre/FilesPlugin.php +++ b/apps/dav/lib/Connector/Sabre/FilesPlugin.php @@ -45,6 +45,7 @@ use \Sabre\HTTP\ResponseInterface; use OCP\Files\StorageNotAvailableException; use OCP\IConfig; use OCP\IRequest; +use OCA\DAV\Upload\FutureFile; class FilesPlugin extends ServerPlugin { @@ -64,6 +65,7 @@ class FilesPlugin extends ServerPlugin { const CHECKSUMS_PROPERTYNAME = '{http://owncloud.org/ns}checksums'; const DATA_FINGERPRINT_PROPERTYNAME = '{http://owncloud.org/ns}data-fingerprint'; const HAS_PREVIEW_PROPERTYNAME = '{http://nextcloud.org/ns}has-preview'; + const MOUNT_TYPE_PROPERTYNAME = '{http://nextcloud.org/ns}mount-type'; /** * Reference to main server object @@ -158,6 +160,7 @@ class FilesPlugin extends ServerPlugin { $server->protectedProperties[] = self::CHECKSUMS_PROPERTYNAME; $server->protectedProperties[] = self::DATA_FINGERPRINT_PROPERTYNAME; $server->protectedProperties[] = self::HAS_PREVIEW_PROPERTYNAME; + $server->protectedProperties[] = self::MOUNT_TYPE_PROPERTYNAME; // normally these cannot be changed (RFC4918), but we want them modifiable through PROPPATCH $allowedProperties = ['{DAV:}getetag']; @@ -177,6 +180,7 @@ class FilesPlugin extends ServerPlugin { } }); $this->server->on('beforeMove', [$this, 'checkMove']); + $this->server->on('beforeMove', [$this, 'beforeMoveFutureFile']); } /** @@ -284,6 +288,10 @@ class FilesPlugin extends ServerPlugin { $httpRequest = $this->server->httpRequest; if ($node instanceof \OCA\DAV\Connector\Sabre\Node) { + if (!$node->getFileInfo()->isReadable()) { + // avoid detecting files through this means + throw new NotFound(); + } $propFind->handle(self::FILEID_PROPERTYNAME, function() use ($node) { return $node->getFileId(); @@ -375,6 +383,10 @@ class FilesPlugin extends ServerPlugin { return $node->getSize(); }); } + + $propFind->handle(self::MOUNT_TYPE_PROPERTYNAME, function () use ($node) { + return $node->getFileInfo()->getMountPoint()->getMountType(); + }); } /** @@ -436,4 +448,43 @@ class FilesPlugin extends ServerPlugin { } } } + + /** + * Move handler for future file. + * + * This overrides the default move behavior to prevent Sabre + * to delete the target file before moving. Because deleting would + * lose the file id and metadata. + * + * @param string $path source path + * @param string $destination destination path + * @return bool|void false to stop handling, void to skip this handler + */ + public function beforeMoveFutureFile($path, $destination) { + $sourceNode = $this->tree->getNodeForPath($path); + if (!$sourceNode instanceof FutureFile) { + // skip handling as the source is not a chunked FutureFile + return; + } + + if (!$this->tree->nodeExists($destination)) { + // skip and let the default handler do its work + return; + } + + // do a move manually, skipping Sabre's default "delete" for existing nodes + $this->tree->move($path, $destination); + + // trigger all default events (copied from CorePlugin::move) + $this->server->emit('afterMove', [$path, $destination]); + $this->server->emit('afterUnbind', [$path]); + $this->server->emit('afterBind', [$destination]); + + $response = $this->server->httpResponse; + $response->setHeader('Content-Length', '0'); + $response->setStatus(204); + + return false; + } + } diff --git a/apps/dav/lib/Connector/Sabre/ObjectTree.php b/apps/dav/lib/Connector/Sabre/ObjectTree.php index 554a7ad86ca..acc6dcc3be3 100644 --- a/apps/dav/lib/Connector/Sabre/ObjectTree.php +++ b/apps/dav/lib/Connector/Sabre/ObjectTree.php @@ -185,104 +185,6 @@ class ObjectTree extends \Sabre\DAV\Tree { } /** - * Moves a file from one location to another - * - * @param string $sourcePath The path to the file which should be moved - * @param string $destinationPath The full destination path, so not just the destination parent node - * @throws FileLocked - * @throws Forbidden - * @throws InvalidPath - * @throws \Sabre\DAV\Exception\Forbidden - * @throws \Sabre\DAV\Exception\Locked - * @throws \Sabre\DAV\Exception\NotFound - * @throws \Sabre\DAV\Exception\ServiceUnavailable - * @return int - */ - public function move($sourcePath, $destinationPath) { - if (!$this->fileView) { - throw new \Sabre\DAV\Exception\ServiceUnavailable('filesystem not setup'); - } - - $infoDestination = $this->fileView->getFileInfo(dirname($destinationPath)); - if (dirname($destinationPath) === dirname($sourcePath)) { - $sourcePermission = $infoDestination && $infoDestination->isUpdateable(); - $destinationPermission = $sourcePermission; - } else { - $infoSource = $this->fileView->getFileInfo($sourcePath); - if ($this->fileView->file_exists($destinationPath)) { - $destinationPermission = $infoDestination && $infoDestination->isUpdateable(); - } else { - $destinationPermission = $infoDestination && $infoDestination->isCreatable(); - } - $sourcePermission = $infoSource && $infoSource->isDeletable(); - } - - if (!$destinationPermission || !$sourcePermission) { - throw new Forbidden('No permissions to move object.'); - } - - $targetNodeExists = $this->nodeExists($destinationPath); - $sourceNode = $this->getNodeForPath($sourcePath); - if ($sourceNode instanceof \Sabre\DAV\ICollection && $targetNodeExists) { - throw new \Sabre\DAV\Exception\Forbidden('Could not copy directory ' . $sourceNode->getName() . ', target exists'); - } - list($sourceDir,) = \Sabre\HTTP\URLUtil::splitPath($sourcePath); - list($destinationDir,) = \Sabre\HTTP\URLUtil::splitPath($destinationPath); - - $isMovableMount = false; - $sourceMount = $this->mountManager->find($this->fileView->getAbsolutePath($sourcePath)); - $internalPath = $sourceMount->getInternalPath($this->fileView->getAbsolutePath($sourcePath)); - if ($sourceMount instanceof MoveableMount && $internalPath === '') { - $isMovableMount = true; - } - - try { - $sameFolder = ($sourceDir === $destinationDir); - // if we're overwriting or same folder - if ($targetNodeExists || $sameFolder) { - // note that renaming a share mount point is always allowed - if (!$this->fileView->isUpdatable($destinationDir) && !$isMovableMount) { - throw new \Sabre\DAV\Exception\Forbidden(); - } - } else { - if (!$this->fileView->isCreatable($destinationDir)) { - throw new \Sabre\DAV\Exception\Forbidden(); - } - } - - if (!$sameFolder) { - // moving to a different folder, source will be gone, like a deletion - // note that moving a share mount point is always allowed - if (!$this->fileView->isDeletable($sourcePath) && !$isMovableMount) { - throw new \Sabre\DAV\Exception\Forbidden(); - } - } - - $fileName = basename($destinationPath); - try { - $this->fileView->verifyPath($destinationDir, $fileName); - } catch (\OCP\Files\InvalidPathException $ex) { - throw new InvalidPath($ex->getMessage()); - } - - $renameOkay = $this->fileView->rename($sourcePath, $destinationPath); - if (!$renameOkay) { - throw new \Sabre\DAV\Exception\Forbidden(''); - } - } catch (StorageNotAvailableException $e) { - throw new \Sabre\DAV\Exception\ServiceUnavailable($e->getMessage()); - } catch (ForbiddenException $ex) { - throw new Forbidden($ex->getMessage(), $ex->getRetry()); - } catch (LockedException $e) { - throw new FileLocked($e->getMessage(), $e->getCode(), $e); - } - - $this->markDirty($sourceDir); - $this->markDirty($destinationDir); - - } - - /** * Copies a file or directory. * * This method must work recursively and delete the destination diff --git a/apps/dav/lib/Migration/BuildCalendarSearchIndex.php b/apps/dav/lib/Migration/BuildCalendarSearchIndex.php new file mode 100644 index 00000000000..da4b4f4fe84 --- /dev/null +++ b/apps/dav/lib/Migration/BuildCalendarSearchIndex.php @@ -0,0 +1,86 @@ +<?php +/** + * @copyright 2017 Georg Ehrke <oc.list@georgehrke.com> + * + * @author Georg Ehrke <oc.list@georgehrke.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ +namespace OCA\DAV\Migration; + +use OCP\BackgroundJob\IJobList; +use OCP\IConfig; +use OCP\IDBConnection; +use OCP\Migration\IOutput; +use OCP\Migration\IRepairStep; + +class BuildCalendarSearchIndex implements IRepairStep { + + /** @var IDBConnection */ + private $db; + + /** @var IJobList */ + private $jobList; + + /** @var IConfig */ + private $config; + + /** + * @param IDBConnection $db + * @param IJobList $jobList + * @param IConfig $config + */ + public function __construct(IDBConnection $db, + IJobList $jobList, + IConfig $config) { + $this->db = $db; + $this->jobList = $jobList; + $this->config = $config; + } + + /** + * @return string + */ + public function getName() { + return 'Registering building of calendar search index as background job'; + } + + /** + * @param IOutput $output + */ + public function run(IOutput $output) { + // only run once + if ($this->config->getAppValue('dav', 'buildCalendarSearchIndex') === 'yes') { + $output->info('Repair step already executed'); + return; + } + + $query = $this->db->getQueryBuilder(); + $query->select($query->createFunction('MAX(id)')) + ->from('calendarobjects'); + $maxId = (int)$query->execute()->fetchColumn(); + + $output->info('Add background job'); + $this->jobList->add(BuildCalendarSearchIndexBackgroundJob::class, [ + 'offset' => 0, + 'stopAt' => $maxId + ]); + + // if all were done, no need to redo the repair during next upgrade + $this->config->setAppValue('dav', 'buildCalendarSearchIndex', 'yes'); + } +}
\ No newline at end of file diff --git a/apps/dav/lib/Migration/BuildCalendarSearchIndexBackgroundJob.php b/apps/dav/lib/Migration/BuildCalendarSearchIndexBackgroundJob.php new file mode 100644 index 00000000000..a4fa2c63e02 --- /dev/null +++ b/apps/dav/lib/Migration/BuildCalendarSearchIndexBackgroundJob.php @@ -0,0 +1,120 @@ +<?php +/** + * @copyright 2017 Georg Ehrke <oc.list@georgehrke.com> + * + * @author Georg Ehrke <oc.list@georgehrke.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ +namespace OCA\DAV\Migration; + +use OC\BackgroundJob\QueuedJob; +use OCA\DAV\CalDAV\CalDavBackend; +use OCP\AppFramework\Utility\ITimeFactory; +use OCP\BackgroundJob\IJobList; +use OCP\IDBConnection; +use OCP\ILogger; + +class BuildCalendarSearchIndexBackgroundJob extends QueuedJob { + + /** @var IDBConnection */ + private $db; + + /** @var CalDavBackend */ + private $calDavBackend; + + /** @var ILogger */ + private $logger; + + /** @var IJobList */ + private $jobList; + + /** @var ITimeFactory */ + private $timeFactory; + + /** + * @param IDBConnection $db + * @param CalDavBackend $calDavBackend + * @param ILogger $logger + * @param IJobList $jobList + * @param ITimeFactory $timeFactory + */ + public function __construct(IDBConnection $db, + CalDavBackend $calDavBackend, + ILogger $logger, + IJobList $jobList, + ITimeFactory $timeFactory) { + $this->db = $db; + $this->calDavBackend = $calDavBackend; + $this->logger = $logger; + $this->jobList = $jobList; + $this->timeFactory = $timeFactory; + } + + public function run($arguments) { + $offset = $arguments['offset']; + $stopAt = $arguments['stopAt']; + + $this->logger->info('Building calendar index (' . $offset .'/' . $stopAt . ')'); + + $offset = $this->buildIndex($offset, $stopAt); + + if ($offset >= $stopAt) { + $this->logger->info('Building calendar index done'); + } else { + $this->jobList->add(self::class, [ + 'offset' => $offset, + 'stopAt' => $stopAt + ]); + $this->logger->info('New building calendar index job scheduled with offset ' . $offset); + } + } + + /** + * @param int $offset + * @param int $stopAt + * @return int + */ + private function buildIndex($offset, $stopAt) { + $startTime = $this->timeFactory->getTime(); + + $query = $this->db->getQueryBuilder(); + $query->select(['id', 'calendarid', 'uri', 'calendardata']) + ->from('calendarobjects') + ->where($query->expr()->lte('id', $query->createNamedParameter($stopAt))) + ->andWhere($query->expr()->gt('id', $query->createNamedParameter($offset))) + ->orderBy('id', 'ASC'); + + $stmt = $query->execute(); + while($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { + $offset = $row['id']; + + $calendarData = $row['calendardata']; + if (is_resource($calendarData)) { + $calendarData = stream_get_contents($calendarData); + } + + $this->calDavBackend->updateProperties($row['calendarid'], $row['uri'], $calendarData); + + if (($this->timeFactory->getTime() - $startTime) > 15) { + return $offset; + } + } + + return $stopAt; + } +} diff --git a/apps/dav/lib/Server.php b/apps/dav/lib/Server.php index e0517477488..5b0715b0dad 100644 --- a/apps/dav/lib/Server.php +++ b/apps/dav/lib/Server.php @@ -216,6 +216,7 @@ class Server { \OC::$server->getCommentsManager(), $userSession )); + $this->server->addPlugin(new \OCA\DAV\CalDAV\Search\SearchPlugin()); if ($view !== null) { $this->server->addPlugin(new FilesReportPlugin( $this->server->tree, diff --git a/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php b/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php index 5adda30c19d..dc531b5a64a 100644 --- a/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php +++ b/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php @@ -1,10 +1,12 @@ <?php /** * @copyright Copyright (c) 2016, ownCloud, Inc. + * @copyright Copyright (c) 2017 Georg Ehrke * * @author Joas Schilling <coding@schilljs.com> * @author Thomas Citharel <tcit@tcit.fr> * @author Thomas Müller <thomas.mueller@tmit.eu> + * @author Georg Ehrke <oc.list@georgehrke.com> * * @license AGPL-3.0 * @@ -489,4 +491,134 @@ EOD; 'unknown class -> private' => [CalDavBackend::CLASSIFICATION_PRIVATE, 'classification', "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//dmfs.org//mimedir.icalendar//EN\r\nBEGIN:VTIMEZONE\r\nTZID:Europe/Berlin\r\nX-LIC-LOCATION:Europe/Berlin\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:CEST\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:CET\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\nBEGIN:VEVENT\r\nDTSTART;TZID=Europe/Berlin:20160419T130000\r\nSUMMARY:Test\r\nCLASS:VERTRAULICH\r\nTRANSP:OPAQUE\r\nSTATUS:CONFIRMED\r\nDTEND;TZID=Europe/Berlin:20160419T140000\r\nLAST-MODIFIED:20160419T074202Z\r\nDTSTAMP:20160419T074202Z\r\nCREATED:20160419T074202Z\r\nUID:2e468c48-7860-492e-bc52-92fa0daeeccf.1461051722310\r\nEND:VEVENT\r\nEND:VCALENDAR"], ]; } + + public function testCalendarSearch() { + $calendarId = $this->createTestCalendar(); + + $uri = static::getUniqueID('calobj'); + $calData = <<<EOD +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:ownCloud Calendar +BEGIN:VEVENT +CREATED;VALUE=DATE-TIME:20130910T125139Z +UID:47d15e3ec8 +LAST-MODIFIED;VALUE=DATE-TIME:20130910T125139Z +DTSTAMP;VALUE=DATE-TIME:20130910T125139Z +SUMMARY:Test Event +DTSTART;VALUE=DATE-TIME:20130912T130000Z +DTEND;VALUE=DATE-TIME:20130912T140000Z +CLASS:PUBLIC +END:VEVENT +END:VCALENDAR +EOD; + + $this->backend->createCalendarObject($calendarId, $uri, $calData); + + $search1 = $this->backend->calendarSearch(self::UNIT_TEST_USER, [ + 'comps' => [ + 'VEVENT', + 'VTODO' + ], + 'props' => [ + 'SUMMARY', + 'LOCATION' + ], + 'search-term' => 'Test', + ]); + $this->assertEquals(count($search1), 1); + + + // update the card + $calData = <<<'EOD' +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:ownCloud Calendar +BEGIN:VEVENT +CREATED;VALUE=DATE-TIME:20130910T125139Z +UID:47d15e3ec8 +LAST-MODIFIED;VALUE=DATE-TIME:20130910T125139Z +DTSTAMP;VALUE=DATE-TIME:20130910T125139Z +SUMMARY:123 Event +DTSTART;VALUE=DATE-TIME:20130912T130000Z +DTEND;VALUE=DATE-TIME:20130912T140000Z +ATTENDEE;CN=test:mailto:foo@bar.com +END:VEVENT +END:VCALENDAR +EOD; + $this->backend->updateCalendarObject($calendarId, $uri, $calData); + + $search2 = $this->backend->calendarSearch(self::UNIT_TEST_USER, [ + 'comps' => [ + 'VEVENT', + 'VTODO' + ], + 'props' => [ + 'SUMMARY', + 'LOCATION' + ], + 'search-term' => 'Test', + ]); + $this->assertEquals(count($search2), 0); + + $search3 = $this->backend->calendarSearch(self::UNIT_TEST_USER, [ + 'comps' => [ + 'VEVENT', + 'VTODO' + ], + 'props' => [ + 'SUMMARY', + 'LOCATION' + ], + 'params' => [ + [ + 'property' => 'ATTENDEE', + 'parameter' => 'CN' + ] + ], + 'search-term' => 'Test', + ]); + $this->assertEquals(count($search3), 1); + + // t matches both summary and attendee's CN, but we want unique results + $search4 = $this->backend->calendarSearch(self::UNIT_TEST_USER, [ + 'comps' => [ + 'VEVENT', + 'VTODO' + ], + 'props' => [ + 'SUMMARY', + 'LOCATION' + ], + 'params' => [ + [ + 'property' => 'ATTENDEE', + 'parameter' => 'CN' + ] + ], + 'search-term' => 't', + ]); + $this->assertEquals(count($search4), 1); + + $this->backend->deleteCalendarObject($calendarId, $uri); + + $search5 = $this->backend->calendarSearch(self::UNIT_TEST_USER, [ + 'comps' => [ + 'VEVENT', + 'VTODO' + ], + 'props' => [ + 'SUMMARY', + 'LOCATION' + ], + 'params' => [ + [ + 'property' => 'ATTENDEE', + 'parameter' => 'CN' + ] + ], + 'search-term' => 't', + ]); + $this->assertEquals(count($search5), 0); + } } diff --git a/apps/dav/tests/unit/CalDAV/Search/Request/CalendarSearchReportTest.php b/apps/dav/tests/unit/CalDAV/Search/Request/CalendarSearchReportTest.php new file mode 100644 index 00000000000..20bac8aa9f5 --- /dev/null +++ b/apps/dav/tests/unit/CalDAV/Search/Request/CalendarSearchReportTest.php @@ -0,0 +1,339 @@ +<?php +/** + * @author Georg Ehrke <oc.list@georgehrke.com> + * + * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com> + * @license GNU AGPL version 3 or any later version + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OCA\DAV\Tests\unit\CalDAV\Search\Xml\Request; + +use OCA\DAV\CalDAV\Search\Xml\Request\CalendarSearchReport; +use Sabre\Xml\Reader; +use Test\TestCase; + +class CalendarSearchReportTest extends TestCase { + + private $elementMap = [ + '{http://nextcloud.com/ns}calendar-search' => + 'OCA\\DAV\\CalDAV\\Search\\Xml\\Request\\CalendarSearchReport', + ]; + + public function testFoo() { + $xml = <<<XML +<?xml version="1.0" encoding="UTF-8"?> +<nc:calendar-search xmlns:nc="http://nextcloud.com/ns" xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:"> + <d:prop> + <d:getetag /> + <c:calendar-data /> + </d:prop> + <nc:filter> + <nc:comp-filter name="VEVENT" /> + <nc:comp-filter name="VTODO" /> + <nc:prop-filter name="SUMMARY" /> + <nc:prop-filter name="LOCATION" /> + <nc:prop-filter name="ATTENDEE" /> + <nc:param-filter property="ATTENDEE" name="CN" /> + <nc:search-term>foo</nc:search-term> + </nc:filter> + <nc:limit>10</nc:limit> + <nc:offset>5</nc:offset> +</nc:calendar-search> +XML; + + $result = $this->parse($xml); + + $calendarSearchReport = new CalendarSearchReport(); + $calendarSearchReport->properties = [ + '{DAV:}getetag', + '{urn:ietf:params:xml:ns:caldav}calendar-data', + ]; + $calendarSearchReport->filters = [ + 'comps' => [ + 'VEVENT', + 'VTODO' + ], + 'props' => [ + 'SUMMARY', + 'LOCATION', + 'ATTENDEE' + ], + 'params' => [ + [ + 'property' => 'ATTENDEE', + 'parameter' => 'CN' + ] + ], + 'search-term' => 'foo' + ]; + $calendarSearchReport->limit = 10; + $calendarSearchReport->offset = 5; + + $this->assertEquals( + $calendarSearchReport, + $result['value'] + ); + } + + public function testNoLimitOffset() { + $xml = <<<XML +<?xml version="1.0" encoding="UTF-8"?> +<nc:calendar-search xmlns:nc="http://nextcloud.com/ns" xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:"> + <d:prop> + <d:getetag /> + <c:calendar-data /> + </d:prop> + <nc:filter> + <nc:comp-filter name="VEVENT" /> + <nc:prop-filter name="SUMMARY" /> + <nc:search-term>foo</nc:search-term> + </nc:filter> +</nc:calendar-search> +XML; + + $result = $this->parse($xml); + + $calendarSearchReport = new CalendarSearchReport(); + $calendarSearchReport->properties = [ + '{DAV:}getetag', + '{urn:ietf:params:xml:ns:caldav}calendar-data', + ]; + $calendarSearchReport->filters = [ + 'comps' => [ + 'VEVENT', + ], + 'props' => [ + 'SUMMARY', + ], + 'search-term' => 'foo' + ]; + $calendarSearchReport->limit = null; + $calendarSearchReport->offset = null; + + $this->assertEquals( + $calendarSearchReport, + $result['value'] + ); + } + + /** + * @expectedException \Sabre\DAV\Exception\BadRequest + * @expectedExceptionMessage {http://nextcloud.com/ns}prop-filter or {http://nextcloud.com/ns}param-filter given without any {http://nextcloud.com/ns}comp-filter + */ + public function testRequiresCompFilter() { + $xml = <<<XML +<?xml version="1.0" encoding="UTF-8"?> +<nc:calendar-search xmlns:nc="http://nextcloud.com/ns" xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:"> + <d:prop> + <d:getetag /> + <c:calendar-data /> + </d:prop> + <nc:filter> + <nc:prop-filter name="SUMMARY" /> + <nc:prop-filter name="LOCATION" /> + <nc:prop-filter name="ATTENDEE" /> + <nc:param-filter property="ATTENDEE" name="CN" /> + <nc:search-term>foo</nc:search-term> + </nc:filter> + <nc:limit>10</nc:limit> + <nc:offset>5</nc:offset> +</nc:calendar-search> +XML; + + $this->parse($xml); + } + + /** + * @expectedException \Sabre\DAV\Exception\BadRequest + * @expectedExceptionMessage The {http://nextcloud.com/ns}filter element is required for this request + */ + public function testRequiresFilter() { + $xml = <<<XML +<?xml version="1.0" encoding="UTF-8"?> +<nc:calendar-search xmlns:nc="http://nextcloud.com/ns" xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:"> + <d:prop> + <d:getetag /> + <c:calendar-data /> + </d:prop> +</nc:calendar-search> +XML; + + $this->parse($xml); + } + + /** + * @expectedException \Sabre\DAV\Exception\BadRequest + * @expectedExceptionMessage {http://nextcloud.com/ns}search-term is required for this request + */ + public function testNoSearchTerm() { + $xml = <<<XML +<?xml version="1.0" encoding="UTF-8"?> +<nc:calendar-search xmlns:nc="http://nextcloud.com/ns" xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:"> + <d:prop> + <d:getetag /> + <c:calendar-data /> + </d:prop> + <nc:filter> + <nc:comp-filter name="VEVENT" /> + <nc:comp-filter name="VTODO" /> + <nc:prop-filter name="SUMMARY" /> + <nc:prop-filter name="LOCATION" /> + <nc:prop-filter name="ATTENDEE" /> + <nc:param-filter property="ATTENDEE" name="CN" /> + </nc:filter> + <nc:limit>10</nc:limit> + <nc:offset>5</nc:offset> +</nc:calendar-search> +XML; + + $result = $this->parse($xml); + } + + /** + * @expectedException \Sabre\DAV\Exception\BadRequest + * @expectedExceptionMessage At least one{http://nextcloud.com/ns}prop-filter or {http://nextcloud.com/ns}param-filter is required for this request + */ + public function testCompOnly() { + $xml = <<<XML +<?xml version="1.0" encoding="UTF-8"?> +<nc:calendar-search xmlns:nc="http://nextcloud.com/ns" xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:"> + <d:prop> + <d:getetag /> + <c:calendar-data /> + </d:prop> + <nc:filter> + <nc:comp-filter name="VEVENT" /> + <nc:comp-filter name="VTODO" /> + <nc:search-term>foo</nc:search-term> + </nc:filter> +</nc:calendar-search> +XML; + + $result = $this->parse($xml); + + $calendarSearchReport = new CalendarSearchReport(); + $calendarSearchReport->properties = [ + '{DAV:}getetag', + '{urn:ietf:params:xml:ns:caldav}calendar-data', + ]; + $calendarSearchReport->filters = [ + 'comps' => [ + 'VEVENT', + 'VTODO' + ], + 'search-term' => 'foo' + ]; + $calendarSearchReport->limit = null; + $calendarSearchReport->offset = null; + + $this->assertEquals( + $calendarSearchReport, + $result['value'] + ); + } + + public function testPropOnly() { + $xml = <<<XML +<?xml version="1.0" encoding="UTF-8"?> +<nc:calendar-search xmlns:nc="http://nextcloud.com/ns" xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:"> + <d:prop> + <d:getetag /> + <c:calendar-data /> + </d:prop> + <nc:filter> + <nc:comp-filter name="VEVENT" /> + <nc:prop-filter name="SUMMARY" /> + <nc:search-term>foo</nc:search-term> + </nc:filter> +</nc:calendar-search> +XML; + + $result = $this->parse($xml); + + $calendarSearchReport = new CalendarSearchReport(); + $calendarSearchReport->properties = [ + '{DAV:}getetag', + '{urn:ietf:params:xml:ns:caldav}calendar-data', + ]; + $calendarSearchReport->filters = [ + 'comps' => [ + 'VEVENT', + ], + 'props' => [ + 'SUMMARY', + ], + 'search-term' => 'foo' + ]; + $calendarSearchReport->limit = null; + $calendarSearchReport->offset = null; + + $this->assertEquals( + $calendarSearchReport, + $result['value'] + ); + } + + public function testParamOnly() { + $xml = <<<XML +<?xml version="1.0" encoding="UTF-8"?> +<nc:calendar-search xmlns:nc="http://nextcloud.com/ns" xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:"> + <d:prop> + <d:getetag /> + <c:calendar-data /> + </d:prop> + <nc:filter> + <nc:comp-filter name="VEVENT" /> + <nc:param-filter property="ATTENDEE" name="CN" /> + <nc:search-term>foo</nc:search-term> + </nc:filter> +</nc:calendar-search> +XML; + + $result = $this->parse($xml); + + $calendarSearchReport = new CalendarSearchReport(); + $calendarSearchReport->properties = [ + '{DAV:}getetag', + '{urn:ietf:params:xml:ns:caldav}calendar-data', + ]; + $calendarSearchReport->filters = [ + 'comps' => [ + 'VEVENT', + ], + 'params' => [ + [ + 'property' => 'ATTENDEE', + 'parameter' => 'CN' + ] + ], + 'search-term' => 'foo' + ]; + $calendarSearchReport->limit = null; + $calendarSearchReport->offset = null; + + $this->assertEquals( + $calendarSearchReport, + $result['value'] + ); + } + + private function parse($xml, array $elementMap = []) { + $reader = new Reader(); + $reader->elementMap = array_merge($this->elementMap, $elementMap); + $reader->xml($xml); + return $reader->parse(); + } +} diff --git a/apps/dav/tests/unit/CalDAV/Search/SearchPluginTest.php b/apps/dav/tests/unit/CalDAV/Search/SearchPluginTest.php new file mode 100644 index 00000000000..fc647bb5daf --- /dev/null +++ b/apps/dav/tests/unit/CalDAV/Search/SearchPluginTest.php @@ -0,0 +1,124 @@ +<?php +/** + * @author Georg Ehrke <oc.list@georgehrke.com> + * + * @copyright Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com> + * @license GNU AGPL version 3 or any later version + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OCA\DAV\Tests\unit\CalDAV\Search; + +use OCA\DAV\CalDAV\CalendarHome; +use OCA\DAV\CalDAV\Search\SearchPlugin; +use OCA\DAV\CalDAV\Search\Xml\Request\CalendarSearchReport; +use Test\TestCase; + +class SearchPluginTest extends TestCase { + + protected $server; + + /** @var \OCA\DAV\CalDAV\Search\SearchPlugin $plugin */ + protected $plugin; + + public function setUp() { + parent::setUp(); + + $this->server = $this->createMock(\Sabre\DAV\Server::class); + $this->server->tree = $this->createMock(\Sabre\DAV\Tree::class); + $this->server->httpResponse = $this->createMock(\Sabre\HTTP\Response::class); + + $this->plugin = new SearchPlugin(); + $this->plugin->initialize($this->server); + } + + public function testGetFeatures() { + $this->assertEquals(['nc-calendar-search'], $this->plugin->getFeatures()); + } + + public function testGetName() { + $this->assertEquals('nc-calendar-search', $this->plugin->getPluginName()); + } + + public function testInitialize() { + $server = $this->createMock(\Sabre\DAV\Server::class); + + $plugin = new SearchPlugin(); + + $server->expects($this->at(0)) + ->method('on') + ->with('report', [$plugin, 'report']); + + $plugin->initialize($server); + + $this->assertEquals( + $server->xml->elementMap['{http://nextcloud.com/ns}calendar-search'], + 'OCA\\DAV\\CalDAV\\Search\\Xml\\Request\\CalendarSearchReport' + ); + } + + public function testReportUnknown() { + $result = $this->plugin->report('{urn:ietf:params:xml:ns:caldav}calendar-query', 'REPORT', null); + $this->assertEquals($result, null); + $this->assertNotEquals($this->server->transactionType, 'report-nc-calendar-search'); + } + + public function testReport() { + $report = $this->createMock(CalendarSearchReport::class); + $report->filters = []; + $calendarHome = $this->createMock(CalendarHome::class); + $this->server->expects($this->at(0)) + ->method('getRequestUri') + ->with() + ->will($this->returnValue('/re/quest/u/r/i')); + $this->server->tree->expects($this->at(0)) + ->method('getNodeForPath') + ->with('/re/quest/u/r/i') + ->will($this->returnValue($calendarHome)); + $this->server->expects($this->at(1)) + ->method('getHTTPDepth') + ->with(2) + ->will($this->returnValue(2)); + $calendarHome->expects($this->at(0)) + ->method('calendarSearch') + ->will($this->returnValue([])); + + $this->plugin->report('{http://nextcloud.com/ns}calendar-search', $report, ''); + } + + public function testSupportedReportSetNoCalendarHome() { + $this->server->tree->expects($this->once()) + ->method('getNodeForPath') + ->with('/foo/bar') + ->will($this->returnValue(null)); + + $reports = $this->plugin->getSupportedReportSet('/foo/bar'); + $this->assertEquals([], $reports); + } + + public function testSupportedReportSet() { + $calendarHome = $this->createMock(CalendarHome::class); + + $this->server->tree->expects($this->once()) + ->method('getNodeForPath') + ->with('/bar/foo') + ->will($this->returnValue($calendarHome)); + + $reports = $this->plugin->getSupportedReportSet('/bar/foo'); + $this->assertEquals([ + '{http://nextcloud.com/ns}calendar-search' + ], $reports); + } +} diff --git a/apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php b/apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php index 18f91bbd8c9..f27f67b0aae 100644 --- a/apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php @@ -27,6 +27,42 @@ namespace OCA\DAV\Tests\Unit\Connector\Sabre; use OCP\Files\ForbiddenException; +use OC\Files\FileInfo; +use OCA\DAV\Connector\Sabre\Directory; + +class TestViewDirectory extends \OC\Files\View { + + private $updatables; + private $deletables; + private $canRename; + + public function __construct($updatables, $deletables, $canRename = true) { + $this->updatables = $updatables; + $this->deletables = $deletables; + $this->canRename = $canRename; + } + + public function isUpdatable($path) { + return $this->updatables[$path]; + } + + public function isCreatable($path) { + return $this->updatables[$path]; + } + + public function isDeletable($path) { + return $this->deletables[$path]; + } + + public function rename($path1, $path2) { + return $this->canRename; + } + + public function getRelativePath($path) { + return $path; + } +} + /** * @group DB @@ -41,12 +77,11 @@ class DirectoryTest extends \Test\TestCase { protected function setUp() { parent::setUp(); - $this->view = $this->getMockBuilder('OC\Files\View') - ->disableOriginalConstructor() - ->getMock(); - $this->info = $this->getMockBuilder('OC\Files\FileInfo') - ->disableOriginalConstructor() - ->getMock(); + $this->view = $this->createMock('OC\Files\View'); + $this->info = $this->createMock('OC\Files\FileInfo'); + $this->info->expects($this->any()) + ->method('isReadable') + ->willReturn(true); } private function getDir($path = '/') { @@ -58,7 +93,7 @@ class DirectoryTest extends \Test\TestCase { ->method('getPath') ->will($this->returnValue($path)); - return new \OCA\DAV\Connector\Sabre\Directory($this->view, $this->info); + return new Directory($this->view, $this->info); } /** @@ -172,7 +207,7 @@ class DirectoryTest extends \Test\TestCase { ->method('getRelativePath') ->will($this->returnValue('')); - $dir = new \OCA\DAV\Connector\Sabre\Directory($this->view, $this->info); + $dir = new Directory($this->view, $this->info); $nodes = $dir->getChildren(); $this->assertEquals(2, count($nodes)); @@ -183,6 +218,31 @@ class DirectoryTest extends \Test\TestCase { } /** + * @expectedException \Sabre\DAV\Exception\Forbidden + */ + public function testGetChildrenNoPermission() { + $info = $this->createMock(FileInfo::class); + $info->expects($this->any()) + ->method('isReadable') + ->will($this->returnValue(false)); + + $dir = new Directory($this->view, $info); + $dir->getChildren(); + } + + /** + * @expectedException \Sabre\DAV\Exception\NotFound + */ + public function testGetChildNoPermission() { + $this->info->expects($this->any()) + ->method('isReadable') + ->will($this->returnValue(false)); + + $dir = new Directory($this->view, $this->info); + $dir->getChild('test'); + } + + /** * @expectedException \Sabre\DAV\Exception\ServiceUnavailable */ public function testGetChildThrowStorageNotAvailableException() { @@ -190,7 +250,7 @@ class DirectoryTest extends \Test\TestCase { ->method('getFileInfo') ->willThrowException(new \OCP\Files\StorageNotAvailableException()); - $dir = new \OCA\DAV\Connector\Sabre\Directory($this->view, $this->info); + $dir = new Directory($this->view, $this->info); $dir->getChild('.'); } @@ -204,7 +264,7 @@ class DirectoryTest extends \Test\TestCase { $this->view->expects($this->never()) ->method('getFileInfo'); - $dir = new \OCA\DAV\Connector\Sabre\Directory($this->view, $this->info); + $dir = new Directory($this->view, $this->info); $dir->getChild('.'); } @@ -235,7 +295,7 @@ class DirectoryTest extends \Test\TestCase { ->method('getStorage') ->will($this->returnValue($storage)); - $dir = new \OCA\DAV\Connector\Sabre\Directory($this->view, $this->info); + $dir = new Directory($this->view, $this->info); $this->assertEquals([200, -3], $dir->getQuotaInfo()); //200 used, unlimited } @@ -267,7 +327,105 @@ class DirectoryTest extends \Test\TestCase { ->method('getStorage') ->will($this->returnValue($storage)); - $dir = new \OCA\DAV\Connector\Sabre\Directory($this->view, $this->info); + $dir = new Directory($this->view, $this->info); $this->assertEquals([200, 800], $dir->getQuotaInfo()); //200 used, 800 free } + + /** + * @dataProvider moveFailedProvider + * @expectedException \Sabre\DAV\Exception\Forbidden + */ + public function testMoveFailed($source, $destination, $updatables, $deletables) { + $this->moveTest($source, $destination, $updatables, $deletables); + } + + /** + * @dataProvider moveSuccessProvider + */ + public function testMoveSuccess($source, $destination, $updatables, $deletables) { + $this->moveTest($source, $destination, $updatables, $deletables); + $this->assertTrue(true); + } + + /** + * @dataProvider moveFailedInvalidCharsProvider + * @expectedException \OCA\DAV\Connector\Sabre\Exception\InvalidPath + */ + public function testMoveFailedInvalidChars($source, $destination, $updatables, $deletables) { + $this->moveTest($source, $destination, $updatables, $deletables); + } + + public function moveFailedInvalidCharsProvider() { + return [ + ['a/b', 'a/*', ['a' => true, 'a/b' => true, 'a/c*' => false], []], + ]; + } + + public function moveFailedProvider() { + return [ + ['a/b', 'a/c', ['a' => false, 'a/b' => false, 'a/c' => false], []], + ['a/b', 'b/b', ['a' => false, 'a/b' => false, 'b' => false, 'b/b' => false], []], + ['a/b', 'b/b', ['a' => false, 'a/b' => true, 'b' => false, 'b/b' => false], []], + ['a/b', 'b/b', ['a' => true, 'a/b' => true, 'b' => false, 'b/b' => false], []], + ['a/b', 'b/b', ['a' => true, 'a/b' => true, 'b' => true, 'b/b' => false], ['a/b' => false]], + ['a/b', 'a/c', ['a' => false, 'a/b' => true, 'a/c' => false], []], + ]; + } + + public function moveSuccessProvider() { + return [ + ['a/b', 'b/b', ['a' => true, 'a/b' => true, 'b' => true, 'b/b' => false], ['a/b' => true]], + // older files with special chars can still be renamed to valid names + ['a/b*', 'b/b', ['a' => true, 'a/b*' => true, 'b' => true, 'b/b' => false], ['a/b*' => true]], + ]; + } + + /** + * @param $source + * @param $destination + * @param $updatables + */ + private function moveTest($source, $destination, $updatables, $deletables) { + $view = new TestViewDirectory($updatables, $deletables); + + $sourceInfo = new FileInfo($source, null, null, [], null); + $targetInfo = new FileInfo(dirname($destination), null, null, [], null); + + $sourceNode = new Directory($view, $sourceInfo); + $targetNode = $this->getMockBuilder(Directory::class) + ->setMethods(['childExists']) + ->setConstructorArgs([$view, $targetInfo]) + ->getMock(); + $targetNode->expects($this->any())->method('childExists') + ->with(basename($destination)) + ->willReturn(false); + $this->assertTrue($targetNode->moveInto(basename($destination), $source, $sourceNode)); + } + + /** + * @expectedException \Sabre\DAV\Exception\Forbidden + * @expectedExceptionMessage Could not copy directory b, target exists + */ + public function testFailingMove() { + $source = 'a/b'; + $destination = 'c/b'; + $updatables = ['a' => true, 'a/b' => true, 'b' => true, 'c/b' => false]; + $deletables = ['a/b' => true]; + + $view = new TestViewDirectory($updatables, $deletables); + + $sourceInfo = new FileInfo($source, null, null, [], null); + $targetInfo = new FileInfo(dirname($destination), null, null, [], null); + + $sourceNode = new Directory($view, $sourceInfo); + $targetNode = $this->getMockBuilder(Directory::class) + ->setMethods(['childExists']) + ->setConstructorArgs([$view, $targetInfo]) + ->getMock(); + $targetNode->expects($this->once())->method('childExists') + ->with(basename($destination)) + ->willReturn(true); + + $targetNode->moveInto(basename($destination), $source, $sourceNode); + } } diff --git a/apps/dav/tests/unit/Connector/Sabre/FileTest.php b/apps/dav/tests/unit/Connector/Sabre/FileTest.php index 31344b36463..e2666d0de27 100644 --- a/apps/dav/tests/unit/Connector/Sabre/FileTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/FileTest.php @@ -1003,4 +1003,23 @@ class FileTest extends \Test\TestCase { $file->get(); } + + /** + * @expectedException \Sabre\DAV\Exception\NotFound + */ + public function testGetThrowsIfNoPermission() { + $view = $this->getMockBuilder('\OC\Files\View') + ->setMethods(['fopen']) + ->getMock(); + $view->expects($this->never()) + ->method('fopen'); + + $info = new \OC\Files\FileInfo('/test.txt', $this->getMockStorage(), null, [ + 'permissions' => \OCP\Constants::PERMISSION_CREATE // no read perm + ], null); + + $file = new \OCA\DAV\Connector\Sabre\File($view, $info); + + $file->get(); + } } diff --git a/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php index 1c9ebdd09b6..739c8f62540 100644 --- a/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php @@ -32,6 +32,9 @@ use Sabre\DAV\PropPatch; use Sabre\HTTP\RequestInterface; use Sabre\HTTP\ResponseInterface; use Test\TestCase; +use OCA\DAV\Upload\FutureFile; +use OCA\DAV\Connector\Sabre\Directory; +use OCP\Files\FileInfo; /** * Copyright (c) 2015 Vincent Petry <pvince81@owncloud.com> @@ -107,6 +110,12 @@ class FilesPluginTest extends TestCase { $this->request, $this->previewManager ); + + $response = $this->getMockBuilder(ResponseInterface::class) + ->disableOriginalConstructor() + ->getMock(); + $this->server->httpResponse = $response; + $this->plugin->initialize($this->server); } @@ -140,13 +149,15 @@ class FilesPluginTest extends TestCase { $node->expects($this->any()) ->method('getDavPermissions') ->will($this->returnValue('DWCKMSR')); + + $fileInfo = $this->createMock(FileInfo::class); + $fileInfo->expects($this->any()) + ->method('isReadable') + ->willReturn(true); + $node->expects($this->any()) ->method('getFileInfo') - ->will($this->returnValue( - $this->getMockBuilder('\OCP\Files\FileInfo') - ->disableOriginalConstructor() - ->getMock() - )); + ->willReturn($fileInfo); return $node; } @@ -305,6 +316,15 @@ class FilesPluginTest extends TestCase { ->getMock(); $node->expects($this->any())->method('getPath')->willReturn('/'); + $fileInfo = $this->createMock(FileInfo::class); + $fileInfo->expects($this->any()) + ->method('isReadable') + ->willReturn(true); + + $node->expects($this->any()) + ->method('getFileInfo') + ->willReturn($fileInfo); + $propFind = new PropFind( '/', [ @@ -321,6 +341,39 @@ class FilesPluginTest extends TestCase { $this->assertEquals('my_fingerprint', $propFind->get(self::DATA_FINGERPRINT_PROPERTYNAME)); } + /** + * @expectedException \Sabre\DAV\Exception\NotFound + */ + public function testGetPropertiesWhenNoPermission() { + /** @var \OCA\DAV\Connector\Sabre\Directory | \PHPUnit_Framework_MockObject_MockObject $node */ + $node = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\Directory') + ->disableOriginalConstructor() + ->getMock(); + $node->expects($this->any())->method('getPath')->willReturn('/'); + + $fileInfo = $this->createMock(FileInfo::class); + $fileInfo->expects($this->any()) + ->method('isReadable') + ->willReturn(false); + + $node->expects($this->any()) + ->method('getFileInfo') + ->willReturn($fileInfo); + + $propFind = new PropFind( + '/test', + [ + self::DATA_FINGERPRINT_PROPERTYNAME, + ], + 0 + ); + + $this->plugin->handleGetProperties( + $propFind, + $node + ); + } + public function testUpdateProps() { $node = $this->createTestNode('\OCA\DAV\Connector\Sabre\File'); @@ -535,4 +588,59 @@ class FilesPluginTest extends TestCase { $this->assertEquals("false", $propFind->get(self::HAS_PREVIEW_PROPERTYNAME)); } + + public function testBeforeMoveFutureFileSkip() { + $node = $this->createMock(Directory::class); + + $this->tree->expects($this->any()) + ->method('getNodeForPath') + ->with('source') + ->will($this->returnValue($node)); + $this->server->httpResponse->expects($this->never()) + ->method('setStatus'); + + $this->assertNull($this->plugin->beforeMoveFutureFile('source', 'target')); + } + + public function testBeforeMoveFutureFileSkipNonExisting() { + $sourceNode = $this->createMock(FutureFile::class); + + $this->tree->expects($this->any()) + ->method('getNodeForPath') + ->with('source') + ->will($this->returnValue($sourceNode)); + $this->tree->expects($this->any()) + ->method('nodeExists') + ->with('target') + ->will($this->returnValue(false)); + $this->server->httpResponse->expects($this->never()) + ->method('setStatus'); + + $this->assertNull($this->plugin->beforeMoveFutureFile('source', 'target')); + } + + public function testBeforeMoveFutureFileMoveIt() { + $sourceNode = $this->createMock(FutureFile::class); + + $this->tree->expects($this->any()) + ->method('getNodeForPath') + ->with('source') + ->will($this->returnValue($sourceNode)); + $this->tree->expects($this->any()) + ->method('nodeExists') + ->with('target') + ->will($this->returnValue(true)); + $this->tree->expects($this->once()) + ->method('move') + ->with('source', 'target'); + + $this->server->httpResponse->expects($this->once()) + ->method('setHeader') + ->with('Content-Length', '0'); + $this->server->httpResponse->expects($this->once()) + ->method('setStatus') + ->with(204); + + $this->assertFalse($this->plugin->beforeMoveFutureFile('source', 'target')); + } } diff --git a/apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php index 4d8a87b093f..3ca131dbf6f 100644 --- a/apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php @@ -34,6 +34,7 @@ use OCP\Files\Folder; use OCP\IGroupManager; use OCP\SystemTag\ISystemTagManager; use OCP\ITags; +use OCP\Files\FileInfo; class FilesReportPluginTest extends \Test\TestCase { /** @var \Sabre\DAV\Server|\PHPUnit_Framework_MockObject_MockObject */ @@ -349,6 +350,9 @@ class FilesReportPluginTest extends \Test\TestCase { public function testPrepareResponses() { $requestedProps = ['{DAV:}getcontentlength', '{http://owncloud.org/ns}fileid', '{DAV:}resourcetype']; + $fileInfo = $this->createMock(FileInfo::class); + $fileInfo->method('isReadable')->willReturn(true); + $node1 = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\Directory') ->disableOriginalConstructor() ->getMock(); @@ -362,6 +366,7 @@ class FilesReportPluginTest extends \Test\TestCase { $node1->expects($this->any()) ->method('getPath') ->will($this->returnValue('/node1')); + $node1->method('getFileInfo')->willReturn($fileInfo); $node2->expects($this->once()) ->method('getInternalFileId') ->will($this->returnValue('222')); @@ -371,6 +376,7 @@ class FilesReportPluginTest extends \Test\TestCase { $node2->expects($this->any()) ->method('getPath') ->will($this->returnValue('/sub/node2')); + $node2->method('getFileInfo')->willReturn($fileInfo); $config = $this->getMockBuilder('\OCP\IConfig') ->disableOriginalConstructor() diff --git a/apps/dav/tests/unit/Connector/Sabre/ObjectTreeTest.php b/apps/dav/tests/unit/Connector/Sabre/ObjectTreeTest.php index 17cb598bf6e..53f60bd0f1c 100644 --- a/apps/dav/tests/unit/Connector/Sabre/ObjectTreeTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/ObjectTreeTest.php @@ -30,47 +30,11 @@ namespace OCA\DAV\Tests\unit\Connector\Sabre; use OC\Files\FileInfo; +use OC\Files\Filesystem; use OC\Files\Storage\Temporary; - -class TestDoubleFileView extends \OC\Files\View { - - public function __construct($creatables, $updatables, $deletables, $canRename = true) { - $this->creatables = $creatables; - $this->updatables = $updatables; - $this->deletables = $deletables; - $this->canRename = $canRename; - $this->lockingProvider = \OC::$server->getLockingProvider(); - } - - public function isUpdatable($path) { - return !empty($this->updatables[$path]); - } - - public function isCreatable($path) { - return !empty($this->creatables[$path]); - } - - public function isDeletable($path) { - return !empty($this->deletables[$path]); - } - - public function rename($path1, $path2) { - return $this->canRename; - } - - public function getRelativePath($path) { - return $path; - } - - public function getFileInfo($path, $includeMountPoints = true) { - $objectTreeTest = new ObjectTreeTest(); - return $objectTreeTest->getFileInfoMock( - $this->isCreatable($path), - $this->isUpdatable($path), - $this->isDeletable($path) - ); - } -} +use OC\Files\View; +use OCA\DAV\Connector\Sabre\Directory; +use OCA\DAV\Connector\Sabre\ObjectTree; /** * Class ObjectTreeTest @@ -81,103 +45,100 @@ class TestDoubleFileView extends \OC\Files\View { */ class ObjectTreeTest extends \Test\TestCase { - public function getFileInfoMock($create = true, $update = true, $delete = true) { - $mock = $this->getMockBuilder('\OCP\Files\FileInfo') - ->disableOriginalConstructor() - ->getMock(); - $mock - ->expects($this->any()) - ->method('isCreatable') - ->willReturn($create); - $mock - ->expects($this->any()) - ->method('isUpdateable') - ->willReturn($update); - $mock - ->expects($this->any()) - ->method('isDeletable') - ->willReturn($delete); - - return $mock; + public function copyDataProvider() { + return [ + // copy into same dir + ['a', 'b', ''], + // copy into same dir + ['a/a', 'a/b', 'a'], + // copy into another dir + ['a', 'sub/a', 'sub'], + ]; } /** - * @dataProvider moveFailedProvider - * @expectedException \Sabre\DAV\Exception\Forbidden + * @dataProvider copyDataProvider */ - public function testMoveFailed($source, $destination, $updatables, $deletables) { - $this->moveTest($source, $destination, $updatables, $updatables, $deletables, true); - } + public function testCopy($sourcePath, $targetPath, $targetParent) { + $view = $this->createMock(View::class); + $view->expects($this->once()) + ->method('verifyPath') + ->with($targetParent) + ->will($this->returnValue(true)); + $view->expects($this->once()) + ->method('file_exists') + ->with($targetPath) + ->willReturn(false); + $view->expects($this->once()) + ->method('copy') + ->with($sourcePath, $targetPath) + ->will($this->returnValue(true)); - /** - * @dataProvider moveSuccessProvider - */ - public function testMoveSuccess($source, $destination, $updatables, $deletables) { - $this->moveTest($source, $destination, $updatables, $updatables, $deletables); - $this->assertTrue(true); - } + $info = $this->createMock(FileInfo::class); + $info->expects($this->once()) + ->method('isCreatable') + ->willReturn(true); - /** - * @dataProvider moveFailedInvalidCharsProvider - * @expectedException \OCA\DAV\Connector\Sabre\Exception\InvalidPath - */ - public function testMoveFailedInvalidChars($source, $destination, $updatables, $deletables) { - $this->moveTest($source, $destination, $updatables, $updatables, $deletables); - } + $view->expects($this->once()) + ->method('getFileInfo') + ->with($targetParent === '' ? '.' : $targetParent) + ->willReturn($info); - function moveFailedInvalidCharsProvider() { - return array( - array('a/b', 'a/*', array('a' => true, 'a/b' => true, 'a/c*' => false), array()), - ); - } + $rootDir = new Directory($view, $info); + $objectTree = $this->getMockBuilder(ObjectTree::class) + ->setMethods(['nodeExists', 'getNodeForPath']) + ->setConstructorArgs([$rootDir, $view]) + ->getMock(); - function moveFailedProvider() { - return array( - array('a/b', 'a/c', array('a' => false, 'a/b' => false, 'a/c' => false), array()), - array('a/b', 'b/b', array('a' => false, 'a/b' => false, 'b' => false, 'b/b' => false), array()), - array('a/b', 'b/b', array('a' => false, 'a/b' => true, 'b' => false, 'b/b' => false), array()), - array('a/b', 'b/b', array('a' => true, 'a/b' => true, 'b' => false, 'b/b' => false), array()), - array('a/b', 'b/b', array('a' => true, 'a/b' => true, 'b' => true, 'b/b' => false), array('a/b' => false)), - array('a/b', 'a/c', array('a' => false, 'a/b' => true, 'a/c' => false), array()), - ); - } + $objectTree->expects($this->once()) + ->method('getNodeForPath') + ->with($this->identicalTo($sourcePath)) + ->will($this->returnValue(false)); - function moveSuccessProvider() { - return array( - array('a/b', 'b/b', array('a' => true, 'a/b' => true, 'b' => true, 'b/b' => false), array('a/b' => true)), - // older files with special chars can still be renamed to valid names - array('a/b*', 'b/b', array('a' => true, 'a/b*' => true, 'b' => true, 'b/b' => false), array('a/b*' => true)), - ); + /** @var $objectTree \OCA\DAV\Connector\Sabre\ObjectTree */ + $mountManager = Filesystem::getMountManager(); + $objectTree->init($rootDir, $view, $mountManager); + $objectTree->copy($sourcePath, $targetPath); } /** - * @param $source - * @param $destination - * @param $creatables - * @param $updatables - * @param $deletables - * @param $throwsBeforeGetNode + * @dataProvider copyDataProvider + * @expectedException \Sabre\DAV\Exception\Forbidden */ - private function moveTest($source, $destination, $creatables, $updatables, $deletables, $throwsBeforeGetNode = false) { - $view = new TestDoubleFileView($creatables, $updatables, $deletables); + public function testCopyFailNotCreatable($sourcePath, $targetPath, $targetParent) { + $view = $this->createMock(View::class); + $view->expects($this->never()) + ->method('verifyPath'); + $view->expects($this->once()) + ->method('file_exists') + ->with($targetPath) + ->willReturn(false); + $view->expects($this->never()) + ->method('copy'); + + $info = $this->createMock(FileInfo::class); + $info->expects($this->once()) + ->method('isCreatable') + ->willReturn(false); - $info = new FileInfo('', null, null, array(), null); + $view->expects($this->once()) + ->method('getFileInfo') + ->with($targetParent === '' ? '.' : $targetParent) + ->willReturn($info); - $rootDir = new \OCA\DAV\Connector\Sabre\Directory($view, $info); - $objectTree = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\ObjectTree') + $rootDir = new Directory($view, $info); + $objectTree = $this->getMockBuilder(ObjectTree::class) ->setMethods(['nodeExists', 'getNodeForPath']) ->setConstructorArgs([$rootDir, $view]) ->getMock(); - $objectTree->expects($throwsBeforeGetNode ? $this->never() : $this->once()) - ->method('getNodeForPath') - ->with($this->identicalTo($source)) - ->will($this->returnValue(false)); + $objectTree->expects($this->never()) + ->method('getNodeForPath'); /** @var $objectTree \OCA\DAV\Connector\Sabre\ObjectTree */ - $mountManager = \OC\Files\Filesystem::getMountManager(); + $mountManager = Filesystem::getMountManager(); $objectTree->init($rootDir, $view, $mountManager); - $objectTree->move($source, $destination); + $objectTree->copy($sourcePath, $targetPath); } /** @@ -361,46 +322,4 @@ class ObjectTreeTest extends \Test\TestCase { $this->assertInstanceOf('\Sabre\DAV\INode', $tree->getNodeForPath($path)); } - - /** - * @expectedException \Sabre\DAV\Exception\Forbidden - * @expectedExceptionMessage Could not copy directory nameOfSourceNode, target exists - */ - public function testFailingMove() { - $source = 'a/b'; - $destination = 'b/b'; - $updatables = array('a' => true, 'a/b' => true, 'b' => true, 'b/b' => false); - $deletables = array('a/b' => true); - - $view = new TestDoubleFileView($updatables, $updatables, $deletables); - - $info = new FileInfo('', null, null, array(), null); - - $rootDir = new \OCA\DAV\Connector\Sabre\Directory($view, $info); - $objectTree = $this->getMockBuilder('\OCA\DAV\Connector\Sabre\ObjectTree') - ->setMethods(['nodeExists', 'getNodeForPath']) - ->setConstructorArgs([$rootDir, $view]) - ->getMock(); - - $sourceNode = $this->getMockBuilder('\Sabre\DAV\ICollection') - ->disableOriginalConstructor() - ->getMock(); - $sourceNode->expects($this->once()) - ->method('getName') - ->will($this->returnValue('nameOfSourceNode')); - - $objectTree->expects($this->once()) - ->method('nodeExists') - ->with($this->identicalTo($destination)) - ->will($this->returnValue(true)); - $objectTree->expects($this->once()) - ->method('getNodeForPath') - ->with($this->identicalTo($source)) - ->will($this->returnValue($sourceNode)); - - /** @var $objectTree \OCA\DAV\Connector\Sabre\ObjectTree */ - $mountManager = \OC\Files\Filesystem::getMountManager(); - $objectTree->init($rootDir, $view, $mountManager); - $objectTree->move($source, $destination); - } } diff --git a/apps/dav/tests/unit/Connector/Sabre/RequestTest/DeleteTest.php b/apps/dav/tests/unit/Connector/Sabre/RequestTest/DeleteTest.php index 7468e981020..35fd83f1fe6 100644 --- a/apps/dav/tests/unit/Connector/Sabre/RequestTest/DeleteTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/RequestTest/DeleteTest.php @@ -31,7 +31,7 @@ use OCP\AppFramework\Http; * * @package OCA\DAV\Tests\unit\Connector\Sabre\RequestTest */ -class DeleteTest extends RequestTest { +class DeleteTest extends RequestTestCase { public function testBasicUpload() { $user = $this->getUniqueID(); $view = $this->setupUser($user, 'pass'); diff --git a/apps/dav/tests/unit/Connector/Sabre/RequestTest/DownloadTest.php b/apps/dav/tests/unit/Connector/Sabre/RequestTest/DownloadTest.php index 8aac99e8c54..2cb08420f8d 100644 --- a/apps/dav/tests/unit/Connector/Sabre/RequestTest/DownloadTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/RequestTest/DownloadTest.php @@ -34,7 +34,7 @@ use OCP\Lock\ILockingProvider; * * @package OCA\DAV\Tests\unit\Connector\Sabre\RequestTest */ -class DownloadTest extends RequestTest { +class DownloadTest extends RequestTestCase { public function testDownload() { $user = $this->getUniqueID(); $view = $this->setupUser($user, 'pass'); diff --git a/apps/dav/tests/unit/Connector/Sabre/RequestTest/RequestTest.php b/apps/dav/tests/unit/Connector/Sabre/RequestTest/RequestTestCase.php index 63bd3cf19cc..50e228b7e84 100644 --- a/apps/dav/tests/unit/Connector/Sabre/RequestTest/RequestTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/RequestTest/RequestTestCase.php @@ -34,7 +34,7 @@ use Test\TestCase; use Test\Traits\MountProviderTrait; use Test\Traits\UserTrait; -abstract class RequestTest extends TestCase { +abstract class RequestTestCase extends TestCase { use UserTrait; use MountProviderTrait; diff --git a/apps/dav/tests/unit/Connector/Sabre/RequestTest/UploadTest.php b/apps/dav/tests/unit/Connector/Sabre/RequestTest/UploadTest.php index 1db85b1bcaf..5376241c61d 100644 --- a/apps/dav/tests/unit/Connector/Sabre/RequestTest/UploadTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/RequestTest/UploadTest.php @@ -35,7 +35,7 @@ use OCP\Lock\ILockingProvider; * * @package OCA\DAV\Tests\unit\Connector\Sabre\RequestTest */ -class UploadTest extends RequestTest { +class UploadTest extends RequestTestCase { public function testBasicUpload() { $user = $this->getUniqueID(); $view = $this->setupUser($user, 'pass'); diff --git a/apps/encryption/l10n/ko.js b/apps/encryption/l10n/ko.js index 8d45f8ef227..35705d0a7a0 100644 --- a/apps/encryption/l10n/ko.js +++ b/apps/encryption/l10n/ko.js @@ -3,7 +3,7 @@ OC.L10N.register( { "Missing recovery key password" : "잊어버린 복구 키 암호 복구", "Please repeat the recovery key password" : "복구 키 암호를 다시 입력하십시오", - "Repeated recovery key password does not match the provided recovery key password" : "입력한 복구 키 암호가 일치하지 않습니다", + "Repeated recovery key password does not match the provided recovery key password" : "입력한 복구 키 암호가 서로 다릅니다", "Recovery key successfully enabled" : "복구 키가 성공적으로 활성화되었습니다", "Could not enable recovery key. Please check your recovery key password!" : "복구 키를 활성화 할 수 없습니다. 복구 키의 암호를 확인해 주십시오!", "Recovery key successfully disabled" : "복구 키가 성공적으로 비활성화 되었습니다", @@ -21,8 +21,9 @@ OC.L10N.register( "The old password was not correct, please try again." : "이전 암호가 잘못되었습니다. 다시 시도하십시오.", "The current log-in password was not correct, please try again." : "현재 로그인 암호가 잘못되었습니다. 다시 시도하십시오.", "Private key password successfully updated." : "개인 키 암호가 성공적으로 업데이트 되었습니다.", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "과거에 사용하였던(ownCloud <= 8.0) 암호화된 데이터에서 키를 이전해야 합니다. 'occ encryption:migrate'를 실행하거나 시스템 관리자에게 연락하십시오", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "과거에 사용하였던(ownCloud <= 8.0) 암호화된 데이터에서 키를 이전해야 합니다. 'occ encryption:migrate'를 실행하거나 시스템 관리자에게 연락하십시오 ", "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "암호화 앱의 개인 키가 잘못되었습니다. 암호화된 파일에 다시 접근하려면 개인 설정에서 개인 키 암호를 업데이트해야 합니다.", + "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "암호화 앱이 활성화되었으나 키가 초기화되지 않았습니다. 로그아웃한 후 다시 로그인하십시오.", "Encryption app is enabled and ready" : "암호화 앱이 활성화되었고 준비됨", "Bad Signature" : "잘못된 서명", "Missing Signature" : "서명 없음", @@ -30,7 +31,7 @@ OC.L10N.register( "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "이 파일을 복호화할 수 없습니다. 공유된 파일일 수도 있습니다. 파일 소유자에게 공유를 다시 요청하십시오.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "이 파일을 읽을 수 없습니다. 공유된 파일이라면 파일 소유자에게 연락하여 다시 공유해 달라고 요청하십시오.", "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "안녕하세요,\n\n시스템 관리자가 서버 측 암호화를 활성화했습니다. 저장된 파일이 암호 '%s'으(로) 암호화되었습니다.\n\n웹 인터페이스에 로그인하여 개인 설정의 '기본 암호화 모듈'로 이동한 다음, '이전 로그인 암호' 필드에 위 암호를 입력하고 현재 로그인 암호로 변경하여 암호화 암호를 업데이트하십시오.\n\n", - "The share will expire on %s." : "이 공유는 %s 까지 유지됩니다.", + "The share will expire on %s." : "이 공유는 %s에 만료됩니다.", "Cheers!" : "감사합니다!", "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "안녕하세요,<br><br>시스템 관리자가 서버 측 암호화를 활성화했습니다. 저장된 파일이 암호 <strong>%s</strong>으(로) 암호화되었습니다.<br><br>웹 인터페이스에 로그인하여 개인 설정의 '기본 암호화 모듈'로 이동한 다음, '이전 로그인 암호' 필드에 위 암호를 입력하고 현재 로그인 암호로 변경하여 암호화 암호를 업데이트하십시오.<br><br>", "Default encryption module" : "기본 암호화 모듈", diff --git a/apps/encryption/l10n/ko.json b/apps/encryption/l10n/ko.json index ea8f5027c62..bcc081dd5e5 100644 --- a/apps/encryption/l10n/ko.json +++ b/apps/encryption/l10n/ko.json @@ -1,7 +1,7 @@ { "translations": { "Missing recovery key password" : "잊어버린 복구 키 암호 복구", "Please repeat the recovery key password" : "복구 키 암호를 다시 입력하십시오", - "Repeated recovery key password does not match the provided recovery key password" : "입력한 복구 키 암호가 일치하지 않습니다", + "Repeated recovery key password does not match the provided recovery key password" : "입력한 복구 키 암호가 서로 다릅니다", "Recovery key successfully enabled" : "복구 키가 성공적으로 활성화되었습니다", "Could not enable recovery key. Please check your recovery key password!" : "복구 키를 활성화 할 수 없습니다. 복구 키의 암호를 확인해 주십시오!", "Recovery key successfully disabled" : "복구 키가 성공적으로 비활성화 되었습니다", @@ -19,8 +19,9 @@ "The old password was not correct, please try again." : "이전 암호가 잘못되었습니다. 다시 시도하십시오.", "The current log-in password was not correct, please try again." : "현재 로그인 암호가 잘못되었습니다. 다시 시도하십시오.", "Private key password successfully updated." : "개인 키 암호가 성공적으로 업데이트 되었습니다.", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "과거에 사용하였던(ownCloud <= 8.0) 암호화된 데이터에서 키를 이전해야 합니다. 'occ encryption:migrate'를 실행하거나 시스템 관리자에게 연락하십시오", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "과거에 사용하였던(ownCloud <= 8.0) 암호화된 데이터에서 키를 이전해야 합니다. 'occ encryption:migrate'를 실행하거나 시스템 관리자에게 연락하십시오 ", "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "암호화 앱의 개인 키가 잘못되었습니다. 암호화된 파일에 다시 접근하려면 개인 설정에서 개인 키 암호를 업데이트해야 합니다.", + "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "암호화 앱이 활성화되었으나 키가 초기화되지 않았습니다. 로그아웃한 후 다시 로그인하십시오.", "Encryption app is enabled and ready" : "암호화 앱이 활성화되었고 준비됨", "Bad Signature" : "잘못된 서명", "Missing Signature" : "서명 없음", @@ -28,7 +29,7 @@ "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "이 파일을 복호화할 수 없습니다. 공유된 파일일 수도 있습니다. 파일 소유자에게 공유를 다시 요청하십시오.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "이 파일을 읽을 수 없습니다. 공유된 파일이라면 파일 소유자에게 연락하여 다시 공유해 달라고 요청하십시오.", "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "안녕하세요,\n\n시스템 관리자가 서버 측 암호화를 활성화했습니다. 저장된 파일이 암호 '%s'으(로) 암호화되었습니다.\n\n웹 인터페이스에 로그인하여 개인 설정의 '기본 암호화 모듈'로 이동한 다음, '이전 로그인 암호' 필드에 위 암호를 입력하고 현재 로그인 암호로 변경하여 암호화 암호를 업데이트하십시오.\n\n", - "The share will expire on %s." : "이 공유는 %s 까지 유지됩니다.", + "The share will expire on %s." : "이 공유는 %s에 만료됩니다.", "Cheers!" : "감사합니다!", "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "안녕하세요,<br><br>시스템 관리자가 서버 측 암호화를 활성화했습니다. 저장된 파일이 암호 <strong>%s</strong>으(로) 암호화되었습니다.<br><br>웹 인터페이스에 로그인하여 개인 설정의 '기본 암호화 모듈'로 이동한 다음, '이전 로그인 암호' 필드에 위 암호를 입력하고 현재 로그인 암호로 변경하여 암호화 암호를 업데이트하십시오.<br><br>", "Default encryption module" : "기본 암호화 모듈", diff --git a/apps/encryption/l10n/pt_BR.js b/apps/encryption/l10n/pt_BR.js index eccc6a2ada3..e0954a6bc1f 100644 --- a/apps/encryption/l10n/pt_BR.js +++ b/apps/encryption/l10n/pt_BR.js @@ -32,7 +32,7 @@ OC.L10N.register( "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível ler este arquivo pois provavelmente é um arquivo compartilhado. Por favor, peça ao dono do arquivo para recompartilhá-lo com você.", "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Olá,\n\nO administrador habilitou a criptografia do lado do servidor. Os seus arquivos foram criptografados usando a senha '%s'.\n\nPor favor faça o login na interface da Web, vá para a seção 'módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua senha de login atual.\n\n", "The share will expire on %s." : "O compartilhamento irá expirar em %s.", - "Cheers!" : "Saúde!", + "Cheers!" : "Saudações!", "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Olá,<br><br>o administrador habilitou a criptografia do lado do servidor. Os seus arquivos foram criptografados usando a senha <strong>%s</strong>.<br><br>Por favor, faça o login na interface da Web, vá para a seção 'módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua senha de login atual.<br><br>", "Default encryption module" : "Módulo de criptografia padrão", "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "O aplicativo de criptografia está habilitado, mas suas chaves não foram inicializadas. Por favor, saia e entre novamente.", diff --git a/apps/encryption/l10n/pt_BR.json b/apps/encryption/l10n/pt_BR.json index 5e697001fc2..85982d7769d 100644 --- a/apps/encryption/l10n/pt_BR.json +++ b/apps/encryption/l10n/pt_BR.json @@ -30,7 +30,7 @@ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível ler este arquivo pois provavelmente é um arquivo compartilhado. Por favor, peça ao dono do arquivo para recompartilhá-lo com você.", "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Olá,\n\nO administrador habilitou a criptografia do lado do servidor. Os seus arquivos foram criptografados usando a senha '%s'.\n\nPor favor faça o login na interface da Web, vá para a seção 'módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua senha de login atual.\n\n", "The share will expire on %s." : "O compartilhamento irá expirar em %s.", - "Cheers!" : "Saúde!", + "Cheers!" : "Saudações!", "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Olá,<br><br>o administrador habilitou a criptografia do lado do servidor. Os seus arquivos foram criptografados usando a senha <strong>%s</strong>.<br><br>Por favor, faça o login na interface da Web, vá para a seção 'módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua senha de login atual.<br><br>", "Default encryption module" : "Módulo de criptografia padrão", "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "O aplicativo de criptografia está habilitado, mas suas chaves não foram inicializadas. Por favor, saia e entre novamente.", diff --git a/apps/encryption/templates/settings-personal.php b/apps/encryption/templates/settings-personal.php index 6ab4bf6f5f4..7d0a26eea93 100644 --- a/apps/encryption/templates/settings-personal.php +++ b/apps/encryption/templates/settings-personal.php @@ -5,7 +5,7 @@ script('encryption', 'settings-personal'); script('core', 'multiselect'); ?> <form id="ocDefaultEncryptionModule" class="section"> - <h2><?php p($l->t('Basic encryption module')); ?></h2> + <h2 data-anchor-name="basic-encryption-module"><?php p($l->t('Basic encryption module')); ?></h2> <?php if ($_["initialized"] === \OCA\Encryption\Session::NOT_INITIALIZED ): ?> @@ -53,20 +53,20 @@ script('core', 'multiselect'); <br /> <input type='radio' - id='userEnableRecovery' + id='userEnableRecoveryCheckbox' name='userEnableRecovery' value='1' <?php echo ( $_["recoveryEnabledForUser"] ? 'checked="checked"' : '' ); ?> /> - <label for="userEnableRecovery"><?php p( $l->t( "Enabled" ) ); ?></label> + <label for="userEnableRecoveryCheckbox"><?php p( $l->t( "Enabled" ) ); ?></label> <br /> <input type='radio' - id='userDisableRecovery' + id='userDisableRecoveryCheckbox' name='userEnableRecovery' value='0' <?php echo ( $_["recoveryEnabledForUser"] === false ? 'checked="checked"' : '' ); ?> /> - <label for="userDisableRecovery"><?php p( $l->t( "Disabled" ) ); ?></label> + <label for="userDisableRecoveryCheckbox"><?php p( $l->t( "Disabled" ) ); ?></label> </p> <?php endif; ?> </form> diff --git a/apps/federatedfilesharing/js/settings-personal.js b/apps/federatedfilesharing/js/settings-personal.js index 04096cb0416..c954f74f323 100644 --- a/apps/federatedfilesharing/js/settings-personal.js +++ b/apps/federatedfilesharing/js/settings-personal.js @@ -20,6 +20,9 @@ $(document).ready(function() { } }); + /* Verification icon tooltip */ + $('#personal-settings-container .verify img').tooltip({placement: 'bottom', trigger: 'hover'}); + $('#fileSharingSettings .clipboardButton').tooltip({placement: 'bottom', title: t('core', 'Copy'), trigger: 'hover'}); // Clipboard! diff --git a/apps/federatedfilesharing/l10n/cs.js b/apps/federatedfilesharing/l10n/cs.js index 66ba39701ed..0990c907905 100644 --- a/apps/federatedfilesharing/l10n/cs.js +++ b/apps/federatedfilesharing/l10n/cs.js @@ -41,12 +41,13 @@ OC.L10N.register( "Open documentation" : "Otevřít dokumentaci", "Allow users on this server to send shares to other servers" : "Povolit uživatelům z tohoto serveru zasílat sdílení na jiné servery", "Allow users on this server to receive shares from other servers" : "Povolit uživatelům na tomto serveru přijímat sdílení z jiných serverů", + "Allow users to publish their data to a global and public address book" : "Povolit uživatelům publikování jejich dat do globálního a sdíleného adresáře", "Federated Cloud" : "Sdružený cloud", "Your Federated Cloud ID:" : "Vaše sdružené cloud ID:", - "Share it:" : "Sdílet:", "Add to your website" : "Přidat na svou webovou stránku", "Share with me via Nextcloud" : "Sdíleno se mnou přes Nextcloud", "HTML Code:" : "HTML kód:", - "Search global and public address book for users" : "Hledat uživatele v globálním a veřejném adresáři" + "Search global and public address book for users" : "Hledat uživatele v globálním a veřejném adresáři", + "Share it:" : "Sdílet:" }, "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/apps/federatedfilesharing/l10n/cs.json b/apps/federatedfilesharing/l10n/cs.json index 1455b337314..a9fdf3405f3 100644 --- a/apps/federatedfilesharing/l10n/cs.json +++ b/apps/federatedfilesharing/l10n/cs.json @@ -39,12 +39,13 @@ "Open documentation" : "Otevřít dokumentaci", "Allow users on this server to send shares to other servers" : "Povolit uživatelům z tohoto serveru zasílat sdílení na jiné servery", "Allow users on this server to receive shares from other servers" : "Povolit uživatelům na tomto serveru přijímat sdílení z jiných serverů", + "Allow users to publish their data to a global and public address book" : "Povolit uživatelům publikování jejich dat do globálního a sdíleného adresáře", "Federated Cloud" : "Sdružený cloud", "Your Federated Cloud ID:" : "Vaše sdružené cloud ID:", - "Share it:" : "Sdílet:", "Add to your website" : "Přidat na svou webovou stránku", "Share with me via Nextcloud" : "Sdíleno se mnou přes Nextcloud", "HTML Code:" : "HTML kód:", - "Search global and public address book for users" : "Hledat uživatele v globálním a veřejném adresáři" + "Search global and public address book for users" : "Hledat uživatele v globálním a veřejném adresáři", + "Share it:" : "Sdílet:" },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/de.js b/apps/federatedfilesharing/l10n/de.js index 2f2387c01be..37a9fcb3a47 100644 --- a/apps/federatedfilesharing/l10n/de.js +++ b/apps/federatedfilesharing/l10n/de.js @@ -39,16 +39,19 @@ OC.L10N.register( "Share with me through my #Nextcloud Federated Cloud ID" : "Teile mit mir über meine #Nextcloud Federated-Cloud-ID", "Federated Cloud Sharing" : "Federated-Cloud-Sharing", "Open documentation" : "Dokumentation öffnen", + "Adjust how people can share between servers." : "Definiere wie die Benutzer Inhalte mit anderen Servern teilen können.", "Allow users on this server to send shares to other servers" : "Benutzern auf diesem Server das Senden von Freigaben an andere Server erlauben", "Allow users on this server to receive shares from other servers" : "Benutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben", "Search global and public address book for users and let local users publish their data" : "Globales und öffentliches Adressbuch nach Nutzern durchsuchen und lokale Nutzer ihre Daten veröffentlichen lassen", "Allow users to publish their data to a global and public address book" : "Erlaube Benutzern ihre Daten an ein globales und öffentliches Adressbuche zu veröffentlichen", "Federated Cloud" : "Federated Cloud", + "You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Du kannst mit allen Leuten teilen, welche Nextcloud, ownCloud oder Pydio nutzen! Gebe einfach deren Federated Cloud ID in den Teilen-Dialog ein. Diese sieht wie folgt aus person@cloud.example.com", "Your Federated Cloud ID:" : "Deine Federated-Cloud-ID:", - "Share it:" : "Zum Teilen:", + "Share it so your friends can share files with you:" : "Teile es, so dass Deine Freunde Dateien mit Dir teilen können:", "Add to your website" : "Zu deiner Webseite hinzufügen", "Share with me via Nextcloud" : "Teile mit mir über Nextcloud", "HTML Code:" : "HTML-Code:", - "Search global and public address book for users" : "Globale Suche und ein öffentliches Adressbuch für Benutzer" + "Search global and public address book for users" : "Globale Suche und ein öffentliches Adressbuch für Benutzer", + "Share it:" : "Zum Teilen:" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federatedfilesharing/l10n/de.json b/apps/federatedfilesharing/l10n/de.json index fe1f884181c..62fb5fc88b6 100644 --- a/apps/federatedfilesharing/l10n/de.json +++ b/apps/federatedfilesharing/l10n/de.json @@ -37,16 +37,19 @@ "Share with me through my #Nextcloud Federated Cloud ID" : "Teile mit mir über meine #Nextcloud Federated-Cloud-ID", "Federated Cloud Sharing" : "Federated-Cloud-Sharing", "Open documentation" : "Dokumentation öffnen", + "Adjust how people can share between servers." : "Definiere wie die Benutzer Inhalte mit anderen Servern teilen können.", "Allow users on this server to send shares to other servers" : "Benutzern auf diesem Server das Senden von Freigaben an andere Server erlauben", "Allow users on this server to receive shares from other servers" : "Benutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben", "Search global and public address book for users and let local users publish their data" : "Globales und öffentliches Adressbuch nach Nutzern durchsuchen und lokale Nutzer ihre Daten veröffentlichen lassen", "Allow users to publish their data to a global and public address book" : "Erlaube Benutzern ihre Daten an ein globales und öffentliches Adressbuche zu veröffentlichen", "Federated Cloud" : "Federated Cloud", + "You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Du kannst mit allen Leuten teilen, welche Nextcloud, ownCloud oder Pydio nutzen! Gebe einfach deren Federated Cloud ID in den Teilen-Dialog ein. Diese sieht wie folgt aus person@cloud.example.com", "Your Federated Cloud ID:" : "Deine Federated-Cloud-ID:", - "Share it:" : "Zum Teilen:", + "Share it so your friends can share files with you:" : "Teile es, so dass Deine Freunde Dateien mit Dir teilen können:", "Add to your website" : "Zu deiner Webseite hinzufügen", "Share with me via Nextcloud" : "Teile mit mir über Nextcloud", "HTML Code:" : "HTML-Code:", - "Search global and public address book for users" : "Globale Suche und ein öffentliches Adressbuch für Benutzer" + "Search global and public address book for users" : "Globale Suche und ein öffentliches Adressbuch für Benutzer", + "Share it:" : "Zum Teilen:" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/de_DE.js b/apps/federatedfilesharing/l10n/de_DE.js index 11983a5e2fd..42606db4ee7 100644 --- a/apps/federatedfilesharing/l10n/de_DE.js +++ b/apps/federatedfilesharing/l10n/de_DE.js @@ -39,16 +39,19 @@ OC.L10N.register( "Share with me through my #Nextcloud Federated Cloud ID" : "Teilen Sie mit mir über meine #Nextcloud Federated-Cloud-ID", "Federated Cloud Sharing" : "Federated-Cloud-Sharing", "Open documentation" : "Dokumentation öffnen", + "Adjust how people can share between servers." : "Definiere wie die Benutzer Inhalte mit anderen Servern teilen können.", "Allow users on this server to send shares to other servers" : "Benutzern auf diesem Server das Senden von Freigaben an andere Server erlauben", "Allow users on this server to receive shares from other servers" : "Benutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben", "Search global and public address book for users and let local users publish their data" : "Globales und öffentliches Adressbuch nach Nutzern durchsuchen und lokale Nutzer ihre Daten veröffentlichen lassen", "Allow users to publish their data to a global and public address book" : "Erlaube Benutzern ihre Daten an ein globales und öffentliches Adressbuche zu veröffentlichen", "Federated Cloud" : "Federated Cloud", + "You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Sie können mit allen Leuten teilen, welche Nextcloud, ownCloud oder Pydio nutzen! Geben Sie einfach deren Federated Cloud ID in den Teilen-Dialog ein. Diese sieht wie folgt aus person@cloud.example.com", "Your Federated Cloud ID:" : "Ihre Federated-Cloud-ID:", - "Share it:" : "Teilen:", + "Share it so your friends can share files with you:" : "Teilen SIe es, so dass Ihre Freunde Dateien mit Ihnen teilen können:", "Add to your website" : "Zu Ihrer Web-Seite hinzufügen", "Share with me via Nextcloud" : "Teilen Sie mit mir über Nextcloud", "HTML Code:" : "HTML-Code:", - "Search global and public address book for users" : "Durchsuche globales und öffentliches Adressbuch nach Nutzern" + "Search global and public address book for users" : "Durchsuche globales und öffentliches Adressbuch nach Nutzern", + "Share it:" : "Teilen:" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federatedfilesharing/l10n/de_DE.json b/apps/federatedfilesharing/l10n/de_DE.json index ad6d84c8171..47763ecd172 100644 --- a/apps/federatedfilesharing/l10n/de_DE.json +++ b/apps/federatedfilesharing/l10n/de_DE.json @@ -37,16 +37,19 @@ "Share with me through my #Nextcloud Federated Cloud ID" : "Teilen Sie mit mir über meine #Nextcloud Federated-Cloud-ID", "Federated Cloud Sharing" : "Federated-Cloud-Sharing", "Open documentation" : "Dokumentation öffnen", + "Adjust how people can share between servers." : "Definiere wie die Benutzer Inhalte mit anderen Servern teilen können.", "Allow users on this server to send shares to other servers" : "Benutzern auf diesem Server das Senden von Freigaben an andere Server erlauben", "Allow users on this server to receive shares from other servers" : "Benutzern auf diesem Server das Empfangen von Freigaben von anderen Servern erlauben", "Search global and public address book for users and let local users publish their data" : "Globales und öffentliches Adressbuch nach Nutzern durchsuchen und lokale Nutzer ihre Daten veröffentlichen lassen", "Allow users to publish their data to a global and public address book" : "Erlaube Benutzern ihre Daten an ein globales und öffentliches Adressbuche zu veröffentlichen", "Federated Cloud" : "Federated Cloud", + "You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Sie können mit allen Leuten teilen, welche Nextcloud, ownCloud oder Pydio nutzen! Geben Sie einfach deren Federated Cloud ID in den Teilen-Dialog ein. Diese sieht wie folgt aus person@cloud.example.com", "Your Federated Cloud ID:" : "Ihre Federated-Cloud-ID:", - "Share it:" : "Teilen:", + "Share it so your friends can share files with you:" : "Teilen SIe es, so dass Ihre Freunde Dateien mit Ihnen teilen können:", "Add to your website" : "Zu Ihrer Web-Seite hinzufügen", "Share with me via Nextcloud" : "Teilen Sie mit mir über Nextcloud", "HTML Code:" : "HTML-Code:", - "Search global and public address book for users" : "Durchsuche globales und öffentliches Adressbuch nach Nutzern" + "Search global and public address book for users" : "Durchsuche globales und öffentliches Adressbuch nach Nutzern", + "Share it:" : "Teilen:" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/es.js b/apps/federatedfilesharing/l10n/es.js index 881e0e17ee4..1cd41e22914 100644 --- a/apps/federatedfilesharing/l10n/es.js +++ b/apps/federatedfilesharing/l10n/es.js @@ -45,10 +45,10 @@ OC.L10N.register( "Allow users to publish their data to a global and public address book" : "Permitir a los usuarios publicar su información en la libreta de direcciones global y pública", "Federated Cloud" : "Nube Federada", "Your Federated Cloud ID:" : "Su ID Nube Federada:", - "Share it:" : "Compartir:", "Add to your website" : "Añadir a su sitio web", "Share with me via Nextcloud" : "Compartirlo conmigo vía Nextcloud", "HTML Code:" : "Código HTML:", - "Search global and public address book for users" : "Buscar libretas de contactos globales y públicas para usuarios" + "Search global and public address book for users" : "Buscar libretas de contactos globales y públicas para usuarios", + "Share it:" : "Compartir:" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federatedfilesharing/l10n/es.json b/apps/federatedfilesharing/l10n/es.json index da75410734e..36a6206e890 100644 --- a/apps/federatedfilesharing/l10n/es.json +++ b/apps/federatedfilesharing/l10n/es.json @@ -43,10 +43,10 @@ "Allow users to publish their data to a global and public address book" : "Permitir a los usuarios publicar su información en la libreta de direcciones global y pública", "Federated Cloud" : "Nube Federada", "Your Federated Cloud ID:" : "Su ID Nube Federada:", - "Share it:" : "Compartir:", "Add to your website" : "Añadir a su sitio web", "Share with me via Nextcloud" : "Compartirlo conmigo vía Nextcloud", "HTML Code:" : "Código HTML:", - "Search global and public address book for users" : "Buscar libretas de contactos globales y públicas para usuarios" + "Search global and public address book for users" : "Buscar libretas de contactos globales y públicas para usuarios", + "Share it:" : "Compartir:" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/es_MX.js b/apps/federatedfilesharing/l10n/es_MX.js index 94bc1a2683a..c58da061e40 100644 --- a/apps/federatedfilesharing/l10n/es_MX.js +++ b/apps/federatedfilesharing/l10n/es_MX.js @@ -39,16 +39,19 @@ OC.L10N.register( "Share with me through my #Nextcloud Federated Cloud ID" : "Compartir conmigo a través de mi ID de Nube Federada #Nextcloud", "Federated Cloud Sharing" : "Compartir en la Nube Federada", "Open documentation" : "Abrir documentación", + "Adjust how people can share between servers." : "Ajustar cómo las personas pueden compartir entre servidores. ", "Allow users on this server to send shares to other servers" : "Permitirle a los usuarios de este servidor enviar elementos compartidos a otros servidores", "Allow users on this server to receive shares from other servers" : "Permitir que los usuarios de este servidor recibir elementos compartidos de otros servidores", "Search global and public address book for users and let local users publish their data" : "Buscar una libreta de direcciones global y pública para los usuarios y permitir a los usuarios locales publicar sus datos", "Allow users to publish their data to a global and public address book" : "Permitir a los usuarios publicar sus datos a una libreta de direcciones global y pública", "Federated Cloud" : "Nube Federada", + "You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "¡Puede compartir con cualquiera que use NextCloud, ownCloud o Pydio! Solo ingrese su ID de Nube Federada en ventana de diálogo de compartir. Se ve algo así como person@cloud.example.com", "Your Federated Cloud ID:" : "Su ID de Nube Federada:", - "Share it:" : "Compartirlo:", + "Share it so your friends can share files with you:" : "Compártalo para que sus amigos puedan compartir archivos con usted. ", "Add to your website" : "Agregar a su sitio web", "Share with me via Nextcloud" : "Compartir conmigo vía Nextcloud", "HTML Code:" : "Código HTML:", - "Search global and public address book for users" : "Buscar usuarios en las libretas de contactos globales y públicas" + "Search global and public address book for users" : "Buscar usuarios en las libretas de contactos globales y públicas", + "Share it:" : "Compartirlo:" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federatedfilesharing/l10n/es_MX.json b/apps/federatedfilesharing/l10n/es_MX.json index cab49642c5c..189e71896dc 100644 --- a/apps/federatedfilesharing/l10n/es_MX.json +++ b/apps/federatedfilesharing/l10n/es_MX.json @@ -37,16 +37,19 @@ "Share with me through my #Nextcloud Federated Cloud ID" : "Compartir conmigo a través de mi ID de Nube Federada #Nextcloud", "Federated Cloud Sharing" : "Compartir en la Nube Federada", "Open documentation" : "Abrir documentación", + "Adjust how people can share between servers." : "Ajustar cómo las personas pueden compartir entre servidores. ", "Allow users on this server to send shares to other servers" : "Permitirle a los usuarios de este servidor enviar elementos compartidos a otros servidores", "Allow users on this server to receive shares from other servers" : "Permitir que los usuarios de este servidor recibir elementos compartidos de otros servidores", "Search global and public address book for users and let local users publish their data" : "Buscar una libreta de direcciones global y pública para los usuarios y permitir a los usuarios locales publicar sus datos", "Allow users to publish their data to a global and public address book" : "Permitir a los usuarios publicar sus datos a una libreta de direcciones global y pública", "Federated Cloud" : "Nube Federada", + "You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "¡Puede compartir con cualquiera que use NextCloud, ownCloud o Pydio! Solo ingrese su ID de Nube Federada en ventana de diálogo de compartir. Se ve algo así como person@cloud.example.com", "Your Federated Cloud ID:" : "Su ID de Nube Federada:", - "Share it:" : "Compartirlo:", + "Share it so your friends can share files with you:" : "Compártalo para que sus amigos puedan compartir archivos con usted. ", "Add to your website" : "Agregar a su sitio web", "Share with me via Nextcloud" : "Compartir conmigo vía Nextcloud", "HTML Code:" : "Código HTML:", - "Search global and public address book for users" : "Buscar usuarios en las libretas de contactos globales y públicas" + "Search global and public address book for users" : "Buscar usuarios en las libretas de contactos globales y públicas", + "Share it:" : "Compartirlo:" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/fi.js b/apps/federatedfilesharing/l10n/fi.js index 8274af6c25a..a9ca7cbed9e 100644 --- a/apps/federatedfilesharing/l10n/fi.js +++ b/apps/federatedfilesharing/l10n/fi.js @@ -45,10 +45,10 @@ OC.L10N.register( "Allow users to publish their data to a global and public address book" : "Salli käyttäjien julkaista tietojaan maailmanlaajuisessa ja julkisessa osoitekirjassa", "Federated Cloud" : "Federoitu pilvi", "Your Federated Cloud ID:" : "Federoidun pilvesi tunniste:", - "Share it:" : "Jaa se:", "Add to your website" : "Lisää verkkosivuillesi", "Share with me via Nextcloud" : "Jaa kanssani Nextcloudin kautta", "HTML Code:" : "HTML-koodi:", - "Search global and public address book for users" : "Etsi käyttäjiä maailmanlaajuisesta ja julkisesta osoitekirjasta" + "Search global and public address book for users" : "Etsi käyttäjiä maailmanlaajuisesta ja julkisesta osoitekirjasta", + "Share it:" : "Jaa se:" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federatedfilesharing/l10n/fi.json b/apps/federatedfilesharing/l10n/fi.json index 0a2dc0193ce..bbe09b8df1f 100644 --- a/apps/federatedfilesharing/l10n/fi.json +++ b/apps/federatedfilesharing/l10n/fi.json @@ -43,10 +43,10 @@ "Allow users to publish their data to a global and public address book" : "Salli käyttäjien julkaista tietojaan maailmanlaajuisessa ja julkisessa osoitekirjassa", "Federated Cloud" : "Federoitu pilvi", "Your Federated Cloud ID:" : "Federoidun pilvesi tunniste:", - "Share it:" : "Jaa se:", "Add to your website" : "Lisää verkkosivuillesi", "Share with me via Nextcloud" : "Jaa kanssani Nextcloudin kautta", "HTML Code:" : "HTML-koodi:", - "Search global and public address book for users" : "Etsi käyttäjiä maailmanlaajuisesta ja julkisesta osoitekirjasta" + "Search global and public address book for users" : "Etsi käyttäjiä maailmanlaajuisesta ja julkisesta osoitekirjasta", + "Share it:" : "Jaa se:" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/fr.js b/apps/federatedfilesharing/l10n/fr.js index 2d2f087a04a..cb8fd825905 100644 --- a/apps/federatedfilesharing/l10n/fr.js +++ b/apps/federatedfilesharing/l10n/fr.js @@ -39,16 +39,17 @@ OC.L10N.register( "Share with me through my #Nextcloud Federated Cloud ID" : "Partagez avec moi grâce à mon identifiant Federated Cloud #Nextcloud", "Federated Cloud Sharing" : "Federated Cloud Sharing", "Open documentation" : "Voir la documentation", + "Adjust how people can share between servers." : "Réglez comment les personnes peuvent partager entre les serveurs.", "Allow users on this server to send shares to other servers" : "Autoriser les utilisateurs de ce serveur à envoyer des partages vers d'autres serveurs", "Allow users on this server to receive shares from other servers" : "Autoriser les utilisateurs de ce serveur à recevoir des partages d'autres serveurs", "Search global and public address book for users and let local users publish their data" : "Rechercher dans le carnet d'adresse global et public pour les utilisateurs et laisser les utilisateurs publier leurs données", "Allow users to publish their data to a global and public address book" : "Autoriser les utilisateurs à publier leurs données dans un carnet d'adresse global et public", "Federated Cloud" : "Federated Cloud", "Your Federated Cloud ID:" : "Votre identifiant Federated Cloud :", - "Share it:" : "Partager :", "Add to your website" : "Ajouter à votre site web", "Share with me via Nextcloud" : "Partagez avec moi via Nextcloud", "HTML Code:" : "Code HTML :", - "Search global and public address book for users" : "Rechercher dans le carnet d'adresse global et public pour les utilisateurs" + "Search global and public address book for users" : "Rechercher dans le carnet d'adresse global et public pour les utilisateurs", + "Share it:" : "Partager :" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/federatedfilesharing/l10n/fr.json b/apps/federatedfilesharing/l10n/fr.json index 65f6a55b862..f556159c96d 100644 --- a/apps/federatedfilesharing/l10n/fr.json +++ b/apps/federatedfilesharing/l10n/fr.json @@ -37,16 +37,17 @@ "Share with me through my #Nextcloud Federated Cloud ID" : "Partagez avec moi grâce à mon identifiant Federated Cloud #Nextcloud", "Federated Cloud Sharing" : "Federated Cloud Sharing", "Open documentation" : "Voir la documentation", + "Adjust how people can share between servers." : "Réglez comment les personnes peuvent partager entre les serveurs.", "Allow users on this server to send shares to other servers" : "Autoriser les utilisateurs de ce serveur à envoyer des partages vers d'autres serveurs", "Allow users on this server to receive shares from other servers" : "Autoriser les utilisateurs de ce serveur à recevoir des partages d'autres serveurs", "Search global and public address book for users and let local users publish their data" : "Rechercher dans le carnet d'adresse global et public pour les utilisateurs et laisser les utilisateurs publier leurs données", "Allow users to publish their data to a global and public address book" : "Autoriser les utilisateurs à publier leurs données dans un carnet d'adresse global et public", "Federated Cloud" : "Federated Cloud", "Your Federated Cloud ID:" : "Votre identifiant Federated Cloud :", - "Share it:" : "Partager :", "Add to your website" : "Ajouter à votre site web", "Share with me via Nextcloud" : "Partagez avec moi via Nextcloud", "HTML Code:" : "Code HTML :", - "Search global and public address book for users" : "Rechercher dans le carnet d'adresse global et public pour les utilisateurs" + "Search global and public address book for users" : "Rechercher dans le carnet d'adresse global et public pour les utilisateurs", + "Share it:" : "Partager :" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/hu.js b/apps/federatedfilesharing/l10n/hu.js index 8b9f29f5673..ed692f70a7b 100644 --- a/apps/federatedfilesharing/l10n/hu.js +++ b/apps/federatedfilesharing/l10n/hu.js @@ -43,10 +43,10 @@ OC.L10N.register( "Allow users on this server to receive shares from other servers" : "Engedélyezze ezen szerver felhasználóinak, hogy megosztásokat fogadjanak más szerverektől", "Federated Cloud" : "Egyesített felhő", "Your Federated Cloud ID:" : "Egyesített felhő azonosító:", - "Share it:" : "Oszd meg:", "Add to your website" : "Adja hozzá saját weboldalához", "Share with me via Nextcloud" : "Ossza meg velem Nextcloud-on keresztül", "HTML Code:" : "HTML kód:", - "Search global and public address book for users" : "Felhasználók keresése a globális és a nyilvános névjegyekben" + "Search global and public address book for users" : "Felhasználók keresése a globális és a nyilvános névjegyekben", + "Share it:" : "Oszd meg:" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federatedfilesharing/l10n/hu.json b/apps/federatedfilesharing/l10n/hu.json index b530e6b7a9d..52621eb6785 100644 --- a/apps/federatedfilesharing/l10n/hu.json +++ b/apps/federatedfilesharing/l10n/hu.json @@ -41,10 +41,10 @@ "Allow users on this server to receive shares from other servers" : "Engedélyezze ezen szerver felhasználóinak, hogy megosztásokat fogadjanak más szerverektől", "Federated Cloud" : "Egyesített felhő", "Your Federated Cloud ID:" : "Egyesített felhő azonosító:", - "Share it:" : "Oszd meg:", "Add to your website" : "Adja hozzá saját weboldalához", "Share with me via Nextcloud" : "Ossza meg velem Nextcloud-on keresztül", "HTML Code:" : "HTML kód:", - "Search global and public address book for users" : "Felhasználók keresése a globális és a nyilvános névjegyekben" + "Search global and public address book for users" : "Felhasználók keresése a globális és a nyilvános névjegyekben", + "Share it:" : "Oszd meg:" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/ia.js b/apps/federatedfilesharing/l10n/ia.js index e0ad7702824..c4843d69e08 100644 --- a/apps/federatedfilesharing/l10n/ia.js +++ b/apps/federatedfilesharing/l10n/ia.js @@ -43,10 +43,10 @@ OC.L10N.register( "Allow users on this server to receive shares from other servers" : "Permitter usatores in iste servitor a reciper elementos compartite ex altere servitores", "Federated Cloud" : "Nube Federate", "Your Federated Cloud ID:" : "Tu ID de Nube Federate:", - "Share it:" : "Comparti lo:", "Add to your website" : "Adde a tu sito web", "Share with me via Nextcloud" : "Comparti con me via Nextcloud", "HTML Code:" : "Codice HTML:", - "Search global and public address book for users" : "Cercar pro usatores in adressarios global e public" + "Search global and public address book for users" : "Cercar pro usatores in adressarios global e public", + "Share it:" : "Comparti lo:" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federatedfilesharing/l10n/ia.json b/apps/federatedfilesharing/l10n/ia.json index 3180fd5604d..88f1cd470f9 100644 --- a/apps/federatedfilesharing/l10n/ia.json +++ b/apps/federatedfilesharing/l10n/ia.json @@ -41,10 +41,10 @@ "Allow users on this server to receive shares from other servers" : "Permitter usatores in iste servitor a reciper elementos compartite ex altere servitores", "Federated Cloud" : "Nube Federate", "Your Federated Cloud ID:" : "Tu ID de Nube Federate:", - "Share it:" : "Comparti lo:", "Add to your website" : "Adde a tu sito web", "Share with me via Nextcloud" : "Comparti con me via Nextcloud", "HTML Code:" : "Codice HTML:", - "Search global and public address book for users" : "Cercar pro usatores in adressarios global e public" + "Search global and public address book for users" : "Cercar pro usatores in adressarios global e public", + "Share it:" : "Comparti lo:" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/id.js b/apps/federatedfilesharing/l10n/id.js index 7173d30b1f3..0f61b9fc8dc 100644 --- a/apps/federatedfilesharing/l10n/id.js +++ b/apps/federatedfilesharing/l10n/id.js @@ -43,10 +43,10 @@ OC.L10N.register( "Allow users on this server to receive shares from other servers" : "Izinkan para pengguna di server ini untuk menerima berbagi ke server lainnya.", "Federated Cloud" : "Federated Cloud", "Your Federated Cloud ID:" : "Federated Cloud ID Anda:", - "Share it:" : "Bagikan:", "Add to your website" : "Tambahkan pada situs web Anda", "Share with me via Nextcloud" : "Dibagikan pada saya via Nextcloud", "HTML Code:" : "Kode HTML:", - "Search global and public address book for users" : "Cari alamat buku global dan alamat publik untuk pengguna" + "Search global and public address book for users" : "Cari alamat buku global dan alamat publik untuk pengguna", + "Share it:" : "Bagikan:" }, "nplurals=1; plural=0;"); diff --git a/apps/federatedfilesharing/l10n/id.json b/apps/federatedfilesharing/l10n/id.json index bb8070e2505..ae8a103981d 100644 --- a/apps/federatedfilesharing/l10n/id.json +++ b/apps/federatedfilesharing/l10n/id.json @@ -41,10 +41,10 @@ "Allow users on this server to receive shares from other servers" : "Izinkan para pengguna di server ini untuk menerima berbagi ke server lainnya.", "Federated Cloud" : "Federated Cloud", "Your Federated Cloud ID:" : "Federated Cloud ID Anda:", - "Share it:" : "Bagikan:", "Add to your website" : "Tambahkan pada situs web Anda", "Share with me via Nextcloud" : "Dibagikan pada saya via Nextcloud", "HTML Code:" : "Kode HTML:", - "Search global and public address book for users" : "Cari alamat buku global dan alamat publik untuk pengguna" + "Search global and public address book for users" : "Cari alamat buku global dan alamat publik untuk pengguna", + "Share it:" : "Bagikan:" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/is.js b/apps/federatedfilesharing/l10n/is.js index 56663d5f508..6f064ae34c3 100644 --- a/apps/federatedfilesharing/l10n/is.js +++ b/apps/federatedfilesharing/l10n/is.js @@ -41,12 +41,14 @@ OC.L10N.register( "Open documentation" : "Opna hjálparskjöl", "Allow users on this server to send shares to other servers" : "Leyfa notendum á þessum þjóni að senda sameignir til annarra þjóna", "Allow users on this server to receive shares from other servers" : "Leyfa notendum á þessum þjóni að taka á móti sameignum frá öðrum þjónum", + "Search global and public address book for users and let local users publish their data" : "Leita að notendum í víðværri og opinberri vistfangaskrá og leyfa staðværum notendum að birta gögnin sín", + "Allow users to publish their data to a global and public address book" : "Leifa notendum að birta gögnin sín í víðværri og opinberri vistfangaskrá", "Federated Cloud" : "Skýjasamband (federated)", "Your Federated Cloud ID:" : "Skýjasambandsauðkennið þitt (Federated Cloud ID):", - "Share it:" : "Deila því:", "Add to your website" : "Bæta við vefsvæðið þitt", "Share with me via Nextcloud" : "Deila með mér í gegnum Nextcloud", "HTML Code:" : "HTML-kóði:", - "Search global and public address book for users" : "Leita að notendum í víðværri og opinberri vistfangaskrá" + "Search global and public address book for users" : "Leita að notendum í víðværri og opinberri vistfangaskrá", + "Share it:" : "Deila því:" }, "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/apps/federatedfilesharing/l10n/is.json b/apps/federatedfilesharing/l10n/is.json index d49de4d2194..6c8b449f007 100644 --- a/apps/federatedfilesharing/l10n/is.json +++ b/apps/federatedfilesharing/l10n/is.json @@ -39,12 +39,14 @@ "Open documentation" : "Opna hjálparskjöl", "Allow users on this server to send shares to other servers" : "Leyfa notendum á þessum þjóni að senda sameignir til annarra þjóna", "Allow users on this server to receive shares from other servers" : "Leyfa notendum á þessum þjóni að taka á móti sameignum frá öðrum þjónum", + "Search global and public address book for users and let local users publish their data" : "Leita að notendum í víðværri og opinberri vistfangaskrá og leyfa staðværum notendum að birta gögnin sín", + "Allow users to publish their data to a global and public address book" : "Leifa notendum að birta gögnin sín í víðværri og opinberri vistfangaskrá", "Federated Cloud" : "Skýjasamband (federated)", "Your Federated Cloud ID:" : "Skýjasambandsauðkennið þitt (Federated Cloud ID):", - "Share it:" : "Deila því:", "Add to your website" : "Bæta við vefsvæðið þitt", "Share with me via Nextcloud" : "Deila með mér í gegnum Nextcloud", "HTML Code:" : "HTML-kóði:", - "Search global and public address book for users" : "Leita að notendum í víðværri og opinberri vistfangaskrá" + "Search global and public address book for users" : "Leita að notendum í víðværri og opinberri vistfangaskrá", + "Share it:" : "Deila því:" },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/it.js b/apps/federatedfilesharing/l10n/it.js index 4d6b132e14b..4690f6e38a6 100644 --- a/apps/federatedfilesharing/l10n/it.js +++ b/apps/federatedfilesharing/l10n/it.js @@ -43,10 +43,10 @@ OC.L10N.register( "Allow users on this server to receive shares from other servers" : "Consenti agli utenti su questo server di ricevere condivisioni da altri server", "Federated Cloud" : "Cloud federata", "Your Federated Cloud ID:" : "Il tuo ID di cloud federata:", - "Share it:" : "Condividilo:", "Add to your website" : "Aggiungi al tuo sito web", "Share with me via Nextcloud" : "Condividi con me tramite Nextcloud", "HTML Code:" : "Codice HTML:", - "Search global and public address book for users" : "Cerca gli utenti nella rubrica globale e pubblica" + "Search global and public address book for users" : "Cerca gli utenti nella rubrica globale e pubblica", + "Share it:" : "Condividilo:" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federatedfilesharing/l10n/it.json b/apps/federatedfilesharing/l10n/it.json index 392f68e686b..edcb497a559 100644 --- a/apps/federatedfilesharing/l10n/it.json +++ b/apps/federatedfilesharing/l10n/it.json @@ -41,10 +41,10 @@ "Allow users on this server to receive shares from other servers" : "Consenti agli utenti su questo server di ricevere condivisioni da altri server", "Federated Cloud" : "Cloud federata", "Your Federated Cloud ID:" : "Il tuo ID di cloud federata:", - "Share it:" : "Condividilo:", "Add to your website" : "Aggiungi al tuo sito web", "Share with me via Nextcloud" : "Condividi con me tramite Nextcloud", "HTML Code:" : "Codice HTML:", - "Search global and public address book for users" : "Cerca gli utenti nella rubrica globale e pubblica" + "Search global and public address book for users" : "Cerca gli utenti nella rubrica globale e pubblica", + "Share it:" : "Condividilo:" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/ko.js b/apps/federatedfilesharing/l10n/ko.js index 05e5db39dc6..142e6c2c535 100644 --- a/apps/federatedfilesharing/l10n/ko.js +++ b/apps/federatedfilesharing/l10n/ko.js @@ -7,33 +7,51 @@ OC.L10N.register( "Remote share password" : "원격 공유 암호", "Cancel" : "취소", "Add remote share" : "원격 공유 추가", - "Copied!" : "복사됨!", + "Copy" : "복사", + "Copied!" : "복사 성공!", "Not supported!" : "지원하지 않음!", - "Press ⌘-C to copy." : "⌘-C 복사", - "Press Ctrl-C to copy." : "⌘-C 복사", + "Press ⌘-C to copy." : "복사하려면 ⌘-C 키를 누르십시오.", + "Press Ctrl-C to copy." : "복사하려면 Ctrl-C 키를 누르십시오.", "Invalid Federated Cloud ID" : "잘못된 연합 클라우드 ID", "Server to server sharing is not enabled on this server" : "이 서버에서 서버간 공유를 사용할 수 없음", - "Couldn't establish a federated share." : "연합 공유를 설정할 수 없음", + "Couldn't establish a federated share." : "연합 공유를 설정할 수 없습니다.", + "Couldn't establish a federated share, maybe the password was wrong." : "연합 공유를 설정할 수 없습니다. 암호가 잘못되었을 수도 있습니다.", + "Federated Share request was successful, you will receive a invitation. Check your notifications." : "연합 공유 요청이 성공했으며 초대장을 받을 것입니다. 알림을 확인하십시오.", "The mountpoint name contains invalid characters." : "마운트 지점 이름에 잘못된 글자가 포함되어 있습니다.", "Not allowed to create a federated share with the owner." : "소유자와 연합 공유를 만들 수 없음", "Invalid or untrusted SSL certificate" : "유효하지 않거나 신뢰할 수없는 SSL 인증서", - "Storage not valid" : "유효하지 않은 스토리지", + "Could not authenticate to remote share, password might be wrong" : "원격 공유에 인증할 수 없습니다. 암호가 잘못되었을 수도 있습니다", + "Storage not valid" : "유효하지 않은 저장소", + "Federated Share successfully added" : "연합 공유를 성공적으로 추가함", + "Couldn't add remote share" : "원격 공유를 추가할 수 없음", "Sharing %s failed, because this item is already shared with %s" : "%s을(를) 공유할 수 없습니다. 이미 %s 님과 공유되어 있습니다", "Not allowed to create a federated share with the same user" : "같은 사용자와 연합 공유를 만들 수 없음", - "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "%s을(를) 공유할 수 없습니다. %s을(를) 찾을 수 없습니다. 서버에 접근하지 못할 수도 있습니다.", + "File is already shared with %s" : "파일이 %s와(과) 이미 공유됨", + "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" : "공유를 찾을 수 없음", + "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "%1$s(%2$s 대신) 님으로부터 \"%3$s\"을(를) 원격 공유로 받음", + "You received {share} as a remote share from {user} (on behalf of {behalf})" : "{user}({behalf} 대신) 님으로부터 {share}을(를) 원격 공유로 받음", + "You received \"%3$s\" as a remote share from %1$s" : "%1$s 님으로부터 \"%3$s\"을(를) 원격 공유로 받음", + "You received {share} as a remote share from {user}" : "{user} 님으로부터 {share}을(를) 원격 공유로 받음", "Accept" : "수락", "Decline" : "거절", "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "내 #Nextcloud 연합 클라우드 ID를 통해서 공유됨, 더 알아보기: %s", "Share with me through my #Nextcloud Federated Cloud ID" : "내 #Nextcloud 연합 클라우드 ID를 통해서 공유됨", "Federated Cloud Sharing" : "클라우드 연합 공유", "Open documentation" : "문서 열기", + "Adjust how people can share between servers." : "서버간 파일 공유를 설정합니다.", "Allow users on this server to send shares to other servers" : "이 서버의 사용자가 다른 서버와 공유할 수 있도록 허용", "Allow users on this server to receive shares from other servers" : "이 서버의 사용자가 다른 서버에서 공유한 파일을 받을 수 있도록 허용", + "Search global and public address book for users and let local users publish their data" : "전역 및 공개 주소록에서 검색하고 로컬 사용자가 정보를 공개할 수 있도록 허용", + "Allow users to publish their data to a global and public address book" : "사용자가 데이터를 전역 및 공개 주소록에 업로드할 수 있도록 허용", "Federated Cloud" : "연합 클라우드", + "You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Nextcloud, ownCloud, Pydio를 사용하는 누구나와 공유할 수 있습니다! 공유 대화 상자에서 연합 클라우드 ID를 입력하십시오. person@cloud.example.com 형식입니다", "Your Federated Cloud ID:" : "내 연합 클라우드 ID:", - "Share it:" : "공유하기:", + "Share it so your friends can share files with you:" : "친구들과 파일을 공유할 수 있도록 공유하십시오:", "Add to your website" : "내 웹 사이트에 추가", "Share with me via Nextcloud" : "Nextcloud로 나와 공유하기", - "HTML Code:" : "HTML 코드:" + "HTML Code:" : "HTML 코드:", + "Search global and public address book for users" : "전역 및 공개 주소록에서 사용자 검색", + "Share it:" : "공유하기:" }, "nplurals=1; plural=0;"); diff --git a/apps/federatedfilesharing/l10n/ko.json b/apps/federatedfilesharing/l10n/ko.json index 5a85d76fa6b..5c88ac92f19 100644 --- a/apps/federatedfilesharing/l10n/ko.json +++ b/apps/federatedfilesharing/l10n/ko.json @@ -5,33 +5,51 @@ "Remote share password" : "원격 공유 암호", "Cancel" : "취소", "Add remote share" : "원격 공유 추가", - "Copied!" : "복사됨!", + "Copy" : "복사", + "Copied!" : "복사 성공!", "Not supported!" : "지원하지 않음!", - "Press ⌘-C to copy." : "⌘-C 복사", - "Press Ctrl-C to copy." : "⌘-C 복사", + "Press ⌘-C to copy." : "복사하려면 ⌘-C 키를 누르십시오.", + "Press Ctrl-C to copy." : "복사하려면 Ctrl-C 키를 누르십시오.", "Invalid Federated Cloud ID" : "잘못된 연합 클라우드 ID", "Server to server sharing is not enabled on this server" : "이 서버에서 서버간 공유를 사용할 수 없음", - "Couldn't establish a federated share." : "연합 공유를 설정할 수 없음", + "Couldn't establish a federated share." : "연합 공유를 설정할 수 없습니다.", + "Couldn't establish a federated share, maybe the password was wrong." : "연합 공유를 설정할 수 없습니다. 암호가 잘못되었을 수도 있습니다.", + "Federated Share request was successful, you will receive a invitation. Check your notifications." : "연합 공유 요청이 성공했으며 초대장을 받을 것입니다. 알림을 확인하십시오.", "The mountpoint name contains invalid characters." : "마운트 지점 이름에 잘못된 글자가 포함되어 있습니다.", "Not allowed to create a federated share with the owner." : "소유자와 연합 공유를 만들 수 없음", "Invalid or untrusted SSL certificate" : "유효하지 않거나 신뢰할 수없는 SSL 인증서", - "Storage not valid" : "유효하지 않은 스토리지", + "Could not authenticate to remote share, password might be wrong" : "원격 공유에 인증할 수 없습니다. 암호가 잘못되었을 수도 있습니다", + "Storage not valid" : "유효하지 않은 저장소", + "Federated Share successfully added" : "연합 공유를 성공적으로 추가함", + "Couldn't add remote share" : "원격 공유를 추가할 수 없음", "Sharing %s failed, because this item is already shared with %s" : "%s을(를) 공유할 수 없습니다. 이미 %s 님과 공유되어 있습니다", "Not allowed to create a federated share with the same user" : "같은 사용자와 연합 공유를 만들 수 없음", - "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "%s을(를) 공유할 수 없습니다. %s을(를) 찾을 수 없습니다. 서버에 접근하지 못할 수도 있습니다.", + "File is already shared with %s" : "파일이 %s와(과) 이미 공유됨", + "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" : "공유를 찾을 수 없음", + "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "%1$s(%2$s 대신) 님으로부터 \"%3$s\"을(를) 원격 공유로 받음", + "You received {share} as a remote share from {user} (on behalf of {behalf})" : "{user}({behalf} 대신) 님으로부터 {share}을(를) 원격 공유로 받음", + "You received \"%3$s\" as a remote share from %1$s" : "%1$s 님으로부터 \"%3$s\"을(를) 원격 공유로 받음", + "You received {share} as a remote share from {user}" : "{user} 님으로부터 {share}을(를) 원격 공유로 받음", "Accept" : "수락", "Decline" : "거절", "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "내 #Nextcloud 연합 클라우드 ID를 통해서 공유됨, 더 알아보기: %s", "Share with me through my #Nextcloud Federated Cloud ID" : "내 #Nextcloud 연합 클라우드 ID를 통해서 공유됨", "Federated Cloud Sharing" : "클라우드 연합 공유", "Open documentation" : "문서 열기", + "Adjust how people can share between servers." : "서버간 파일 공유를 설정합니다.", "Allow users on this server to send shares to other servers" : "이 서버의 사용자가 다른 서버와 공유할 수 있도록 허용", "Allow users on this server to receive shares from other servers" : "이 서버의 사용자가 다른 서버에서 공유한 파일을 받을 수 있도록 허용", + "Search global and public address book for users and let local users publish their data" : "전역 및 공개 주소록에서 검색하고 로컬 사용자가 정보를 공개할 수 있도록 허용", + "Allow users to publish their data to a global and public address book" : "사용자가 데이터를 전역 및 공개 주소록에 업로드할 수 있도록 허용", "Federated Cloud" : "연합 클라우드", + "You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Nextcloud, ownCloud, Pydio를 사용하는 누구나와 공유할 수 있습니다! 공유 대화 상자에서 연합 클라우드 ID를 입력하십시오. person@cloud.example.com 형식입니다", "Your Federated Cloud ID:" : "내 연합 클라우드 ID:", - "Share it:" : "공유하기:", + "Share it so your friends can share files with you:" : "친구들과 파일을 공유할 수 있도록 공유하십시오:", "Add to your website" : "내 웹 사이트에 추가", "Share with me via Nextcloud" : "Nextcloud로 나와 공유하기", - "HTML Code:" : "HTML 코드:" + "HTML Code:" : "HTML 코드:", + "Search global and public address book for users" : "전역 및 공개 주소록에서 사용자 검색", + "Share it:" : "공유하기:" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/nb.js b/apps/federatedfilesharing/l10n/nb.js index e5515edc143..f9b8907b49b 100644 --- a/apps/federatedfilesharing/l10n/nb.js +++ b/apps/federatedfilesharing/l10n/nb.js @@ -45,10 +45,10 @@ OC.L10N.register( "Allow users to publish their data to a global and public address book" : "Tillat brukere å offentliggjøre deres data til en verdensomspennende og offentlig adressebok", "Federated Cloud" : "Sammenknyttet sky", "Your Federated Cloud ID:" : "Din ID for sammenknyttet sky:", - "Share it:" : "Del den:", "Add to your website" : "Legg på nettsiden din", "Share with me via Nextcloud" : "Del med meg via Nextcloud", "HTML Code:" : "HTML-kode:", - "Search global and public address book for users" : "Søk global og offentlige adressebøker etter brukere" + "Search global and public address book for users" : "Søk global og offentlige adressebøker etter brukere", + "Share it:" : "Del den:" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federatedfilesharing/l10n/nb.json b/apps/federatedfilesharing/l10n/nb.json index 986739a0e14..4da7e25bfe7 100644 --- a/apps/federatedfilesharing/l10n/nb.json +++ b/apps/federatedfilesharing/l10n/nb.json @@ -43,10 +43,10 @@ "Allow users to publish their data to a global and public address book" : "Tillat brukere å offentliggjøre deres data til en verdensomspennende og offentlig adressebok", "Federated Cloud" : "Sammenknyttet sky", "Your Federated Cloud ID:" : "Din ID for sammenknyttet sky:", - "Share it:" : "Del den:", "Add to your website" : "Legg på nettsiden din", "Share with me via Nextcloud" : "Del med meg via Nextcloud", "HTML Code:" : "HTML-kode:", - "Search global and public address book for users" : "Søk global og offentlige adressebøker etter brukere" + "Search global and public address book for users" : "Søk global og offentlige adressebøker etter brukere", + "Share it:" : "Del den:" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/nl.js b/apps/federatedfilesharing/l10n/nl.js index b6eb9737dba..71c6adaf6f5 100644 --- a/apps/federatedfilesharing/l10n/nl.js +++ b/apps/federatedfilesharing/l10n/nl.js @@ -39,16 +39,19 @@ OC.L10N.register( "Share with me through my #Nextcloud Federated Cloud ID" : "Deel met mij via mijn #Nextcloud federated Cloud ID", "Federated Cloud Sharing" : "Federated Cloud Sharing", "Open documentation" : "Open documentatie", + "Adjust how people can share between servers." : "Aanpassen hoe mensen tussen servers kunnen delen.", "Allow users on this server to send shares to other servers" : "Toestaan dat gebruikers op deze server shares sturen naar andere servers", "Allow users on this server to receive shares from other servers" : "Toestaan dat gebruikers op deze server shares ontvangen van andere servers", "Search global and public address book for users and let local users publish their data" : "Openbare adresboeken voor gebruikers doorzoeken en laat lokale gebruikers de data plubliceren", "Allow users to publish their data to a global and public address book" : "Publiek maken van data met een openbaar adresboek toestaan", "Federated Cloud" : "Gefedereerde Cloud", + "You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Je kunt met iedereeen delen die Nextcloud, ownCloud of Pydio gebruikt! Gebruik gewoon hun federatieID in de deel-dialoog. Het ziet eruit als iemand@cloud.voorbeeld.com", "Your Federated Cloud ID:" : "Je Federated Cloud ID:", - "Share it:" : "Deel het:", + "Share it so your friends can share files with you:" : "Deel het, zodat anderen bestanden met jou kunnen delen:", "Add to your website" : "Toevoegen aan je website", "Share with me via Nextcloud" : "Deel met mij via Nextcloud", "HTML Code:" : "HTML Code:", - "Search global and public address book for users" : "Doorzoeken van openbare adresboeken voor gebruikers" + "Search global and public address book for users" : "Doorzoeken van openbare adresboeken voor gebruikers", + "Share it:" : "Deel het:" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federatedfilesharing/l10n/nl.json b/apps/federatedfilesharing/l10n/nl.json index fa1348d634d..aee02702266 100644 --- a/apps/federatedfilesharing/l10n/nl.json +++ b/apps/federatedfilesharing/l10n/nl.json @@ -37,16 +37,19 @@ "Share with me through my #Nextcloud Federated Cloud ID" : "Deel met mij via mijn #Nextcloud federated Cloud ID", "Federated Cloud Sharing" : "Federated Cloud Sharing", "Open documentation" : "Open documentatie", + "Adjust how people can share between servers." : "Aanpassen hoe mensen tussen servers kunnen delen.", "Allow users on this server to send shares to other servers" : "Toestaan dat gebruikers op deze server shares sturen naar andere servers", "Allow users on this server to receive shares from other servers" : "Toestaan dat gebruikers op deze server shares ontvangen van andere servers", "Search global and public address book for users and let local users publish their data" : "Openbare adresboeken voor gebruikers doorzoeken en laat lokale gebruikers de data plubliceren", "Allow users to publish their data to a global and public address book" : "Publiek maken van data met een openbaar adresboek toestaan", "Federated Cloud" : "Gefedereerde Cloud", + "You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Je kunt met iedereeen delen die Nextcloud, ownCloud of Pydio gebruikt! Gebruik gewoon hun federatieID in de deel-dialoog. Het ziet eruit als iemand@cloud.voorbeeld.com", "Your Federated Cloud ID:" : "Je Federated Cloud ID:", - "Share it:" : "Deel het:", + "Share it so your friends can share files with you:" : "Deel het, zodat anderen bestanden met jou kunnen delen:", "Add to your website" : "Toevoegen aan je website", "Share with me via Nextcloud" : "Deel met mij via Nextcloud", "HTML Code:" : "HTML Code:", - "Search global and public address book for users" : "Doorzoeken van openbare adresboeken voor gebruikers" + "Search global and public address book for users" : "Doorzoeken van openbare adresboeken voor gebruikers", + "Share it:" : "Deel het:" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/pl.js b/apps/federatedfilesharing/l10n/pl.js index 8c98322256e..019ffba9121 100644 --- a/apps/federatedfilesharing/l10n/pl.js +++ b/apps/federatedfilesharing/l10n/pl.js @@ -45,10 +45,10 @@ OC.L10N.register( "Allow users to publish their data to a global and public address book" : "Pozwól użytkownikom na publikację ich danych do globalnej i publicznej książki adresowej", "Federated Cloud" : "Stowarzyszona Chmura", "Your Federated Cloud ID:" : "Twoje ID Stowarzyszonej Chmury:", - "Share it:" : "Udostępnij to:", "Add to your website" : "Dodaj do swojej strony", "Share with me via Nextcloud" : "Podziel się ze mną poprzez Nextcloud", "HTML Code:" : "Kod HTML:", - "Search global and public address book for users" : "Szukaj użytkowników w globalnej i publicznej książce adresowej" + "Search global and public address book for users" : "Szukaj użytkowników w globalnej i publicznej książce adresowej", + "Share it:" : "Udostępnij to:" }, "nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"); diff --git a/apps/federatedfilesharing/l10n/pl.json b/apps/federatedfilesharing/l10n/pl.json index 02a73c5e571..af30ede91c5 100644 --- a/apps/federatedfilesharing/l10n/pl.json +++ b/apps/federatedfilesharing/l10n/pl.json @@ -43,10 +43,10 @@ "Allow users to publish their data to a global and public address book" : "Pozwól użytkownikom na publikację ich danych do globalnej i publicznej książki adresowej", "Federated Cloud" : "Stowarzyszona Chmura", "Your Federated Cloud ID:" : "Twoje ID Stowarzyszonej Chmury:", - "Share it:" : "Udostępnij to:", "Add to your website" : "Dodaj do swojej strony", "Share with me via Nextcloud" : "Podziel się ze mną poprzez Nextcloud", "HTML Code:" : "Kod HTML:", - "Search global and public address book for users" : "Szukaj użytkowników w globalnej i publicznej książce adresowej" + "Search global and public address book for users" : "Szukaj użytkowników w globalnej i publicznej książce adresowej", + "Share it:" : "Udostępnij to:" },"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/pt_BR.js b/apps/federatedfilesharing/l10n/pt_BR.js index 807acf49f35..13d1b1641e3 100644 --- a/apps/federatedfilesharing/l10n/pt_BR.js +++ b/apps/federatedfilesharing/l10n/pt_BR.js @@ -39,16 +39,19 @@ OC.L10N.register( "Share with me through my #Nextcloud Federated Cloud ID" : "Compartilhe comigo através do meu ID de Nuvem Federada #Nexcloud", "Federated Cloud Sharing" : "Compartilhamento de Nuvem Federada", "Open documentation" : "Abrir documentação", + "Adjust how people can share between servers." : "Ajustar como as pessoas podem compartilhar entre servidores.", "Allow users on this server to send shares to other servers" : "Permitir que os usuários deste servidor enviem compartilhamentos para outros servidores", "Allow users on this server to receive shares from other servers" : "Permitir que os usuários deste servidor recebam compartilhamentos de outros servidores", "Search global and public address book for users and let local users publish their data" : "Pesquise o catálogo de endereços global e público para usuários e deixe os usuários locais publicarem seus dados", "Allow users to publish their data to a global and public address book" : "Permitir que os usuários publiquem seus dados em um catálogo de endereços global e público", "Federated Cloud" : "Nuvem Federada", + "You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Você pode compartilhar com qualquer um que use Nextcloud, ownCloud ou Pydio! Apenas coloque a ID de Nuvem Federada no diálogo de compartilhamento. Isto é algo como person@cloud.example.com", "Your Federated Cloud ID:" : "Sua ID de Nuvem Federada:", - "Share it:" : "Compartilhe-a:", + "Share it so your friends can share files with you:" : "Compartilhe e seus amigos poderão compartilhar arquivos com você:", "Add to your website" : "Adicione ao seu website", "Share with me via Nextcloud" : "Compartilhe comigo via Nextcloud", "HTML Code:" : "Código HTML:", - "Search global and public address book for users" : "Procurar por usuários em catálogo de endereços global e público" + "Search global and public address book for users" : "Procurar por usuários em catálogo de endereços global e público", + "Share it:" : "Compartilhe-a:" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/federatedfilesharing/l10n/pt_BR.json b/apps/federatedfilesharing/l10n/pt_BR.json index 9444aa2b27d..108c8f4fb25 100644 --- a/apps/federatedfilesharing/l10n/pt_BR.json +++ b/apps/federatedfilesharing/l10n/pt_BR.json @@ -37,16 +37,19 @@ "Share with me through my #Nextcloud Federated Cloud ID" : "Compartilhe comigo através do meu ID de Nuvem Federada #Nexcloud", "Federated Cloud Sharing" : "Compartilhamento de Nuvem Federada", "Open documentation" : "Abrir documentação", + "Adjust how people can share between servers." : "Ajustar como as pessoas podem compartilhar entre servidores.", "Allow users on this server to send shares to other servers" : "Permitir que os usuários deste servidor enviem compartilhamentos para outros servidores", "Allow users on this server to receive shares from other servers" : "Permitir que os usuários deste servidor recebam compartilhamentos de outros servidores", "Search global and public address book for users and let local users publish their data" : "Pesquise o catálogo de endereços global e público para usuários e deixe os usuários locais publicarem seus dados", "Allow users to publish their data to a global and public address book" : "Permitir que os usuários publiquem seus dados em um catálogo de endereços global e público", "Federated Cloud" : "Nuvem Federada", + "You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Você pode compartilhar com qualquer um que use Nextcloud, ownCloud ou Pydio! Apenas coloque a ID de Nuvem Federada no diálogo de compartilhamento. Isto é algo como person@cloud.example.com", "Your Federated Cloud ID:" : "Sua ID de Nuvem Federada:", - "Share it:" : "Compartilhe-a:", + "Share it so your friends can share files with you:" : "Compartilhe e seus amigos poderão compartilhar arquivos com você:", "Add to your website" : "Adicione ao seu website", "Share with me via Nextcloud" : "Compartilhe comigo via Nextcloud", "HTML Code:" : "Código HTML:", - "Search global and public address book for users" : "Procurar por usuários em catálogo de endereços global e público" + "Search global and public address book for users" : "Procurar por usuários em catálogo de endereços global e público", + "Share it:" : "Compartilhe-a:" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/ru.js b/apps/federatedfilesharing/l10n/ru.js index 216a904018b..4931870f4b1 100644 --- a/apps/federatedfilesharing/l10n/ru.js +++ b/apps/federatedfilesharing/l10n/ru.js @@ -45,10 +45,10 @@ OC.L10N.register( "Allow users to publish their data to a global and public address book" : "Резрешить пользователям публиковать свои данные в глобальной и общедосупной адресной книге", "Federated Cloud" : "Федерация облачных хранилищ", "Your Federated Cloud ID:" : "Ваш ID в федерации облачных хранилищ:", - "Share it:" : "Поделиться:", "Add to your website" : "Добавить к себе на сайт", "Share with me via Nextcloud" : "Поделитесь со мной через Nextcloud", "HTML Code:" : "HTML код:", - "Search global and public address book for users" : "Искать пользователей в глобальной и открытой адресной книге" + "Search global and public address book for users" : "Искать пользователей в глобальной и открытой адресной книге", + "Share it:" : "Поделиться:" }, "nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"); diff --git a/apps/federatedfilesharing/l10n/ru.json b/apps/federatedfilesharing/l10n/ru.json index c6b337ff03b..bfdf89b87f9 100644 --- a/apps/federatedfilesharing/l10n/ru.json +++ b/apps/federatedfilesharing/l10n/ru.json @@ -43,10 +43,10 @@ "Allow users to publish their data to a global and public address book" : "Резрешить пользователям публиковать свои данные в глобальной и общедосупной адресной книге", "Federated Cloud" : "Федерация облачных хранилищ", "Your Federated Cloud ID:" : "Ваш ID в федерации облачных хранилищ:", - "Share it:" : "Поделиться:", "Add to your website" : "Добавить к себе на сайт", "Share with me via Nextcloud" : "Поделитесь со мной через Nextcloud", "HTML Code:" : "HTML код:", - "Search global and public address book for users" : "Искать пользователей в глобальной и открытой адресной книге" + "Search global and public address book for users" : "Искать пользователей в глобальной и открытой адресной книге", + "Share it:" : "Поделиться:" },"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/sq.js b/apps/federatedfilesharing/l10n/sq.js index a0c70b3cced..ca6f9791ea0 100644 --- a/apps/federatedfilesharing/l10n/sq.js +++ b/apps/federatedfilesharing/l10n/sq.js @@ -37,9 +37,9 @@ OC.L10N.register( "Allow users on this server to receive shares from other servers" : "Lejoju përdoruesve në këtë shërbyes të marrin ndarje nga shërbyes të tjerë", "Federated Cloud" : "Re e Federuar", "Your Federated Cloud ID:" : "ID-ja juaj për Re të Federuar:", - "Share it:" : "Ndajeni:", "Add to your website" : "Shtojeni te sajti juaj", "Share with me via Nextcloud" : "Ndani me mua përmes Nextcloud-it", - "HTML Code:" : "Kod HTML:" + "HTML Code:" : "Kod HTML:", + "Share it:" : "Ndajeni:" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federatedfilesharing/l10n/sq.json b/apps/federatedfilesharing/l10n/sq.json index 355b83e85a4..6c83b6e5b64 100644 --- a/apps/federatedfilesharing/l10n/sq.json +++ b/apps/federatedfilesharing/l10n/sq.json @@ -35,9 +35,9 @@ "Allow users on this server to receive shares from other servers" : "Lejoju përdoruesve në këtë shërbyes të marrin ndarje nga shërbyes të tjerë", "Federated Cloud" : "Re e Federuar", "Your Federated Cloud ID:" : "ID-ja juaj për Re të Federuar:", - "Share it:" : "Ndajeni:", "Add to your website" : "Shtojeni te sajti juaj", "Share with me via Nextcloud" : "Ndani me mua përmes Nextcloud-it", - "HTML Code:" : "Kod HTML:" + "HTML Code:" : "Kod HTML:", + "Share it:" : "Ndajeni:" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/sv.js b/apps/federatedfilesharing/l10n/sv.js index a3851e6b82b..6921ab5d30d 100644 --- a/apps/federatedfilesharing/l10n/sv.js +++ b/apps/federatedfilesharing/l10n/sv.js @@ -43,10 +43,10 @@ OC.L10N.register( "Allow users on this server to receive shares from other servers" : "Tillåt användare på denna servern att ta emot utdelningar från andra servrar", "Federated Cloud" : "Federerat Moln", "Your Federated Cloud ID:" : "Ditt Federerade Moln-ID:", - "Share it:" : "Dela detta:", "Add to your website" : "Lägg till på din hemsida", "Share with me via Nextcloud" : "Dela med mig via Nextcloud", "HTML Code:" : "HTML Kod:", - "Search global and public address book for users" : "Sök global och offentlig adressbok för användare" + "Search global and public address book for users" : "Sök global och offentlig adressbok för användare", + "Share it:" : "Dela detta:" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federatedfilesharing/l10n/sv.json b/apps/federatedfilesharing/l10n/sv.json index 02fc7d82b07..f4ebd245e16 100644 --- a/apps/federatedfilesharing/l10n/sv.json +++ b/apps/federatedfilesharing/l10n/sv.json @@ -41,10 +41,10 @@ "Allow users on this server to receive shares from other servers" : "Tillåt användare på denna servern att ta emot utdelningar från andra servrar", "Federated Cloud" : "Federerat Moln", "Your Federated Cloud ID:" : "Ditt Federerade Moln-ID:", - "Share it:" : "Dela detta:", "Add to your website" : "Lägg till på din hemsida", "Share with me via Nextcloud" : "Dela med mig via Nextcloud", "HTML Code:" : "HTML Kod:", - "Search global and public address book for users" : "Sök global och offentlig adressbok för användare" + "Search global and public address book for users" : "Sök global och offentlig adressbok för användare", + "Share it:" : "Dela detta:" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/tr.js b/apps/federatedfilesharing/l10n/tr.js index c1d9a655557..09e6d7dc793 100644 --- a/apps/federatedfilesharing/l10n/tr.js +++ b/apps/federatedfilesharing/l10n/tr.js @@ -39,16 +39,19 @@ OC.L10N.register( "Share with me through my #Nextcloud Federated Cloud ID" : "#Nextcloud Birleşmiş Bulut kimliğim üzerinden benimle paylaş", "Federated Cloud Sharing" : "Birleşmiş Bulut Paylaşımı", "Open documentation" : "Belgeleri aç", + "Adjust how people can share between servers." : "Kişilerin sunucular arasında nasıl paylaşım yapabileceğini ayarlayın.", "Allow users on this server to send shares to other servers" : "Bu sunucudaki kullanıcılar diğer sunuculara paylaşım gönderebilsin", "Allow users on this server to receive shares from other servers" : "Bu sunucudaki kullanıcılar diğer sunuculardan paylaşım alabilsin", "Search global and public address book for users and let local users publish their data" : "Genel ve herkese açık adres defterinde kullanıcı ara ve yerel kullanıcıların bilgilerini paylaşmasını sağla", "Allow users to publish their data to a global and public address book" : "Kullanıcıların bilgilerini genel ve herkese açık bir adres defterinde paylaşabilsin", "Federated Cloud" : "Birleşmiş Bulut", + "You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Nextcloud, ownCloud ya da Pydio kullanıcıları ile paylaşım yapılaiblir. Yalnızca paylaşım penceresine person@cloud.example.com gibi Birleşmiş Bulut kodunu yazın.", "Your Federated Cloud ID:" : "Birleşmiş Bulut Kimliğiniz:", - "Share it:" : "Paylaşın:", + "Share it so your friends can share files with you:" : "Paylaşın, böylece arkadaşlarınız da sizinle dosya paylaşabilir:", "Add to your website" : "Web sitenize ekleyin", "Share with me via Nextcloud" : "Benimle Nextcloud üzerinden paylaşın", "HTML Code:" : "HTML Kodu:", - "Search global and public address book for users" : "Genel ve herkese açık adres defterinde kullanıcı ara" + "Search global and public address book for users" : "Genel ve herkese açık adres defterinde kullanıcı ara", + "Share it:" : "Paylaşın:" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/federatedfilesharing/l10n/tr.json b/apps/federatedfilesharing/l10n/tr.json index c9969087598..8e753fcac53 100644 --- a/apps/federatedfilesharing/l10n/tr.json +++ b/apps/federatedfilesharing/l10n/tr.json @@ -37,16 +37,19 @@ "Share with me through my #Nextcloud Federated Cloud ID" : "#Nextcloud Birleşmiş Bulut kimliğim üzerinden benimle paylaş", "Federated Cloud Sharing" : "Birleşmiş Bulut Paylaşımı", "Open documentation" : "Belgeleri aç", + "Adjust how people can share between servers." : "Kişilerin sunucular arasında nasıl paylaşım yapabileceğini ayarlayın.", "Allow users on this server to send shares to other servers" : "Bu sunucudaki kullanıcılar diğer sunuculara paylaşım gönderebilsin", "Allow users on this server to receive shares from other servers" : "Bu sunucudaki kullanıcılar diğer sunuculardan paylaşım alabilsin", "Search global and public address book for users and let local users publish their data" : "Genel ve herkese açık adres defterinde kullanıcı ara ve yerel kullanıcıların bilgilerini paylaşmasını sağla", "Allow users to publish their data to a global and public address book" : "Kullanıcıların bilgilerini genel ve herkese açık bir adres defterinde paylaşabilsin", "Federated Cloud" : "Birleşmiş Bulut", + "You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com" : "Nextcloud, ownCloud ya da Pydio kullanıcıları ile paylaşım yapılaiblir. Yalnızca paylaşım penceresine person@cloud.example.com gibi Birleşmiş Bulut kodunu yazın.", "Your Federated Cloud ID:" : "Birleşmiş Bulut Kimliğiniz:", - "Share it:" : "Paylaşın:", + "Share it so your friends can share files with you:" : "Paylaşın, böylece arkadaşlarınız da sizinle dosya paylaşabilir:", "Add to your website" : "Web sitenize ekleyin", "Share with me via Nextcloud" : "Benimle Nextcloud üzerinden paylaşın", "HTML Code:" : "HTML Kodu:", - "Search global and public address book for users" : "Genel ve herkese açık adres defterinde kullanıcı ara" + "Search global and public address book for users" : "Genel ve herkese açık adres defterinde kullanıcı ara", + "Share it:" : "Paylaşın:" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/l10n/zh_CN.js b/apps/federatedfilesharing/l10n/zh_CN.js index 82976dcb250..aafe0322188 100644 --- a/apps/federatedfilesharing/l10n/zh_CN.js +++ b/apps/federatedfilesharing/l10n/zh_CN.js @@ -43,10 +43,10 @@ OC.L10N.register( "Allow users on this server to receive shares from other servers" : "允许用户从其他服务器接收分享", "Federated Cloud" : "联合云", "Your Federated Cloud ID:" : "你的联合云ID:", - "Share it:" : "分享它:", "Add to your website" : "添加到您的网站", "Share with me via Nextcloud" : "通过联合云与我共享", "HTML Code:" : "HTML 代码:", - "Search global and public address book for users" : "在全局和公开地址簿中寻找用户" + "Search global and public address book for users" : "在全局和公开地址簿中寻找用户", + "Share it:" : "分享它:" }, "nplurals=1; plural=0;"); diff --git a/apps/federatedfilesharing/l10n/zh_CN.json b/apps/federatedfilesharing/l10n/zh_CN.json index b173ada4d53..2c51760c964 100644 --- a/apps/federatedfilesharing/l10n/zh_CN.json +++ b/apps/federatedfilesharing/l10n/zh_CN.json @@ -41,10 +41,10 @@ "Allow users on this server to receive shares from other servers" : "允许用户从其他服务器接收分享", "Federated Cloud" : "联合云", "Your Federated Cloud ID:" : "你的联合云ID:", - "Share it:" : "分享它:", "Add to your website" : "添加到您的网站", "Share with me via Nextcloud" : "通过联合云与我共享", "HTML Code:" : "HTML 代码:", - "Search global and public address book for users" : "在全局和公开地址簿中寻找用户" + "Search global and public address book for users" : "在全局和公开地址簿中寻找用户", + "Share it:" : "分享它:" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/templates/settings-admin.php b/apps/federatedfilesharing/templates/settings-admin.php index 7343a867d53..ff5cb0084e5 100644 --- a/apps/federatedfilesharing/templates/settings-admin.php +++ b/apps/federatedfilesharing/templates/settings-admin.php @@ -9,6 +9,8 @@ script('federatedfilesharing', 'settings-admin'); <a target="_blank" rel="noreferrer" class="icon-info svg" title="<?php p($l->t('Open documentation'));?>" href="<?php p(link_to_docs('admin-sharing-federated')); ?>"></a> + <p class="settings-hint"><?php p($l->t('Adjust how people can share between servers.')); ?></p> + <p> <input type="checkbox" name="outgoing_server2server_share_enabled" id="outgoingServer2serverShareEnabled" class="checkbox" value="1" <?php if ($_['outgoingServer2serverShareEnabled']) print_unescaped('checked="checked"'); ?> /> diff --git a/apps/federatedfilesharing/templates/settings-personal.php b/apps/federatedfilesharing/templates/settings-personal.php index 98a1cd7f751..126daae27d0 100644 --- a/apps/federatedfilesharing/templates/settings-personal.php +++ b/apps/federatedfilesharing/templates/settings-personal.php @@ -8,6 +8,7 @@ style('federatedfilesharing', 'settings-personal'); <?php if ($_['outgoingServer2serverShareEnabled']): ?> <div id="fileSharingSettings" class="section"> <h2><?php p($l->t('Federated Cloud')); ?></h2> + <p class="settings-hint"><?php p($l->t('You can share with anyone who uses Nextcloud, ownCloud or Pydio! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com')); ?></p> <p> <?php p($l->t('Your Federated Cloud ID:')); ?> @@ -19,7 +20,7 @@ style('federatedfilesharing', 'settings-personal'); <?php if ($_['showShareIT']) {?> <p> - <?php p($l->t('Share it:')); ?><br> + <?php p($l->t('Share it so your friends can share files with you:')); ?><br> <button class="social-facebook pop-up" data-url='https://www.facebook.com/sharer/sharer.php?u=<?php p(urlencode($_['reference'])); ?>'> Facebook diff --git a/apps/federation/l10n/ca.js b/apps/federation/l10n/ca.js index 3edee3bfa20..9ac7ed3f641 100644 --- a/apps/federation/l10n/ca.js +++ b/apps/federation/l10n/ca.js @@ -5,12 +5,12 @@ OC.L10N.register( "Server is already in the list of trusted servers." : "El servidor ja està a la llista de servidors de confiança", "No server to federate with found" : "No s\\'ha trobar cap servidor federat", "Could not add server" : "No s'ha pogut afegir el servidor", - "Federation" : "Federació", + "Trusted servers" : "Servidor de confiança", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federació li permet connectar amb altres servidors de confiança per a intercanviar directoris d\\'usuari. Per exemple, això s\\'utilitzarà per als usuaris externs d'auto-completat per a l\\'ús compartit federat.", "Add server automatically once a federated share was created successfully" : "Afegir servidor automàticament quan s'hagi creat una federació correctament", - "Trusted servers" : "Servidor de confiança", "+ Add trusted server" : "+Afegir servidor de confiança", "Trusted server" : "Servidor de confiança", - "Add" : "Afegir" + "Add" : "Afegir", + "Federation" : "Federació" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federation/l10n/ca.json b/apps/federation/l10n/ca.json index d728eb57edc..a6b26b0d840 100644 --- a/apps/federation/l10n/ca.json +++ b/apps/federation/l10n/ca.json @@ -3,12 +3,12 @@ "Server is already in the list of trusted servers." : "El servidor ja està a la llista de servidors de confiança", "No server to federate with found" : "No s\\'ha trobar cap servidor federat", "Could not add server" : "No s'ha pogut afegir el servidor", - "Federation" : "Federació", + "Trusted servers" : "Servidor de confiança", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federació li permet connectar amb altres servidors de confiança per a intercanviar directoris d\\'usuari. Per exemple, això s\\'utilitzarà per als usuaris externs d'auto-completat per a l\\'ús compartit federat.", "Add server automatically once a federated share was created successfully" : "Afegir servidor automàticament quan s'hagi creat una federació correctament", - "Trusted servers" : "Servidor de confiança", "+ Add trusted server" : "+Afegir servidor de confiança", "Trusted server" : "Servidor de confiança", - "Add" : "Afegir" + "Add" : "Afegir", + "Federation" : "Federació" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federation/l10n/cs.js b/apps/federation/l10n/cs.js index 03aab40a8aa..34190bbe010 100644 --- a/apps/federation/l10n/cs.js +++ b/apps/federation/l10n/cs.js @@ -5,12 +5,12 @@ OC.L10N.register( "Server is already in the list of trusted servers." : "Server je již přidán na seznam důvěryhodných serverů.", "No server to federate with found" : "Nenalezen žádný server ke sdružování", "Could not add server" : "Nepodařilo se přidat server", - "Federation" : "Sdružování", + "Trusted servers" : "Důvěryhodné servery", "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." : "Sdružování vám umožňuje se připojit k dalším důvěryhodným serverům za účelem výměny uživatelských adresářů. Používá se to např. pro automatické doplňování uživatelů při sdruženém sdílení.", "Add server automatically once a federated share was created successfully" : "Přidat server automaticky jakmile je úspěšně vytvořeno sdružené sdílení", - "Trusted servers" : "Důvěryhodné servery", "+ Add trusted server" : "+ Přidat důvěryhodný server", "Trusted server" : "Důvěryhodný server", - "Add" : "Přidat" + "Add" : "Přidat", + "Federation" : "Sdružování" }, "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/apps/federation/l10n/cs.json b/apps/federation/l10n/cs.json index fd43686079e..05da0723c41 100644 --- a/apps/federation/l10n/cs.json +++ b/apps/federation/l10n/cs.json @@ -3,12 +3,12 @@ "Server is already in the list of trusted servers." : "Server je již přidán na seznam důvěryhodných serverů.", "No server to federate with found" : "Nenalezen žádný server ke sdružování", "Could not add server" : "Nepodařilo se přidat server", - "Federation" : "Sdružování", + "Trusted servers" : "Důvěryhodné servery", "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." : "Sdružování vám umožňuje se připojit k dalším důvěryhodným serverům za účelem výměny uživatelských adresářů. Používá se to např. pro automatické doplňování uživatelů při sdruženém sdílení.", "Add server automatically once a federated share was created successfully" : "Přidat server automaticky jakmile je úspěšně vytvořeno sdružené sdílení", - "Trusted servers" : "Důvěryhodné servery", "+ Add trusted server" : "+ Přidat důvěryhodný server", "Trusted server" : "Důvěryhodný server", - "Add" : "Přidat" + "Add" : "Přidat", + "Federation" : "Sdružování" },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/federation/l10n/de.js b/apps/federation/l10n/de.js index fb509f03b93..e286b193091 100644 --- a/apps/federation/l10n/de.js +++ b/apps/federation/l10n/de.js @@ -5,12 +5,12 @@ OC.L10N.register( "Server is already in the list of trusted servers." : "Der Server ist bereits in der Liste der vertrauenswürdigen Server.", "No server to federate with found" : "Es wurde kein Server zum Verbinden per Federation gefunden", "Could not add server" : "Konnte Server nicht hinzufügen", - "Federation" : "Federation", + "Trusted servers" : "Vertrauenswürdige Server", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federation erlaubt es Dir, Dich mit anderen vertrauenswürdigen Servern zu verbinden, um das Benutzerverzeichnis auszutauschen. Dies wird zum Beispiel für die automatische Vervollständigung externer Benutzernamen beim Federated-Sharing verwendet.", "Add server automatically once a federated share was created successfully" : "Einen mit ownCloud Federation verbundenen Server automatisch hinzufügen, sobald die Verbindung einmal erfolgreich erstellt wurde", - "Trusted servers" : "Vertrauenswürdige Server", "+ Add trusted server" : "+ Vertrauenswürdigen Server hinzufügen", "Trusted server" : "Vertrauenswürdiger Server", - "Add" : "Hinzufügen" + "Add" : "Hinzufügen", + "Federation" : "Federation" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federation/l10n/de.json b/apps/federation/l10n/de.json index ec9383ff1f7..1ab888f3d2e 100644 --- a/apps/federation/l10n/de.json +++ b/apps/federation/l10n/de.json @@ -3,12 +3,12 @@ "Server is already in the list of trusted servers." : "Der Server ist bereits in der Liste der vertrauenswürdigen Server.", "No server to federate with found" : "Es wurde kein Server zum Verbinden per Federation gefunden", "Could not add server" : "Konnte Server nicht hinzufügen", - "Federation" : "Federation", + "Trusted servers" : "Vertrauenswürdige Server", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federation erlaubt es Dir, Dich mit anderen vertrauenswürdigen Servern zu verbinden, um das Benutzerverzeichnis auszutauschen. Dies wird zum Beispiel für die automatische Vervollständigung externer Benutzernamen beim Federated-Sharing verwendet.", "Add server automatically once a federated share was created successfully" : "Einen mit ownCloud Federation verbundenen Server automatisch hinzufügen, sobald die Verbindung einmal erfolgreich erstellt wurde", - "Trusted servers" : "Vertrauenswürdige Server", "+ Add trusted server" : "+ Vertrauenswürdigen Server hinzufügen", "Trusted server" : "Vertrauenswürdiger Server", - "Add" : "Hinzufügen" + "Add" : "Hinzufügen", + "Federation" : "Federation" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federation/l10n/de_DE.js b/apps/federation/l10n/de_DE.js index a096202a05f..21e394f726a 100644 --- a/apps/federation/l10n/de_DE.js +++ b/apps/federation/l10n/de_DE.js @@ -5,12 +5,12 @@ OC.L10N.register( "Server is already in the list of trusted servers." : "Server ist bereits in der Liste der vertrauenswürdigen Servern.", "No server to federate with found" : "Es wurde kein Server zum Verbinden per Federation gefunden", "Could not add server" : "Konnte Server nicht hinzufügen", - "Federation" : "Federation", + "Trusted servers" : "Vertrauenswürdige Server", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federation erlaubt es Ihnen, sich mit anderen vertrauenswürdigen Servern zu verbinden, um das Benutzerverzeichnis auszutauschen. Dies wird zum Beispiel für die automatische Vervollständigung externer Benutzernamen beim Federated-Sharing verwendet.", "Add server automatically once a federated share was created successfully" : "Server automatisch hinzufügen sobald eine federated Freigabe erstellt wurde", - "Trusted servers" : "Vertrauenswürdige Server", "+ Add trusted server" : "+ Vertrauenswürdigen Server hinzufügen", "Trusted server" : "Vertrauenswürdiger Server", - "Add" : "Hinzufügen" + "Add" : "Hinzufügen", + "Federation" : "Federation" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federation/l10n/de_DE.json b/apps/federation/l10n/de_DE.json index c5215151889..9e0212f5c23 100644 --- a/apps/federation/l10n/de_DE.json +++ b/apps/federation/l10n/de_DE.json @@ -3,12 +3,12 @@ "Server is already in the list of trusted servers." : "Server ist bereits in der Liste der vertrauenswürdigen Servern.", "No server to federate with found" : "Es wurde kein Server zum Verbinden per Federation gefunden", "Could not add server" : "Konnte Server nicht hinzufügen", - "Federation" : "Federation", + "Trusted servers" : "Vertrauenswürdige Server", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federation erlaubt es Ihnen, sich mit anderen vertrauenswürdigen Servern zu verbinden, um das Benutzerverzeichnis auszutauschen. Dies wird zum Beispiel für die automatische Vervollständigung externer Benutzernamen beim Federated-Sharing verwendet.", "Add server automatically once a federated share was created successfully" : "Server automatisch hinzufügen sobald eine federated Freigabe erstellt wurde", - "Trusted servers" : "Vertrauenswürdige Server", "+ Add trusted server" : "+ Vertrauenswürdigen Server hinzufügen", "Trusted server" : "Vertrauenswürdiger Server", - "Add" : "Hinzufügen" + "Add" : "Hinzufügen", + "Federation" : "Federation" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federation/l10n/el.js b/apps/federation/l10n/el.js index 895039f5f78..02680613d43 100644 --- a/apps/federation/l10n/el.js +++ b/apps/federation/l10n/el.js @@ -5,10 +5,10 @@ OC.L10N.register( "Server is already in the list of trusted servers." : "Ο διακομιστής περιλαμβάνεται ήδη στην λίστα των έμπιστων ownCloud", "No server to federate with found" : "Δεν βρέθηκε διακομιστής για συνένωση", "Could not add server" : "Αδυναμία προσθήκης διακομιστή", - "Federation" : "Federation", "Trusted servers" : "Έμπιστοι διακομιστές", "+ Add trusted server" : "+Προσθήκη έμπιστων διακομιστών", "Trusted server" : "Έμπιστοι διακομιστές", - "Add" : "Προσθήκη" + "Add" : "Προσθήκη", + "Federation" : "Federation" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federation/l10n/el.json b/apps/federation/l10n/el.json index fe2050d1b15..f6ff9759777 100644 --- a/apps/federation/l10n/el.json +++ b/apps/federation/l10n/el.json @@ -3,10 +3,10 @@ "Server is already in the list of trusted servers." : "Ο διακομιστής περιλαμβάνεται ήδη στην λίστα των έμπιστων ownCloud", "No server to federate with found" : "Δεν βρέθηκε διακομιστής για συνένωση", "Could not add server" : "Αδυναμία προσθήκης διακομιστή", - "Federation" : "Federation", "Trusted servers" : "Έμπιστοι διακομιστές", "+ Add trusted server" : "+Προσθήκη έμπιστων διακομιστών", "Trusted server" : "Έμπιστοι διακομιστές", - "Add" : "Προσθήκη" + "Add" : "Προσθήκη", + "Federation" : "Federation" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federation/l10n/es.js b/apps/federation/l10n/es.js index ea0b7f165c2..dd81ea6e385 100644 --- a/apps/federation/l10n/es.js +++ b/apps/federation/l10n/es.js @@ -5,12 +5,12 @@ OC.L10N.register( "Server is already in the list of trusted servers." : "El servidor ya está en la lista de servidores en los que se confía.", "No server to federate with found" : "No se ha encontrado ningún servidor con el que federarse.", "Could not add server" : "No se ha podido añadir el servidor", - "Federation" : "Federación", + "Trusted servers" : "Servidores de confianza", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar directorios. Por ejemplo, ésto se usará para autocompletar la selección usuarios externos al compartir en federación. ", "Add server automatically once a federated share was created successfully" : "Añadir el servidor automáticamente una vez que un compartido federado se haya creado exitosamente", - "Trusted servers" : "Servidores de confianza", "+ Add trusted server" : "+ Añadir servidor de confianza", "Trusted server" : "Servidor de confianza", - "Add" : "Añadir" + "Add" : "Añadir", + "Federation" : "Federación" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federation/l10n/es.json b/apps/federation/l10n/es.json index dd088e526b8..ddd5791586b 100644 --- a/apps/federation/l10n/es.json +++ b/apps/federation/l10n/es.json @@ -3,12 +3,12 @@ "Server is already in the list of trusted servers." : "El servidor ya está en la lista de servidores en los que se confía.", "No server to federate with found" : "No se ha encontrado ningún servidor con el que federarse.", "Could not add server" : "No se ha podido añadir el servidor", - "Federation" : "Federación", + "Trusted servers" : "Servidores de confianza", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar directorios. Por ejemplo, ésto se usará para autocompletar la selección usuarios externos al compartir en federación. ", "Add server automatically once a federated share was created successfully" : "Añadir el servidor automáticamente una vez que un compartido federado se haya creado exitosamente", - "Trusted servers" : "Servidores de confianza", "+ Add trusted server" : "+ Añadir servidor de confianza", "Trusted server" : "Servidor de confianza", - "Add" : "Añadir" + "Add" : "Añadir", + "Federation" : "Federación" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federation/l10n/es_MX.js b/apps/federation/l10n/es_MX.js index d14f9937f73..fa327fc7f10 100644 --- a/apps/federation/l10n/es_MX.js +++ b/apps/federation/l10n/es_MX.js @@ -5,12 +5,12 @@ OC.L10N.register( "Server is already in the list of trusted servers." : "El servidor ya se encuentra en la lista de servidores de confianza.", "No server to federate with found" : "No se encontraron servidores para integrar a la federación", "Could not add server" : "No fue posible agregar el servidor", - "Federation" : "Federación", + "Trusted servers" : "Servidores de confianza", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación le permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "Add server automatically once a federated share was created successfully" : "Agregar el servidor automáticamente una vez que se genere exitosamente el elemento compartido federado", - "Trusted servers" : "Servidores de confianza", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", - "Add" : "Agregar" + "Add" : "Agregar", + "Federation" : "Federación" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federation/l10n/es_MX.json b/apps/federation/l10n/es_MX.json index 386e85dcffd..d484a9e5897 100644 --- a/apps/federation/l10n/es_MX.json +++ b/apps/federation/l10n/es_MX.json @@ -3,12 +3,12 @@ "Server is already in the list of trusted servers." : "El servidor ya se encuentra en la lista de servidores de confianza.", "No server to federate with found" : "No se encontraron servidores para integrar a la federación", "Could not add server" : "No fue posible agregar el servidor", - "Federation" : "Federación", + "Trusted servers" : "Servidores de confianza", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación le permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.", "Add server automatically once a federated share was created successfully" : "Agregar el servidor automáticamente una vez que se genere exitosamente el elemento compartido federado", - "Trusted servers" : "Servidores de confianza", "+ Add trusted server" : "+ Agregar servidor de confianza", "Trusted server" : "Servidor de confianza", - "Add" : "Agregar" + "Add" : "Agregar", + "Federation" : "Federación" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federation/l10n/fi.js b/apps/federation/l10n/fi.js index 444c3ac63ed..3eb39aa5004 100644 --- a/apps/federation/l10n/fi.js +++ b/apps/federation/l10n/fi.js @@ -5,12 +5,12 @@ OC.L10N.register( "Server is already in the list of trusted servers." : "Palvelin on jo luotettujen palvelimien luettelossa.", "No server to federate with found" : "Palvelinta, johon liittyä, ei löytynyt", "Could not add server" : "Palvelimen lisääminen ei onnistunut", - "Federation" : "Federaatio", + "Trusted servers" : "Luotetut palvelimet", "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." : "Federointi sallii sinun liittyä toisten luotettujen palvelimien käyttäjäluetteloihin. Sitä käytetään esimerkiksi ulkoisten käyttäjänimien automaattiseen täydentämiseen.", "Add server automatically once a federated share was created successfully" : "Lisää palvelin automaattisesti, kun federoitu jako on luotu onnistuneesti", - "Trusted servers" : "Luotetut palvelimet", "+ Add trusted server" : "+ Lisää luotettu palvelin", "Trusted server" : "Luotettu palvelin", - "Add" : "Lisää" + "Add" : "Lisää", + "Federation" : "Federaatio" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federation/l10n/fi.json b/apps/federation/l10n/fi.json index f7b3263c50b..367fb5fe1b3 100644 --- a/apps/federation/l10n/fi.json +++ b/apps/federation/l10n/fi.json @@ -3,12 +3,12 @@ "Server is already in the list of trusted servers." : "Palvelin on jo luotettujen palvelimien luettelossa.", "No server to federate with found" : "Palvelinta, johon liittyä, ei löytynyt", "Could not add server" : "Palvelimen lisääminen ei onnistunut", - "Federation" : "Federaatio", + "Trusted servers" : "Luotetut palvelimet", "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." : "Federointi sallii sinun liittyä toisten luotettujen palvelimien käyttäjäluetteloihin. Sitä käytetään esimerkiksi ulkoisten käyttäjänimien automaattiseen täydentämiseen.", "Add server automatically once a federated share was created successfully" : "Lisää palvelin automaattisesti, kun federoitu jako on luotu onnistuneesti", - "Trusted servers" : "Luotetut palvelimet", "+ Add trusted server" : "+ Lisää luotettu palvelin", "Trusted server" : "Luotettu palvelin", - "Add" : "Lisää" + "Add" : "Lisää", + "Federation" : "Federaatio" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federation/l10n/fr.js b/apps/federation/l10n/fr.js index 2ebaaebed06..d67862f6a01 100644 --- a/apps/federation/l10n/fr.js +++ b/apps/federation/l10n/fr.js @@ -5,12 +5,12 @@ OC.L10N.register( "Server is already in the list of trusted servers." : "Le serveur est déjà dans la liste des serveurs de confiance.", "No server to federate with found" : "Aucun serveur avec lequel fédérer n'a été trouvé", "Could not add server" : "Impossible d'ajouter le serveur", - "Federation" : "Fédération", + "Trusted servers" : "Serveurs de confiance", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La « fédération » vous permet de vous connecter avec d'autres serveurs de confiance pour échanger la liste des utilisateurs. Par exemple, ce sera utilisé pour auto-compléter les utilisateurs externes lors du partage fédéré.", "Add server automatically once a federated share was created successfully" : "Ajouter un serveur automatiquement une fois que le partage a été créé avec succès", - "Trusted servers" : "Serveurs de confiance", "+ Add trusted server" : "+ Ajouter un serveur de confiance", "Trusted server" : "Serveur de confiance", - "Add" : "Ajouter" + "Add" : "Ajouter", + "Federation" : "Fédération" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/federation/l10n/fr.json b/apps/federation/l10n/fr.json index 7110cb9fe87..24dc0aee7f6 100644 --- a/apps/federation/l10n/fr.json +++ b/apps/federation/l10n/fr.json @@ -3,12 +3,12 @@ "Server is already in the list of trusted servers." : "Le serveur est déjà dans la liste des serveurs de confiance.", "No server to federate with found" : "Aucun serveur avec lequel fédérer n'a été trouvé", "Could not add server" : "Impossible d'ajouter le serveur", - "Federation" : "Fédération", + "Trusted servers" : "Serveurs de confiance", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La « fédération » vous permet de vous connecter avec d'autres serveurs de confiance pour échanger la liste des utilisateurs. Par exemple, ce sera utilisé pour auto-compléter les utilisateurs externes lors du partage fédéré.", "Add server automatically once a federated share was created successfully" : "Ajouter un serveur automatiquement une fois que le partage a été créé avec succès", - "Trusted servers" : "Serveurs de confiance", "+ Add trusted server" : "+ Ajouter un serveur de confiance", "Trusted server" : "Serveur de confiance", - "Add" : "Ajouter" + "Add" : "Ajouter", + "Federation" : "Fédération" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/federation/l10n/hu.js b/apps/federation/l10n/hu.js index 53ed9652edd..06f9679fc24 100644 --- a/apps/federation/l10n/hu.js +++ b/apps/federation/l10n/hu.js @@ -5,12 +5,12 @@ OC.L10N.register( "Server is already in the list of trusted servers." : "A szerver már a megbízható szerverek közt van.", "No server to federate with found" : "Nem található egyesíthető szerver", "Could not add server" : "Nem lehet hozzáadni a szervert", - "Federation" : "Egyesítés", + "Trusted servers" : "Megbízható szerverek", "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." : "Az egyesítés lehetővé teszi a kapcsolódást más megbízható szerverekhez a felhasználói könyvtárak kicseréléséhez. Például ennek segítségével lesznek automatikusan kiegészítve a külső felhasználók az egyesített megosztáshoz.", "Add server automatically once a federated share was created successfully" : "Szerver automatikus hozzáadása, ha az egyesített megosztás létrehozása sikeres", - "Trusted servers" : "Megbízható szerverek", "+ Add trusted server" : "+ Megbízható szerver hozzáadása", "Trusted server" : "Megbízható szerver", - "Add" : "Hozzáadás" + "Add" : "Hozzáadás", + "Federation" : "Egyesítés" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federation/l10n/hu.json b/apps/federation/l10n/hu.json index d7ff0199763..af24f197c19 100644 --- a/apps/federation/l10n/hu.json +++ b/apps/federation/l10n/hu.json @@ -3,12 +3,12 @@ "Server is already in the list of trusted servers." : "A szerver már a megbízható szerverek közt van.", "No server to federate with found" : "Nem található egyesíthető szerver", "Could not add server" : "Nem lehet hozzáadni a szervert", - "Federation" : "Egyesítés", + "Trusted servers" : "Megbízható szerverek", "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." : "Az egyesítés lehetővé teszi a kapcsolódást más megbízható szerverekhez a felhasználói könyvtárak kicseréléséhez. Például ennek segítségével lesznek automatikusan kiegészítve a külső felhasználók az egyesített megosztáshoz.", "Add server automatically once a federated share was created successfully" : "Szerver automatikus hozzáadása, ha az egyesített megosztás létrehozása sikeres", - "Trusted servers" : "Megbízható szerverek", "+ Add trusted server" : "+ Megbízható szerver hozzáadása", "Trusted server" : "Megbízható szerver", - "Add" : "Hozzáadás" + "Add" : "Hozzáadás", + "Federation" : "Egyesítés" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federation/l10n/ia.js b/apps/federation/l10n/ia.js index 1f43df4df83..889d305cb5d 100644 --- a/apps/federation/l10n/ia.js +++ b/apps/federation/l10n/ia.js @@ -5,12 +5,12 @@ OC.L10N.register( "Server is already in the list of trusted servers." : "Servitor ja es in le lista de servitores fiduciari.", "No server to federate with found" : "Nulle servitor pro associar se per federation esseva trovate", "Could not add server" : "Impossibile adder le servitor", - "Federation" : "Federation", + "Trusted servers" : "Servitores fiduciari", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Le federation permitte te connecter con altere servitores fiduciari pro excambiar le directorio del usator. Per exemplo, iste attributo essera usate pro completar automaticamente usatores externe pro le compartimento federate.", "Add server automatically once a federated share was created successfully" : "Le functionalitate de adder un servitor automaticamente un vice que un compartimento federate es associate esseva create con successo", - "Trusted servers" : "Servitores fiduciari", "+ Add trusted server" : "+ Adder servitor fiduciari", "Trusted server" : "Servitor fiduciari", - "Add" : "Adder" + "Add" : "Adder", + "Federation" : "Federation" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federation/l10n/ia.json b/apps/federation/l10n/ia.json index 1fb0190efb3..5b06ced40ea 100644 --- a/apps/federation/l10n/ia.json +++ b/apps/federation/l10n/ia.json @@ -3,12 +3,12 @@ "Server is already in the list of trusted servers." : "Servitor ja es in le lista de servitores fiduciari.", "No server to federate with found" : "Nulle servitor pro associar se per federation esseva trovate", "Could not add server" : "Impossibile adder le servitor", - "Federation" : "Federation", + "Trusted servers" : "Servitores fiduciari", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Le federation permitte te connecter con altere servitores fiduciari pro excambiar le directorio del usator. Per exemplo, iste attributo essera usate pro completar automaticamente usatores externe pro le compartimento federate.", "Add server automatically once a federated share was created successfully" : "Le functionalitate de adder un servitor automaticamente un vice que un compartimento federate es associate esseva create con successo", - "Trusted servers" : "Servitores fiduciari", "+ Add trusted server" : "+ Adder servitor fiduciari", "Trusted server" : "Servitor fiduciari", - "Add" : "Adder" + "Add" : "Adder", + "Federation" : "Federation" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federation/l10n/id.js b/apps/federation/l10n/id.js index 6c98d2f83df..2e7137bc995 100644 --- a/apps/federation/l10n/id.js +++ b/apps/federation/l10n/id.js @@ -5,12 +5,12 @@ OC.L10N.register( "Server is already in the list of trusted servers." : "Server sudah ada pada daftar server terpercaya", "No server to federate with found" : "Tidak ada server yang bisa difederasikan", "Could not add server" : "Tidak dapat menambahkan server", - "Federation" : "Federasi", + "Trusted servers" : "Server terpercaya", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federasi memungkinkan Anda untuk terhubung dengan server lainnya yang terpercaya untuk menukar direktori pengguna. Contohnya, ini akan digunakan untuk pengisian-otomatis untuk pengguna eksternal untuk pembagian terfederasi.", "Add server automatically once a federated share was created successfully" : "Tambah server secara otomatis saat pembagian terfederasi dibuat", - "Trusted servers" : "Server terpercaya", "+ Add trusted server" : "+ Tambah server terpercaya", "Trusted server" : "Server terpercaya", - "Add" : "Tambah" + "Add" : "Tambah", + "Federation" : "Federasi" }, "nplurals=1; plural=0;"); diff --git a/apps/federation/l10n/id.json b/apps/federation/l10n/id.json index 1757ce4b1dc..835481d081c 100644 --- a/apps/federation/l10n/id.json +++ b/apps/federation/l10n/id.json @@ -3,12 +3,12 @@ "Server is already in the list of trusted servers." : "Server sudah ada pada daftar server terpercaya", "No server to federate with found" : "Tidak ada server yang bisa difederasikan", "Could not add server" : "Tidak dapat menambahkan server", - "Federation" : "Federasi", + "Trusted servers" : "Server terpercaya", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federasi memungkinkan Anda untuk terhubung dengan server lainnya yang terpercaya untuk menukar direktori pengguna. Contohnya, ini akan digunakan untuk pengisian-otomatis untuk pengguna eksternal untuk pembagian terfederasi.", "Add server automatically once a federated share was created successfully" : "Tambah server secara otomatis saat pembagian terfederasi dibuat", - "Trusted servers" : "Server terpercaya", "+ Add trusted server" : "+ Tambah server terpercaya", "Trusted server" : "Server terpercaya", - "Add" : "Tambah" + "Add" : "Tambah", + "Federation" : "Federasi" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/federation/l10n/is.js b/apps/federation/l10n/is.js index a2fb6474ecc..0261141a59c 100644 --- a/apps/federation/l10n/is.js +++ b/apps/federation/l10n/is.js @@ -5,12 +5,12 @@ OC.L10N.register( "Server is already in the list of trusted servers." : "Þjónninn er nú þegar á listanum yfir treysta þjóna.", "No server to federate with found" : "Enginn þjónn sem hæfur er til skýjasambands fannst", "Could not add server" : "Gat ekki bætt við þjóni", - "Federation" : "Samband", + "Trusted servers" : "Treystir þjónar", "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." : "Þjónasamband (federation) gerir þér kleift að tengjast öðrum treystum skýjum til að skiptast á notendaskrám. Þetta er til dæmis notað til að sjálfklára nöfn ytri notenda við deilingu sambandssameigna.", "Add server automatically once a federated share was created successfully" : "Bæta þjóni við sjálfkrafa, hafi tekist að búa til sambandssameign", - "Trusted servers" : "Treystir þjónar", "+ Add trusted server" : "+ Bæta við treystum þjóni", "Trusted server" : "Treystur þjónn", - "Add" : "Bæta við" + "Add" : "Bæta við", + "Federation" : "Samband" }, "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/apps/federation/l10n/is.json b/apps/federation/l10n/is.json index 4d6979b9ba9..cd851a5bb90 100644 --- a/apps/federation/l10n/is.json +++ b/apps/federation/l10n/is.json @@ -3,12 +3,12 @@ "Server is already in the list of trusted servers." : "Þjónninn er nú þegar á listanum yfir treysta þjóna.", "No server to federate with found" : "Enginn þjónn sem hæfur er til skýjasambands fannst", "Could not add server" : "Gat ekki bætt við þjóni", - "Federation" : "Samband", + "Trusted servers" : "Treystir þjónar", "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." : "Þjónasamband (federation) gerir þér kleift að tengjast öðrum treystum skýjum til að skiptast á notendaskrám. Þetta er til dæmis notað til að sjálfklára nöfn ytri notenda við deilingu sambandssameigna.", "Add server automatically once a federated share was created successfully" : "Bæta þjóni við sjálfkrafa, hafi tekist að búa til sambandssameign", - "Trusted servers" : "Treystir þjónar", "+ Add trusted server" : "+ Bæta við treystum þjóni", "Trusted server" : "Treystur þjónn", - "Add" : "Bæta við" + "Add" : "Bæta við", + "Federation" : "Samband" },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" }
\ No newline at end of file diff --git a/apps/federation/l10n/it.js b/apps/federation/l10n/it.js index b83315d5438..a18901ee4e5 100644 --- a/apps/federation/l10n/it.js +++ b/apps/federation/l10n/it.js @@ -5,12 +5,12 @@ OC.L10N.register( "Server is already in the list of trusted servers." : "Il server è già nell'elenco dei server affidabili.", "No server to federate with found" : "Non ho trovato alcun server per la federazione", "Could not add server" : "Impossibile aggiungere il server", - "Federation" : "Federazione", + "Trusted servers" : "Server affidabili", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federazione consente di connettersi ad altri server affidabili per accedere alla cartella utente. Ad esempio, può essere utilizzata per il completamento automatico di utenti esterni per la condivisione federata.", "Add server automatically once a federated share was created successfully" : "Aggiungi automaticamente il server dopo che una condivisione federata è stata creata con successo", - "Trusted servers" : "Server affidabili", "+ Add trusted server" : "+ Aggiungi server affidabile", "Trusted server" : "Server affidabile", - "Add" : "Aggiungi" + "Add" : "Aggiungi", + "Federation" : "Federazione" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federation/l10n/it.json b/apps/federation/l10n/it.json index 886b2fce210..9d732b0f5ac 100644 --- a/apps/federation/l10n/it.json +++ b/apps/federation/l10n/it.json @@ -3,12 +3,12 @@ "Server is already in the list of trusted servers." : "Il server è già nell'elenco dei server affidabili.", "No server to federate with found" : "Non ho trovato alcun server per la federazione", "Could not add server" : "Impossibile aggiungere il server", - "Federation" : "Federazione", + "Trusted servers" : "Server affidabili", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federazione consente di connettersi ad altri server affidabili per accedere alla cartella utente. Ad esempio, può essere utilizzata per il completamento automatico di utenti esterni per la condivisione federata.", "Add server automatically once a federated share was created successfully" : "Aggiungi automaticamente il server dopo che una condivisione federata è stata creata con successo", - "Trusted servers" : "Server affidabili", "+ Add trusted server" : "+ Aggiungi server affidabile", "Trusted server" : "Server affidabile", - "Add" : "Aggiungi" + "Add" : "Aggiungi", + "Federation" : "Federazione" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federation/l10n/ja.js b/apps/federation/l10n/ja.js index c0e6512e137..6f8a9ee096c 100644 --- a/apps/federation/l10n/ja.js +++ b/apps/federation/l10n/ja.js @@ -5,12 +5,12 @@ OC.L10N.register( "Server is already in the list of trusted servers." : "信頼済サーバーとして既に登録されています。", "No server to federate with found" : "Nextcloud 連携サーバーはありません。", "Could not add server" : "サーバーを追加できませんでした", - "Federation" : "連携", + "Trusted servers" : "信頼済サーバー", "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" : "+ 信頼済サーバーに追加", "Trusted server" : "信頼済サーバー", - "Add" : "追加" + "Add" : "追加", + "Federation" : "連携" }, "nplurals=1; plural=0;"); diff --git a/apps/federation/l10n/ja.json b/apps/federation/l10n/ja.json index 4519b04eeed..53147709788 100644 --- a/apps/federation/l10n/ja.json +++ b/apps/federation/l10n/ja.json @@ -3,12 +3,12 @@ "Server is already in the list of trusted servers." : "信頼済サーバーとして既に登録されています。", "No server to federate with found" : "Nextcloud 連携サーバーはありません。", "Could not add server" : "サーバーを追加できませんでした", - "Federation" : "連携", + "Trusted servers" : "信頼済サーバー", "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" : "+ 信頼済サーバーに追加", "Trusted server" : "信頼済サーバー", - "Add" : "追加" + "Add" : "追加", + "Federation" : "連携" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/federation/l10n/ko.js b/apps/federation/l10n/ko.js index c5baf30bb04..18e788fcead 100644 --- a/apps/federation/l10n/ko.js +++ b/apps/federation/l10n/ko.js @@ -1,15 +1,16 @@ OC.L10N.register( "federation", { - "Server added to the list of trusted ownClouds" : "신뢰할 수 있는 ownCloud 목록에 서버 추가함", + "Added to the list of trusted servers" : "신뢰할 수 있는 서버 목록에 추가됨", "Server is already in the list of trusted servers." : "신뢰할 수 있는 서버 목록에 이미 추가되었습니다.", - "No ownCloud server found" : "ownCloud 서버를 찾을 수 없음", + "No server to federate with found" : "연합 가능한 서버를 찾을 수 없음", "Could not add server" : "서버를 추가할 수 없음", - "Federation" : "연합 공유", - "ownCloud Federation allows you to connect with other trusted ownClouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "ownCloud 연합 공유를 사용하면 다른 믿을 수 있는 ownCloud 서버와 사용자 디렉터리를 상호간 공유할 수 있습니다. 이 정보는 연합 공유 시 외부 사용자 자동 완성 등에 사용합니다.", + "Trusted servers" : "신뢰할 수 있는 서버", + "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." : "서버 연합을 통해서 다른 신뢰할 수 있는 서버와 사용자 디렉터리를 교환할 수 있습니다. 이 기능의 사용 예시로 연합 공유 시 외부 사용자를 자동 완성하는 데 사용할 수 있습니다.", "Add server automatically once a federated share was created successfully" : "연합 공유를 생성했을 때 자동으로 서버 추가", - "Trusted ownCloud Servers" : "신뢰할 수 있는 ownCloud 서버", - "+ Add ownCloud server" : "+ ownCloud 서버 추가", - "ownCloud Server" : "ownCloud 서버" + "+ Add trusted server" : "+ 신뢰할 수 있는 서버 추가", + "Trusted server" : "신뢰할 수 있는 서버", + "Add" : "추가", + "Federation" : "연합" }, "nplurals=1; plural=0;"); diff --git a/apps/federation/l10n/ko.json b/apps/federation/l10n/ko.json index 373434a68ad..ab8fbf93874 100644 --- a/apps/federation/l10n/ko.json +++ b/apps/federation/l10n/ko.json @@ -1,13 +1,14 @@ { "translations": { - "Server added to the list of trusted ownClouds" : "신뢰할 수 있는 ownCloud 목록에 서버 추가함", + "Added to the list of trusted servers" : "신뢰할 수 있는 서버 목록에 추가됨", "Server is already in the list of trusted servers." : "신뢰할 수 있는 서버 목록에 이미 추가되었습니다.", - "No ownCloud server found" : "ownCloud 서버를 찾을 수 없음", + "No server to federate with found" : "연합 가능한 서버를 찾을 수 없음", "Could not add server" : "서버를 추가할 수 없음", - "Federation" : "연합 공유", - "ownCloud Federation allows you to connect with other trusted ownClouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "ownCloud 연합 공유를 사용하면 다른 믿을 수 있는 ownCloud 서버와 사용자 디렉터리를 상호간 공유할 수 있습니다. 이 정보는 연합 공유 시 외부 사용자 자동 완성 등에 사용합니다.", + "Trusted servers" : "신뢰할 수 있는 서버", + "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." : "서버 연합을 통해서 다른 신뢰할 수 있는 서버와 사용자 디렉터리를 교환할 수 있습니다. 이 기능의 사용 예시로 연합 공유 시 외부 사용자를 자동 완성하는 데 사용할 수 있습니다.", "Add server automatically once a federated share was created successfully" : "연합 공유를 생성했을 때 자동으로 서버 추가", - "Trusted ownCloud Servers" : "신뢰할 수 있는 ownCloud 서버", - "+ Add ownCloud server" : "+ ownCloud 서버 추가", - "ownCloud Server" : "ownCloud 서버" + "+ Add trusted server" : "+ 신뢰할 수 있는 서버 추가", + "Trusted server" : "신뢰할 수 있는 서버", + "Add" : "추가", + "Federation" : "연합" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/federation/l10n/lv.js b/apps/federation/l10n/lv.js index dab4eb4774b..2d6c51ceb79 100644 --- a/apps/federation/l10n/lv.js +++ b/apps/federation/l10n/lv.js @@ -5,12 +5,12 @@ OC.L10N.register( "Server is already in the list of trusted servers." : "Serveris jau ir uzticamo serveru sarakstā .", "No server to federate with found" : "Nav atrasts neviens serveris", "Could not add server" : "Nevarēja pievienot serveri", - "Federation" : "Federācija", + "Trusted servers" : "Uzticami serveri", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federācija ļauj savienot ar citiem uzticamiem serveriem ar Exchange lietotāja direktoriju. Piemēram, tas tiks izmantots, lai automātiski pieslēgtu ārējiem lietotājiem integrēto koplietošanu.", "Add server automatically once a federated share was created successfully" : "Automātiski pievienots serveris federācijas koplietojumam, veiksmīgi", - "Trusted servers" : "Uzticami serveri", "+ Add trusted server" : "+ pievietot uzticamiem serveriem", "Trusted server" : "Uzticams serveris", - "Add" : "Pievienot" + "Add" : "Pievienot", + "Federation" : "Federācija" }, "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"); diff --git a/apps/federation/l10n/lv.json b/apps/federation/l10n/lv.json index ecbb8c9303c..ce6716fb58c 100644 --- a/apps/federation/l10n/lv.json +++ b/apps/federation/l10n/lv.json @@ -3,12 +3,12 @@ "Server is already in the list of trusted servers." : "Serveris jau ir uzticamo serveru sarakstā .", "No server to federate with found" : "Nav atrasts neviens serveris", "Could not add server" : "Nevarēja pievienot serveri", - "Federation" : "Federācija", + "Trusted servers" : "Uzticami serveri", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federācija ļauj savienot ar citiem uzticamiem serveriem ar Exchange lietotāja direktoriju. Piemēram, tas tiks izmantots, lai automātiski pieslēgtu ārējiem lietotājiem integrēto koplietošanu.", "Add server automatically once a federated share was created successfully" : "Automātiski pievienots serveris federācijas koplietojumam, veiksmīgi", - "Trusted servers" : "Uzticami serveri", "+ Add trusted server" : "+ pievietot uzticamiem serveriem", "Trusted server" : "Uzticams serveris", - "Add" : "Pievienot" + "Add" : "Pievienot", + "Federation" : "Federācija" },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);" }
\ No newline at end of file diff --git a/apps/federation/l10n/nb.js b/apps/federation/l10n/nb.js index 673ea35b659..d64c4e1b1f2 100644 --- a/apps/federation/l10n/nb.js +++ b/apps/federation/l10n/nb.js @@ -5,12 +5,12 @@ OC.L10N.register( "Server is already in the list of trusted servers." : "Tjeneren er allerede i listen av klarerte tjenere.", "No server to federate with found" : "Ingen tjener å forene med ble funnet", "Could not add server" : "Kunne ikke legge til tjener", - "Federation" : "Sammenknytting", + "Trusted servers" : "Klarerte tjenere", "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." : "Føderasjon tillater deg å koble sammen andre betrodde tjenere for utviksling av bruker kataloger. For eksempel vil det bli brukt for autofullføring av eksterne brukere for føderal deling.", "Add server automatically once a federated share was created successfully" : "Legg til tjener automatisk når en sammenknyttet deling er blitt opprettet", - "Trusted servers" : "Klarerte tjenere", "+ Add trusted server" : "+ Legg til klarert tjener", "Trusted server" : "Klarert tjener", - "Add" : "Legg til" + "Add" : "Legg til", + "Federation" : "Sammenknytting" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federation/l10n/nb.json b/apps/federation/l10n/nb.json index f93121147d1..4fd448becf5 100644 --- a/apps/federation/l10n/nb.json +++ b/apps/federation/l10n/nb.json @@ -3,12 +3,12 @@ "Server is already in the list of trusted servers." : "Tjeneren er allerede i listen av klarerte tjenere.", "No server to federate with found" : "Ingen tjener å forene med ble funnet", "Could not add server" : "Kunne ikke legge til tjener", - "Federation" : "Sammenknytting", + "Trusted servers" : "Klarerte tjenere", "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." : "Føderasjon tillater deg å koble sammen andre betrodde tjenere for utviksling av bruker kataloger. For eksempel vil det bli brukt for autofullføring av eksterne brukere for føderal deling.", "Add server automatically once a federated share was created successfully" : "Legg til tjener automatisk når en sammenknyttet deling er blitt opprettet", - "Trusted servers" : "Klarerte tjenere", "+ Add trusted server" : "+ Legg til klarert tjener", "Trusted server" : "Klarert tjener", - "Add" : "Legg til" + "Add" : "Legg til", + "Federation" : "Sammenknytting" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federation/l10n/nl.js b/apps/federation/l10n/nl.js index dd1ae5fb4ab..7dc7d94ba67 100644 --- a/apps/federation/l10n/nl.js +++ b/apps/federation/l10n/nl.js @@ -5,12 +5,12 @@ OC.L10N.register( "Server is already in the list of trusted servers." : "Server bestaat reeds in de lijst van vertrouwde servers.", "No server to federate with found" : "Geen server gevonden om mee te federeren", "Could not add server" : "Kon server niet toevoegen", - "Federation" : "Federatie", + "Trusted servers" : "Vertrouwde servers", "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." : "Federatie maakt het mogelijk om te verbinden met vertrouwde servers en de gebuikersadministratie te delen. Zo kun je automatisch externe gebruikers toevoegen voor federatief delen.", "Add server automatically once a federated share was created successfully" : "Voeg server automatisch toe zodra een gefedereerde share succesvol gecreëerd is", - "Trusted servers" : "Vertrouwde servers", "+ Add trusted server" : "+ Toevoegen vertrouwde server", "Trusted server" : "Vertrouwde server", - "Add" : "Toevoegen" + "Add" : "Toevoegen", + "Federation" : "Federatie" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federation/l10n/nl.json b/apps/federation/l10n/nl.json index 1978c30e909..898142b497e 100644 --- a/apps/federation/l10n/nl.json +++ b/apps/federation/l10n/nl.json @@ -3,12 +3,12 @@ "Server is already in the list of trusted servers." : "Server bestaat reeds in de lijst van vertrouwde servers.", "No server to federate with found" : "Geen server gevonden om mee te federeren", "Could not add server" : "Kon server niet toevoegen", - "Federation" : "Federatie", + "Trusted servers" : "Vertrouwde servers", "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." : "Federatie maakt het mogelijk om te verbinden met vertrouwde servers en de gebuikersadministratie te delen. Zo kun je automatisch externe gebruikers toevoegen voor federatief delen.", "Add server automatically once a federated share was created successfully" : "Voeg server automatisch toe zodra een gefedereerde share succesvol gecreëerd is", - "Trusted servers" : "Vertrouwde servers", "+ Add trusted server" : "+ Toevoegen vertrouwde server", "Trusted server" : "Vertrouwde server", - "Add" : "Toevoegen" + "Add" : "Toevoegen", + "Federation" : "Federatie" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federation/l10n/pl.js b/apps/federation/l10n/pl.js index cc83a658919..a82f5663280 100644 --- a/apps/federation/l10n/pl.js +++ b/apps/federation/l10n/pl.js @@ -5,12 +5,12 @@ OC.L10N.register( "Server is already in the list of trusted servers." : "Serwer znajduje się już na liście zaufanych serwerów.", "No server to federate with found" : "Nie znaleziono stowarzyszonego serwera", "Could not add server" : "Nie można dodać serwera", - "Federation" : "Stowarzyszenia", + "Trusted servers" : "Zaufane serwery", "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." : "Stowarzyszenie pozwala łączyć się z innymi zaufanymi użytkownikami i wymieniać się z nimi katalogami. Na przykład, może to być wykorzystane do autouzupełniania w dzieleniu się ze stowarzyszonym użytkownikiem.", "Add server automatically once a federated share was created successfully" : "Dodaj serwer automatycznie po pomyślnym utworzeniu stowarzyszonego udziału.", - "Trusted servers" : "Zaufane serwery", "+ Add trusted server" : "+ Dodaj zaufany serwer", "Trusted server" : "Zaufany serwer", - "Add" : "Dodaj" + "Add" : "Dodaj", + "Federation" : "Stowarzyszenia" }, "nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"); diff --git a/apps/federation/l10n/pl.json b/apps/federation/l10n/pl.json index f6a3f6c57ce..4221b99c470 100644 --- a/apps/federation/l10n/pl.json +++ b/apps/federation/l10n/pl.json @@ -3,12 +3,12 @@ "Server is already in the list of trusted servers." : "Serwer znajduje się już na liście zaufanych serwerów.", "No server to federate with found" : "Nie znaleziono stowarzyszonego serwera", "Could not add server" : "Nie można dodać serwera", - "Federation" : "Stowarzyszenia", + "Trusted servers" : "Zaufane serwery", "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." : "Stowarzyszenie pozwala łączyć się z innymi zaufanymi użytkownikami i wymieniać się z nimi katalogami. Na przykład, może to być wykorzystane do autouzupełniania w dzieleniu się ze stowarzyszonym użytkownikiem.", "Add server automatically once a federated share was created successfully" : "Dodaj serwer automatycznie po pomyślnym utworzeniu stowarzyszonego udziału.", - "Trusted servers" : "Zaufane serwery", "+ Add trusted server" : "+ Dodaj zaufany serwer", "Trusted server" : "Zaufany serwer", - "Add" : "Dodaj" + "Add" : "Dodaj", + "Federation" : "Stowarzyszenia" },"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);" }
\ No newline at end of file diff --git a/apps/federation/l10n/pt_BR.js b/apps/federation/l10n/pt_BR.js index 7550880d368..dc358d66c34 100644 --- a/apps/federation/l10n/pt_BR.js +++ b/apps/federation/l10n/pt_BR.js @@ -5,12 +5,12 @@ OC.L10N.register( "Server is already in the list of trusted servers." : "O servidor já está na lista de servidores confiáveis.", "No server to federate with found" : "Nenhum servidor encontrado para federar", "Could not add server" : "Não foi possível adicionar servidor", - "Federation" : "Federação", + "Trusted servers" : "Servidores confiáveis", "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." : "Federação permite que você conecte com outros servidores confiáveis para trocar o diretório do usuário. Por exemplo, este atributo será usado para completar automaticamente usuários externos para compartilhamento federado.", "Add server automatically once a federated share was created successfully" : "Adicionar servidor automaticamente uma vez que um compartilhamento federado foi criado com êxito", - "Trusted servers" : "Servidores confiáveis", "+ Add trusted server" : "+Adicionar servidores confiáveis", "Trusted server" : "Servidores confiáveis", - "Add" : "Adicionar" + "Add" : "Adicionar", + "Federation" : "Federação" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/federation/l10n/pt_BR.json b/apps/federation/l10n/pt_BR.json index c44d3949602..d9f1ef6147b 100644 --- a/apps/federation/l10n/pt_BR.json +++ b/apps/federation/l10n/pt_BR.json @@ -3,12 +3,12 @@ "Server is already in the list of trusted servers." : "O servidor já está na lista de servidores confiáveis.", "No server to federate with found" : "Nenhum servidor encontrado para federar", "Could not add server" : "Não foi possível adicionar servidor", - "Federation" : "Federação", + "Trusted servers" : "Servidores confiáveis", "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." : "Federação permite que você conecte com outros servidores confiáveis para trocar o diretório do usuário. Por exemplo, este atributo será usado para completar automaticamente usuários externos para compartilhamento federado.", "Add server automatically once a federated share was created successfully" : "Adicionar servidor automaticamente uma vez que um compartilhamento federado foi criado com êxito", - "Trusted servers" : "Servidores confiáveis", "+ Add trusted server" : "+Adicionar servidores confiáveis", "Trusted server" : "Servidores confiáveis", - "Add" : "Adicionar" + "Add" : "Adicionar", + "Federation" : "Federação" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/federation/l10n/ru.js b/apps/federation/l10n/ru.js index dbd4a572e2a..5e3c36f176a 100644 --- a/apps/federation/l10n/ru.js +++ b/apps/federation/l10n/ru.js @@ -5,12 +5,12 @@ OC.L10N.register( "Server is already in the list of trusted servers." : "Сервер уже есть в списке доверенных серверов.", "No server to federate with found" : "Сервер для объединения не найден", "Could not add server" : "Не удалось добавить сервер", - "Federation" : "Федерация", + "Trusted servers" : "Доверенные серверы", "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." : "Федерация серверов позволит Вам подключиться к другим доверенным серверам для обмена каталогами пользователей. Это будет использовано, например, для автодополнения имён пользователей при открытии федеративного общего доступа.", "Add server automatically once a federated share was created successfully" : "Добавить сервер автоматически после успешного создания федеративного ресурса общего доступа", - "Trusted servers" : "Доверенные серверы", "+ Add trusted server" : "+ Добавить доверенный сервер", "Trusted server" : "Доверенный сервер", - "Add" : "Добавить" + "Add" : "Добавить", + "Federation" : "Федерация" }, "nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"); diff --git a/apps/federation/l10n/ru.json b/apps/federation/l10n/ru.json index a0d30c5b965..cf988061685 100644 --- a/apps/federation/l10n/ru.json +++ b/apps/federation/l10n/ru.json @@ -3,12 +3,12 @@ "Server is already in the list of trusted servers." : "Сервер уже есть в списке доверенных серверов.", "No server to federate with found" : "Сервер для объединения не найден", "Could not add server" : "Не удалось добавить сервер", - "Federation" : "Федерация", + "Trusted servers" : "Доверенные серверы", "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." : "Федерация серверов позволит Вам подключиться к другим доверенным серверам для обмена каталогами пользователей. Это будет использовано, например, для автодополнения имён пользователей при открытии федеративного общего доступа.", "Add server automatically once a federated share was created successfully" : "Добавить сервер автоматически после успешного создания федеративного ресурса общего доступа", - "Trusted servers" : "Доверенные серверы", "+ Add trusted server" : "+ Добавить доверенный сервер", "Trusted server" : "Доверенный сервер", - "Add" : "Добавить" + "Add" : "Добавить", + "Federation" : "Федерация" },"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);" }
\ No newline at end of file diff --git a/apps/federation/l10n/sl.js b/apps/federation/l10n/sl.js index c020bc2fa51..c89639b505e 100644 --- a/apps/federation/l10n/sl.js +++ b/apps/federation/l10n/sl.js @@ -4,12 +4,12 @@ OC.L10N.register( "Added to the list of trusted servers" : "Dodano na spisek varnih strežnikov", "Server is already in the list of trusted servers." : "Strežnik je že na seznamu potrjenih strežnikov.", "Could not add server" : "Ni mogoče dodati strežnika.", - "Federation" : "Zvezni oblaki", + "Trusted servers" : "Zanesljivi strežniki", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federiranje omogoča povezovanje z drugimi varnimi strežniki in izmenjavo spiska uporabnikov. Primer je samodejno dopolnjevanje zunanjih uporabnikov pri federacijski souporabi.", "Add server automatically once a federated share was created successfully" : "Strežnik dodaj samodejno, ko je povezava zveznega oblaka uspešno ustvarjena", - "Trusted servers" : "Zanesljivi strežniki", "+ Add trusted server" : "+ Dodaj zanesljiv strežnik", "Trusted server" : "Zanesljiv strežnik", - "Add" : "Dodaj" + "Add" : "Dodaj", + "Federation" : "Zvezni oblaki" }, "nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"); diff --git a/apps/federation/l10n/sl.json b/apps/federation/l10n/sl.json index f8c696a6f52..3c3ee449df0 100644 --- a/apps/federation/l10n/sl.json +++ b/apps/federation/l10n/sl.json @@ -2,12 +2,12 @@ "Added to the list of trusted servers" : "Dodano na spisek varnih strežnikov", "Server is already in the list of trusted servers." : "Strežnik je že na seznamu potrjenih strežnikov.", "Could not add server" : "Ni mogoče dodati strežnika.", - "Federation" : "Zvezni oblaki", + "Trusted servers" : "Zanesljivi strežniki", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federiranje omogoča povezovanje z drugimi varnimi strežniki in izmenjavo spiska uporabnikov. Primer je samodejno dopolnjevanje zunanjih uporabnikov pri federacijski souporabi.", "Add server automatically once a federated share was created successfully" : "Strežnik dodaj samodejno, ko je povezava zveznega oblaka uspešno ustvarjena", - "Trusted servers" : "Zanesljivi strežniki", "+ Add trusted server" : "+ Dodaj zanesljiv strežnik", "Trusted server" : "Zanesljiv strežnik", - "Add" : "Dodaj" + "Add" : "Dodaj", + "Federation" : "Zvezni oblaki" },"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);" }
\ No newline at end of file diff --git a/apps/federation/l10n/sq.js b/apps/federation/l10n/sq.js index 33e5817f631..dc4aeb8b7f7 100644 --- a/apps/federation/l10n/sq.js +++ b/apps/federation/l10n/sq.js @@ -5,12 +5,12 @@ OC.L10N.register( "Server is already in the list of trusted servers." : "Server-i është tashmë në listën e server-ave të besuar.", "No server to federate with found" : "Nuk u gjet server me të cilin mund të federohej", "Could not add server" : "Server-i s’u shtua dot", - "Federation" : "Federim", + "Trusted servers" : "Servera të besuar", "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." : "Federimi ju lejon të lidheni me server-a të tjerë për të shkëmbyer direktorinë e përdoruesit. Për shembull, kjo mund të përdoret për të parapërgatitur vendet e punës për përdorues të jashtëm në shpërndarjen e federuar.", "Add server automatically once a federated share was created successfully" : "Shtoje vetvetiu server-in pasi të jetë krijuar me sukses një ndarje e federuar", - "Trusted servers" : "Servera të besuar", "+ Add trusted server" : "+ Shto server-a të besuar", "Trusted server" : "Server i besuar", - "Add" : "Shto" + "Add" : "Shto", + "Federation" : "Federim" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federation/l10n/sq.json b/apps/federation/l10n/sq.json index fa3dfacd4d7..5ed93828d67 100644 --- a/apps/federation/l10n/sq.json +++ b/apps/federation/l10n/sq.json @@ -3,12 +3,12 @@ "Server is already in the list of trusted servers." : "Server-i është tashmë në listën e server-ave të besuar.", "No server to federate with found" : "Nuk u gjet server me të cilin mund të federohej", "Could not add server" : "Server-i s’u shtua dot", - "Federation" : "Federim", + "Trusted servers" : "Servera të besuar", "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." : "Federimi ju lejon të lidheni me server-a të tjerë për të shkëmbyer direktorinë e përdoruesit. Për shembull, kjo mund të përdoret për të parapërgatitur vendet e punës për përdorues të jashtëm në shpërndarjen e federuar.", "Add server automatically once a federated share was created successfully" : "Shtoje vetvetiu server-in pasi të jetë krijuar me sukses një ndarje e federuar", - "Trusted servers" : "Servera të besuar", "+ Add trusted server" : "+ Shto server-a të besuar", "Trusted server" : "Server i besuar", - "Add" : "Shto" + "Add" : "Shto", + "Federation" : "Federim" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federation/l10n/sv.js b/apps/federation/l10n/sv.js index 109a0cac20b..fa6ccf86dc9 100644 --- a/apps/federation/l10n/sv.js +++ b/apps/federation/l10n/sv.js @@ -5,12 +5,12 @@ OC.L10N.register( "Server is already in the list of trusted servers." : "Servern finns redan i listan", "No server to federate with found" : "Ingen server att federera med hittades", "Could not add server" : "Kunde inte lägga till server", - "Federation" : "Federerad delning", + "Trusted servers" : "Betrodda servrar", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federation låter dig ansluta till andra betrodda servrar för att utbyta användarinformation. Till exempel kommer detta användas för att auto-komplettera externa användare för federerad delning.", "Add server automatically once a federated share was created successfully" : "Lägg till servern automatiskt så fort en lyckad federerad delning skapats", - "Trusted servers" : "Betrodda servrar", "+ Add trusted server" : "+ Lägg till betrodd server", "Trusted server" : "Betrodd server", - "Add" : "Lägg till" + "Add" : "Lägg till", + "Federation" : "Federerad delning" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federation/l10n/sv.json b/apps/federation/l10n/sv.json index 8cfdb3213cd..ead6b203f7f 100644 --- a/apps/federation/l10n/sv.json +++ b/apps/federation/l10n/sv.json @@ -3,12 +3,12 @@ "Server is already in the list of trusted servers." : "Servern finns redan i listan", "No server to federate with found" : "Ingen server att federera med hittades", "Could not add server" : "Kunde inte lägga till server", - "Federation" : "Federerad delning", + "Trusted servers" : "Betrodda servrar", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federation låter dig ansluta till andra betrodda servrar för att utbyta användarinformation. Till exempel kommer detta användas för att auto-komplettera externa användare för federerad delning.", "Add server automatically once a federated share was created successfully" : "Lägg till servern automatiskt så fort en lyckad federerad delning skapats", - "Trusted servers" : "Betrodda servrar", "+ Add trusted server" : "+ Lägg till betrodd server", "Trusted server" : "Betrodd server", - "Add" : "Lägg till" + "Add" : "Lägg till", + "Federation" : "Federerad delning" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federation/l10n/tr.js b/apps/federation/l10n/tr.js index d66974eec5b..dd959026d0f 100644 --- a/apps/federation/l10n/tr.js +++ b/apps/federation/l10n/tr.js @@ -5,12 +5,12 @@ OC.L10N.register( "Server is already in the list of trusted servers." : "Sunucu zaten güvenilen sunucu listesine eklenmiş.", "No server to federate with found" : "Birleştirilecek bir sunucu bulunamadı", "Could not add server" : "Sunucu eklenemedi", - "Federation" : "Birleşim", + "Trusted servers" : "Güvenilen sunucular", "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şmiş paylaşım eklendiğinde sunucu otomatik olarak eklensin", - "Trusted servers" : "Güvenilen sunucular", "+ Add trusted server" : "+ Güvenilir sunucu ekle", "Trusted server" : "Güvenilen sunucu", - "Add" : "Ekle" + "Add" : "Ekle", + "Federation" : "Birleşim" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/federation/l10n/tr.json b/apps/federation/l10n/tr.json index 797b0dd0b83..eb7971df9bb 100644 --- a/apps/federation/l10n/tr.json +++ b/apps/federation/l10n/tr.json @@ -3,12 +3,12 @@ "Server is already in the list of trusted servers." : "Sunucu zaten güvenilen sunucu listesine eklenmiş.", "No server to federate with found" : "Birleştirilecek bir sunucu bulunamadı", "Could not add server" : "Sunucu eklenemedi", - "Federation" : "Birleşim", + "Trusted servers" : "Güvenilen sunucular", "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şmiş paylaşım eklendiğinde sunucu otomatik olarak eklensin", - "Trusted servers" : "Güvenilen sunucular", "+ Add trusted server" : "+ Güvenilir sunucu ekle", "Trusted server" : "Güvenilen sunucu", - "Add" : "Ekle" + "Add" : "Ekle", + "Federation" : "Birleşim" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/federation/l10n/zh_CN.js b/apps/federation/l10n/zh_CN.js index d3753188afc..bb30e2cb86d 100644 --- a/apps/federation/l10n/zh_CN.js +++ b/apps/federation/l10n/zh_CN.js @@ -5,12 +5,12 @@ OC.L10N.register( "Server is already in the list of trusted servers." : "服务器在线,并已成功添加至信任服务器列表。", "No server to federate with found" : "没有找到联盟服务器", "Could not add server" : "无法添加服务器", - "Federation" : "联合", + "Trusted servers" : "可信任服务器", "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." : "联盟允许您与其他受信任的服务器连接并交换用户目录。 例如,这将用于自动完成外部用户组成共享联盟。", "Add server automatically once a federated share was created successfully" : "一旦联合共享创建成功自动添加服务器", - "Trusted servers" : "可信任服务器", "+ Add trusted server" : "+ 添加可信任服务器", "Trusted server" : "可信任服务器", - "Add" : "添加" + "Add" : "添加", + "Federation" : "联合" }, "nplurals=1; plural=0;"); diff --git a/apps/federation/l10n/zh_CN.json b/apps/federation/l10n/zh_CN.json index 3c6a518a59c..919c572ba34 100644 --- a/apps/federation/l10n/zh_CN.json +++ b/apps/federation/l10n/zh_CN.json @@ -3,12 +3,12 @@ "Server is already in the list of trusted servers." : "服务器在线,并已成功添加至信任服务器列表。", "No server to federate with found" : "没有找到联盟服务器", "Could not add server" : "无法添加服务器", - "Federation" : "联合", + "Trusted servers" : "可信任服务器", "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." : "联盟允许您与其他受信任的服务器连接并交换用户目录。 例如,这将用于自动完成外部用户组成共享联盟。", "Add server automatically once a federated share was created successfully" : "一旦联合共享创建成功自动添加服务器", - "Trusted servers" : "可信任服务器", "+ Add trusted server" : "+ 添加可信任服务器", "Trusted server" : "可信任服务器", - "Add" : "添加" + "Add" : "添加", + "Federation" : "联合" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 0fcb10a21ee..db85caf65fa 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -327,6 +327,7 @@ this.$fileList.on('click','td.filename>a.name, td.filesize, td.date', _.bind(this._onClickFile, this)); this.$fileList.on('change', 'td.filename>.selectCheckBox', _.bind(this._onClickFileCheckbox, this)); + this.$el.on('show', _.bind(this._onShow, this)); this.$el.on('urlChanged', _.bind(this._onUrlChanged, this)); this.$el.find('.select-all').click(_.bind(this._onClickSelectAll, this)); this.$el.find('.download').click(_.bind(this._onClickDownloadSelected, this)); @@ -553,6 +554,13 @@ }, /** + * Event handler when leaving previously hidden state + */ + _onShow: function(e) { + this.reload(); + }, + + /** * Event handler for when the URL changed */ _onUrlChanged: function(e) { @@ -1061,6 +1069,8 @@ return OC.MimeType.getIconUrl('dir-shared'); } else if (fileInfo.mountType === 'external-root') { return OC.MimeType.getIconUrl('dir-external'); + } else if (fileInfo.mountType !== undefined && fileInfo.mountType !== '') { + return OC.MimeType.getIconUrl('dir-' + fileInfo.mountType); } return OC.MimeType.getIconUrl('dir'); } diff --git a/apps/files/js/gotoplugin.js b/apps/files/js/gotoplugin.js index 69ec64b0266..4793420ed2d 100644 --- a/apps/files/js/gotoplugin.js +++ b/apps/files/js/gotoplugin.js @@ -40,6 +40,7 @@ type: OCA.Files.FileActions.TYPE_DROPDOWN, actionHandler: function (fileName, context) { var fileModel = context.fileInfoModel; + OC.Apps.hideAppSidebar($('.detailsView')); OCA.Files.App.setActiveView('files', {silent: true}); OCA.Files.App.fileList.changeDirectory(fileModel.get('path'), true, true).then(function() { OCA.Files.App.fileList.scrollTo(fileModel.get('name')); diff --git a/apps/files/l10n/da.js b/apps/files/l10n/da.js index c098efa20c9..3b46f7a4e6c 100644 --- a/apps/files/l10n/da.js +++ b/apps/files/l10n/da.js @@ -52,6 +52,7 @@ OC.L10N.register( "_%n folder_::_%n folders_" : ["%n mappe","%n mapper"], "_%n file_::_%n files_" : ["%n fil","%n filer"], "{dirs} and {files}" : "{dirs} og {files}", + "_including %n hidden_::_including %n hidden_" : ["%n skujlte inkluderet","%n skujlte inkluderet"], "You don’t have permission to upload or create files here" : "Du har ikke tilladelse til at uploade eller oprette filer her", "_Uploading %n file_::_Uploading %n files_" : ["Uploader %n fil","Uploader %n filer"], "New" : "Ny", @@ -120,6 +121,7 @@ OC.L10N.register( "Select all" : "Vælg alle", "Upload too large" : "Upload er for stor", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Filerne, du prøver at uploade, er større end den maksimale størrelse for fil-upload på denne server.", + "No favorites yet" : "Ingen foretrukne endnu", "Files and folders you mark as favorite will show up here" : "Filer og mapper som du har markeret som foretrukne, vil blive vist her", "Shared with you" : "Delt med dig", "Shared with others" : "Delt med andre", @@ -128,8 +130,11 @@ OC.L10N.register( "Deleted files" : "Slettede filer", "Text file" : "Tekstfil", "New text file.txt" : "Ny tekst file.txt", + "_{hours}:{minutes}:{seconds} hour left_::_{hours}:{minutes}:{seconds} hours left_" : ["{hours}:{minutes}:{seconds} time tilbage","{hours}:{minutes}:{seconds} timer tilbage"], "{hours}:{minutes}h" : "{hours}:{minutes}t", + "_{minutes}:{seconds} minute left_::_{minutes}:{seconds} minutes left_" : ["{minutes}:{seconds} minut tilbage","{minutes}:{seconds} minutter tilbage"], "{minutes}:{seconds}m" : "{minutes}:{seconds}m", + "_{seconds} second left_::_{seconds} seconds left_" : ["{seconds} sekund tilbage","{seconds} sekunder tilbage"], "{seconds}s" : "{seconds}s", "Any moment now..." : "Når som helst...", "Soon..." : "Snart...", diff --git a/apps/files/l10n/da.json b/apps/files/l10n/da.json index b74dd4deaa9..e7a93be7897 100644 --- a/apps/files/l10n/da.json +++ b/apps/files/l10n/da.json @@ -50,6 +50,7 @@ "_%n folder_::_%n folders_" : ["%n mappe","%n mapper"], "_%n file_::_%n files_" : ["%n fil","%n filer"], "{dirs} and {files}" : "{dirs} og {files}", + "_including %n hidden_::_including %n hidden_" : ["%n skujlte inkluderet","%n skujlte inkluderet"], "You don’t have permission to upload or create files here" : "Du har ikke tilladelse til at uploade eller oprette filer her", "_Uploading %n file_::_Uploading %n files_" : ["Uploader %n fil","Uploader %n filer"], "New" : "Ny", @@ -118,6 +119,7 @@ "Select all" : "Vælg alle", "Upload too large" : "Upload er for stor", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Filerne, du prøver at uploade, er større end den maksimale størrelse for fil-upload på denne server.", + "No favorites yet" : "Ingen foretrukne endnu", "Files and folders you mark as favorite will show up here" : "Filer og mapper som du har markeret som foretrukne, vil blive vist her", "Shared with you" : "Delt med dig", "Shared with others" : "Delt med andre", @@ -126,8 +128,11 @@ "Deleted files" : "Slettede filer", "Text file" : "Tekstfil", "New text file.txt" : "Ny tekst file.txt", + "_{hours}:{minutes}:{seconds} hour left_::_{hours}:{minutes}:{seconds} hours left_" : ["{hours}:{minutes}:{seconds} time tilbage","{hours}:{minutes}:{seconds} timer tilbage"], "{hours}:{minutes}h" : "{hours}:{minutes}t", + "_{minutes}:{seconds} minute left_::_{minutes}:{seconds} minutes left_" : ["{minutes}:{seconds} minut tilbage","{minutes}:{seconds} minutter tilbage"], "{minutes}:{seconds}m" : "{minutes}:{seconds}m", + "_{seconds} second left_::_{seconds} seconds left_" : ["{seconds} sekund tilbage","{seconds} sekunder tilbage"], "{seconds}s" : "{seconds}s", "Any moment now..." : "Når som helst...", "Soon..." : "Snart...", diff --git a/apps/files/l10n/is.js b/apps/files/l10n/is.js index ed0c1f66f28..7431287a389 100644 --- a/apps/files/l10n/is.js +++ b/apps/files/l10n/is.js @@ -69,6 +69,7 @@ OC.L10N.register( "_%n byte_::_%n bytes_" : ["%n bæti","%n bæti"], "Favorited" : "Sett í eftirlæti", "Favorite" : "Eftirlæti", + "Copy direct link (only works for users who have access to this file/folder)" : "Afrita beinan tengil (virkar bara fyrir notendur sem eiga aðgang að þessari skrá/möppu)", "Folder" : "Mappa", "New folder" : "Ný mappa", "Upload" : "Senda inn", @@ -120,6 +121,7 @@ OC.L10N.register( "Select all" : "Velja allt", "Upload too large" : "Innsend skrá er of stór", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Skrárnar sem þú ert að senda inn eru stærri en hámarks innsendingarstærð á þessum netþjóni.", + "No favorites yet" : "Engin eftirlæti ennþá", "Files and folders you mark as favorite will show up here" : "Skrár og möppur sem þú merkir sem eftirlæti birtast hér", "Shared with you" : "Deilt með þér", "Shared with others" : "Deilt með öðrum", diff --git a/apps/files/l10n/is.json b/apps/files/l10n/is.json index e96f38480e7..6ef9d3e8656 100644 --- a/apps/files/l10n/is.json +++ b/apps/files/l10n/is.json @@ -67,6 +67,7 @@ "_%n byte_::_%n bytes_" : ["%n bæti","%n bæti"], "Favorited" : "Sett í eftirlæti", "Favorite" : "Eftirlæti", + "Copy direct link (only works for users who have access to this file/folder)" : "Afrita beinan tengil (virkar bara fyrir notendur sem eiga aðgang að þessari skrá/möppu)", "Folder" : "Mappa", "New folder" : "Ný mappa", "Upload" : "Senda inn", @@ -118,6 +119,7 @@ "Select all" : "Velja allt", "Upload too large" : "Innsend skrá er of stór", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Skrárnar sem þú ert að senda inn eru stærri en hámarks innsendingarstærð á þessum netþjóni.", + "No favorites yet" : "Engin eftirlæti ennþá", "Files and folders you mark as favorite will show up here" : "Skrár og möppur sem þú merkir sem eftirlæti birtast hér", "Shared with you" : "Deilt með þér", "Shared with others" : "Deilt með öðrum", diff --git a/apps/files/l10n/pl.js b/apps/files/l10n/pl.js index 2f89e7956e1..62860215eca 100644 --- a/apps/files/l10n/pl.js +++ b/apps/files/l10n/pl.js @@ -121,6 +121,7 @@ OC.L10N.register( "Select all" : "Wybierz wszystko", "Upload too large" : "Ładowany plik jest za duży", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Pliki, które próbujesz przesłać, przekraczają maksymalną dopuszczalną wielkość.", + "No favorites yet" : "Brak jeszcze ulubionych", "Files and folders you mark as favorite will show up here" : "Pliki i katalogi, które oznaczysz jako ulubione wyświetlą się tutaj", "Shared with you" : "Udostępnione dla Ciebie", "Shared with others" : "Udostępnione przez Ciebie", diff --git a/apps/files/l10n/pl.json b/apps/files/l10n/pl.json index 65022458e40..ab3d703873e 100644 --- a/apps/files/l10n/pl.json +++ b/apps/files/l10n/pl.json @@ -119,6 +119,7 @@ "Select all" : "Wybierz wszystko", "Upload too large" : "Ładowany plik jest za duży", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Pliki, które próbujesz przesłać, przekraczają maksymalną dopuszczalną wielkość.", + "No favorites yet" : "Brak jeszcze ulubionych", "Files and folders you mark as favorite will show up here" : "Pliki i katalogi, które oznaczysz jako ulubione wyświetlą się tutaj", "Shared with you" : "Udostępnione dla Ciebie", "Shared with others" : "Udostępnione przez Ciebie", diff --git a/apps/files/l10n/sv.js b/apps/files/l10n/sv.js index c4e1f10bcb1..d5e36728d73 100644 --- a/apps/files/l10n/sv.js +++ b/apps/files/l10n/sv.js @@ -58,6 +58,7 @@ OC.L10N.register( "New" : "Ny", "\"{name}\" is an invalid file name." : "\"{name}\" är ett ogiltligt filnamn.", "File name cannot be empty." : "Filnamn kan inte vara tomt.", + "\"{name}\" is not an allowed filetype" : "\"{name}\" är inte en tillåten filtyp", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Lagring av {owner} är full, filer kan inte uppdateras eller synkroniseras längre!", "Your storage is full, files can not be updated or synced anymore!" : "Ditt lagringsutrymme är fullt, filer kan inte längre uppdateras eller synkroniseras!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Lagring av {owner} är nästan full ({usedSpacePercent}%)", @@ -68,6 +69,7 @@ OC.L10N.register( "_%n byte_::_%n bytes_" : ["%n bytes","%n bytes"], "Favorited" : "Favoriserad", "Favorite" : "Favorit", + "Copy direct link (only works for users who have access to this file/folder)" : "Kopiera direktlänk (fungerar endast för de användare som har tillgång till denna fil eller mapp)", "Folder" : "Mapp", "New folder" : "Ny mapp", "Upload" : "Ladda upp", @@ -119,6 +121,7 @@ OC.L10N.register( "Select all" : "Välj allt", "Upload too large" : "För stor uppladdning", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Filerna du försöker ladda upp överstiger den maximala storleken för filöverföringar på servern.", + "No favorites yet" : "Inga favoriter ännu", "Files and folders you mark as favorite will show up here" : "Filer och mappar markerade som favoriter kommer att visas här", "Shared with you" : "Delad med dig", "Shared with others" : "Delad med andra", diff --git a/apps/files/l10n/sv.json b/apps/files/l10n/sv.json index 620f52574cd..50ac86a0d85 100644 --- a/apps/files/l10n/sv.json +++ b/apps/files/l10n/sv.json @@ -56,6 +56,7 @@ "New" : "Ny", "\"{name}\" is an invalid file name." : "\"{name}\" är ett ogiltligt filnamn.", "File name cannot be empty." : "Filnamn kan inte vara tomt.", + "\"{name}\" is not an allowed filetype" : "\"{name}\" är inte en tillåten filtyp", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Lagring av {owner} är full, filer kan inte uppdateras eller synkroniseras längre!", "Your storage is full, files can not be updated or synced anymore!" : "Ditt lagringsutrymme är fullt, filer kan inte längre uppdateras eller synkroniseras!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Lagring av {owner} är nästan full ({usedSpacePercent}%)", @@ -66,6 +67,7 @@ "_%n byte_::_%n bytes_" : ["%n bytes","%n bytes"], "Favorited" : "Favoriserad", "Favorite" : "Favorit", + "Copy direct link (only works for users who have access to this file/folder)" : "Kopiera direktlänk (fungerar endast för de användare som har tillgång till denna fil eller mapp)", "Folder" : "Mapp", "New folder" : "Ny mapp", "Upload" : "Ladda upp", @@ -117,6 +119,7 @@ "Select all" : "Välj allt", "Upload too large" : "För stor uppladdning", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Filerna du försöker ladda upp överstiger den maximala storleken för filöverföringar på servern.", + "No favorites yet" : "Inga favoriter ännu", "Files and folders you mark as favorite will show up here" : "Filer och mappar markerade som favoriter kommer att visas här", "Shared with you" : "Delad med dig", "Shared with others" : "Delad med andra", diff --git a/apps/files/lib/Helper.php b/apps/files/lib/Helper.php index c3d80957913..d2cebce5ddc 100644 --- a/apps/files/lib/Helper.php +++ b/apps/files/lib/Helper.php @@ -157,12 +157,9 @@ class Helper { $entry['isShareMountPoint'] = $i['is_share_mount_point']; } $mountType = null; - if ($i->isShared()) { - $mountType = 'shared'; - } else if ($i->isMounted()) { - $mountType = 'external'; - } - if ($mountType !== null) { + $mount = $i->getMountPoint(); + $mountType = $mount->getMountType(); + if ($mountType !== '') { if ($i->getInternalPath() === '') { $mountType .= '-root'; } diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js index ee73914f166..934aa054fb6 100644 --- a/apps/files/tests/js/filelistSpec.js +++ b/apps/files/tests/js/filelistSpec.js @@ -1507,6 +1507,12 @@ describe('OCA.Files.FileList tests', function() { $('#app-content-files').trigger(new $.Event('urlChanged', {view: 'files', dir: '/somedir'})); expect(fileList.getCurrentDirectory()).toEqual('/somedir'); }); + it('reloads the list when leaving hidden state', function() { + var reloadStub = sinon.stub(fileList, 'reload'); + $('#app-content-files').trigger(new $.Event('show')); + expect(reloadStub.calledOnce).toEqual(true); + reloadStub.restore(); + }); it('refreshes breadcrumb after update', function() { var setDirSpy = sinon.spy(fileList.breadcrumb, 'setDirectory'); fileList.changeDirectory('/anothersubdir'); diff --git a/apps/files_external/appinfo/app.php b/apps/files_external/appinfo/app.php index 925596198cf..ddf609129f6 100644 --- a/apps/files_external/appinfo/app.php +++ b/apps/files_external/appinfo/app.php @@ -44,7 +44,7 @@ $appContainer = \OC_Mount_Config::$app->getContainer(); 'appname' => 'files_external', 'script' => 'list.php', 'order' => 30, - 'name' => $l->t('External storage'), + 'name' => $l->t('External storages'), ]; }); diff --git a/apps/files_external/css/settings.css b/apps/files_external/css/settings.css index 38e497eebe6..bac89e26b09 100644 --- a/apps/files_external/css/settings.css +++ b/apps/files_external/css/settings.css @@ -1,6 +1,5 @@ #global_credentials { padding: 0 30px; - margin-bottom: 0px; } #files_external { @@ -115,3 +114,7 @@ td.mountPoint, td.backend { width:160px; } #externalStorage .mountOptionsDropdown { margin-right: 40px; } + +.nav-icon-external-storage { + background-image: url('../img/app-dark.svg?v=1'); +} diff --git a/apps/files_external/l10n/cs.js b/apps/files_external/l10n/cs.js index 5808d649dd3..7af05992729 100644 --- a/apps/files_external/l10n/cs.js +++ b/apps/files_external/l10n/cs.js @@ -6,6 +6,7 @@ OC.L10N.register( "Please provide a valid app key and secret." : "Zadejte prosím platný klíč a tajné heslo aplikace.", "Step 1 failed. Exception: %s" : "Selhal krok 1. Výjimka: %s", "Step 2 failed. Exception: %s" : "Selhal krok 2. Výjimka: %s", + "External storages" : "Externí úložiště", "External storage" : "Externí úložiště", "Dropbox App Configuration" : "Nastavení aplikace Dropbox", "Google Drive App Configuration" : "Nastavení aplikace Disk Google", @@ -38,6 +39,7 @@ OC.L10N.register( "Credentials saved" : "Přihlašovací údaje uloženy", "Credentials saving failed" : "Uložení přihlašovacích údajů selhalo", "Credentials required" : "Vyžadovány přihlašovací údaje", + "Storage with ID \"%d\" not found" : "Úložiště s ID \"%d\" nebylo nalezeno", "Invalid backend or authentication mechanism class" : "Neplatný backend nebo třída ověřovacího mechanismu", "Invalid mount point" : "Neplatný přípojný bod", "Objectstore forbidden" : "Úložiště objektů zakázáno", @@ -48,6 +50,7 @@ OC.L10N.register( "Unsatisfied authentication mechanism parameters" : "Neuspokojivé parametry ověřovacího mechanismu", "Insufficient data: %s" : "Nedostatečná data: %s", "%s" : "%s", + "Storage with ID \"%d\" is not user editable" : "Úložiště s ID \"%d\" není uživatelksky upravitelné", "Access key" : "Přístupový klíč", "Secret key" : "Tajný klíč", "Builtin" : "Zabudované", @@ -100,7 +103,6 @@ OC.L10N.register( "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Jméno služby", "Request timeout (seconds)" : "Čas vypršení požadavku (sekundy)", - "External storages" : "Externí úložiště", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "cURL podpora v PHP není povolena nebo nainstalována. Není možné připojit %s. Prosím požádejte svého správce systému ať ji nainstaluje.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "FTP podpora v PHP není povolena nebo nainstalována. Není možné připojit %s. Prosím požádejte svého správce systému ať ji nainstaluje.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" není instalováno. Není možné připojit %s. Prosím požádejte svého správce systému o instalaci.", diff --git a/apps/files_external/l10n/cs.json b/apps/files_external/l10n/cs.json index 4fdbaaf822f..a4dd108ab39 100644 --- a/apps/files_external/l10n/cs.json +++ b/apps/files_external/l10n/cs.json @@ -4,6 +4,7 @@ "Please provide a valid app key and secret." : "Zadejte prosím platný klíč a tajné heslo aplikace.", "Step 1 failed. Exception: %s" : "Selhal krok 1. Výjimka: %s", "Step 2 failed. Exception: %s" : "Selhal krok 2. Výjimka: %s", + "External storages" : "Externí úložiště", "External storage" : "Externí úložiště", "Dropbox App Configuration" : "Nastavení aplikace Dropbox", "Google Drive App Configuration" : "Nastavení aplikace Disk Google", @@ -36,6 +37,7 @@ "Credentials saved" : "Přihlašovací údaje uloženy", "Credentials saving failed" : "Uložení přihlašovacích údajů selhalo", "Credentials required" : "Vyžadovány přihlašovací údaje", + "Storage with ID \"%d\" not found" : "Úložiště s ID \"%d\" nebylo nalezeno", "Invalid backend or authentication mechanism class" : "Neplatný backend nebo třída ověřovacího mechanismu", "Invalid mount point" : "Neplatný přípojný bod", "Objectstore forbidden" : "Úložiště objektů zakázáno", @@ -46,6 +48,7 @@ "Unsatisfied authentication mechanism parameters" : "Neuspokojivé parametry ověřovacího mechanismu", "Insufficient data: %s" : "Nedostatečná data: %s", "%s" : "%s", + "Storage with ID \"%d\" is not user editable" : "Úložiště s ID \"%d\" není uživatelksky upravitelné", "Access key" : "Přístupový klíč", "Secret key" : "Tajný klíč", "Builtin" : "Zabudované", @@ -98,7 +101,6 @@ "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Jméno služby", "Request timeout (seconds)" : "Čas vypršení požadavku (sekundy)", - "External storages" : "Externí úložiště", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "cURL podpora v PHP není povolena nebo nainstalována. Není možné připojit %s. Prosím požádejte svého správce systému ať ji nainstaluje.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "FTP podpora v PHP není povolena nebo nainstalována. Není možné připojit %s. Prosím požádejte svého správce systému ať ji nainstaluje.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" není instalováno. Není možné připojit %s. Prosím požádejte svého správce systému o instalaci.", diff --git a/apps/files_external/l10n/de.js b/apps/files_external/l10n/de.js index 2b157e979f8..17054839f9a 100644 --- a/apps/files_external/l10n/de.js +++ b/apps/files_external/l10n/de.js @@ -6,6 +6,7 @@ OC.L10N.register( "Please provide a valid app key and secret." : "Bitte einen gültigen Anwendungsschlüssel mit Sicherheitsschlüssel eingeben.", "Step 1 failed. Exception: %s" : "Schritt 1 fehlgeschlagen. Fehlermeldung: %s", "Step 2 failed. Exception: %s" : "Schritt 2 fehlgeschlagen. Fehlermeldung: %s", + "External storages" : "Externer Speicher", "External storage" : "Externer Speicher", "Dropbox App Configuration" : "Dropbox-App Konfiguration", "Google Drive App Configuration" : "Google Drive - App Konfiguration", @@ -102,7 +103,6 @@ OC.L10N.register( "OpenStack Object Storage" : "Openstack-Objektspeicher", "Service name" : "Service Name", "Request timeout (seconds)" : "Anfrage -Timeout ( Sekunden)", - "External storages" : "Externer Speicher", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Die cURL-Unterstützung von PHP ist deaktiviert oder nicht installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie Sich zur Installation an den Systemadministrator.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Die FTP-Unterstützung von PHP ist deaktiviert oder nicht installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie Sich zur Installation an den Systemadministrator.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" ist nicht installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie Sich zur Installation an den Systemadministrator.", diff --git a/apps/files_external/l10n/de.json b/apps/files_external/l10n/de.json index fb21d169690..8e8a0bf87e2 100644 --- a/apps/files_external/l10n/de.json +++ b/apps/files_external/l10n/de.json @@ -4,6 +4,7 @@ "Please provide a valid app key and secret." : "Bitte einen gültigen Anwendungsschlüssel mit Sicherheitsschlüssel eingeben.", "Step 1 failed. Exception: %s" : "Schritt 1 fehlgeschlagen. Fehlermeldung: %s", "Step 2 failed. Exception: %s" : "Schritt 2 fehlgeschlagen. Fehlermeldung: %s", + "External storages" : "Externer Speicher", "External storage" : "Externer Speicher", "Dropbox App Configuration" : "Dropbox-App Konfiguration", "Google Drive App Configuration" : "Google Drive - App Konfiguration", @@ -100,7 +101,6 @@ "OpenStack Object Storage" : "Openstack-Objektspeicher", "Service name" : "Service Name", "Request timeout (seconds)" : "Anfrage -Timeout ( Sekunden)", - "External storages" : "Externer Speicher", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Die cURL-Unterstützung von PHP ist deaktiviert oder nicht installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie Sich zur Installation an den Systemadministrator.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Die FTP-Unterstützung von PHP ist deaktiviert oder nicht installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie Sich zur Installation an den Systemadministrator.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" ist nicht installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie Sich zur Installation an den Systemadministrator.", diff --git a/apps/files_external/l10n/de_DE.js b/apps/files_external/l10n/de_DE.js index d60ea5c3750..31abc0d21a6 100644 --- a/apps/files_external/l10n/de_DE.js +++ b/apps/files_external/l10n/de_DE.js @@ -6,6 +6,7 @@ OC.L10N.register( "Please provide a valid app key and secret." : "Bitte tragen Sie einen gültigen App-Key mit Secret ein.", "Step 1 failed. Exception: %s" : "Schritt 1 fehlgeschlagen. Fehlermeldung: %s", "Step 2 failed. Exception: %s" : "Schritt 2 fehlgeschlagen. Fehlermeldung: %s", + "External storages" : "Externer Speicher", "External storage" : "Externer Speicher", "Dropbox App Configuration" : "Dropbox-App Konfiguration", "Google Drive App Configuration" : "Google Drive - App Konfiguration", @@ -102,7 +103,6 @@ OC.L10N.register( "OpenStack Object Storage" : "Openstack-Objektspeicher", "Service name" : "Name des Dienstes", "Request timeout (seconds)" : "Anfrage-Zeitüberschreitung (Sekunden)", - "External storages" : "Externer Speicher", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Die cURL-Unterstützung von PHP ist nicht aktiviert oder installiert. %s konnte nicht hinzugefügt werden Bitte wenden Sie sich bezüglich Aktivierung oder Installation an Ihren Administrator.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Die FTP Unterstützung von PHP ist nicht aktiviert oder installiert. %s konnte nicht hinzugefügt werden Bitte wenden Sie sich bezüglich Aktivierung oder Installation an Ihren Administrator.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" ist nicht installiert. %s konnte nicht hinzugefügt werden. Bitte wenden Sie sich zur Installation an Ihren Administrator.", diff --git a/apps/files_external/l10n/de_DE.json b/apps/files_external/l10n/de_DE.json index 09e5558bba7..a2ea06f1f19 100644 --- a/apps/files_external/l10n/de_DE.json +++ b/apps/files_external/l10n/de_DE.json @@ -4,6 +4,7 @@ "Please provide a valid app key and secret." : "Bitte tragen Sie einen gültigen App-Key mit Secret ein.", "Step 1 failed. Exception: %s" : "Schritt 1 fehlgeschlagen. Fehlermeldung: %s", "Step 2 failed. Exception: %s" : "Schritt 2 fehlgeschlagen. Fehlermeldung: %s", + "External storages" : "Externer Speicher", "External storage" : "Externer Speicher", "Dropbox App Configuration" : "Dropbox-App Konfiguration", "Google Drive App Configuration" : "Google Drive - App Konfiguration", @@ -100,7 +101,6 @@ "OpenStack Object Storage" : "Openstack-Objektspeicher", "Service name" : "Name des Dienstes", "Request timeout (seconds)" : "Anfrage-Zeitüberschreitung (Sekunden)", - "External storages" : "Externer Speicher", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Die cURL-Unterstützung von PHP ist nicht aktiviert oder installiert. %s konnte nicht hinzugefügt werden Bitte wenden Sie sich bezüglich Aktivierung oder Installation an Ihren Administrator.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Die FTP Unterstützung von PHP ist nicht aktiviert oder installiert. %s konnte nicht hinzugefügt werden Bitte wenden Sie sich bezüglich Aktivierung oder Installation an Ihren Administrator.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" ist nicht installiert. %s konnte nicht hinzugefügt werden. Bitte wenden Sie sich zur Installation an Ihren Administrator.", diff --git a/apps/files_external/l10n/el.js b/apps/files_external/l10n/el.js index fbd000cf388..be945df3026 100644 --- a/apps/files_external/l10n/el.js +++ b/apps/files_external/l10n/el.js @@ -6,6 +6,7 @@ OC.L10N.register( "Please provide a valid app key and secret." : "Παρακαλούμε δώστε έγκυρο κλειδί εφαρμογής και μυστικό.", "Step 1 failed. Exception: %s" : "Το βήμα 1 απέτυχε. Εξαίρεση: %s", "Step 2 failed. Exception: %s" : "Το βήμα 2 απέτυχε. Εξαίρεση: %s", + "External storages" : "Εξωτερική αποθήκευση", "External storage" : "Εξωτερική αποθήκευση", "Dropbox App Configuration" : "Ρυθμίσεις εφαρμογής Dropbox", "Google Drive App Configuration" : "Ρυθμίσεις εφαρμογής Google Drive", @@ -101,7 +102,6 @@ OC.L10N.register( "OpenStack Object Storage" : "Αποθήκη αντικειμένων OpenStack", "Service name" : "Όνομα υπηρεσίας", "Request timeout (seconds)" : "Χρονικό όριο αιτήματος (δευτερόλεπτα)", - "External storages" : "Εξωτερική αποθήκευση", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Η cURL υποστήριξη στην PHP δεν είναι ενεργοποιημένη. Η προσάρτηση του %s δεν είναι δυνατή. Παρακαλούμε ζητήστε από τον διαχειριστή του συστήματός σας να το εγκαταστήσει. ", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Η FTP υποστήριξη στην PHP δεν είναι ενεργοποιημένη ή εγκατεστημένη. Η προσάρτηση του %s δεν είναι δυνατή. Παρακαλούμε ζητήστε τον διαχειριστή του συστήματός σας να το εγκατασταστήσει. ", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" δεν είναι εγκατεστημένο. Η προσάρτηση του %s δεν είναι δυνατή. Παρακαλούμε ζητήστε τον διαχειριστή του συστήματός σας να το εγκαταστήσει. ", diff --git a/apps/files_external/l10n/el.json b/apps/files_external/l10n/el.json index d7df7428a41..0ddbc13e172 100644 --- a/apps/files_external/l10n/el.json +++ b/apps/files_external/l10n/el.json @@ -4,6 +4,7 @@ "Please provide a valid app key and secret." : "Παρακαλούμε δώστε έγκυρο κλειδί εφαρμογής και μυστικό.", "Step 1 failed. Exception: %s" : "Το βήμα 1 απέτυχε. Εξαίρεση: %s", "Step 2 failed. Exception: %s" : "Το βήμα 2 απέτυχε. Εξαίρεση: %s", + "External storages" : "Εξωτερική αποθήκευση", "External storage" : "Εξωτερική αποθήκευση", "Dropbox App Configuration" : "Ρυθμίσεις εφαρμογής Dropbox", "Google Drive App Configuration" : "Ρυθμίσεις εφαρμογής Google Drive", @@ -99,7 +100,6 @@ "OpenStack Object Storage" : "Αποθήκη αντικειμένων OpenStack", "Service name" : "Όνομα υπηρεσίας", "Request timeout (seconds)" : "Χρονικό όριο αιτήματος (δευτερόλεπτα)", - "External storages" : "Εξωτερική αποθήκευση", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Η cURL υποστήριξη στην PHP δεν είναι ενεργοποιημένη. Η προσάρτηση του %s δεν είναι δυνατή. Παρακαλούμε ζητήστε από τον διαχειριστή του συστήματός σας να το εγκαταστήσει. ", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Η FTP υποστήριξη στην PHP δεν είναι ενεργοποιημένη ή εγκατεστημένη. Η προσάρτηση του %s δεν είναι δυνατή. Παρακαλούμε ζητήστε τον διαχειριστή του συστήματός σας να το εγκατασταστήσει. ", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" δεν είναι εγκατεστημένο. Η προσάρτηση του %s δεν είναι δυνατή. Παρακαλούμε ζητήστε τον διαχειριστή του συστήματός σας να το εγκαταστήσει. ", diff --git a/apps/files_external/l10n/es.js b/apps/files_external/l10n/es.js index 06df3f93827..91a0abcf988 100644 --- a/apps/files_external/l10n/es.js +++ b/apps/files_external/l10n/es.js @@ -6,6 +6,7 @@ OC.L10N.register( "Please provide a valid app key and secret." : "Por favor facilite una clave de app y una clave secreta válidas.", "Step 1 failed. Exception: %s" : "El paso 1 falló. Excepción: %s", "Step 2 failed. Exception: %s" : "El paso 2 falló. Excepción: %s", + "External storages" : "Almacenamientos externos", "External storage" : "Almacenamiento externo", "Dropbox App Configuration" : "Configuración de la app de Dropbox", "Google Drive App Configuration" : "Configuración de la app de Google Drive", @@ -100,7 +101,6 @@ OC.L10N.register( "OpenStack Object Storage" : "Almacenamiento de objeto OpenStack", "Service name" : "Nombre del servicio", "Request timeout (seconds)" : "Tiempo agotado para petición (segundos)", - "External storages" : "Almacenamientos externos", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El soporte de cURL en PHP no está activado o instalado. No se puede montar %s. Pídale al administrador del sistema que lo instale.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El soporte para FTP desde PHP no esta habilitado o instalado. Montar el %s no ha sido posible. Por favor consulta al administrador de tu sistema para que lo instale.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" no está instalado. El montaje de %s no es posible. Por favor, pregunte a su administrador del sistema para instalarlo.", diff --git a/apps/files_external/l10n/es.json b/apps/files_external/l10n/es.json index d7044228dee..ce2532a02cc 100644 --- a/apps/files_external/l10n/es.json +++ b/apps/files_external/l10n/es.json @@ -4,6 +4,7 @@ "Please provide a valid app key and secret." : "Por favor facilite una clave de app y una clave secreta válidas.", "Step 1 failed. Exception: %s" : "El paso 1 falló. Excepción: %s", "Step 2 failed. Exception: %s" : "El paso 2 falló. Excepción: %s", + "External storages" : "Almacenamientos externos", "External storage" : "Almacenamiento externo", "Dropbox App Configuration" : "Configuración de la app de Dropbox", "Google Drive App Configuration" : "Configuración de la app de Google Drive", @@ -98,7 +99,6 @@ "OpenStack Object Storage" : "Almacenamiento de objeto OpenStack", "Service name" : "Nombre del servicio", "Request timeout (seconds)" : "Tiempo agotado para petición (segundos)", - "External storages" : "Almacenamientos externos", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El soporte de cURL en PHP no está activado o instalado. No se puede montar %s. Pídale al administrador del sistema que lo instale.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El soporte para FTP desde PHP no esta habilitado o instalado. Montar el %s no ha sido posible. Por favor consulta al administrador de tu sistema para que lo instale.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" no está instalado. El montaje de %s no es posible. Por favor, pregunte a su administrador del sistema para instalarlo.", diff --git a/apps/files_external/l10n/es_MX.js b/apps/files_external/l10n/es_MX.js index 9ce0ae70113..c25448eda80 100644 --- a/apps/files_external/l10n/es_MX.js +++ b/apps/files_external/l10n/es_MX.js @@ -6,6 +6,7 @@ OC.L10N.register( "Please provide a valid app key and secret." : "Favor de proporcionar una llave de aplicación y secreto válidos.", "Step 1 failed. Exception: %s" : "Falla en el paso 1: Excepción %s", "Step 2 failed. Exception: %s" : "Paso 2 falló. Excepción: %s", + "External storages" : "Almacenamiento externo", "External storage" : "Almacenamiento externo", "Dropbox App Configuration" : "Configuración de la aplicación Dropbox", "Google Drive App Configuration" : "Configuración de Aplicación Google Drive", @@ -102,7 +103,6 @@ OC.L10N.register( "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Nombre del servicio", "Request timeout (seconds)" : "Tiemo de vida de la solicitud (segudos)", - "External storages" : "Almacenamiento externo", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El soporte para cURL en PHP no se encuentra habilitado o instalado. El montaje de %s no es posible. Favor de solicitar a su administador su instalación. ", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El soporte para FTP en PHP no se encuentra habilitado o instalado. El montaje de %s no es posible. Favor de solicitar a su administador su instalación. ", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" no se encuentra instalado. El montaje de %s no es posible. Favor de solicitar a su administrador su instalación. ", diff --git a/apps/files_external/l10n/es_MX.json b/apps/files_external/l10n/es_MX.json index 8e2d1966d9d..9f3a451349e 100644 --- a/apps/files_external/l10n/es_MX.json +++ b/apps/files_external/l10n/es_MX.json @@ -4,6 +4,7 @@ "Please provide a valid app key and secret." : "Favor de proporcionar una llave de aplicación y secreto válidos.", "Step 1 failed. Exception: %s" : "Falla en el paso 1: Excepción %s", "Step 2 failed. Exception: %s" : "Paso 2 falló. Excepción: %s", + "External storages" : "Almacenamiento externo", "External storage" : "Almacenamiento externo", "Dropbox App Configuration" : "Configuración de la aplicación Dropbox", "Google Drive App Configuration" : "Configuración de Aplicación Google Drive", @@ -100,7 +101,6 @@ "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Nombre del servicio", "Request timeout (seconds)" : "Tiemo de vida de la solicitud (segudos)", - "External storages" : "Almacenamiento externo", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El soporte para cURL en PHP no se encuentra habilitado o instalado. El montaje de %s no es posible. Favor de solicitar a su administador su instalación. ", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El soporte para FTP en PHP no se encuentra habilitado o instalado. El montaje de %s no es posible. Favor de solicitar a su administador su instalación. ", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" no se encuentra instalado. El montaje de %s no es posible. Favor de solicitar a su administrador su instalación. ", diff --git a/apps/files_external/l10n/fi.js b/apps/files_external/l10n/fi.js index 56c0a6def74..5b1a6449af6 100644 --- a/apps/files_external/l10n/fi.js +++ b/apps/files_external/l10n/fi.js @@ -6,6 +6,7 @@ OC.L10N.register( "Please provide a valid app key and secret." : "Sovellusavain ja salaus ovat virheelliset", "Step 1 failed. Exception: %s" : "Vaihe 1 epäonnistui. Poikkeus: %s", "Step 2 failed. Exception: %s" : "Vaihe 2 epäonnistui. Poikkeus: %s", + "External storages" : "Ulkoiset tallennustilat", "External storage" : "Ulkoinen tallennustila", "Dropbox App Configuration" : "Dropbox-sovelluksen määritys", "Google Drive App Configuration" : "Google Drive -sovelluksen määritys", @@ -102,7 +103,6 @@ OC.L10N.register( "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Palvelun nimi", "Request timeout (seconds)" : "Pyynnön aikakatkaisu (sekunneissa)", - "External storages" : "Ulkoiset tallennustilat", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "cULR tuki PHPsta ei ole aktivoitu tai asennettu. Kohteen %s liittäminen ei ole mahdollista. Ota yhteyttä järjestelmänvalvojaan asentaaksesi puuttuvan osan.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "FTP tuki PHPsta ei ole aktivoitu tai asennettu. Kohteen %s liittäminen ei ole mahdollista. Ota yhteyttä järjestelmänvalvojaan asentaaksesi puuttuvan osan.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää asentamaan puuttuva kohde.", diff --git a/apps/files_external/l10n/fi.json b/apps/files_external/l10n/fi.json index 41d488409d2..1a5c2872c5b 100644 --- a/apps/files_external/l10n/fi.json +++ b/apps/files_external/l10n/fi.json @@ -4,6 +4,7 @@ "Please provide a valid app key and secret." : "Sovellusavain ja salaus ovat virheelliset", "Step 1 failed. Exception: %s" : "Vaihe 1 epäonnistui. Poikkeus: %s", "Step 2 failed. Exception: %s" : "Vaihe 2 epäonnistui. Poikkeus: %s", + "External storages" : "Ulkoiset tallennustilat", "External storage" : "Ulkoinen tallennustila", "Dropbox App Configuration" : "Dropbox-sovelluksen määritys", "Google Drive App Configuration" : "Google Drive -sovelluksen määritys", @@ -100,7 +101,6 @@ "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Palvelun nimi", "Request timeout (seconds)" : "Pyynnön aikakatkaisu (sekunneissa)", - "External storages" : "Ulkoiset tallennustilat", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "cULR tuki PHPsta ei ole aktivoitu tai asennettu. Kohteen %s liittäminen ei ole mahdollista. Ota yhteyttä järjestelmänvalvojaan asentaaksesi puuttuvan osan.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "FTP tuki PHPsta ei ole aktivoitu tai asennettu. Kohteen %s liittäminen ei ole mahdollista. Ota yhteyttä järjestelmänvalvojaan asentaaksesi puuttuvan osan.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää asentamaan puuttuva kohde.", diff --git a/apps/files_external/l10n/fr.js b/apps/files_external/l10n/fr.js index 80c3ff58a04..7ecc68b0096 100644 --- a/apps/files_external/l10n/fr.js +++ b/apps/files_external/l10n/fr.js @@ -6,6 +6,7 @@ OC.L10N.register( "Please provide a valid app key and secret." : "Veuillez fournir une clé d'application et un mot de passe valides.", "Step 1 failed. Exception: %s" : "L’étape 1 a échoué. Erreur : %s", "Step 2 failed. Exception: %s" : "L’étape 2 a échoué. Erreur : %s", + "External storages" : "Stockages externe", "External storage" : "Stockage externe", "Dropbox App Configuration" : "Configuration de l'application Dropbox", "Google Drive App Configuration" : "Configuration de l'application Google Drive", @@ -102,7 +103,6 @@ OC.L10N.register( "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Nom du service", "Request timeout (seconds)" : "Délai d'expiration des requêtes (en secondes)", - "External storages" : "Stockages externe", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Le support de cURL dans PHP n'est pas activé ou installé. Le montage de %s n'est pas possible. Veuillez demander à votre administrateur système de l'installer.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Le support du FTP dans PHP n'est pas activé ou installé. Le montage de %s n'est pas possible. Merci de demander à votre administrateur de l'installer.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" n'est pas installé. Le montage de %s n'est pas possible. Merci de demander à l'administrateur système de l'installer.", diff --git a/apps/files_external/l10n/fr.json b/apps/files_external/l10n/fr.json index 7f19073c228..057f5e0420a 100644 --- a/apps/files_external/l10n/fr.json +++ b/apps/files_external/l10n/fr.json @@ -4,6 +4,7 @@ "Please provide a valid app key and secret." : "Veuillez fournir une clé d'application et un mot de passe valides.", "Step 1 failed. Exception: %s" : "L’étape 1 a échoué. Erreur : %s", "Step 2 failed. Exception: %s" : "L’étape 2 a échoué. Erreur : %s", + "External storages" : "Stockages externe", "External storage" : "Stockage externe", "Dropbox App Configuration" : "Configuration de l'application Dropbox", "Google Drive App Configuration" : "Configuration de l'application Google Drive", @@ -100,7 +101,6 @@ "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Nom du service", "Request timeout (seconds)" : "Délai d'expiration des requêtes (en secondes)", - "External storages" : "Stockages externe", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Le support de cURL dans PHP n'est pas activé ou installé. Le montage de %s n'est pas possible. Veuillez demander à votre administrateur système de l'installer.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Le support du FTP dans PHP n'est pas activé ou installé. Le montage de %s n'est pas possible. Merci de demander à votre administrateur de l'installer.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" n'est pas installé. Le montage de %s n'est pas possible. Merci de demander à l'administrateur système de l'installer.", diff --git a/apps/files_external/l10n/hu.js b/apps/files_external/l10n/hu.js index 0329d216743..d25aacc4867 100644 --- a/apps/files_external/l10n/hu.js +++ b/apps/files_external/l10n/hu.js @@ -6,6 +6,7 @@ OC.L10N.register( "Please provide a valid app key and secret." : "Kérlek adj meg egy érvényes alkalmazás kulcsot és jelszót.", "Step 1 failed. Exception: %s" : "1. lépés sikertelen. Kivétel: %s", "Step 2 failed. Exception: %s" : "2. lépés sikertelen. Kivétel: %s", + "External storages" : "Külső tárolók", "External storage" : "Külső tárolók", "Dropbox App Configuration" : "Dropbox alkalmazás beállítás", "Google Drive App Configuration" : "Google Drive alkalmazás beállítás", @@ -93,7 +94,6 @@ OC.L10N.register( "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Szolgáltatás neve", "Request timeout (seconds)" : "Időtúllépés (másodperc)", - "External storages" : "Külső tárolók", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "A cURL támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Az FTP támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "%s nincs telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.", diff --git a/apps/files_external/l10n/hu.json b/apps/files_external/l10n/hu.json index 4b6a6a25a48..483f59a4156 100644 --- a/apps/files_external/l10n/hu.json +++ b/apps/files_external/l10n/hu.json @@ -4,6 +4,7 @@ "Please provide a valid app key and secret." : "Kérlek adj meg egy érvényes alkalmazás kulcsot és jelszót.", "Step 1 failed. Exception: %s" : "1. lépés sikertelen. Kivétel: %s", "Step 2 failed. Exception: %s" : "2. lépés sikertelen. Kivétel: %s", + "External storages" : "Külső tárolók", "External storage" : "Külső tárolók", "Dropbox App Configuration" : "Dropbox alkalmazás beállítás", "Google Drive App Configuration" : "Google Drive alkalmazás beállítás", @@ -91,7 +92,6 @@ "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Szolgáltatás neve", "Request timeout (seconds)" : "Időtúllépés (másodperc)", - "External storages" : "Külső tárolók", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "A cURL támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Az FTP támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "%s nincs telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.", diff --git a/apps/files_external/l10n/id.js b/apps/files_external/l10n/id.js index 3247a96e000..071d4862025 100644 --- a/apps/files_external/l10n/id.js +++ b/apps/files_external/l10n/id.js @@ -6,6 +6,7 @@ OC.L10N.register( "Please provide a valid app key and secret." : "Silakan berikan kunci dan kerahasiaan aplikasi yang benar.", "Step 1 failed. Exception: %s" : "Langkah 1 gagal. Kecuali: %s", "Step 2 failed. Exception: %s" : "Langkah 2 gagal. Kecuali: %s", + "External storages" : "Penyimpanan Eksternal", "External storage" : "Penyimpanan eksternal", "Dropbox App Configuration" : "Konfigurasi Aplikasi Dropbox", "Google Drive App Configuration" : "Konfigurasi Aplikasi Google Drive", @@ -100,7 +101,6 @@ OC.L10N.register( "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Nama layanan", "Request timeout (seconds)" : "Minta waktu habis (detik)", - "External storages" : "Penyimpanan Eksternal", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Dukungan cURL di PHP tidak diaktifkan atau terpasang. Mengaitkan %s tidak memungkinkan. Harap tanyakan administrator sistem anda untuk memasangnya.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Dukungan FTP di PHP tidak diaktifkan atau terpasang. Mengaitkan %s tidak memungkinkan. Harap tanya administrator sistem anda untuk memasangnya.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" tidak terpasang. Mengaitkan %s tidak memungkinkan. Harap tanya administrator sistem anda untuk memasangnya.", diff --git a/apps/files_external/l10n/id.json b/apps/files_external/l10n/id.json index 3326954fb98..941781a838a 100644 --- a/apps/files_external/l10n/id.json +++ b/apps/files_external/l10n/id.json @@ -4,6 +4,7 @@ "Please provide a valid app key and secret." : "Silakan berikan kunci dan kerahasiaan aplikasi yang benar.", "Step 1 failed. Exception: %s" : "Langkah 1 gagal. Kecuali: %s", "Step 2 failed. Exception: %s" : "Langkah 2 gagal. Kecuali: %s", + "External storages" : "Penyimpanan Eksternal", "External storage" : "Penyimpanan eksternal", "Dropbox App Configuration" : "Konfigurasi Aplikasi Dropbox", "Google Drive App Configuration" : "Konfigurasi Aplikasi Google Drive", @@ -98,7 +99,6 @@ "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Nama layanan", "Request timeout (seconds)" : "Minta waktu habis (detik)", - "External storages" : "Penyimpanan Eksternal", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Dukungan cURL di PHP tidak diaktifkan atau terpasang. Mengaitkan %s tidak memungkinkan. Harap tanyakan administrator sistem anda untuk memasangnya.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Dukungan FTP di PHP tidak diaktifkan atau terpasang. Mengaitkan %s tidak memungkinkan. Harap tanya administrator sistem anda untuk memasangnya.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" tidak terpasang. Mengaitkan %s tidak memungkinkan. Harap tanya administrator sistem anda untuk memasangnya.", diff --git a/apps/files_external/l10n/is.js b/apps/files_external/l10n/is.js index e492c49d198..970dc094bac 100644 --- a/apps/files_external/l10n/is.js +++ b/apps/files_external/l10n/is.js @@ -6,6 +6,7 @@ OC.L10N.register( "Please provide a valid app key and secret." : "Settu inn gildan forritslykil og leynilykil (secret).", "Step 1 failed. Exception: %s" : "Skref 1 mistókst. Undantekning: %s", "Step 2 failed. Exception: %s" : "Skref 2 mistókst. Undantekning: %s", + "External storages" : "Utanáliggjandi gagnageymslur", "External storage" : "Ytri gagnageymsla", "Dropbox App Configuration" : "Uppsetning Dropbox forrits", "Google Drive App Configuration" : "Uppsetning Google Drive forrits", @@ -38,6 +39,7 @@ OC.L10N.register( "Credentials saved" : "Auðkenni vistuð", "Credentials saving failed" : "Vistun auðkenna tókst ekki", "Credentials required" : "Auðkenna krafist", + "Storage with ID \"%d\" not found" : "Geymsla með auðkennið '%d' fannst ekki", "Invalid backend or authentication mechanism class" : "Ógildur flokkur bakenda eða auðkenningartækni", "Invalid mount point" : "Ógildur tengipunktur", "Objectstore forbidden" : "Hlutageymsla (objectstore) bönnuð", @@ -48,6 +50,7 @@ OC.L10N.register( "Unsatisfied authentication mechanism parameters" : "Óuppfyllt viðföng auðkenningartækni", "Insufficient data: %s" : "Ónóg gögn: %s", "%s" : "%s", + "Storage with ID \"%d\" is not user editable" : "Geymslan með auðkennið '%d' er ekki breytanleg af notanda", "Access key" : "Aðgangslykill", "Secret key" : "Leynilykill", "Builtin" : "Innbyggt", @@ -100,7 +103,6 @@ OC.L10N.register( "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Heiti á þjónustu", "Request timeout (seconds)" : "Tímamörk á beiðni (sekúndur)", - "External storages" : "Utanáliggjandi gagnageymslur", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Stuðningur við cURL í PHP er ekki virkjaður eða ekki uppsettur. Tenging %s í skráakerfi er ekki möguleg. Biddu kerfisstjórann þinn um að setja þetta upp.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Stuðningur við FTP í PHP er ekki virkjaður eða ekki uppsettur. Tenging %s í skráakerfi er ekki möguleg. Biddu kerfisstjórann þinn um að setja þetta upp.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" er ekki uppsett. Tenging %s í skráakerfi er ekki möguleg. Biddu kerfisstjórann þinn um að setja þetta upp.", diff --git a/apps/files_external/l10n/is.json b/apps/files_external/l10n/is.json index d250b3151a1..375053e0a4d 100644 --- a/apps/files_external/l10n/is.json +++ b/apps/files_external/l10n/is.json @@ -4,6 +4,7 @@ "Please provide a valid app key and secret." : "Settu inn gildan forritslykil og leynilykil (secret).", "Step 1 failed. Exception: %s" : "Skref 1 mistókst. Undantekning: %s", "Step 2 failed. Exception: %s" : "Skref 2 mistókst. Undantekning: %s", + "External storages" : "Utanáliggjandi gagnageymslur", "External storage" : "Ytri gagnageymsla", "Dropbox App Configuration" : "Uppsetning Dropbox forrits", "Google Drive App Configuration" : "Uppsetning Google Drive forrits", @@ -36,6 +37,7 @@ "Credentials saved" : "Auðkenni vistuð", "Credentials saving failed" : "Vistun auðkenna tókst ekki", "Credentials required" : "Auðkenna krafist", + "Storage with ID \"%d\" not found" : "Geymsla með auðkennið '%d' fannst ekki", "Invalid backend or authentication mechanism class" : "Ógildur flokkur bakenda eða auðkenningartækni", "Invalid mount point" : "Ógildur tengipunktur", "Objectstore forbidden" : "Hlutageymsla (objectstore) bönnuð", @@ -46,6 +48,7 @@ "Unsatisfied authentication mechanism parameters" : "Óuppfyllt viðföng auðkenningartækni", "Insufficient data: %s" : "Ónóg gögn: %s", "%s" : "%s", + "Storage with ID \"%d\" is not user editable" : "Geymslan með auðkennið '%d' er ekki breytanleg af notanda", "Access key" : "Aðgangslykill", "Secret key" : "Leynilykill", "Builtin" : "Innbyggt", @@ -98,7 +101,6 @@ "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Heiti á þjónustu", "Request timeout (seconds)" : "Tímamörk á beiðni (sekúndur)", - "External storages" : "Utanáliggjandi gagnageymslur", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Stuðningur við cURL í PHP er ekki virkjaður eða ekki uppsettur. Tenging %s í skráakerfi er ekki möguleg. Biddu kerfisstjórann þinn um að setja þetta upp.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Stuðningur við FTP í PHP er ekki virkjaður eða ekki uppsettur. Tenging %s í skráakerfi er ekki möguleg. Biddu kerfisstjórann þinn um að setja þetta upp.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" er ekki uppsett. Tenging %s í skráakerfi er ekki möguleg. Biddu kerfisstjórann þinn um að setja þetta upp.", diff --git a/apps/files_external/l10n/it.js b/apps/files_external/l10n/it.js index eedb78f0368..ecc49b7413a 100644 --- a/apps/files_external/l10n/it.js +++ b/apps/files_external/l10n/it.js @@ -6,6 +6,7 @@ OC.L10N.register( "Please provide a valid app key and secret." : "Fornisci chiave e segreto dell'applicazione validi.", "Step 1 failed. Exception: %s" : "Fase 1 non riuscita. Eccezione: %s", "Step 2 failed. Exception: %s" : "Fase 2 non riuscita. Eccezione: %s", + "External storages" : "Archiviazioni esterne", "External storage" : "Archiviazione esterna", "Dropbox App Configuration" : "Configurazione applicazione Dropbox", "Google Drive App Configuration" : "Configurazione applicazione Google Drive", @@ -38,6 +39,7 @@ OC.L10N.register( "Credentials saved" : "Credenziali salvate", "Credentials saving failed" : "Salvataggio delle credenziali non riuscito", "Credentials required" : "Credenziali richieste", + "Storage with ID \"%d\" not found" : "Archiviazione con ID \"%d\" non trovata", "Invalid backend or authentication mechanism class" : "Motore o classe del meccanismo di autenticazione non valido", "Invalid mount point" : "Punto di mount non valido", "Objectstore forbidden" : "Objectstore vietato", @@ -48,6 +50,7 @@ OC.L10N.register( "Unsatisfied authentication mechanism parameters" : "Parametri del meccanismo di autenticazione non soddisfatti", "Insufficient data: %s" : "Dati insufficienti: %s", "%s" : "%s", + "Storage with ID \"%d\" is not user editable" : "Archiviazione con ID \"%d\" non modificabile dall'utente", "Access key" : "Chiave di accesso", "Secret key" : "Chiave segreta", "Builtin" : "Integrata", @@ -100,7 +103,6 @@ OC.L10N.register( "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Nome servizio", "Request timeout (seconds)" : "Tempo massimo della richiesta (secondi)", - "External storages" : "Archiviazioni esterne", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Il supporto cURL di PHP non è abilitato o installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Il supporto FTP in PHP non è abilitato o installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" non è installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.", diff --git a/apps/files_external/l10n/it.json b/apps/files_external/l10n/it.json index eae20972e47..532d18a281b 100644 --- a/apps/files_external/l10n/it.json +++ b/apps/files_external/l10n/it.json @@ -4,6 +4,7 @@ "Please provide a valid app key and secret." : "Fornisci chiave e segreto dell'applicazione validi.", "Step 1 failed. Exception: %s" : "Fase 1 non riuscita. Eccezione: %s", "Step 2 failed. Exception: %s" : "Fase 2 non riuscita. Eccezione: %s", + "External storages" : "Archiviazioni esterne", "External storage" : "Archiviazione esterna", "Dropbox App Configuration" : "Configurazione applicazione Dropbox", "Google Drive App Configuration" : "Configurazione applicazione Google Drive", @@ -36,6 +37,7 @@ "Credentials saved" : "Credenziali salvate", "Credentials saving failed" : "Salvataggio delle credenziali non riuscito", "Credentials required" : "Credenziali richieste", + "Storage with ID \"%d\" not found" : "Archiviazione con ID \"%d\" non trovata", "Invalid backend or authentication mechanism class" : "Motore o classe del meccanismo di autenticazione non valido", "Invalid mount point" : "Punto di mount non valido", "Objectstore forbidden" : "Objectstore vietato", @@ -46,6 +48,7 @@ "Unsatisfied authentication mechanism parameters" : "Parametri del meccanismo di autenticazione non soddisfatti", "Insufficient data: %s" : "Dati insufficienti: %s", "%s" : "%s", + "Storage with ID \"%d\" is not user editable" : "Archiviazione con ID \"%d\" non modificabile dall'utente", "Access key" : "Chiave di accesso", "Secret key" : "Chiave segreta", "Builtin" : "Integrata", @@ -98,7 +101,6 @@ "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Nome servizio", "Request timeout (seconds)" : "Tempo massimo della richiesta (secondi)", - "External storages" : "Archiviazioni esterne", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Il supporto cURL di PHP non è abilitato o installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Il supporto FTP in PHP non è abilitato o installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" non è installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.", diff --git a/apps/files_external/l10n/ja.js b/apps/files_external/l10n/ja.js index fa923be83c7..0223d60fc64 100644 --- a/apps/files_external/l10n/ja.js +++ b/apps/files_external/l10n/ja.js @@ -6,6 +6,7 @@ OC.L10N.register( "Please provide a valid app key and secret." : "有効なアプリのキーとパスワードを入力してください。", "Step 1 failed. Exception: %s" : "ステップ 1 の実行に失敗しました。例外: %s", "Step 2 failed. Exception: %s" : "ステップ 2 の実行に失敗しました。例外: %s", + "External storages" : "外部ストレージ", "External storage" : "外部ストレージ", "Dropbox App Configuration" : "Dropbox アプリ設定", "Google Drive App Configuration" : "Google アプリ設定", @@ -100,7 +101,6 @@ OC.L10N.register( "OpenStack Object Storage" : "OpenStack ObjectStorage", "Service name" : "サービス名", "Request timeout (seconds)" : "リクエストがタイムアウトするまでの秒数", - "External storages" : "外部ストレージ", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "PHPでのcURLのサポートが有効になっていないか、インストールされていません。 %s のマウントは不可能です。システム管理者にインストールを依頼してください。", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "PHPのFTPサポートが有効になっていないか、インストールされていません。%s のマウントは不可能です。システム管理者にインストールを依頼してください。", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\"はインストールされていません。 %s のマウントは不可能です。システム管理者にインストールを依頼してください。", diff --git a/apps/files_external/l10n/ja.json b/apps/files_external/l10n/ja.json index d8b415df9c6..b80c3f3fddc 100644 --- a/apps/files_external/l10n/ja.json +++ b/apps/files_external/l10n/ja.json @@ -4,6 +4,7 @@ "Please provide a valid app key and secret." : "有効なアプリのキーとパスワードを入力してください。", "Step 1 failed. Exception: %s" : "ステップ 1 の実行に失敗しました。例外: %s", "Step 2 failed. Exception: %s" : "ステップ 2 の実行に失敗しました。例外: %s", + "External storages" : "外部ストレージ", "External storage" : "外部ストレージ", "Dropbox App Configuration" : "Dropbox アプリ設定", "Google Drive App Configuration" : "Google アプリ設定", @@ -98,7 +99,6 @@ "OpenStack Object Storage" : "OpenStack ObjectStorage", "Service name" : "サービス名", "Request timeout (seconds)" : "リクエストがタイムアウトするまでの秒数", - "External storages" : "外部ストレージ", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "PHPでのcURLのサポートが有効になっていないか、インストールされていません。 %s のマウントは不可能です。システム管理者にインストールを依頼してください。", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "PHPのFTPサポートが有効になっていないか、インストールされていません。%s のマウントは不可能です。システム管理者にインストールを依頼してください。", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\"はインストールされていません。 %s のマウントは不可能です。システム管理者にインストールを依頼してください。", diff --git a/apps/files_external/l10n/ko.js b/apps/files_external/l10n/ko.js index c0578979e22..ac0a4dda076 100644 --- a/apps/files_external/l10n/ko.js +++ b/apps/files_external/l10n/ko.js @@ -6,6 +6,7 @@ OC.L10N.register( "Please provide a valid app key and secret." : "올바른 앱 키와 비밀 값을 입력하십시오.", "Step 1 failed. Exception: %s" : "1단계 실패. 예외: %s", "Step 2 failed. Exception: %s" : "2단계 실패. 예외: %s", + "External storages" : "외부 저장소", "External storage" : "외부 저장소", "Dropbox App Configuration" : "Dropbox 앱 설정", "Google Drive App Configuration" : "구글 드라이브 앱 설정", @@ -97,7 +98,6 @@ OC.L10N.register( "OpenStack Object Storage" : "OpenStack 객체 저장소", "Service name" : "서비스 이름", "Request timeout (seconds)" : "요청 시간 제한(초)", - "External storages" : "외부 저장소", "No external storage configured" : "외부 저장소가 설정되지 않았음", "You can add external storages in the personal settings" : "개인 설정에서 외부 저장소를 추가할 수 있습니다", "Name" : "이름", diff --git a/apps/files_external/l10n/ko.json b/apps/files_external/l10n/ko.json index 7ae25545ffc..6b09b8076f6 100644 --- a/apps/files_external/l10n/ko.json +++ b/apps/files_external/l10n/ko.json @@ -4,6 +4,7 @@ "Please provide a valid app key and secret." : "올바른 앱 키와 비밀 값을 입력하십시오.", "Step 1 failed. Exception: %s" : "1단계 실패. 예외: %s", "Step 2 failed. Exception: %s" : "2단계 실패. 예외: %s", + "External storages" : "외부 저장소", "External storage" : "외부 저장소", "Dropbox App Configuration" : "Dropbox 앱 설정", "Google Drive App Configuration" : "구글 드라이브 앱 설정", @@ -95,7 +96,6 @@ "OpenStack Object Storage" : "OpenStack 객체 저장소", "Service name" : "서비스 이름", "Request timeout (seconds)" : "요청 시간 제한(초)", - "External storages" : "외부 저장소", "No external storage configured" : "외부 저장소가 설정되지 않았음", "You can add external storages in the personal settings" : "개인 설정에서 외부 저장소를 추가할 수 있습니다", "Name" : "이름", diff --git a/apps/files_external/l10n/nb.js b/apps/files_external/l10n/nb.js index 72c33458ae7..c9ba7b267da 100644 --- a/apps/files_external/l10n/nb.js +++ b/apps/files_external/l10n/nb.js @@ -6,6 +6,7 @@ OC.L10N.register( "Please provide a valid app key and secret." : "Vær vennlig å oppgi gyldig appnøkkel og hemmelighet.", "Step 1 failed. Exception: %s" : "Steg 1 mislyktes. Unntak: %s", "Step 2 failed. Exception: %s" : "Steg 2 mislyktes. Unntak: %s", + "External storages" : "Ekstern lagring", "External storage" : "Ekstern lagringsplass", "Dropbox App Configuration" : "Oppsett for Dropbox-program", "Google Drive App Configuration" : "Oppsett av Google Drive-program", @@ -30,7 +31,7 @@ OC.L10N.register( "There was an error with message: " : "Det oppstod en feil med melding: ", "External mount error" : "Ekstern oppkoblingsfeil", "external-storage" : "eksternlagring", - "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Klarte ikke å hente listen over oppkoblingspunkter for Windowsnettverks-disker: Tomt svar fra serveren", + "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Klarte ikke å hente listen over oppkoblingspunkter for Windowsnettverks-disker: Tomt svar fra tjeneren", "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Noen av de oppsatte eksterne oppkoblingspunktene er ikke tilkoblet. Klikk på de røde raden(e) for mer informasjon.", "Please enter the credentials for the {mount} mount" : "Legg inn påloggingsdetaljer for {mount}", "Username" : "Brukernavn", @@ -102,7 +103,6 @@ OC.L10N.register( "OpenStack Object Storage" : "OpenStack objektlager", "Service name" : "Tjenestenavn", "Request timeout (seconds)" : "Tidsavbrudd for forespørsel (sekunder)", - "External storages" : "Ekstern lagring", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> Støtte for cURL i PHP er ikke aktivert eller installert. Oppkobling av %s er ikke mulig. Be systemadministratoren om å installere det.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> FTP-støtte i PHP er ikke slått på eller installert. Kan ikke koble opp %s. Ta kontakt med systemadministratoren for å få dette installert.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" er ikke installert. Oppkobling av %s er ikke mulig. Vennligst spør din systemadministrator om å installere det.", diff --git a/apps/files_external/l10n/nb.json b/apps/files_external/l10n/nb.json index 7d36ac32850..f78d09efd4b 100644 --- a/apps/files_external/l10n/nb.json +++ b/apps/files_external/l10n/nb.json @@ -4,6 +4,7 @@ "Please provide a valid app key and secret." : "Vær vennlig å oppgi gyldig appnøkkel og hemmelighet.", "Step 1 failed. Exception: %s" : "Steg 1 mislyktes. Unntak: %s", "Step 2 failed. Exception: %s" : "Steg 2 mislyktes. Unntak: %s", + "External storages" : "Ekstern lagring", "External storage" : "Ekstern lagringsplass", "Dropbox App Configuration" : "Oppsett for Dropbox-program", "Google Drive App Configuration" : "Oppsett av Google Drive-program", @@ -28,7 +29,7 @@ "There was an error with message: " : "Det oppstod en feil med melding: ", "External mount error" : "Ekstern oppkoblingsfeil", "external-storage" : "eksternlagring", - "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Klarte ikke å hente listen over oppkoblingspunkter for Windowsnettverks-disker: Tomt svar fra serveren", + "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Klarte ikke å hente listen over oppkoblingspunkter for Windowsnettverks-disker: Tomt svar fra tjeneren", "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Noen av de oppsatte eksterne oppkoblingspunktene er ikke tilkoblet. Klikk på de røde raden(e) for mer informasjon.", "Please enter the credentials for the {mount} mount" : "Legg inn påloggingsdetaljer for {mount}", "Username" : "Brukernavn", @@ -100,7 +101,6 @@ "OpenStack Object Storage" : "OpenStack objektlager", "Service name" : "Tjenestenavn", "Request timeout (seconds)" : "Tidsavbrudd for forespørsel (sekunder)", - "External storages" : "Ekstern lagring", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> Støtte for cURL i PHP er ikke aktivert eller installert. Oppkobling av %s er ikke mulig. Be systemadministratoren om å installere det.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> FTP-støtte i PHP er ikke slått på eller installert. Kan ikke koble opp %s. Ta kontakt med systemadministratoren for å få dette installert.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" er ikke installert. Oppkobling av %s er ikke mulig. Vennligst spør din systemadministrator om å installere det.", diff --git a/apps/files_external/l10n/nl.js b/apps/files_external/l10n/nl.js index 733238772d2..15c579b9e7e 100644 --- a/apps/files_external/l10n/nl.js +++ b/apps/files_external/l10n/nl.js @@ -6,6 +6,7 @@ OC.L10N.register( "Please provide a valid app key and secret." : "Geef een geldige app sleutel en geheime sleutel op.", "Step 1 failed. Exception: %s" : "Stap 1 is mislukt. Uitzondering: %s", "Step 2 failed. Exception: %s" : "Stap 2 is mislukt. Uitzondering: %s", + "External storages" : "Externe opslag", "External storage" : "Externe opslag", "Dropbox App Configuration" : "Dropbox app configuratie", "Google Drive App Configuration" : "Google Drive app configuratie", @@ -102,7 +103,6 @@ OC.L10N.register( "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Servicenaam", "Request timeout (seconds)" : "Aanvraag time-out (seconds)", - "External storages" : "Externe opslag", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Curl ondersteuning in PHP is niet ingeschakeld of geïnstalleerd. Mounten van %s is niet mogelijk. Vraag je systeembeheerder dit te installeren.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "FTP ondersteuning in PHP is niet ingeschakeld of geïnstalleerd. Mounten van %s is niet mogelijk. Vraag je beheerder dit te installeren.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" is niet geïnstalleerd. Mounten van %s is niet mogelijk. Vraag je beheerder om dit te installeren.", diff --git a/apps/files_external/l10n/nl.json b/apps/files_external/l10n/nl.json index ff460235d40..5000b7d586c 100644 --- a/apps/files_external/l10n/nl.json +++ b/apps/files_external/l10n/nl.json @@ -4,6 +4,7 @@ "Please provide a valid app key and secret." : "Geef een geldige app sleutel en geheime sleutel op.", "Step 1 failed. Exception: %s" : "Stap 1 is mislukt. Uitzondering: %s", "Step 2 failed. Exception: %s" : "Stap 2 is mislukt. Uitzondering: %s", + "External storages" : "Externe opslag", "External storage" : "Externe opslag", "Dropbox App Configuration" : "Dropbox app configuratie", "Google Drive App Configuration" : "Google Drive app configuratie", @@ -100,7 +101,6 @@ "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Servicenaam", "Request timeout (seconds)" : "Aanvraag time-out (seconds)", - "External storages" : "Externe opslag", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Curl ondersteuning in PHP is niet ingeschakeld of geïnstalleerd. Mounten van %s is niet mogelijk. Vraag je systeembeheerder dit te installeren.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "FTP ondersteuning in PHP is niet ingeschakeld of geïnstalleerd. Mounten van %s is niet mogelijk. Vraag je beheerder dit te installeren.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" is niet geïnstalleerd. Mounten van %s is niet mogelijk. Vraag je beheerder om dit te installeren.", diff --git a/apps/files_external/l10n/pl.js b/apps/files_external/l10n/pl.js index d35058891e3..ecad2378aed 100644 --- a/apps/files_external/l10n/pl.js +++ b/apps/files_external/l10n/pl.js @@ -6,6 +6,7 @@ OC.L10N.register( "Please provide a valid app key and secret." : "Proszę podać prawidłowy klucz aplikacji i klucz sekretny.", "Step 1 failed. Exception: %s" : "Krok 1 błędny. Błąd: %s", "Step 2 failed. Exception: %s" : "Krok 2 błędny. Błąd: %s", + "External storages" : "Zewnętrzne zasoby dyskowe", "External storage" : "Zewnętrzne zasoby dyskowe", "Dropbox App Configuration" : "Konfiguracja aplikacji Dropbox", "Google Drive App Configuration" : "Konfiguracja aplikacji Google Drive", @@ -102,7 +103,6 @@ OC.L10N.register( "OpenStack Object Storage" : "Magazyn obiektów OpenStack", "Service name" : "Nazwa serwisu", "Request timeout (seconds)" : "Limit czasu żądania (sekundy)", - "External storages" : "Zewnętrzne zasoby dyskowe", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Obsługa cURL w PHP jest wyłączona lub nie jest zainstalowana. Zamontowanie %s jest niemożliwe. Proszę poprosić swojego administratora systemu, żeby ją zainstalował.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Obsługa FTP w PHP jest wyłączona lub nie jest zainstalowana. Zamontowanie %s jest niemożliwe. Proszę poprosić swojego administratora systemu, żeby ją zainstalował.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" nie jest zainstalowane. Zamontowanie %s jest niemożliwe. Proszę poprosić swojego administratora systemu, żeby dokonał instalacji.", diff --git a/apps/files_external/l10n/pl.json b/apps/files_external/l10n/pl.json index 3de59414e30..55a1c33e28a 100644 --- a/apps/files_external/l10n/pl.json +++ b/apps/files_external/l10n/pl.json @@ -4,6 +4,7 @@ "Please provide a valid app key and secret." : "Proszę podać prawidłowy klucz aplikacji i klucz sekretny.", "Step 1 failed. Exception: %s" : "Krok 1 błędny. Błąd: %s", "Step 2 failed. Exception: %s" : "Krok 2 błędny. Błąd: %s", + "External storages" : "Zewnętrzne zasoby dyskowe", "External storage" : "Zewnętrzne zasoby dyskowe", "Dropbox App Configuration" : "Konfiguracja aplikacji Dropbox", "Google Drive App Configuration" : "Konfiguracja aplikacji Google Drive", @@ -100,7 +101,6 @@ "OpenStack Object Storage" : "Magazyn obiektów OpenStack", "Service name" : "Nazwa serwisu", "Request timeout (seconds)" : "Limit czasu żądania (sekundy)", - "External storages" : "Zewnętrzne zasoby dyskowe", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Obsługa cURL w PHP jest wyłączona lub nie jest zainstalowana. Zamontowanie %s jest niemożliwe. Proszę poprosić swojego administratora systemu, żeby ją zainstalował.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Obsługa FTP w PHP jest wyłączona lub nie jest zainstalowana. Zamontowanie %s jest niemożliwe. Proszę poprosić swojego administratora systemu, żeby ją zainstalował.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" nie jest zainstalowane. Zamontowanie %s jest niemożliwe. Proszę poprosić swojego administratora systemu, żeby dokonał instalacji.", diff --git a/apps/files_external/l10n/pt_BR.js b/apps/files_external/l10n/pt_BR.js index dc307664c29..3f3cc25b6c2 100644 --- a/apps/files_external/l10n/pt_BR.js +++ b/apps/files_external/l10n/pt_BR.js @@ -6,6 +6,7 @@ OC.L10N.register( "Please provide a valid app key and secret." : "Por favor forneça uma chave de aplicativo e segurança válidos.", "Step 1 failed. Exception: %s" : "Passo 1 falhou. Exceção: %s", "Step 2 failed. Exception: %s" : "Passo 2 falhou. Exceção: %s", + "External storages" : "Armazenamentos externos", "External storage" : "Armazenamento Externo", "Dropbox App Configuration" : "Configuração do Aplicativo Dropbox", "Google Drive App Configuration" : "Configuração do Aplicativo Google Drive", @@ -102,7 +103,6 @@ OC.L10N.register( "OpenStack Object Storage" : "Armazenamento de Objetos OpenStack", "Service name" : "Nome do serviço", "Request timeout (seconds)" : "Tempo requerido esgotado (segundos)", - "External storages" : "Armazenamentos externos", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "O suporte a cURL no PHP não está habilitado ou instalado. A montagem de %s não é possível. Por favor, solicite a instalação ao administrador do sistema.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "O suporte a FTP no PHP não está habilitado ou instalado. A montagem de %s não é possível. Por favor, solicite a instalação ao administrador do sistema.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" não está instalado. A montagem de %s não é possível. Por favor, solicite a instalação ao administrador do sistema.", diff --git a/apps/files_external/l10n/pt_BR.json b/apps/files_external/l10n/pt_BR.json index 8703e577756..0475feb5d7b 100644 --- a/apps/files_external/l10n/pt_BR.json +++ b/apps/files_external/l10n/pt_BR.json @@ -4,6 +4,7 @@ "Please provide a valid app key and secret." : "Por favor forneça uma chave de aplicativo e segurança válidos.", "Step 1 failed. Exception: %s" : "Passo 1 falhou. Exceção: %s", "Step 2 failed. Exception: %s" : "Passo 2 falhou. Exceção: %s", + "External storages" : "Armazenamentos externos", "External storage" : "Armazenamento Externo", "Dropbox App Configuration" : "Configuração do Aplicativo Dropbox", "Google Drive App Configuration" : "Configuração do Aplicativo Google Drive", @@ -100,7 +101,6 @@ "OpenStack Object Storage" : "Armazenamento de Objetos OpenStack", "Service name" : "Nome do serviço", "Request timeout (seconds)" : "Tempo requerido esgotado (segundos)", - "External storages" : "Armazenamentos externos", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "O suporte a cURL no PHP não está habilitado ou instalado. A montagem de %s não é possível. Por favor, solicite a instalação ao administrador do sistema.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "O suporte a FTP no PHP não está habilitado ou instalado. A montagem de %s não é possível. Por favor, solicite a instalação ao administrador do sistema.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" não está instalado. A montagem de %s não é possível. Por favor, solicite a instalação ao administrador do sistema.", diff --git a/apps/files_external/l10n/ru.js b/apps/files_external/l10n/ru.js index c6ad1041781..7e8f493c759 100644 --- a/apps/files_external/l10n/ru.js +++ b/apps/files_external/l10n/ru.js @@ -6,6 +6,7 @@ OC.L10N.register( "Please provide a valid app key and secret." : "Пожалуйста укажите корректные ключ и секрет приложения.", "Step 1 failed. Exception: %s" : "Шаг 1 неудачен. Исключение: %s", "Step 2 failed. Exception: %s" : "Шаг 2 неудачен. Исключение: %s", + "External storages" : "Внешние хранилища", "External storage" : "Внешнее хранилище", "Dropbox App Configuration" : "Настройка приложения Dropbox", "Google Drive App Configuration" : "Настройка приложения Google Drive", @@ -102,7 +103,6 @@ OC.L10N.register( "OpenStack Object Storage" : "Хранилище объектов OpenStack", "Service name" : "Название сервиса", "Request timeout (seconds)" : "Таймаут запроса (в секундах)", - "External storages" : "Внешние хранилища", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Поддержка cURL в PHP не включена и/или не установлена, монтирование %s невозможно. Обратитесь к вашему системному администратору.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Поддержка FTP в PHP не включена и/или не установлена, монтирование %s невозможно. Обратитесь к вашему системному администратору.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" не установлен, монтирование %s невозможно. Обратитесь к вашему системному администратору.", diff --git a/apps/files_external/l10n/ru.json b/apps/files_external/l10n/ru.json index b14a55a4a18..b238ed72c59 100644 --- a/apps/files_external/l10n/ru.json +++ b/apps/files_external/l10n/ru.json @@ -4,6 +4,7 @@ "Please provide a valid app key and secret." : "Пожалуйста укажите корректные ключ и секрет приложения.", "Step 1 failed. Exception: %s" : "Шаг 1 неудачен. Исключение: %s", "Step 2 failed. Exception: %s" : "Шаг 2 неудачен. Исключение: %s", + "External storages" : "Внешние хранилища", "External storage" : "Внешнее хранилище", "Dropbox App Configuration" : "Настройка приложения Dropbox", "Google Drive App Configuration" : "Настройка приложения Google Drive", @@ -100,7 +101,6 @@ "OpenStack Object Storage" : "Хранилище объектов OpenStack", "Service name" : "Название сервиса", "Request timeout (seconds)" : "Таймаут запроса (в секундах)", - "External storages" : "Внешние хранилища", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Поддержка cURL в PHP не включена и/или не установлена, монтирование %s невозможно. Обратитесь к вашему системному администратору.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Поддержка FTP в PHP не включена и/или не установлена, монтирование %s невозможно. Обратитесь к вашему системному администратору.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" не установлен, монтирование %s невозможно. Обратитесь к вашему системному администратору.", diff --git a/apps/files_external/l10n/sq.js b/apps/files_external/l10n/sq.js index b36623211b5..a112d2f7933 100644 --- a/apps/files_external/l10n/sq.js +++ b/apps/files_external/l10n/sq.js @@ -6,6 +6,7 @@ OC.L10N.register( "Please provide a valid app key and secret." : "Ju lutemi jepni një kyç dhe një të fshehtë aplikacioni të vlefshme.", "Step 1 failed. Exception: %s" : "Hapi 1 dështoi. Përjashtim: %s", "Step 2 failed. Exception: %s" : "Hapi 2 dështoi. Përjashtim: %s", + "External storages" : "Kujtesë e jashtëme", "External storage" : "Depozitë e jashtme", "Dropbox App Configuration" : "Formësim i Aplikacionit Dropbox", "Google Drive App Configuration" : "Formësim i Aplikacionit Google Drive", @@ -100,7 +101,6 @@ OC.L10N.register( "OpenStack Object Storage" : "Depozitë OpenStack Object", "Service name" : "Emër shërbimi", "Request timeout (seconds)" : "Kohë skadimi kërkese (sekonda)", - "External storages" : "Kujtesë e jashtëme", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Mbështetja e cURL në PHP nuk është e instaluar ose e aktivizuar. Lidhja e %s nuk është e mundur. Ju lutemi kërkojini administratorin të sistemit tuaj që ta instaloj.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Mbështetja e FTP në PHP nuk është e aktivizuar ose instaluar.Lidhja e %s nuk është e mundur.Ju lutem kërkojini administratorit të sistemit tuaj që ta instalojë.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" nuk është instaluar.Montimi i %s nuk është i mundur.Ju lutem kërkojini administratorit të sistemit tuaj ta instalojë.", diff --git a/apps/files_external/l10n/sq.json b/apps/files_external/l10n/sq.json index 9d3b25c1961..228c285b2d3 100644 --- a/apps/files_external/l10n/sq.json +++ b/apps/files_external/l10n/sq.json @@ -4,6 +4,7 @@ "Please provide a valid app key and secret." : "Ju lutemi jepni një kyç dhe një të fshehtë aplikacioni të vlefshme.", "Step 1 failed. Exception: %s" : "Hapi 1 dështoi. Përjashtim: %s", "Step 2 failed. Exception: %s" : "Hapi 2 dështoi. Përjashtim: %s", + "External storages" : "Kujtesë e jashtëme", "External storage" : "Depozitë e jashtme", "Dropbox App Configuration" : "Formësim i Aplikacionit Dropbox", "Google Drive App Configuration" : "Formësim i Aplikacionit Google Drive", @@ -98,7 +99,6 @@ "OpenStack Object Storage" : "Depozitë OpenStack Object", "Service name" : "Emër shërbimi", "Request timeout (seconds)" : "Kohë skadimi kërkese (sekonda)", - "External storages" : "Kujtesë e jashtëme", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Mbështetja e cURL në PHP nuk është e instaluar ose e aktivizuar. Lidhja e %s nuk është e mundur. Ju lutemi kërkojini administratorin të sistemit tuaj që ta instaloj.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Mbështetja e FTP në PHP nuk është e aktivizuar ose instaluar.Lidhja e %s nuk është e mundur.Ju lutem kërkojini administratorit të sistemit tuaj që ta instalojë.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" nuk është instaluar.Montimi i %s nuk është i mundur.Ju lutem kërkojini administratorit të sistemit tuaj ta instalojë.", diff --git a/apps/files_external/l10n/sv.js b/apps/files_external/l10n/sv.js index fcb91f14ae4..afaca69a9dc 100644 --- a/apps/files_external/l10n/sv.js +++ b/apps/files_external/l10n/sv.js @@ -6,6 +6,7 @@ OC.L10N.register( "Please provide a valid app key and secret." : "Vänligen ange en giltig applikationsnyckel och hemlig fras.", "Step 1 failed. Exception: %s" : "Steg 1 flaerade. Undantag: %s", "Step 2 failed. Exception: %s" : "Steg 2 falerade. Undantag: %s", + "External storages" : "Extern Lagring", "External storage" : "Extern lagring", "Dropbox App Configuration" : "Dropbox Konfiguration", "Google Drive App Configuration" : "Google Drive Konfiguration", @@ -38,6 +39,7 @@ OC.L10N.register( "Credentials saved" : "Sparade uppgifter", "Credentials saving failed" : "Misslyckades med att spara uppgifterna", "Credentials required" : "Uppgifter krävs", + "Storage with ID \"%d\" not found" : "Lagringsutrymme med ID \"%d\" hittades inte", "Invalid backend or authentication mechanism class" : "Ogiltig backend eller autentiseringsmekanism-klass", "Invalid mount point" : "Ogiltig monteringspunkt", "Objectstore forbidden" : "Objekt förbjudet", @@ -48,6 +50,7 @@ OC.L10N.register( "Unsatisfied authentication mechanism parameters" : "Otillfredsställda autentiseringsmekanism parametrar", "Insufficient data: %s" : "Otillräcklig data: %s", "%s" : "%s", + "Storage with ID \"%d\" is not user editable" : "Lagringsutrymme med ID \"%d\" är inte redigerbart för användare", "Access key" : "Åtkomstnyckel", "Secret key" : "Hemlig nyckel", "Builtin" : "Inbyggt", @@ -100,7 +103,6 @@ OC.L10N.register( "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Namn på tjänst", "Request timeout (seconds)" : "Sekunder för anslutningsförsök", - "External storages" : "Extern Lagring", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "cURL-stöd i PHP är inte aktiverat eller har inte installerats. Montering av %s är inte möjlig. Be din systemadministratör om installation.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "FTP-stöd i PHP är inte aktiverat eller har inte installerats. Montering av %s är inte möjlig. Be din systemadministratör om installation.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" är inte installerad. Montering av %s är inte möjlig. Be din systemadministratör om installation.", diff --git a/apps/files_external/l10n/sv.json b/apps/files_external/l10n/sv.json index 6fd3d8d34ef..333e70ee047 100644 --- a/apps/files_external/l10n/sv.json +++ b/apps/files_external/l10n/sv.json @@ -4,6 +4,7 @@ "Please provide a valid app key and secret." : "Vänligen ange en giltig applikationsnyckel och hemlig fras.", "Step 1 failed. Exception: %s" : "Steg 1 flaerade. Undantag: %s", "Step 2 failed. Exception: %s" : "Steg 2 falerade. Undantag: %s", + "External storages" : "Extern Lagring", "External storage" : "Extern lagring", "Dropbox App Configuration" : "Dropbox Konfiguration", "Google Drive App Configuration" : "Google Drive Konfiguration", @@ -36,6 +37,7 @@ "Credentials saved" : "Sparade uppgifter", "Credentials saving failed" : "Misslyckades med att spara uppgifterna", "Credentials required" : "Uppgifter krävs", + "Storage with ID \"%d\" not found" : "Lagringsutrymme med ID \"%d\" hittades inte", "Invalid backend or authentication mechanism class" : "Ogiltig backend eller autentiseringsmekanism-klass", "Invalid mount point" : "Ogiltig monteringspunkt", "Objectstore forbidden" : "Objekt förbjudet", @@ -46,6 +48,7 @@ "Unsatisfied authentication mechanism parameters" : "Otillfredsställda autentiseringsmekanism parametrar", "Insufficient data: %s" : "Otillräcklig data: %s", "%s" : "%s", + "Storage with ID \"%d\" is not user editable" : "Lagringsutrymme med ID \"%d\" är inte redigerbart för användare", "Access key" : "Åtkomstnyckel", "Secret key" : "Hemlig nyckel", "Builtin" : "Inbyggt", @@ -98,7 +101,6 @@ "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Namn på tjänst", "Request timeout (seconds)" : "Sekunder för anslutningsförsök", - "External storages" : "Extern Lagring", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "cURL-stöd i PHP är inte aktiverat eller har inte installerats. Montering av %s är inte möjlig. Be din systemadministratör om installation.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "FTP-stöd i PHP är inte aktiverat eller har inte installerats. Montering av %s är inte möjlig. Be din systemadministratör om installation.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" är inte installerad. Montering av %s är inte möjlig. Be din systemadministratör om installation.", diff --git a/apps/files_external/l10n/tr.js b/apps/files_external/l10n/tr.js index 0c255199915..8b1092b09ad 100644 --- a/apps/files_external/l10n/tr.js +++ b/apps/files_external/l10n/tr.js @@ -6,6 +6,7 @@ OC.L10N.register( "Please provide a valid app key and secret." : "Lütfen geçerli bir uygulama anahtarı ve parola yazın.", "Step 1 failed. Exception: %s" : "1. Adım tamamlanamadı. Sorun: %s", "Step 2 failed. Exception: %s" : "2. Adım tamamlanamadı. Sorun: %s", + "External storages" : "Dış depolama", "External storage" : "Dış depolama", "Dropbox App Configuration" : "Dropbox Uygulaması Yapılandırması", "Google Drive App Configuration" : "Google Drive Uygulaması Yapılandırması", @@ -102,7 +103,6 @@ OC.L10N.register( "OpenStack Object Storage" : "OpenStack Nesne Depolama", "Service name" : "Hizmet adı", "Request timeout (seconds)" : "İstek zaman aşımı (saniye)", - "External storages" : "Dış depolama", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "PHP cURL desteği kurulmamış ya da etkinleştirilmemiş. %s bağlanamaz. Lütfen kurulum için sistem yöneticinizle görüşün.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "PHP FTP desteği kuurlmamış ya da etkinleştirilmemiş. %s bağlanamaz. Lütfen kurulum için sistem yöneticinizle görüşün.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "%s kurulmamış. %s bağlanamaz. Lütfen kurulum için sistem yöneticinizle görüşün.", diff --git a/apps/files_external/l10n/tr.json b/apps/files_external/l10n/tr.json index 7d5b940897e..2712aaead8f 100644 --- a/apps/files_external/l10n/tr.json +++ b/apps/files_external/l10n/tr.json @@ -4,6 +4,7 @@ "Please provide a valid app key and secret." : "Lütfen geçerli bir uygulama anahtarı ve parola yazın.", "Step 1 failed. Exception: %s" : "1. Adım tamamlanamadı. Sorun: %s", "Step 2 failed. Exception: %s" : "2. Adım tamamlanamadı. Sorun: %s", + "External storages" : "Dış depolama", "External storage" : "Dış depolama", "Dropbox App Configuration" : "Dropbox Uygulaması Yapılandırması", "Google Drive App Configuration" : "Google Drive Uygulaması Yapılandırması", @@ -100,7 +101,6 @@ "OpenStack Object Storage" : "OpenStack Nesne Depolama", "Service name" : "Hizmet adı", "Request timeout (seconds)" : "İstek zaman aşımı (saniye)", - "External storages" : "Dış depolama", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "PHP cURL desteği kurulmamış ya da etkinleştirilmemiş. %s bağlanamaz. Lütfen kurulum için sistem yöneticinizle görüşün.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "PHP FTP desteği kuurlmamış ya da etkinleştirilmemiş. %s bağlanamaz. Lütfen kurulum için sistem yöneticinizle görüşün.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "%s kurulmamış. %s bağlanamaz. Lütfen kurulum için sistem yöneticinizle görüşün.", diff --git a/apps/files_external/l10n/zh_CN.js b/apps/files_external/l10n/zh_CN.js index 5661efc4f14..f0d7b2f47e0 100644 --- a/apps/files_external/l10n/zh_CN.js +++ b/apps/files_external/l10n/zh_CN.js @@ -6,6 +6,7 @@ OC.L10N.register( "Please provide a valid app key and secret." : "请提供有效的 appkey 和密钥.", "Step 1 failed. Exception: %s" : "步骤 1 失败. 异常: %s", "Step 2 failed. Exception: %s" : "步骤 2 失败. 异常: %s", + "External storages" : "外部存储", "External storage" : "外部存储", "Dropbox App Configuration" : "Dropbox 配置", "Google Drive App Configuration" : "Google Drive 配置", @@ -100,7 +101,6 @@ OC.L10N.register( "OpenStack Object Storage" : "OpenStack 对象存储", "Service name" : "服务名称", "Request timeout (seconds)" : "请求超时时间 (秒)", - "External storages" : "外部存储", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "没有安装或启用 PHP 中的 cURL 支持. 无法挂载 %s. 请联系您的系统管理员安装.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "没有安装或启用 PHP 中的 FTP 支持. 无法挂载 %s. 请联系您的系统管理员安装.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "没有安装 \"%s\". 无法挂载 %s. 请联系您的系统管理员安装.", diff --git a/apps/files_external/l10n/zh_CN.json b/apps/files_external/l10n/zh_CN.json index d7201ec7cf7..e12a494bd09 100644 --- a/apps/files_external/l10n/zh_CN.json +++ b/apps/files_external/l10n/zh_CN.json @@ -4,6 +4,7 @@ "Please provide a valid app key and secret." : "请提供有效的 appkey 和密钥.", "Step 1 failed. Exception: %s" : "步骤 1 失败. 异常: %s", "Step 2 failed. Exception: %s" : "步骤 2 失败. 异常: %s", + "External storages" : "外部存储", "External storage" : "外部存储", "Dropbox App Configuration" : "Dropbox 配置", "Google Drive App Configuration" : "Google Drive 配置", @@ -98,7 +99,6 @@ "OpenStack Object Storage" : "OpenStack 对象存储", "Service name" : "服务名称", "Request timeout (seconds)" : "请求超时时间 (秒)", - "External storages" : "外部存储", "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "没有安装或启用 PHP 中的 cURL 支持. 无法挂载 %s. 请联系您的系统管理员安装.", "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "没有安装或启用 PHP 中的 FTP 支持. 无法挂载 %s. 请联系您的系统管理员安装.", "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "没有安装 \"%s\". 无法挂载 %s. 请联系您的系统管理员安装.", diff --git a/apps/files_external/l10n/zh_TW.js b/apps/files_external/l10n/zh_TW.js index b404016f934..277fbb8454f 100644 --- a/apps/files_external/l10n/zh_TW.js +++ b/apps/files_external/l10n/zh_TW.js @@ -6,6 +6,7 @@ OC.L10N.register( "Please provide a valid app key and secret." : "請提供有效的應用程式金鑰及密碼", "Step 1 failed. Exception: %s" : "步驟 1 失敗,出現異常: %s", "Step 2 failed. Exception: %s" : "步驟 2 失敗,出現異常: %s", + "External storages" : "外部儲存", "External storage" : "外部儲存", "Dropbox App Configuration" : "Dropbox 應用設置", "Google Drive App Configuration" : "Google Drive 應用設置", @@ -83,7 +84,6 @@ OC.L10N.register( "OpenStack Object Storage" : "OpenStack 物件儲存", "Service name" : "服務名稱", "Request timeout (seconds)" : "請求超時 (秒)", - "External storages" : "外部儲存", "No external storage configured" : "目前尚未配置任何外部儲存", "You can add external storages in the personal settings" : "在個人設定裡您可以自行加入外部儲存設定", "Name" : "名稱", diff --git a/apps/files_external/l10n/zh_TW.json b/apps/files_external/l10n/zh_TW.json index 8a63c441d39..8eb787c3584 100644 --- a/apps/files_external/l10n/zh_TW.json +++ b/apps/files_external/l10n/zh_TW.json @@ -4,6 +4,7 @@ "Please provide a valid app key and secret." : "請提供有效的應用程式金鑰及密碼", "Step 1 failed. Exception: %s" : "步驟 1 失敗,出現異常: %s", "Step 2 failed. Exception: %s" : "步驟 2 失敗,出現異常: %s", + "External storages" : "外部儲存", "External storage" : "外部儲存", "Dropbox App Configuration" : "Dropbox 應用設置", "Google Drive App Configuration" : "Google Drive 應用設置", @@ -81,7 +82,6 @@ "OpenStack Object Storage" : "OpenStack 物件儲存", "Service name" : "服務名稱", "Request timeout (seconds)" : "請求超時 (秒)", - "External storages" : "外部儲存", "No external storage configured" : "目前尚未配置任何外部儲存", "You can add external storages in the personal settings" : "在個人設定裡您可以自行加入外部儲存設定", "Name" : "名稱", diff --git a/apps/files_external/lib/Config/ExternalMountPoint.php b/apps/files_external/lib/Config/ExternalMountPoint.php new file mode 100644 index 00000000000..76a090b7ec4 --- /dev/null +++ b/apps/files_external/lib/Config/ExternalMountPoint.php @@ -0,0 +1,30 @@ +<?php +/** + * @copyright Copyright (c) 2017 Robin Appelman <robin@icewind.nl> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\Files_External\Config; + +use OC\Files\Mount\MountPoint; + +class ExternalMountPoint extends MountPoint { + public function getMountType() { + return 'external'; + } +} diff --git a/apps/files_external/templates/settings.php b/apps/files_external/templates/settings.php index 9d8c179dd32..bbd79994e39 100644 --- a/apps/files_external/templates/settings.php +++ b/apps/files_external/templates/settings.php @@ -88,7 +88,7 @@ ?> <form data-can-create="<?php echo $canCreateMounts?'true':'false' ?>" id="files_external" class="section" data-encryption-enabled="<?php echo $_['encryptionEnabled']?'true': 'false'; ?>"> - <h2><?php p($l->t('External storage')); ?></h2> + <h2 data-anchor-name="external-storage"><?php p($l->t('External storage')); ?></h2> <?php if (isset($_['dependencies']) and ($_['dependencies']<>'') and $canCreateMounts) print_unescaped(''.$_['dependencies'].''); ?> <table id="externalStorage" class="grid" data-admin='<?php print_unescaped(json_encode($_['visibilityType'] === BackendService::VISIBILITY_ADMIN)); ?>'> <thead> diff --git a/apps/files_sharing/js/share.js b/apps/files_sharing/js/share.js index c40ca07b76b..5cd04ece446 100644 --- a/apps/files_sharing/js/share.js +++ b/apps/files_sharing/js/share.js @@ -189,13 +189,16 @@ // remove icon, if applicable OC.Share.markFileAsShared($tr, false, false); } - var newIcon = $tr.attr('data-icon'); - // in case markFileAsShared decided to change the icon, - // we need to modify the model - // (FIXME: yes, this is hacky) - if (fileInfoModel.get('icon') !== newIcon) { - fileInfoModel.set('icon', newIcon); - } + + // FIXME: this is too convoluted. We need to get rid of the above updates + // and only ever update the model and let the events take care of rerendering + fileInfoModel.set({ + shareTypes: shareModel.getShareTypes(), + // in case markFileAsShared decided to change the icon, + // we need to modify the model + // (FIXME: yes, this is hacky) + icon: $tr.attr('data-icon') + }); }); fileList.registerTabView(shareTab); diff --git a/apps/files_sharing/lib/Controller/ShareesAPIController.php b/apps/files_sharing/lib/Controller/ShareesAPIController.php index eb65727c770..7d345efb3eb 100644 --- a/apps/files_sharing/lib/Controller/ShareesAPIController.php +++ b/apps/files_sharing/lib/Controller/ShareesAPIController.php @@ -654,13 +654,15 @@ class ShareesAPIController extends OCSController { protected function getLookup($search) { $isEnabled = $this->config->getAppValue('files_sharing', 'lookupServerEnabled', 'no'); + $lookupServerUrl = $this->config->getSystemValue('lookup_server', 'https://lookup.nextcloud.com'); + $lookupServerUrl = rtrim($lookupServerUrl, '/'); $result = []; if($isEnabled === 'yes') { try { $client = $this->clientService->newClient(); $response = $client->get( - 'https://lookup.nextcloud.com/users?search=' . urlencode($search), + $lookupServerUrl . '/users?search=' . urlencode($search), [ 'timeout' => 10, 'connect_timeout' => 3, diff --git a/apps/files_sharing/lib/SharedMount.php b/apps/files_sharing/lib/SharedMount.php index d5ae303390f..b42682ab2a8 100644 --- a/apps/files_sharing/lib/SharedMount.php +++ b/apps/files_sharing/lib/SharedMount.php @@ -258,4 +258,8 @@ class SharedMount extends MountPoint implements MoveableMount { return -1; } } + + public function getMountType() { + return 'shared'; + } } diff --git a/apps/files_sharing/tests/js/shareSpec.js b/apps/files_sharing/tests/js/shareSpec.js index 7568b06f27c..ea2f427df75 100644 --- a/apps/files_sharing/tests/js/shareSpec.js +++ b/apps/files_sharing/tests/js/shareSpec.js @@ -470,4 +470,82 @@ describe('OCA.Sharing.Util tests', function() { }); }); + describe('ShareTabView interaction', function() { + var shareTabSpy; + var fileInfoModel; + var configModel; + var shareModel; + + beforeEach(function() { + shareTabSpy = sinon.spy(OCA.Sharing, 'ShareTabView'); + + var attributes = { + itemType: 'file', + itemSource: 123, + possiblePermissions: 31, + permissions: 31 + }; + fileInfoModel = new OCA.Files.FileInfoModel(testFiles[0]); + configModel = new OC.Share.ShareConfigModel({ + enforcePasswordForPublicLink: false, + isResharingAllowed: true, + isDefaultExpireDateEnabled: false, + isDefaultExpireDateEnforced: false, + defaultExpireDate: 7 + }); + shareModel = new OC.Share.ShareItemModel(attributes, { + configModel: configModel, + fileInfoModel: fileInfoModel + }); + + /* jshint camelcase: false */ + shareModel.set({ + reshare: {}, + shares: [{ + id: 100, + item_source: 1, + permissions: 31, + share_type: OC.Share.SHARE_TYPE_USER, + share_with: 'user1', + share_with_displayname: 'User One' + }, { + id: 102, + item_source: 1, + permissions: 31, + share_type: OC.Share.SHARE_TYPE_REMOTE, + share_with: 'foo@bar.com/baz', + share_with_displayname: 'foo@bar.com/baz' + + }] + }, {parse: true}); + + fileList.destroy(); + fileList = new OCA.Files.FileList( + $('#listContainer'), { + id: 'files', + fileActions: new OCA.Files.FileActions() + } + ); + OCA.Sharing.Util.attach(fileList); + fileList.setFiles(testFiles); + }); + afterEach(function() { + shareTabSpy.restore(); + }); + + it('updates fileInfoModel when shares changed', function() { + var changeHandler = sinon.stub(); + fileInfoModel.on('change', changeHandler); + + shareTabSpy.getCall(0).thisValue.trigger('sharesChanged', shareModel); + + expect(changeHandler.calledOnce).toEqual(true); + expect(changeHandler.getCall(0).args[0].changed).toEqual({ + shareTypes: [ + OC.Share.SHARE_TYPE_USER, + OC.Share.SHARE_TYPE_REMOTE + ] + }); + }); + }); }); diff --git a/apps/files_versions/l10n/cs.js b/apps/files_versions/l10n/cs.js index 72695abde6c..c9daaf91989 100644 --- a/apps/files_versions/l10n/cs.js +++ b/apps/files_versions/l10n/cs.js @@ -6,6 +6,8 @@ OC.L10N.register( "Failed to revert {file} to revision {timestamp}." : "Selhalo vrácení souboru {file} na verzi {timestamp}.", "_%n byte_::_%n bytes_" : ["%n bajt","%n bajty","%n bajtů"], "Restore" : "Obnovit", + "No earlier versions available" : "Nejsou dostupné dřívější verze", + "More versions …" : "Víc verzí …", "No versions available" : "Nejsou dostupné žádné verze", "More versions..." : "Více verzí..." }, diff --git a/apps/files_versions/l10n/cs.json b/apps/files_versions/l10n/cs.json index f8309856688..0486090f2ab 100644 --- a/apps/files_versions/l10n/cs.json +++ b/apps/files_versions/l10n/cs.json @@ -4,6 +4,8 @@ "Failed to revert {file} to revision {timestamp}." : "Selhalo vrácení souboru {file} na verzi {timestamp}.", "_%n byte_::_%n bytes_" : ["%n bajt","%n bajty","%n bajtů"], "Restore" : "Obnovit", + "No earlier versions available" : "Nejsou dostupné dřívější verze", + "More versions …" : "Víc verzí …", "No versions available" : "Nejsou dostupné žádné verze", "More versions..." : "Více verzí..." },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" diff --git a/apps/files_versions/l10n/da.js b/apps/files_versions/l10n/da.js index ee85e6266ea..4fce738597f 100644 --- a/apps/files_versions/l10n/da.js +++ b/apps/files_versions/l10n/da.js @@ -4,6 +4,7 @@ OC.L10N.register( "Could not revert: %s" : "Kunne ikke genskabe: %s", "Versions" : "Versioner", "Failed to revert {file} to revision {timestamp}." : "Kunne ikke tilbagerulle {file} til den tidligere udgave: {timestamp}.", + "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"], "Restore" : "Gendan", "No earlier versions available" : "Ingen tidligere versioner tilgængelige", "More versions …" : "Flere versioner ...", diff --git a/apps/files_versions/l10n/da.json b/apps/files_versions/l10n/da.json index 3fdfedaa38f..08aef15ad7f 100644 --- a/apps/files_versions/l10n/da.json +++ b/apps/files_versions/l10n/da.json @@ -2,6 +2,7 @@ "Could not revert: %s" : "Kunne ikke genskabe: %s", "Versions" : "Versioner", "Failed to revert {file} to revision {timestamp}." : "Kunne ikke tilbagerulle {file} til den tidligere udgave: {timestamp}.", + "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"], "Restore" : "Gendan", "No earlier versions available" : "Ingen tidligere versioner tilgængelige", "More versions …" : "Flere versioner ...", diff --git a/apps/files_versions/l10n/ko.js b/apps/files_versions/l10n/ko.js index 49472d556cb..81b258b1060 100644 --- a/apps/files_versions/l10n/ko.js +++ b/apps/files_versions/l10n/ko.js @@ -1,11 +1,14 @@ OC.L10N.register( "files_versions", { - "Could not revert: %s" : "되돌릴 수 없음: %s", + "Could not revert: %s" : "되돌릴 수 없습니다: %s", "Versions" : "버전", "Failed to revert {file} to revision {timestamp}." : "{file}을(를) 리비전 {timestamp}으(로) 되돌리는 데 실패했습니다.", + "_%n byte_::_%n bytes_" : ["%n 바이트"], "Restore" : "복원", - "More versions..." : "더 많은 버전...", - "No other versions available" : "다른 버전을 사용할 수 없습니다" + "No earlier versions available" : "이전 버전을 사용할 수 없음", + "More versions …" : "더 많은 버전 …", + "No versions available" : "버전을 사용할 수 없음", + "More versions..." : "더 많은 버전..." }, "nplurals=1; plural=0;"); diff --git a/apps/files_versions/l10n/ko.json b/apps/files_versions/l10n/ko.json index 8c9985ad437..0b6a54a1e9c 100644 --- a/apps/files_versions/l10n/ko.json +++ b/apps/files_versions/l10n/ko.json @@ -1,9 +1,12 @@ { "translations": { - "Could not revert: %s" : "되돌릴 수 없음: %s", + "Could not revert: %s" : "되돌릴 수 없습니다: %s", "Versions" : "버전", "Failed to revert {file} to revision {timestamp}." : "{file}을(를) 리비전 {timestamp}으(로) 되돌리는 데 실패했습니다.", + "_%n byte_::_%n bytes_" : ["%n 바이트"], "Restore" : "복원", - "More versions..." : "더 많은 버전...", - "No other versions available" : "다른 버전을 사용할 수 없습니다" + "No earlier versions available" : "이전 버전을 사용할 수 없음", + "More versions …" : "더 많은 버전 …", + "No versions available" : "버전을 사용할 수 없음", + "More versions..." : "더 많은 버전..." },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/sv.js b/apps/files_versions/l10n/sv.js index 79a92d0db80..43187f92ef6 100644 --- a/apps/files_versions/l10n/sv.js +++ b/apps/files_versions/l10n/sv.js @@ -6,6 +6,8 @@ OC.L10N.register( "Failed to revert {file} to revision {timestamp}." : "Kunde inte återställa {file} till {timestamp}.", "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"], "Restore" : "Återskapa", + "No earlier versions available" : "Inga tidigare versioner tillgänliga", + "More versions …" : "Fler versioner ...", "No versions available" : "Inga versioner tillgängliga", "More versions..." : "Fler versioner..." }, diff --git a/apps/files_versions/l10n/sv.json b/apps/files_versions/l10n/sv.json index ccb48ee72ac..df117926310 100644 --- a/apps/files_versions/l10n/sv.json +++ b/apps/files_versions/l10n/sv.json @@ -4,6 +4,8 @@ "Failed to revert {file} to revision {timestamp}." : "Kunde inte återställa {file} till {timestamp}.", "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"], "Restore" : "Återskapa", + "No earlier versions available" : "Inga tidigare versioner tillgänliga", + "More versions …" : "Fler versioner ...", "No versions available" : "Inga versioner tillgängliga", "More versions..." : "Fler versioner..." },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/lookup_server_connector/appinfo/app.php b/apps/lookup_server_connector/appinfo/app.php index 639eeafcf3f..f0d624d5f3a 100644 --- a/apps/lookup_server_connector/appinfo/app.php +++ b/apps/lookup_server_connector/appinfo/app.php @@ -28,18 +28,24 @@ $dispatcher->addListener('OC\AccountManager::userUpdated', function(\Symfony\Com \OC::$server->getAppDataDir('identityproof'), \OC::$server->getCrypto() ); + + $config = \OC::$server->getConfig(); + $lookupServer = $config->getSystemValue('lookup_server', ''); + $updateLookupServer = new \OCA\LookupServerConnector\UpdateLookupServer( - new \OC\Accounts\AccountManager(\OC::$server->getDatabaseConnection(), \OC::$server->getEventDispatcher()), - \OC::$server->getConfig(), - \OC::$server->getSecureRandom(), + new \OC\Accounts\AccountManager( + \OC::$server->getDatabaseConnection(), + \OC::$server->getEventDispatcher(), + \OC::$server->getJobList() + ), \OC::$server->getHTTPClientService(), - $keyManager, new \OC\Security\IdentityProof\Signer( $keyManager, new \OC\AppFramework\Utility\TimeFactory(), \OC::$server->getUserManager() ), - \OC::$server->getJobList() + \OC::$server->getJobList(), + $lookupServer ); $updateLookupServer->userUpdated($user); }); diff --git a/apps/lookup_server_connector/lib/BackgroundJobs/RetryJob.php b/apps/lookup_server_connector/lib/BackgroundJobs/RetryJob.php index f33323b2d4f..faeef05da17 100644 --- a/apps/lookup_server_connector/lib/BackgroundJobs/RetryJob.php +++ b/apps/lookup_server_connector/lib/BackgroundJobs/RetryJob.php @@ -26,6 +26,7 @@ namespace OCA\LookupServerConnector\BackgroundJobs; use OC\BackgroundJob\Job; use OCP\BackgroundJob\IJobList; use OCP\Http\Client\IClientService; +use OCP\ILogger; class RetryJob extends Job { /** @var IClientService */ @@ -36,21 +37,28 @@ class RetryJob extends Job { private $lookupServer = 'https://lookup.nextcloud.com/users'; /** - * @param IClientService|null $clientService - * @param IJobList|null $jobList + * @param IClientService $clientService + * @param IJobList $jobList */ - public function __construct(IClientService $clientService = null, - IJobList $jobList = null) { - if($clientService !== null) { - $this->clientService = $clientService; - } else { - $this->clientService = \OC::$server->getHTTPClientService(); - } - if($jobList !== null) { - $this->jobList = $jobList; - } else { - $this->jobList = \OC::$server->getJobList(); + public function __construct(IClientService $clientService, + IJobList $jobList) { + $this->clientService = $clientService; + $this->jobList = $jobList; + } + + /** + * run the job, then remove it from the jobList + * + * @param JobList $jobList + * @param ILogger $logger + */ + public function execute($jobList, ILogger $logger = null) { + + if ($this->shouldRun($this->argument)) { + parent::execute($jobList, $logger); + $jobList->remove($this, $this->argument); } + } protected function run($argument) { diff --git a/apps/lookup_server_connector/lib/UpdateLookupServer.php b/apps/lookup_server_connector/lib/UpdateLookupServer.php index 86865311725..3a7c2fa7236 100644 --- a/apps/lookup_server_connector/lib/UpdateLookupServer.php +++ b/apps/lookup_server_connector/lib/UpdateLookupServer.php @@ -23,14 +23,11 @@ namespace OCA\LookupServerConnector; use OC\Accounts\AccountManager; -use OC\Security\IdentityProof\Manager; use OC\Security\IdentityProof\Signer; use OCA\LookupServerConnector\BackgroundJobs\RetryJob; use OCP\BackgroundJob\IJobList; use OCP\Http\Client\IClientService; -use OCP\IConfig; use OCP\IUser; -use OCP\Security\ISecureRandom; /** * Class UpdateLookupServer @@ -40,44 +37,36 @@ use OCP\Security\ISecureRandom; class UpdateLookupServer { /** @var AccountManager */ private $accountManager; - /** @var IConfig */ - private $config; - /** @var ISecureRandom */ - private $secureRandom; /** @var IClientService */ private $clientService; - /** @var Manager */ - private $keyManager; /** @var Signer */ private $signer; /** @var IJobList */ private $jobList; /** @var string URL point to lookup server */ - private $lookupServer = 'https://lookup.nextcloud.com/users'; + private $lookupServer = 'https://lookup.nextcloud.com'; /** * @param AccountManager $accountManager - * @param IConfig $config - * @param ISecureRandom $secureRandom * @param IClientService $clientService - * @param Manager $manager * @param Signer $signer * @param IJobList $jobList + * @param string $lookupServer if nothing is given we use the default lookup server */ public function __construct(AccountManager $accountManager, - IConfig $config, - ISecureRandom $secureRandom, IClientService $clientService, - Manager $manager, Signer $signer, - IJobList $jobList) { + IJobList $jobList, + $lookupServer = '') { $this->accountManager = $accountManager; - $this->config = $config; - $this->secureRandom = $secureRandom; $this->clientService = $clientService; - $this->keyManager = $manager; $this->signer = $signer; $this->jobList = $jobList; + if ($lookupServer !== '') { + $this->lookupServer = $lookupServer; + } + $this->lookupServer = rtrim($this->lookupServer, '/'); + $this->lookupServer .= '/users'; } /** @@ -113,6 +102,13 @@ class UpdateLookupServer { $dataArray['website'] = isset($publicData[AccountManager::PROPERTY_WEBSITE]) ? $publicData[AccountManager::PROPERTY_WEBSITE]['value'] : ''; $dataArray['twitter'] = isset($publicData[AccountManager::PROPERTY_TWITTER]) ? $publicData[AccountManager::PROPERTY_TWITTER]['value'] : ''; $dataArray['phone'] = isset($publicData[AccountManager::PROPERTY_PHONE]) ? $publicData[AccountManager::PROPERTY_PHONE]['value'] : ''; + $dataArray['twitter_signature'] = isset($publicData[AccountManager::PROPERTY_TWITTER]['signature']) ? $publicData[AccountManager::PROPERTY_TWITTER]['signature'] : ''; + $dataArray['website_signature'] = isset($publicData[AccountManager::PROPERTY_WEBSITE]['signature']) ? $publicData[AccountManager::PROPERTY_WEBSITE]['signature'] : ''; + $dataArray['verificationStatus'] = + [ + AccountManager::PROPERTY_WEBSITE => isset($publicData[AccountManager::PROPERTY_WEBSITE]) ? $publicData[AccountManager::PROPERTY_WEBSITE]['verified'] : '', + AccountManager::PROPERTY_TWITTER => isset($publicData[AccountManager::PROPERTY_TWITTER]) ? $publicData[AccountManager::PROPERTY_TWITTER]['verified'] : '', + ]; } $dataArray = $this->signer->sign('lookupserver', $dataArray, $user); diff --git a/apps/sharebymail/l10n/de.js b/apps/sharebymail/l10n/de.js index eebd83371c3..05fccf7252c 100644 --- a/apps/sharebymail/l10n/de.js +++ b/apps/sharebymail/l10n/de.js @@ -12,10 +12,10 @@ OC.L10N.register( "You shared {file} with {email} by mail" : "Sie teilen {file} mit {email} über E-Mail", "%3$s shared %1$s with %2$s by mail" : "%3$s teilt %1$s mit %2$s über E-mail", "{actor} shared {file} with {email} by mail" : "{actor} teilt {file} mit {email} über E-Mail", - "Password to access %1$s was send to %2s" : "Passwort für den Zugriff auf %1$s wurde an %2s versandt", - "Password to access {file} was send to {email}" : "Passwort für den Zugriff auf {file} wurde an {email} versandt", - "Password to access %1$s was send to you" : "Passwort für den Zugriff auf %1$s wurde an Dich versandt", - "Password to access {file} was send to you" : "Passwort für den Zugriff auf {file} wurde an Dich versandt", + "Password to access %1$s was sent to %2s" : "Passwort für den Zugriff auf %1$s wurde an %2s versandt ", + "Password to access {file} was sent to {email}" : "Passwort für den Zugriff auf {file} wurde an {email} versandt ", + "Password to access %1$s was sent to you" : " Passwort für den Zugriff auf %1$s wurde an Dich versandt ", + "Password to access {file} was sent to you" : " Passwort für den Zugriff auf {file} wurde an Dich versandt ", "Sharing %s failed, this item is already shared with %s" : "Freigabe von %s fehlgeschlagen, da dieses Objekt schon mit %s geteilt wird", "We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Automatisch erstelltes Passwort kann nicht versandt werden. Bitte gebe in Deinen persönlichen Einstellungen eine gültige E-Mail-Adresse ein und versuche es erneut.", "Failed to send share by E-mail" : "Senden der Freigabe über Mail ist fehlgeschlagen", @@ -37,7 +37,7 @@ OC.L10N.register( "You can choose a different password at any time in the share dialog." : "Im Teilen-Dialog kannst Du jederzeit ein anderes Passwort wählen.", "Could not find share" : "Freigabe konnte nicht gefunden werden", "Share by mail" : "Geteilt über eine E-Mail", - "Send a personalized link to a file or folder by mail." : "Einen personalisierten Link zu einer Datei oder Ordner per E-Mail versenden.", + "Allows users to share a personalized link to a file or folder by putting in an email address." : "Ermöglicht Nutzern eine personalisierte Verknüpfung zu einer Datei oder einem Ordner durch Eingabe einer E-Mail-Adresse zu teilen.", "Send password by mail" : "Passwort per Mail senden", "Enforce password protection" : "Passwortschutz erzwingen", "Failed to create the E-mail" : "Erstellen der E-Mail ist fehlgeschalgen", diff --git a/apps/sharebymail/l10n/de.json b/apps/sharebymail/l10n/de.json index 51b31041350..1d19e66c376 100644 --- a/apps/sharebymail/l10n/de.json +++ b/apps/sharebymail/l10n/de.json @@ -10,10 +10,10 @@ "You shared {file} with {email} by mail" : "Sie teilen {file} mit {email} über E-Mail", "%3$s shared %1$s with %2$s by mail" : "%3$s teilt %1$s mit %2$s über E-mail", "{actor} shared {file} with {email} by mail" : "{actor} teilt {file} mit {email} über E-Mail", - "Password to access %1$s was send to %2s" : "Passwort für den Zugriff auf %1$s wurde an %2s versandt", - "Password to access {file} was send to {email}" : "Passwort für den Zugriff auf {file} wurde an {email} versandt", - "Password to access %1$s was send to you" : "Passwort für den Zugriff auf %1$s wurde an Dich versandt", - "Password to access {file} was send to you" : "Passwort für den Zugriff auf {file} wurde an Dich versandt", + "Password to access %1$s was sent to %2s" : "Passwort für den Zugriff auf %1$s wurde an %2s versandt ", + "Password to access {file} was sent to {email}" : "Passwort für den Zugriff auf {file} wurde an {email} versandt ", + "Password to access %1$s was sent to you" : " Passwort für den Zugriff auf %1$s wurde an Dich versandt ", + "Password to access {file} was sent to you" : " Passwort für den Zugriff auf {file} wurde an Dich versandt ", "Sharing %s failed, this item is already shared with %s" : "Freigabe von %s fehlgeschlagen, da dieses Objekt schon mit %s geteilt wird", "We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Automatisch erstelltes Passwort kann nicht versandt werden. Bitte gebe in Deinen persönlichen Einstellungen eine gültige E-Mail-Adresse ein und versuche es erneut.", "Failed to send share by E-mail" : "Senden der Freigabe über Mail ist fehlgeschlagen", @@ -35,7 +35,7 @@ "You can choose a different password at any time in the share dialog." : "Im Teilen-Dialog kannst Du jederzeit ein anderes Passwort wählen.", "Could not find share" : "Freigabe konnte nicht gefunden werden", "Share by mail" : "Geteilt über eine E-Mail", - "Send a personalized link to a file or folder by mail." : "Einen personalisierten Link zu einer Datei oder Ordner per E-Mail versenden.", + "Allows users to share a personalized link to a file or folder by putting in an email address." : "Ermöglicht Nutzern eine personalisierte Verknüpfung zu einer Datei oder einem Ordner durch Eingabe einer E-Mail-Adresse zu teilen.", "Send password by mail" : "Passwort per Mail senden", "Enforce password protection" : "Passwortschutz erzwingen", "Failed to create the E-mail" : "Erstellen der E-Mail ist fehlgeschalgen", diff --git a/apps/sharebymail/l10n/de_DE.js b/apps/sharebymail/l10n/de_DE.js index 07965574ab7..5bbaa1c1d23 100644 --- a/apps/sharebymail/l10n/de_DE.js +++ b/apps/sharebymail/l10n/de_DE.js @@ -12,10 +12,10 @@ OC.L10N.register( "You shared {file} with {email} by mail" : "Sie haben {file} mit {email} per E-Mail geteilt ", "%3$s shared %1$s with %2$s by mail" : "%3$s hat %1$s mit %2$s per E-Mail geteilt", "{actor} shared {file} with {email} by mail" : "{actor} hat {file} mit {email} per E-Mail geteilt", - "Password to access %1$s was send to %2s" : "Passwort für den Zugriff auf %1$s wurde an %2s versandt", - "Password to access {file} was send to {email}" : "Passwort für den Zugriff auf {file} wurde an {email} versandt", - "Password to access %1$s was send to you" : "Passwort für den Zugriff auf %1$s wurde an Sie versandt", - "Password to access {file} was send to you" : "Passwort für den Zugriff auf {file} wurde an Sie versandt", + "Password to access %1$s was sent to %2s" : "Passwort für den Zugriff auf %1$s wurde an %2s versandt ", + "Password to access {file} was sent to {email}" : "Passwort für den Zugriff auf {file} wurde an {email} versandt ", + "Password to access %1$s was sent to you" : "Passwort für den Zugriff auf %1$s wurde an Sie versandt", + "Password to access {file} was sent to you" : " Passwort für den Zugriff auf {file} wurde an Sie versandt ", "Sharing %s failed, this item is already shared with %s" : "Teilen von %s fehlgeschlagen, da dieses Objekt schon mit %s geteilt wurde", "We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Automatisch erstelltes Passwort kann nicht versandt werden. Bitte geben Sie in Ihren persönlichen Einstellungen eine gültige E-Mail-Adresse ein und versuche Sie es erneut.", "Failed to send share by E-mail" : "Fehler beim Senden der Freigabe per E-Mail", @@ -37,7 +37,7 @@ OC.L10N.register( "You can choose a different password at any time in the share dialog." : "Im Teilen-Dialog können Sie jederzeit ein anderes Passwort wählen.", "Could not find share" : "Freigabe konnte nicht gefunden werden", "Share by mail" : "Geteilt über eine E-Mail", - "Send a personalized link to a file or folder by mail." : "Einen personalisierten Link zu einer Datei oder Ordner per E-Mail versenden.", + "Allows users to share a personalized link to a file or folder by putting in an email address." : "Ermöglicht Nutzern eine personalisierte Verknüpfung zu einer Datei oder einem Ordner durch Eingabe einer E-Mail-Adresse zu teilen.", "Send password by mail" : "Passwort per Mail senden", "Enforce password protection" : "Passwortschutz erzwingen", "Failed to create the E-mail" : "Erstellen der E-Mail fehlgeschlagen", diff --git a/apps/sharebymail/l10n/de_DE.json b/apps/sharebymail/l10n/de_DE.json index 5f006cbf504..bf55e9e0399 100644 --- a/apps/sharebymail/l10n/de_DE.json +++ b/apps/sharebymail/l10n/de_DE.json @@ -10,10 +10,10 @@ "You shared {file} with {email} by mail" : "Sie haben {file} mit {email} per E-Mail geteilt ", "%3$s shared %1$s with %2$s by mail" : "%3$s hat %1$s mit %2$s per E-Mail geteilt", "{actor} shared {file} with {email} by mail" : "{actor} hat {file} mit {email} per E-Mail geteilt", - "Password to access %1$s was send to %2s" : "Passwort für den Zugriff auf %1$s wurde an %2s versandt", - "Password to access {file} was send to {email}" : "Passwort für den Zugriff auf {file} wurde an {email} versandt", - "Password to access %1$s was send to you" : "Passwort für den Zugriff auf %1$s wurde an Sie versandt", - "Password to access {file} was send to you" : "Passwort für den Zugriff auf {file} wurde an Sie versandt", + "Password to access %1$s was sent to %2s" : "Passwort für den Zugriff auf %1$s wurde an %2s versandt ", + "Password to access {file} was sent to {email}" : "Passwort für den Zugriff auf {file} wurde an {email} versandt ", + "Password to access %1$s was sent to you" : "Passwort für den Zugriff auf %1$s wurde an Sie versandt", + "Password to access {file} was sent to you" : " Passwort für den Zugriff auf {file} wurde an Sie versandt ", "Sharing %s failed, this item is already shared with %s" : "Teilen von %s fehlgeschlagen, da dieses Objekt schon mit %s geteilt wurde", "We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Automatisch erstelltes Passwort kann nicht versandt werden. Bitte geben Sie in Ihren persönlichen Einstellungen eine gültige E-Mail-Adresse ein und versuche Sie es erneut.", "Failed to send share by E-mail" : "Fehler beim Senden der Freigabe per E-Mail", @@ -35,7 +35,7 @@ "You can choose a different password at any time in the share dialog." : "Im Teilen-Dialog können Sie jederzeit ein anderes Passwort wählen.", "Could not find share" : "Freigabe konnte nicht gefunden werden", "Share by mail" : "Geteilt über eine E-Mail", - "Send a personalized link to a file or folder by mail." : "Einen personalisierten Link zu einer Datei oder Ordner per E-Mail versenden.", + "Allows users to share a personalized link to a file or folder by putting in an email address." : "Ermöglicht Nutzern eine personalisierte Verknüpfung zu einer Datei oder einem Ordner durch Eingabe einer E-Mail-Adresse zu teilen.", "Send password by mail" : "Passwort per Mail senden", "Enforce password protection" : "Passwortschutz erzwingen", "Failed to create the E-mail" : "Erstellen der E-Mail fehlgeschlagen", diff --git a/apps/sharebymail/l10n/el.js b/apps/sharebymail/l10n/el.js index 9e78fdf3667..bcd7944b8ff 100644 --- a/apps/sharebymail/l10n/el.js +++ b/apps/sharebymail/l10n/el.js @@ -9,10 +9,6 @@ OC.L10N.register( "You shared {file} with {email} by mail" : "Διαμοιραστήκατε {file} με {email} μέσω mail", "%3$s shared %1$s with %2$s by mail" : "%3$s Διαμοιραστηκε %1$s με %2$s μέσω mail", "{actor} shared {file} with {email} by mail" : "{actor} διαμοίρασε {file} με {email} μέσω mail", - "Password to access %1$s was send to %2s" : "Συνθηματικό για πρόσβαση στο %1$s στάλθηκε στο %2s", - "Password to access {file} was send to {email}" : "Συνθηματικό για πρόσβαση στο {file} στάλθηκε στο {email}", - "Password to access %1$s was send to you" : "Συνθηματικό για πρόσβαση στο %1$s στάλθηκε σε εσάς", - "Password to access {file} was send to you" : "Συνθηματικό για πρόσβαση στο {file} στάλθηκε σε εσας", "Sharing %s failed, this item is already shared with %s" : "Διαμοιρασμός %s απέτυχε, αυτό το αντικείμενο είναι ήδη διαμοιρασμένο με %s", "We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Δεν μπορούμε να σας στείλουμε αυτοδημιουργημένο συνθηματικό. Παρακαλούμε βάλτε μία έγκυρη διεύθυνση email στις προσωπικές σας ρυθμίσεις και προσπαθήστε ξανά.", "Failed to send share by E-mail" : "Αποτυχία αποστολής συνδέσμου διαμοιρασμού μέσω Ηλ.ταχυδρομείου", @@ -34,7 +30,6 @@ OC.L10N.register( "You can choose a different password at any time in the share dialog." : "Μπορείτε να διαλέξετε ένα διαφορετικό συνθηματικό οποιαδήποτε στιγμή στον διάλογο διαμοιρασμού.", "Could not find share" : "Αδυναμία εύρεσης κοινόχρηστου", "Share by mail" : "Διαμοιρασμός με ηλεκτρονική αλληλογραφία", - "Send a personalized link to a file or folder by mail." : "Στείλτε έναν εξατομικευμένο σύνδεσμο σε ένα αρχείο ή φάκελο μέσω mail.", "Send password by mail" : "Αποστολή συνθηματικου με ηλεκτρονική αλληλογραφία", "Enforce password protection" : "Επιβάλετε προστασία συνθηματικού", "Failed to create the E-mail" : "Αποτυχία δημιουργίας του Ηλ.ταχυδρομείου", diff --git a/apps/sharebymail/l10n/el.json b/apps/sharebymail/l10n/el.json index cf364ce9efa..f5f4f5f88e6 100644 --- a/apps/sharebymail/l10n/el.json +++ b/apps/sharebymail/l10n/el.json @@ -7,10 +7,6 @@ "You shared {file} with {email} by mail" : "Διαμοιραστήκατε {file} με {email} μέσω mail", "%3$s shared %1$s with %2$s by mail" : "%3$s Διαμοιραστηκε %1$s με %2$s μέσω mail", "{actor} shared {file} with {email} by mail" : "{actor} διαμοίρασε {file} με {email} μέσω mail", - "Password to access %1$s was send to %2s" : "Συνθηματικό για πρόσβαση στο %1$s στάλθηκε στο %2s", - "Password to access {file} was send to {email}" : "Συνθηματικό για πρόσβαση στο {file} στάλθηκε στο {email}", - "Password to access %1$s was send to you" : "Συνθηματικό για πρόσβαση στο %1$s στάλθηκε σε εσάς", - "Password to access {file} was send to you" : "Συνθηματικό για πρόσβαση στο {file} στάλθηκε σε εσας", "Sharing %s failed, this item is already shared with %s" : "Διαμοιρασμός %s απέτυχε, αυτό το αντικείμενο είναι ήδη διαμοιρασμένο με %s", "We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Δεν μπορούμε να σας στείλουμε αυτοδημιουργημένο συνθηματικό. Παρακαλούμε βάλτε μία έγκυρη διεύθυνση email στις προσωπικές σας ρυθμίσεις και προσπαθήστε ξανά.", "Failed to send share by E-mail" : "Αποτυχία αποστολής συνδέσμου διαμοιρασμού μέσω Ηλ.ταχυδρομείου", @@ -32,7 +28,6 @@ "You can choose a different password at any time in the share dialog." : "Μπορείτε να διαλέξετε ένα διαφορετικό συνθηματικό οποιαδήποτε στιγμή στον διάλογο διαμοιρασμού.", "Could not find share" : "Αδυναμία εύρεσης κοινόχρηστου", "Share by mail" : "Διαμοιρασμός με ηλεκτρονική αλληλογραφία", - "Send a personalized link to a file or folder by mail." : "Στείλτε έναν εξατομικευμένο σύνδεσμο σε ένα αρχείο ή φάκελο μέσω mail.", "Send password by mail" : "Αποστολή συνθηματικου με ηλεκτρονική αλληλογραφία", "Enforce password protection" : "Επιβάλετε προστασία συνθηματικού", "Failed to create the E-mail" : "Αποτυχία δημιουργίας του Ηλ.ταχυδρομείου", diff --git a/apps/sharebymail/l10n/es_MX.js b/apps/sharebymail/l10n/es_MX.js index 6af9a6b8881..7125a06f248 100644 --- a/apps/sharebymail/l10n/es_MX.js +++ b/apps/sharebymail/l10n/es_MX.js @@ -12,10 +12,10 @@ OC.L10N.register( "You shared {file} with {email} by mail" : "Usted ha compartido {file} con {email} por correo", "%3$s shared %1$s with %2$s by mail" : "%3$s ha compartido %1$s con %2$s por correo ", "{actor} shared {file} with {email} by mail" : "{actor} ha compartido {file} con {email} por correo", - "Password to access %1$s was send to %2s" : "La contraseña para acceder a %1$s fue enviada a %2s", - "Password to access {file} was send to {email}" : "La contraseña para acceder {file} fue enviada a {email}", - "Password to access %1$s was send to you" : "La contraseña para acceder %1$s le ha sido enviada", - "Password to access {file} was send to you" : "La contraseña para acceder {file} le ha sido enviada", + "Password to access %1$s was sent to %2s" : "La contraseña para acceder %1$s fue enviada a %2s", + "Password to access {file} was sent to {email}" : "La contraseña para acceder {file} ha sido enviada a {email}", + "Password to access %1$s was sent to you" : "La contraseña para acceder %1$s se le ha sido enviada ", + "Password to access {file} was sent to you" : "La contraseña para acceder {file} se le ha sido enviada", "Sharing %s failed, this item is already shared with %s" : "Se presentó una falla al compartir %s, este elemento ya ha sido compartido con %s", "We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "No es posible enviarle la contraseña auto-generada. Favor de establecer una dirección de correo electrónico váilida en sus ajustes personales y volver a intentarlo.", "Failed to send share by E-mail" : "Se presentó una falla al enviar el recurso compartido por correo electrónico", @@ -37,7 +37,7 @@ OC.L10N.register( "You can choose a different password at any time in the share dialog." : "Puede elegir una contraseña diferente en cualquier momento en la ventana de diálogo de compartir. ", "Could not find share" : "No fue posible encontrar el elemento compartido", "Share by mail" : "Compartir por correo", - "Send a personalized link to a file or folder by mail." : "Enviar por correo una liga personalizada a un archivo o carpeta.", + "Allows users to share a personalized link to a file or folder by putting in an email address." : "Le permite a los usuarios compartir una liga personalizada a un archivo o carpeta colocando una dirección de correo eletrónico. ", "Send password by mail" : "La contraseña ha sido enviada por correo", "Enforce password protection" : "Forzar protección con contraseña", "Failed to create the E-mail" : "Se presentó una falla al crear el correo electrónico", diff --git a/apps/sharebymail/l10n/es_MX.json b/apps/sharebymail/l10n/es_MX.json index cb6f605aaba..8742d099955 100644 --- a/apps/sharebymail/l10n/es_MX.json +++ b/apps/sharebymail/l10n/es_MX.json @@ -10,10 +10,10 @@ "You shared {file} with {email} by mail" : "Usted ha compartido {file} con {email} por correo", "%3$s shared %1$s with %2$s by mail" : "%3$s ha compartido %1$s con %2$s por correo ", "{actor} shared {file} with {email} by mail" : "{actor} ha compartido {file} con {email} por correo", - "Password to access %1$s was send to %2s" : "La contraseña para acceder a %1$s fue enviada a %2s", - "Password to access {file} was send to {email}" : "La contraseña para acceder {file} fue enviada a {email}", - "Password to access %1$s was send to you" : "La contraseña para acceder %1$s le ha sido enviada", - "Password to access {file} was send to you" : "La contraseña para acceder {file} le ha sido enviada", + "Password to access %1$s was sent to %2s" : "La contraseña para acceder %1$s fue enviada a %2s", + "Password to access {file} was sent to {email}" : "La contraseña para acceder {file} ha sido enviada a {email}", + "Password to access %1$s was sent to you" : "La contraseña para acceder %1$s se le ha sido enviada ", + "Password to access {file} was sent to you" : "La contraseña para acceder {file} se le ha sido enviada", "Sharing %s failed, this item is already shared with %s" : "Se presentó una falla al compartir %s, este elemento ya ha sido compartido con %s", "We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "No es posible enviarle la contraseña auto-generada. Favor de establecer una dirección de correo electrónico váilida en sus ajustes personales y volver a intentarlo.", "Failed to send share by E-mail" : "Se presentó una falla al enviar el recurso compartido por correo electrónico", @@ -35,7 +35,7 @@ "You can choose a different password at any time in the share dialog." : "Puede elegir una contraseña diferente en cualquier momento en la ventana de diálogo de compartir. ", "Could not find share" : "No fue posible encontrar el elemento compartido", "Share by mail" : "Compartir por correo", - "Send a personalized link to a file or folder by mail." : "Enviar por correo una liga personalizada a un archivo o carpeta.", + "Allows users to share a personalized link to a file or folder by putting in an email address." : "Le permite a los usuarios compartir una liga personalizada a un archivo o carpeta colocando una dirección de correo eletrónico. ", "Send password by mail" : "La contraseña ha sido enviada por correo", "Enforce password protection" : "Forzar protección con contraseña", "Failed to create the E-mail" : "Se presentó una falla al crear el correo electrónico", diff --git a/apps/sharebymail/l10n/fr.js b/apps/sharebymail/l10n/fr.js index dfbab595012..7e0234445de 100644 --- a/apps/sharebymail/l10n/fr.js +++ b/apps/sharebymail/l10n/fr.js @@ -12,10 +12,10 @@ OC.L10N.register( "You shared {file} with {email} by mail" : "Vous avez partagé {file} avec {email} par email", "%3$s shared %1$s with %2$s by mail" : "%3$s a partagé %1$s avec %2$s par email", "{actor} shared {file} with {email} by mail" : "{actor} a partagé {file} avec {email} par email", - "Password to access %1$s was send to %2s" : "Le mot de passe pour accèder à %1$s a été envoyé à %2s", - "Password to access {file} was send to {email}" : "Le mot de passe pour accèder à {file} a été envoyé à {email}", - "Password to access %1$s was send to you" : "Le mot de passe pour accèder à %1$s vous a été envoyé", - "Password to access {file} was send to you" : "Le mot de passe pour accèder à {file} vous a été envoyé", + "Password to access %1$s was sent to %2s" : "Le mot de passe pour accèder à %1$s a été envoyé à %2s", + "Password to access {file} was sent to {email}" : "Le mot de passe pour accèder à {file} a été envoyé à {email}", + "Password to access %1$s was sent to you" : "Le mot de passe pour accèder à %1$s vous a été envoyé", + "Password to access {file} was sent to you" : "Le mot de passe pour accèder à {file} vous a été envoyé", "Sharing %s failed, this item is already shared with %s" : "Le partage de %s a échoué, cet élément est déjà partagé avec %s", "We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Nous ne pouvons pas vous envoyer le mot de passe généré automatiquement. Veuillez renseigner une adresse e-mail valide dans vos paramètres personnels puis réessayer.", "Failed to send share by E-mail" : "Erreur lors de l'envoi du partage par email", @@ -37,7 +37,7 @@ OC.L10N.register( "You can choose a different password at any time in the share dialog." : "Vous pouvez choisir un mot de passe différent à n'importe quel moment dans la boîte de dialogue de partage.", "Could not find share" : "Impossible de trouver le partage", "Share by mail" : "Partage par email", - "Send a personalized link to a file or folder by mail." : "Envoyer un lien personnalisé vers un fichier ou un dossier par email.", + "Allows users to share a personalized link to a file or folder by putting in an email address." : "Autoriser les utilisateurs de partager un lien personnalisé vers un fichier ou un dossier en renseignant une adresse e-mail.", "Send password by mail" : "Envoyer le mot de passe par email", "Enforce password protection" : "Imposer la protection par mot de passe", "Failed to create the E-mail" : "Erreur lors de la création du mail", diff --git a/apps/sharebymail/l10n/fr.json b/apps/sharebymail/l10n/fr.json index a4e5256a162..7cec364918f 100644 --- a/apps/sharebymail/l10n/fr.json +++ b/apps/sharebymail/l10n/fr.json @@ -10,10 +10,10 @@ "You shared {file} with {email} by mail" : "Vous avez partagé {file} avec {email} par email", "%3$s shared %1$s with %2$s by mail" : "%3$s a partagé %1$s avec %2$s par email", "{actor} shared {file} with {email} by mail" : "{actor} a partagé {file} avec {email} par email", - "Password to access %1$s was send to %2s" : "Le mot de passe pour accèder à %1$s a été envoyé à %2s", - "Password to access {file} was send to {email}" : "Le mot de passe pour accèder à {file} a été envoyé à {email}", - "Password to access %1$s was send to you" : "Le mot de passe pour accèder à %1$s vous a été envoyé", - "Password to access {file} was send to you" : "Le mot de passe pour accèder à {file} vous a été envoyé", + "Password to access %1$s was sent to %2s" : "Le mot de passe pour accèder à %1$s a été envoyé à %2s", + "Password to access {file} was sent to {email}" : "Le mot de passe pour accèder à {file} a été envoyé à {email}", + "Password to access %1$s was sent to you" : "Le mot de passe pour accèder à %1$s vous a été envoyé", + "Password to access {file} was sent to you" : "Le mot de passe pour accèder à {file} vous a été envoyé", "Sharing %s failed, this item is already shared with %s" : "Le partage de %s a échoué, cet élément est déjà partagé avec %s", "We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Nous ne pouvons pas vous envoyer le mot de passe généré automatiquement. Veuillez renseigner une adresse e-mail valide dans vos paramètres personnels puis réessayer.", "Failed to send share by E-mail" : "Erreur lors de l'envoi du partage par email", @@ -35,7 +35,7 @@ "You can choose a different password at any time in the share dialog." : "Vous pouvez choisir un mot de passe différent à n'importe quel moment dans la boîte de dialogue de partage.", "Could not find share" : "Impossible de trouver le partage", "Share by mail" : "Partage par email", - "Send a personalized link to a file or folder by mail." : "Envoyer un lien personnalisé vers un fichier ou un dossier par email.", + "Allows users to share a personalized link to a file or folder by putting in an email address." : "Autoriser les utilisateurs de partager un lien personnalisé vers un fichier ou un dossier en renseignant une adresse e-mail.", "Send password by mail" : "Envoyer le mot de passe par email", "Enforce password protection" : "Imposer la protection par mot de passe", "Failed to create the E-mail" : "Erreur lors de la création du mail", diff --git a/apps/sharebymail/l10n/is.js b/apps/sharebymail/l10n/is.js index 48bba82928c..15d6784a18a 100644 --- a/apps/sharebymail/l10n/is.js +++ b/apps/sharebymail/l10n/is.js @@ -5,16 +5,32 @@ OC.L10N.register( "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}", + "Password for mail share sent to %1$s" : "Lykilorð fyrir póstsameign var sent til %1$s", + "Password for mail share sent to {email}" : "Lykilorð fyrir póstsameign var sent til {email}", + "Password for mail share sent to you" : "Lykilorð fyrir póstsameign var sent til þín", "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", + "Password to access %1$s was sent to %2s" : "Lykilorð fyrir aðgang að %1$s var sent til %2s", + "Password to access {file} was sent to {email}" : "Lykilorð fyrir aðgang að {file} var sent til {email}", + "Password to access %1$s was sent to you" : "Lykilorð fyrir aðgang að %1$s var sent til þín", + "Password to access {file} was sent to you" : "Lykilorð fyrir aðgang að {file} var sent til þín", "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", + "%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", + "Click the button below to open it." : "Smelltu á tengilinn hér fyrir neðan til að opna það.", + "Open »%s«" : "Opna »%s«", + "%s via %s" : "%s með %s", + "Password to access »%s«" : "Lykilorð fyrir aðgang að »%s«", "Could not find share" : "Gat ekki fundið sameign", + "Share by mail" : "Deila með tölvupósti", + "Send password by mail" : "Senda lykilorð með pósti", + "Enforce password protection" : "Krefjast verndunar með aðgangsorði", + "Failed to create the E-mail" : "Mistókst að útbúa tölvupóstinn", "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!", diff --git a/apps/sharebymail/l10n/is.json b/apps/sharebymail/l10n/is.json index 915c340c87c..4ba0afd02cf 100644 --- a/apps/sharebymail/l10n/is.json +++ b/apps/sharebymail/l10n/is.json @@ -3,16 +3,32 @@ "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}", + "Password for mail share sent to %1$s" : "Lykilorð fyrir póstsameign var sent til %1$s", + "Password for mail share sent to {email}" : "Lykilorð fyrir póstsameign var sent til {email}", + "Password for mail share sent to you" : "Lykilorð fyrir póstsameign var sent til þín", "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", + "Password to access %1$s was sent to %2s" : "Lykilorð fyrir aðgang að %1$s var sent til %2s", + "Password to access {file} was sent to {email}" : "Lykilorð fyrir aðgang að {file} var sent til {email}", + "Password to access %1$s was sent to you" : "Lykilorð fyrir aðgang að %1$s var sent til þín", + "Password to access {file} was sent to you" : "Lykilorð fyrir aðgang að {file} var sent til þín", "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", + "%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", + "Click the button below to open it." : "Smelltu á tengilinn hér fyrir neðan til að opna það.", + "Open »%s«" : "Opna »%s«", + "%s via %s" : "%s með %s", + "Password to access »%s«" : "Lykilorð fyrir aðgang að »%s«", "Could not find share" : "Gat ekki fundið sameign", + "Share by mail" : "Deila með tölvupósti", + "Send password by mail" : "Senda lykilorð með pósti", + "Enforce password protection" : "Krefjast verndunar með aðgangsorði", + "Failed to create the E-mail" : "Mistókst að útbúa tölvupóstinn", "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!", diff --git a/apps/sharebymail/l10n/nb.js b/apps/sharebymail/l10n/nb.js index 0e308b95a11..9d2ba5fc775 100644 --- a/apps/sharebymail/l10n/nb.js +++ b/apps/sharebymail/l10n/nb.js @@ -5,11 +5,19 @@ OC.L10N.register( "Shared with {email}" : "Delt med {email}", "Shared with %1$s by %2$s" : "Delt med %1$s via %2$s", "Shared with {email} by {actor}" : "Delt med {email} av {actor}", + "Password for mail share sent to %1$s" : "Passord for e-postlager sendt til %1$s", + "Password for mail share sent to {email}" : "Passord for e-postlager sendt til {email}", + "Password for mail share sent to you" : "Passord for e-postlager sendt til deg", "You shared %1$s with %2$s by mail" : "Du delte %1$s med %2$s via e-post", "You shared {file} with {email} by mail" : "Du delte {file} med {email} via e-post", "%3$s shared %1$s with %2$s by mail" : "%3$s delte %1$s med %2$s via e-post", "{actor} shared {file} with {email} by mail" : "{actor} delte {file} med {email} via e-post", + "Password to access %1$s was sent to %2s" : "Passord for tilgang til %1$s sendt til %2s", + "Password to access {file} was sent to {email}" : "Passord for tilgang til {file} ble sendt til {email}", + "Password to access %1$s was sent to you" : "Passord for tilgang til %1$s ble sendt til deg", + "Password to access {file} was sent to you" : "Du ble tildelt passord for å benytte {file}", "Sharing %s failed, this item is already shared with %s" : "Deling %s feilet, dette elementet er allerede delt med %s", + "We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Vi kan ikke sende det auto-genererte passordet. Angi en gyldig e-postadresse i dine personlige innstillinger og prøv igjen.", "Failed to send share by E-mail" : "Feilet når delingen skulle sendes på epost", "%s shared »%s« with you" : "%s delte »%s« med deg", "%s shared »%s« with you on behalf of %s" : "%s delte »%s« med deg på vegne av %s", @@ -24,11 +32,12 @@ OC.L10N.register( "Password to access »%s«" : "Passord for å benytte »%s«", "It is protected with the following password: %s" : "Den er beskyttet med følgende passord: %s", "Password to access »%s« shared with %s" : "Passord for å benytte »%s« delt med %s", + "You just shared »%s« with %s. The share was already send to the recipient. Due to the security policies defined by the administrator of %s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Du delte akkurat »%s« med %s. Lageret har allerede blitt sendt til mottakeren. På grunn av sikkerhetspraksisen definert av administratoren for %s må hvert lager beskyttes med et passord, og det tillates ikke sendt direkte til mottakeren. Derfor trenger du å sende passordet manuelt til mottakeren.", "This is the password: %s" : "Dette er passordet: %s", "You can choose a different password at any time in the share dialog." : "Du kan velge et annet passord når som helst i delingsdialogvinduet.", "Could not find share" : "Delingen ble ikke funnet", "Share by mail" : "Del via e-post", - "Send a personalized link to a file or folder by mail." : "Send en personalisert lenke til ei fil eller mappe via e-post.", + "Allows users to share a personalized link to a file or folder by putting in an email address." : "Tillater brukere å dele en personalisert lenke til ei fil eller mappe ved å skrive inn en e-postadresse.", "Send password by mail" : "Send passord via e-post", "Enforce password protection" : "Krev passordbeskyttelse", "Failed to create the E-mail" : "Feilet ved opprettelse av epost", diff --git a/apps/sharebymail/l10n/nb.json b/apps/sharebymail/l10n/nb.json index 06f4d73e218..58c50c7af91 100644 --- a/apps/sharebymail/l10n/nb.json +++ b/apps/sharebymail/l10n/nb.json @@ -3,11 +3,19 @@ "Shared with {email}" : "Delt med {email}", "Shared with %1$s by %2$s" : "Delt med %1$s via %2$s", "Shared with {email} by {actor}" : "Delt med {email} av {actor}", + "Password for mail share sent to %1$s" : "Passord for e-postlager sendt til %1$s", + "Password for mail share sent to {email}" : "Passord for e-postlager sendt til {email}", + "Password for mail share sent to you" : "Passord for e-postlager sendt til deg", "You shared %1$s with %2$s by mail" : "Du delte %1$s med %2$s via e-post", "You shared {file} with {email} by mail" : "Du delte {file} med {email} via e-post", "%3$s shared %1$s with %2$s by mail" : "%3$s delte %1$s med %2$s via e-post", "{actor} shared {file} with {email} by mail" : "{actor} delte {file} med {email} via e-post", + "Password to access %1$s was sent to %2s" : "Passord for tilgang til %1$s sendt til %2s", + "Password to access {file} was sent to {email}" : "Passord for tilgang til {file} ble sendt til {email}", + "Password to access %1$s was sent to you" : "Passord for tilgang til %1$s ble sendt til deg", + "Password to access {file} was sent to you" : "Du ble tildelt passord for å benytte {file}", "Sharing %s failed, this item is already shared with %s" : "Deling %s feilet, dette elementet er allerede delt med %s", + "We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Vi kan ikke sende det auto-genererte passordet. Angi en gyldig e-postadresse i dine personlige innstillinger og prøv igjen.", "Failed to send share by E-mail" : "Feilet når delingen skulle sendes på epost", "%s shared »%s« with you" : "%s delte »%s« med deg", "%s shared »%s« with you on behalf of %s" : "%s delte »%s« med deg på vegne av %s", @@ -22,11 +30,12 @@ "Password to access »%s«" : "Passord for å benytte »%s«", "It is protected with the following password: %s" : "Den er beskyttet med følgende passord: %s", "Password to access »%s« shared with %s" : "Passord for å benytte »%s« delt med %s", + "You just shared »%s« with %s. The share was already send to the recipient. Due to the security policies defined by the administrator of %s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Du delte akkurat »%s« med %s. Lageret har allerede blitt sendt til mottakeren. På grunn av sikkerhetspraksisen definert av administratoren for %s må hvert lager beskyttes med et passord, og det tillates ikke sendt direkte til mottakeren. Derfor trenger du å sende passordet manuelt til mottakeren.", "This is the password: %s" : "Dette er passordet: %s", "You can choose a different password at any time in the share dialog." : "Du kan velge et annet passord når som helst i delingsdialogvinduet.", "Could not find share" : "Delingen ble ikke funnet", "Share by mail" : "Del via e-post", - "Send a personalized link to a file or folder by mail." : "Send en personalisert lenke til ei fil eller mappe via e-post.", + "Allows users to share a personalized link to a file or folder by putting in an email address." : "Tillater brukere å dele en personalisert lenke til ei fil eller mappe ved å skrive inn en e-postadresse.", "Send password by mail" : "Send passord via e-post", "Enforce password protection" : "Krev passordbeskyttelse", "Failed to create the E-mail" : "Feilet ved opprettelse av epost", diff --git a/apps/sharebymail/l10n/nl.js b/apps/sharebymail/l10n/nl.js index 99f0908711a..e62d1877980 100644 --- a/apps/sharebymail/l10n/nl.js +++ b/apps/sharebymail/l10n/nl.js @@ -12,10 +12,10 @@ OC.L10N.register( "You shared {file} with {email} by mail" : "Je deelde {file} met {email} via e-mail", "%3$s shared %1$s with %2$s by mail" : "%3$s deelde %1$s met %2$s via e-mail", "{actor} shared {file} with {email} by mail" : "{actor} deelde {file} met {email} via e-mail", - "Password to access %1$s was send to %2s" : "Wachtwoord voor toegang tot %1$s gestuurd naar %2s", - "Password to access {file} was send to {email}" : "Wachtwoord voor toegang tot {file} gestuurd naar {email}", - "Password to access %1$s was send to you" : "Wachtwoord voor toegang tot %1$s naar jou gestuurd", - "Password to access {file} was send to you" : "Wachtwoord voor toegang tot {file} naar jou gestuurd", + "Password to access %1$s was sent to %2s" : "Wachtwoord voor toegang tot %1$s is gestuurd naar %2s", + "Password to access {file} was sent to {email}" : "Wachtwoord voor toegang tot {file} is gestuurd naar {email}", + "Password to access %1$s was sent to you" : "Wachtwoord voor toegang tot %1$s is naar jou gestuurd", + "Password to access {file} was sent to you" : "Wachtwoord voor toegang tot {file} is naar jou gestuurd", "Sharing %s failed, this item is already shared with %s" : "Delen van %s is mislukt, omdat dit al gedeeld wordt met %s", "We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "We kunnen je geen automatisch gegenereerd wachtwoord toesturen. Vermeld een geldig e-mailadres in je persoonlijke instellingen en probeer het nogmaals.", "Failed to send share by E-mail" : "Fout bij delen via e-mail", @@ -37,7 +37,6 @@ OC.L10N.register( "You can choose a different password at any time in the share dialog." : "Je kunt in de Delen-dialoog altijd een ander wachtwoord kiezen.", "Could not find share" : "Kon gedeeld niet vinden", "Share by mail" : "Gedeeld via een E-mail", - "Send a personalized link to a file or folder by mail." : "Zend een gepersonialiseerde link naar een bestand of map per mail.", "Send password by mail" : "Wachtwoord per E-mail verzenden", "Enforce password protection" : "Afdwingenwachtwoordbeveiliging", "Failed to create the E-mail" : "Opmaken van de e-mail is mislukt", diff --git a/apps/sharebymail/l10n/nl.json b/apps/sharebymail/l10n/nl.json index ae63900e6b9..429f57e4597 100644 --- a/apps/sharebymail/l10n/nl.json +++ b/apps/sharebymail/l10n/nl.json @@ -10,10 +10,10 @@ "You shared {file} with {email} by mail" : "Je deelde {file} met {email} via e-mail", "%3$s shared %1$s with %2$s by mail" : "%3$s deelde %1$s met %2$s via e-mail", "{actor} shared {file} with {email} by mail" : "{actor} deelde {file} met {email} via e-mail", - "Password to access %1$s was send to %2s" : "Wachtwoord voor toegang tot %1$s gestuurd naar %2s", - "Password to access {file} was send to {email}" : "Wachtwoord voor toegang tot {file} gestuurd naar {email}", - "Password to access %1$s was send to you" : "Wachtwoord voor toegang tot %1$s naar jou gestuurd", - "Password to access {file} was send to you" : "Wachtwoord voor toegang tot {file} naar jou gestuurd", + "Password to access %1$s was sent to %2s" : "Wachtwoord voor toegang tot %1$s is gestuurd naar %2s", + "Password to access {file} was sent to {email}" : "Wachtwoord voor toegang tot {file} is gestuurd naar {email}", + "Password to access %1$s was sent to you" : "Wachtwoord voor toegang tot %1$s is naar jou gestuurd", + "Password to access {file} was sent to you" : "Wachtwoord voor toegang tot {file} is naar jou gestuurd", "Sharing %s failed, this item is already shared with %s" : "Delen van %s is mislukt, omdat dit al gedeeld wordt met %s", "We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "We kunnen je geen automatisch gegenereerd wachtwoord toesturen. Vermeld een geldig e-mailadres in je persoonlijke instellingen en probeer het nogmaals.", "Failed to send share by E-mail" : "Fout bij delen via e-mail", @@ -35,7 +35,6 @@ "You can choose a different password at any time in the share dialog." : "Je kunt in de Delen-dialoog altijd een ander wachtwoord kiezen.", "Could not find share" : "Kon gedeeld niet vinden", "Share by mail" : "Gedeeld via een E-mail", - "Send a personalized link to a file or folder by mail." : "Zend een gepersonialiseerde link naar een bestand of map per mail.", "Send password by mail" : "Wachtwoord per E-mail verzenden", "Enforce password protection" : "Afdwingenwachtwoordbeveiliging", "Failed to create the E-mail" : "Opmaken van de e-mail is mislukt", diff --git a/apps/sharebymail/l10n/pt_BR.js b/apps/sharebymail/l10n/pt_BR.js index 546f4d6a91f..edc96e08ef2 100644 --- a/apps/sharebymail/l10n/pt_BR.js +++ b/apps/sharebymail/l10n/pt_BR.js @@ -12,10 +12,10 @@ OC.L10N.register( "You shared {file} with {email} by mail" : "Você compartilhou {file} com {email} por email", "%3$s shared %1$s with %2$s by mail" : "%3$s compartilou %1$s com %2$s por email", "{actor} shared {file} with {email} by mail" : "{actor} compartilhou {file} com {email} por email", - "Password to access %1$s was send to %2s" : "A senha para acessar %1$s foi enviada para %2s", - "Password to access {file} was send to {email}" : "A senha para acessar {file} foi enviada para {email}", - "Password to access %1$s was send to you" : "A senha para acessar %1$s foi enviada para você", - "Password to access {file} was send to you" : "A senha para acessar {file} foi enviada para você", + "Password to access %1$s was sent to %2s" : "A senha para acesso %1$s foi enviada para %2s", + "Password to access {file} was sent to {email}" : "A senha para acesso {file} foi enviada para {email}", + "Password to access %1$s was sent to you" : "A senha para acesso %1$s foi enviada para você", + "Password to access {file} was sent to you" : "A senha para acesso {file} foi enviada para você", "Sharing %s failed, this item is already shared with %s" : "O compartilhamento %s falhou, pois este item já está compartilhado com %s", "We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Não pudemos enviar a você a senha auto-gerada. por favor defina um email válido em sua configuração e tente novamente.", "Failed to send share by E-mail" : "Falha ao enviar compartilhamento por email", @@ -37,13 +37,13 @@ OC.L10N.register( "You can choose a different password at any time in the share dialog." : "Você pode escolher uma senha diferente a qualquer momento no diálogo compartilhamento.", "Could not find share" : "Não foi possível encontrar o compartilhamento", "Share by mail" : "Compartilhamento por email", - "Send a personalized link to a file or folder by mail." : "Envie um link personalizado para um arquivo ou pasta por email.", + "Allows users to share a personalized link to a file or folder by putting in an email address." : "Permite que os usuários compartilhem um link personalizado para um arquivo ou pasta, inserindo um endereço de email.", "Send password by mail" : "Enviar senha por email", "Enforce password protection" : "Reforce a proteção por senha", "Failed to create the E-mail" : "Falhou ao criar o email", "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Olá,\n%s compartilhou »%s« com você em nome de %s.\n%s\n\n", "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Olá,\n%s compartilhou »%s« com você.\n%s\n", - "Cheers!" : "Saúde!", + "Cheers!" : "Saudações!", "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Olá,<br><br>%s compartilhou <a href=\"%s\">%s</a> com você em nome de %s.<br><br>", "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Olá,<br><br>%s compartilhou <a href=\"%s\">%s</a> com você.<br><br>" }, diff --git a/apps/sharebymail/l10n/pt_BR.json b/apps/sharebymail/l10n/pt_BR.json index f71da37e9ea..014f325a457 100644 --- a/apps/sharebymail/l10n/pt_BR.json +++ b/apps/sharebymail/l10n/pt_BR.json @@ -10,10 +10,10 @@ "You shared {file} with {email} by mail" : "Você compartilhou {file} com {email} por email", "%3$s shared %1$s with %2$s by mail" : "%3$s compartilou %1$s com %2$s por email", "{actor} shared {file} with {email} by mail" : "{actor} compartilhou {file} com {email} por email", - "Password to access %1$s was send to %2s" : "A senha para acessar %1$s foi enviada para %2s", - "Password to access {file} was send to {email}" : "A senha para acessar {file} foi enviada para {email}", - "Password to access %1$s was send to you" : "A senha para acessar %1$s foi enviada para você", - "Password to access {file} was send to you" : "A senha para acessar {file} foi enviada para você", + "Password to access %1$s was sent to %2s" : "A senha para acesso %1$s foi enviada para %2s", + "Password to access {file} was sent to {email}" : "A senha para acesso {file} foi enviada para {email}", + "Password to access %1$s was sent to you" : "A senha para acesso %1$s foi enviada para você", + "Password to access {file} was sent to you" : "A senha para acesso {file} foi enviada para você", "Sharing %s failed, this item is already shared with %s" : "O compartilhamento %s falhou, pois este item já está compartilhado com %s", "We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Não pudemos enviar a você a senha auto-gerada. por favor defina um email válido em sua configuração e tente novamente.", "Failed to send share by E-mail" : "Falha ao enviar compartilhamento por email", @@ -35,13 +35,13 @@ "You can choose a different password at any time in the share dialog." : "Você pode escolher uma senha diferente a qualquer momento no diálogo compartilhamento.", "Could not find share" : "Não foi possível encontrar o compartilhamento", "Share by mail" : "Compartilhamento por email", - "Send a personalized link to a file or folder by mail." : "Envie um link personalizado para um arquivo ou pasta por email.", + "Allows users to share a personalized link to a file or folder by putting in an email address." : "Permite que os usuários compartilhem um link personalizado para um arquivo ou pasta, inserindo um endereço de email.", "Send password by mail" : "Enviar senha por email", "Enforce password protection" : "Reforce a proteção por senha", "Failed to create the E-mail" : "Falhou ao criar o email", "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Olá,\n%s compartilhou »%s« com você em nome de %s.\n%s\n\n", "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Olá,\n%s compartilhou »%s« com você.\n%s\n", - "Cheers!" : "Saúde!", + "Cheers!" : "Saudações!", "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Olá,<br><br>%s compartilhou <a href=\"%s\">%s</a> com você em nome de %s.<br><br>", "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Olá,<br><br>%s compartilhou <a href=\"%s\">%s</a> com você.<br><br>" },"pluralForm" :"nplurals=2; plural=(n > 1);" diff --git a/apps/sharebymail/l10n/ru.js b/apps/sharebymail/l10n/ru.js index ad8fe7f712f..c339c8a82a8 100644 --- a/apps/sharebymail/l10n/ru.js +++ b/apps/sharebymail/l10n/ru.js @@ -12,10 +12,6 @@ OC.L10N.register( "You shared {file} with {email} by mail" : "Вы предоставили общий доступ к {file} для {email} по email", "%3$s shared %1$s with %2$s by mail" : "%3$s предоставил общий доступ к %1$s для %2$s по email", "{actor} shared {file} with {email} by mail" : "{actor} предоставил общий доступ к {file} для {email} по email", - "Password to access %1$s was send to %2s" : "Пароль для доступа к %1$s отправлен %2s", - "Password to access {file} was send to {email}" : "Пароль для доступа к {file} отправлен {email}", - "Password to access %1$s was send to you" : "Пароль для доступа к %1$s отправлен вам", - "Password to access {file} was send to you" : "Пароль для доступа к {file} отправлен вам", "Sharing %s failed, this item is already shared with %s" : "Не удалось поделиться %s, к этому элементу уже предоставлен общий доступ для %s", "We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Не удаётся отправить вам автоматически созданный пароль. Укажите верный адрес email в своих личных настройках и попробуйте снова.", "Failed to send share by E-mail" : "Не удалось поделиться по e-mail", @@ -37,7 +33,6 @@ OC.L10N.register( "You can choose a different password at any time in the share dialog." : "В любой момент можно выбрать другой паорль в диалоге «Общий доступ».", "Could not find share" : "Не удалось найти общий ресурс", "Share by mail" : "Поделиться по почте", - "Send a personalized link to a file or folder by mail." : "Отправить персональную ссылку на файл или каталог по почте.", "Send password by mail" : "Отправить пароль почтой", "Enforce password protection" : "Требовать защиту паролем", "Failed to create the E-mail" : "Не удалось создать e-mail", diff --git a/apps/sharebymail/l10n/ru.json b/apps/sharebymail/l10n/ru.json index 38349f27a00..7e49354ab96 100644 --- a/apps/sharebymail/l10n/ru.json +++ b/apps/sharebymail/l10n/ru.json @@ -10,10 +10,6 @@ "You shared {file} with {email} by mail" : "Вы предоставили общий доступ к {file} для {email} по email", "%3$s shared %1$s with %2$s by mail" : "%3$s предоставил общий доступ к %1$s для %2$s по email", "{actor} shared {file} with {email} by mail" : "{actor} предоставил общий доступ к {file} для {email} по email", - "Password to access %1$s was send to %2s" : "Пароль для доступа к %1$s отправлен %2s", - "Password to access {file} was send to {email}" : "Пароль для доступа к {file} отправлен {email}", - "Password to access %1$s was send to you" : "Пароль для доступа к %1$s отправлен вам", - "Password to access {file} was send to you" : "Пароль для доступа к {file} отправлен вам", "Sharing %s failed, this item is already shared with %s" : "Не удалось поделиться %s, к этому элементу уже предоставлен общий доступ для %s", "We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Не удаётся отправить вам автоматически созданный пароль. Укажите верный адрес email в своих личных настройках и попробуйте снова.", "Failed to send share by E-mail" : "Не удалось поделиться по e-mail", @@ -35,7 +31,6 @@ "You can choose a different password at any time in the share dialog." : "В любой момент можно выбрать другой паорль в диалоге «Общий доступ».", "Could not find share" : "Не удалось найти общий ресурс", "Share by mail" : "Поделиться по почте", - "Send a personalized link to a file or folder by mail." : "Отправить персональную ссылку на файл или каталог по почте.", "Send password by mail" : "Отправить пароль почтой", "Enforce password protection" : "Требовать защиту паролем", "Failed to create the E-mail" : "Не удалось создать e-mail", diff --git a/apps/sharebymail/l10n/tr.js b/apps/sharebymail/l10n/tr.js index 6ec729f7278..191f0cfe54b 100644 --- a/apps/sharebymail/l10n/tr.js +++ b/apps/sharebymail/l10n/tr.js @@ -12,10 +12,10 @@ OC.L10N.register( "You shared {file} with {email} by mail" : "{file} dosyasını {email} ile e-posta üzerinden paylaştınız", "%3$s shared %1$s with %2$s by mail" : "%3$s, %1$s dosyasını %2$s ile e-posta üzerinden paylaştı", "{actor} shared {file} with {email} by mail" : "{actor}, {file} dosyasını {email} ile e-posta üzerinden paylaştı", - "Password to access %1$s was send to %2s" : "%1$s dosyasına erişim parolası %2s adresine gönderildi", - "Password to access {file} was send to {email}" : "{file} dosyasına erişim parolası {email} adresine gönderildi", - "Password to access %1$s was send to you" : "%1$s dosyasına erişim parolası size gönderildi", - "Password to access {file} was send to you" : "{file} dosyasına erişim parolası size gönderildi", + "Password to access %1$s was sent to %2s" : "%1$s dosyasına erişim parolası %2s adresine gönderildi", + "Password to access {file} was sent to {email}" : "{file} dosyasına erişim parolası {email} adresine gönderildi", + "Password to access %1$s was sent to you" : "%1$s dosyasına erişim parolası size gönderildi", + "Password to access {file} was sent to you" : "{file} dosyasına erişim parolası size gönderildi", "Sharing %s failed, this item is already shared with %s" : "%s paylaşılamadı, bu öge zaten %s ile paylaşılmış", "We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Otomatik üretilen parola size gönderilemedi. Lütfen kişisel ayarlarınızdan geçerli bir e-posta adresi ayarlayın ve yeniden deneyin.", "Failed to send share by E-mail" : "Paylaşım e-postası gönderilemedi", @@ -37,7 +37,7 @@ OC.L10N.register( "You can choose a different password at any time in the share dialog." : "İstediğiniz zaman paylaşım bölümünden farklı bir parola belirtebilirsiniz.", "Could not find share" : "Paylaşım bulunamadı", "Share by mail" : "E-posta ile paylaş", - "Send a personalized link to a file or folder by mail." : "Bir dosya ya da klasörün kişiselleştirilmiş bağlantısını e-posta ile gönderin.", + "Allows users to share a personalized link to a file or folder by putting in an email address." : "Kullanıcıların bir e-posta adresi yazarak bir dosya ya da klasör için kişisel bir bağlantı paylaşmasını sağlar.", "Send password by mail" : "Parolayı e-posta ile gönder", "Enforce password protection" : "Parola koruması dayatılsın", "Failed to create the E-mail" : "E-posta oluşturulamadı", diff --git a/apps/sharebymail/l10n/tr.json b/apps/sharebymail/l10n/tr.json index a10c5ff8986..9261dc3d3cb 100644 --- a/apps/sharebymail/l10n/tr.json +++ b/apps/sharebymail/l10n/tr.json @@ -10,10 +10,10 @@ "You shared {file} with {email} by mail" : "{file} dosyasını {email} ile e-posta üzerinden paylaştınız", "%3$s shared %1$s with %2$s by mail" : "%3$s, %1$s dosyasını %2$s ile e-posta üzerinden paylaştı", "{actor} shared {file} with {email} by mail" : "{actor}, {file} dosyasını {email} ile e-posta üzerinden paylaştı", - "Password to access %1$s was send to %2s" : "%1$s dosyasına erişim parolası %2s adresine gönderildi", - "Password to access {file} was send to {email}" : "{file} dosyasına erişim parolası {email} adresine gönderildi", - "Password to access %1$s was send to you" : "%1$s dosyasına erişim parolası size gönderildi", - "Password to access {file} was send to you" : "{file} dosyasına erişim parolası size gönderildi", + "Password to access %1$s was sent to %2s" : "%1$s dosyasına erişim parolası %2s adresine gönderildi", + "Password to access {file} was sent to {email}" : "{file} dosyasına erişim parolası {email} adresine gönderildi", + "Password to access %1$s was sent to you" : "%1$s dosyasına erişim parolası size gönderildi", + "Password to access {file} was sent to you" : "{file} dosyasına erişim parolası size gönderildi", "Sharing %s failed, this item is already shared with %s" : "%s paylaşılamadı, bu öge zaten %s ile paylaşılmış", "We can't send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Otomatik üretilen parola size gönderilemedi. Lütfen kişisel ayarlarınızdan geçerli bir e-posta adresi ayarlayın ve yeniden deneyin.", "Failed to send share by E-mail" : "Paylaşım e-postası gönderilemedi", @@ -35,7 +35,7 @@ "You can choose a different password at any time in the share dialog." : "İstediğiniz zaman paylaşım bölümünden farklı bir parola belirtebilirsiniz.", "Could not find share" : "Paylaşım bulunamadı", "Share by mail" : "E-posta ile paylaş", - "Send a personalized link to a file or folder by mail." : "Bir dosya ya da klasörün kişiselleştirilmiş bağlantısını e-posta ile gönderin.", + "Allows users to share a personalized link to a file or folder by putting in an email address." : "Kullanıcıların bir e-posta adresi yazarak bir dosya ya da klasör için kişisel bir bağlantı paylaşmasını sağlar.", "Send password by mail" : "Parolayı e-posta ile gönder", "Enforce password protection" : "Parola koruması dayatılsın", "Failed to create the E-mail" : "E-posta oluşturulamadı", diff --git a/apps/sharebymail/lib/Activity.php b/apps/sharebymail/lib/Activity.php index 6dc462bf492..73751cb241e 100644 --- a/apps/sharebymail/lib/Activity.php +++ b/apps/sharebymail/lib/Activity.php @@ -173,17 +173,17 @@ class Activity implements IProvider { ->setRichSubject($this->l->t('{actor} shared {file} with {email} by mail'), $parsedParameters) ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); } else if ($event->getSubject() === self::SUBJECT_SHARED_EMAIL_PASSWORD_SEND) { - $event->setParsedSubject($this->l->t('Password to access %1$s was send to %2s', [ + $event->setParsedSubject($this->l->t('Password to access %1$s was sent to %2s', [ $parsedParameters['file']['path'], $parsedParameters['email']['name'] ])) - ->setRichSubject($this->l->t('Password to access {file} was send to {email}'), $parsedParameters) + ->setRichSubject($this->l->t('Password to access {file} was sent to {email}'), $parsedParameters) ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); } else if ($event->getSubject() === self::SUBJECT_SHARED_EMAIL_PASSWORD_SEND_SELF) { $event->setParsedSubject( - $this->l->t('Password to access %1$s was send to you', + $this->l->t('Password to access %1$s was sent to you', [$parsedParameters['file']['path']])) - ->setRichSubject($this->l->t('Password to access {file} was send to you'), $parsedParameters) + ->setRichSubject($this->l->t('Password to access {file} was sent to you'), $parsedParameters) ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); } else { diff --git a/apps/systemtags/l10n/de.js b/apps/systemtags/l10n/de.js index 8890255ed27..d9a3e688aba 100644 --- a/apps/systemtags/l10n/de.js +++ b/apps/systemtags/l10n/de.js @@ -42,6 +42,8 @@ OC.L10N.register( "%s (invisible)" : "%s (unsichtbar)", "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei wurden geändert", "Collaborative tags" : "Zusammenarbeits-Tags", + "Create and edit collaborative tags. These tags affect all users." : "Ersttele und bearbeite Zusammenarbeits-Tags. Diese Tags betreffen alle Benutzer.", + "Select tag …" : "Tag wählen ...", "Name" : "Name", "Delete" : "Löschen", "Public" : "Öffentlich", diff --git a/apps/systemtags/l10n/de.json b/apps/systemtags/l10n/de.json index 02fdeb80137..da66aeab4f5 100644 --- a/apps/systemtags/l10n/de.json +++ b/apps/systemtags/l10n/de.json @@ -40,6 +40,8 @@ "%s (invisible)" : "%s (unsichtbar)", "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei wurden geändert", "Collaborative tags" : "Zusammenarbeits-Tags", + "Create and edit collaborative tags. These tags affect all users." : "Ersttele und bearbeite Zusammenarbeits-Tags. Diese Tags betreffen alle Benutzer.", + "Select tag …" : "Tag wählen ...", "Name" : "Name", "Delete" : "Löschen", "Public" : "Öffentlich", diff --git a/apps/systemtags/l10n/de_DE.js b/apps/systemtags/l10n/de_DE.js index b0c68b393d9..2a54747145a 100644 --- a/apps/systemtags/l10n/de_DE.js +++ b/apps/systemtags/l10n/de_DE.js @@ -42,6 +42,8 @@ OC.L10N.register( "%s (invisible)" : "%s (unsichtbar)", "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei wurden geändert", "Collaborative tags" : "Gemeinsame Tags", + "Create and edit collaborative tags. These tags affect all users." : "Erstellen und bearbeiten Sie Zusammenarbeits-Tags. Diese Tags betreffen alle Benutzer.", + "Select tag …" : "Tag wählen ...", "Name" : "Name", "Delete" : "Löschen", "Public" : "Öffentlich", diff --git a/apps/systemtags/l10n/de_DE.json b/apps/systemtags/l10n/de_DE.json index dde01ca5722..b3db89c4291 100644 --- a/apps/systemtags/l10n/de_DE.json +++ b/apps/systemtags/l10n/de_DE.json @@ -40,6 +40,8 @@ "%s (invisible)" : "%s (unsichtbar)", "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei wurden geändert", "Collaborative tags" : "Gemeinsame Tags", + "Create and edit collaborative tags. These tags affect all users." : "Erstellen und bearbeiten Sie Zusammenarbeits-Tags. Diese Tags betreffen alle Benutzer.", + "Select tag …" : "Tag wählen ...", "Name" : "Name", "Delete" : "Löschen", "Public" : "Öffentlich", diff --git a/apps/systemtags/l10n/es_MX.js b/apps/systemtags/l10n/es_MX.js index b0ab0534c92..cc0f3ed3b93 100644 --- a/apps/systemtags/l10n/es_MX.js +++ b/apps/systemtags/l10n/es_MX.js @@ -42,6 +42,8 @@ OC.L10N.register( "%s (invisible)" : "%s (invisible) ", "<strong>System tags</strong> for a file have been modified" : "Las <strong>etiquetas del sistema</strong> para un archivo han sido modificadas", "Collaborative tags" : "Etiquetas colaborativas", + "Create and edit collaborative tags. These tags affect all users." : "Crear y editar etiquetas colaborativas. Estas etiquetas afectan a todos los usuarios. ", + "Select tag …" : "Seleccionar etiqueta ...", "Name" : "Nombre", "Delete" : "Borrar", "Public" : "Público", diff --git a/apps/systemtags/l10n/es_MX.json b/apps/systemtags/l10n/es_MX.json index 601cb331a23..39d40dd6d9b 100644 --- a/apps/systemtags/l10n/es_MX.json +++ b/apps/systemtags/l10n/es_MX.json @@ -40,6 +40,8 @@ "%s (invisible)" : "%s (invisible) ", "<strong>System tags</strong> for a file have been modified" : "Las <strong>etiquetas del sistema</strong> para un archivo han sido modificadas", "Collaborative tags" : "Etiquetas colaborativas", + "Create and edit collaborative tags. These tags affect all users." : "Crear y editar etiquetas colaborativas. Estas etiquetas afectan a todos los usuarios. ", + "Select tag …" : "Seleccionar etiqueta ...", "Name" : "Nombre", "Delete" : "Borrar", "Public" : "Público", diff --git a/apps/systemtags/l10n/fr.js b/apps/systemtags/l10n/fr.js index 34190e45eff..b43d0518749 100644 --- a/apps/systemtags/l10n/fr.js +++ b/apps/systemtags/l10n/fr.js @@ -42,6 +42,7 @@ OC.L10N.register( "%s (invisible)" : "%s (invisible)", "<strong>System tags</strong> for a file have been modified" : "<strong>Les étiquettes collaboratives</strong> pour un fichier ont été modifiées", "Collaborative tags" : "Étiquettes collaboratives ", + "Select tag …" : "Sélectionner une étiquette…", "Name" : "Nom", "Delete" : "Supprimer", "Public" : "Public", diff --git a/apps/systemtags/l10n/fr.json b/apps/systemtags/l10n/fr.json index 27068e3ec47..f4c52009f1a 100644 --- a/apps/systemtags/l10n/fr.json +++ b/apps/systemtags/l10n/fr.json @@ -40,6 +40,7 @@ "%s (invisible)" : "%s (invisible)", "<strong>System tags</strong> for a file have been modified" : "<strong>Les étiquettes collaboratives</strong> pour un fichier ont été modifiées", "Collaborative tags" : "Étiquettes collaboratives ", + "Select tag …" : "Sélectionner une étiquette…", "Name" : "Nom", "Delete" : "Supprimer", "Public" : "Public", diff --git a/apps/systemtags/l10n/is.js b/apps/systemtags/l10n/is.js index ea55c55683d..57a121de3e9 100644 --- a/apps/systemtags/l10n/is.js +++ b/apps/systemtags/l10n/is.js @@ -42,6 +42,8 @@ OC.L10N.register( "%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", + "Create and edit collaborative tags. These tags affect all users." : "Búðu til og breyttu merkjum fyrir samstarfsupplýsingar. Þessi merki hafa áhrif á alla notendur.", + "Select tag …" : "Veldu merki ...", "Name" : "Heiti", "Delete" : "Eyða", "Public" : "Opinbert", diff --git a/apps/systemtags/l10n/is.json b/apps/systemtags/l10n/is.json index 1a78c0a03e1..de25ad69d13 100644 --- a/apps/systemtags/l10n/is.json +++ b/apps/systemtags/l10n/is.json @@ -40,6 +40,8 @@ "%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", + "Create and edit collaborative tags. These tags affect all users." : "Búðu til og breyttu merkjum fyrir samstarfsupplýsingar. Þessi merki hafa áhrif á alla notendur.", + "Select tag …" : "Veldu merki ...", "Name" : "Heiti", "Delete" : "Eyða", "Public" : "Opinbert", diff --git a/apps/systemtags/l10n/nb.js b/apps/systemtags/l10n/nb.js index 925a2d1ef4f..d80c14ff3e4 100644 --- a/apps/systemtags/l10n/nb.js +++ b/apps/systemtags/l10n/nb.js @@ -42,6 +42,8 @@ OC.L10N.register( "%s (invisible)" : "%s (usynlig)", "<strong>System tags</strong> for a file have been modified" : "<strong>System-merkelapper</strong> for en fil er endret", "Collaborative tags" : "Felles merkelapper", + "Create and edit collaborative tags. These tags affect all users." : "Opprett og rediger samarbeidsmessige merkelapper. Disse har innvirkning på alle brukere.", + "Select tag …" : "Velg merkelapp…", "Name" : "Navn", "Delete" : "Slett", "Public" : "Offentlig", diff --git a/apps/systemtags/l10n/nb.json b/apps/systemtags/l10n/nb.json index fb70bfeed84..befa7af4f8a 100644 --- a/apps/systemtags/l10n/nb.json +++ b/apps/systemtags/l10n/nb.json @@ -40,6 +40,8 @@ "%s (invisible)" : "%s (usynlig)", "<strong>System tags</strong> for a file have been modified" : "<strong>System-merkelapper</strong> for en fil er endret", "Collaborative tags" : "Felles merkelapper", + "Create and edit collaborative tags. These tags affect all users." : "Opprett og rediger samarbeidsmessige merkelapper. Disse har innvirkning på alle brukere.", + "Select tag …" : "Velg merkelapp…", "Name" : "Navn", "Delete" : "Slett", "Public" : "Offentlig", diff --git a/apps/systemtags/l10n/nl.js b/apps/systemtags/l10n/nl.js index 439f4db03d5..a778fc7ce7d 100644 --- a/apps/systemtags/l10n/nl.js +++ b/apps/systemtags/l10n/nl.js @@ -42,6 +42,8 @@ OC.L10N.register( "%s (invisible)" : "%s (onzichtbaar)", "<strong>System tags</strong> for a file have been modified" : "<strong>Systeemmarkeringen</strong> voor een bestand zijn gewijzigd", "Collaborative tags" : "Samenwerk markeringen", + "Create and edit collaborative tags. These tags affect all users." : "Maak en bewerk samenwerkingstags. Deze tags gelden voor alle gebruikers.", + "Select tag …" : "Selecteer tag …", "Name" : "Naam", "Delete" : "Verwijder", "Public" : "Openbaar", diff --git a/apps/systemtags/l10n/nl.json b/apps/systemtags/l10n/nl.json index 5a7866cd04b..1915c7550b0 100644 --- a/apps/systemtags/l10n/nl.json +++ b/apps/systemtags/l10n/nl.json @@ -40,6 +40,8 @@ "%s (invisible)" : "%s (onzichtbaar)", "<strong>System tags</strong> for a file have been modified" : "<strong>Systeemmarkeringen</strong> voor een bestand zijn gewijzigd", "Collaborative tags" : "Samenwerk markeringen", + "Create and edit collaborative tags. These tags affect all users." : "Maak en bewerk samenwerkingstags. Deze tags gelden voor alle gebruikers.", + "Select tag …" : "Selecteer tag …", "Name" : "Naam", "Delete" : "Verwijder", "Public" : "Openbaar", diff --git a/apps/systemtags/l10n/pt_BR.js b/apps/systemtags/l10n/pt_BR.js index cae367c449d..cacfea73625 100644 --- a/apps/systemtags/l10n/pt_BR.js +++ b/apps/systemtags/l10n/pt_BR.js @@ -42,6 +42,8 @@ OC.L10N.register( "%s (invisible)" : "%s (invisível)", "<strong>System tags</strong> for a file have been modified" : "<strong>As etiquetas de sistema</strong> para um arquivo foram modificadas", "Collaborative tags" : "Etiquetas colaborativas", + "Create and edit collaborative tags. These tags affect all users." : "Crie e edite etiquetas colaborativas. Estas etiquetas afetam todos os usuários.", + "Select tag …" : "Selecionar etiqueta...", "Name" : "Nome", "Delete" : "Excluir", "Public" : "Público", diff --git a/apps/systemtags/l10n/pt_BR.json b/apps/systemtags/l10n/pt_BR.json index 01bd5185198..7ad9d4ad83f 100644 --- a/apps/systemtags/l10n/pt_BR.json +++ b/apps/systemtags/l10n/pt_BR.json @@ -40,6 +40,8 @@ "%s (invisible)" : "%s (invisível)", "<strong>System tags</strong> for a file have been modified" : "<strong>As etiquetas de sistema</strong> para um arquivo foram modificadas", "Collaborative tags" : "Etiquetas colaborativas", + "Create and edit collaborative tags. These tags affect all users." : "Crie e edite etiquetas colaborativas. Estas etiquetas afetam todos os usuários.", + "Select tag …" : "Selecionar etiqueta...", "Name" : "Nome", "Delete" : "Excluir", "Public" : "Público", diff --git a/apps/systemtags/l10n/tr.js b/apps/systemtags/l10n/tr.js index 9e9b1aa2963..e425aed1f2e 100644 --- a/apps/systemtags/l10n/tr.js +++ b/apps/systemtags/l10n/tr.js @@ -42,6 +42,8 @@ OC.L10N.register( "%s (invisible)" : "%s (gizli)", "<strong>System tags</strong> for a file have been modified" : "Bir dosyanın <strong>sistem etiketleri</strong> değiştirildi", "Collaborative tags" : "İşbirliği etiketleri", + "Create and edit collaborative tags. These tags affect all users." : "İşbirliği etiketlerini oluşturun ve düzenleyin. Bu etiketler tüm kullanıcıları etkiler.", + "Select tag …" : "Etiket seçin...", "Name" : "Ad", "Delete" : "Sil", "Public" : "Herkese açık", diff --git a/apps/systemtags/l10n/tr.json b/apps/systemtags/l10n/tr.json index 0e56462da7e..ab28172ffc8 100644 --- a/apps/systemtags/l10n/tr.json +++ b/apps/systemtags/l10n/tr.json @@ -40,6 +40,8 @@ "%s (invisible)" : "%s (gizli)", "<strong>System tags</strong> for a file have been modified" : "Bir dosyanın <strong>sistem etiketleri</strong> değiştirildi", "Collaborative tags" : "İşbirliği etiketleri", + "Create and edit collaborative tags. These tags affect all users." : "İşbirliği etiketlerini oluşturun ve düzenleyin. Bu etiketler tüm kullanıcıları etkiler.", + "Select tag …" : "Etiket seçin...", "Name" : "Ad", "Delete" : "Sil", "Public" : "Herkese açık", diff --git a/apps/systemtags/l10n/zh_CN.js b/apps/systemtags/l10n/zh_CN.js index c4a3602828a..4d998b335bb 100644 --- a/apps/systemtags/l10n/zh_CN.js +++ b/apps/systemtags/l10n/zh_CN.js @@ -16,32 +16,34 @@ OC.L10N.register( "{actor} added system tag {systemtag}" : "{actor} 已添加的系统标签 {systemtag}", "Removed system tag %1$s" : "已移除的系统标签 %1$s", "Removed system tag {systemtag}" : "已移除的系统标签 {systemtag}", - "%1$s removed system tag %2$s" : "%1$s 已移除的系统标签 %2$s", - "{actor} removed system tag {systemtag}" : "{actor} 已移除的系统标签 {systemtag}", - "You created system tag %1$s" : "您已创建的系统标签 %1$s", - "You created system tag {systemtag}" : "已创建系统标签 {systemtag}", + "%1$s removed system tag %2$s" : "%1$s 删除了系统标签 %2$s", + "{actor} removed system tag {systemtag}" : "{actor} 删除了系统标签 {systemtag}", + "You created system tag %1$s" : "您创建了系统标签 %1$s", + "You created system tag {systemtag}" : "您创建了系统标签 {systemtag}", "%1$s created system tag %2$s" : "%1$s 创建了系统标签 %2$s", - "{actor} created system tag {systemtag}" : "{actor} 已创建系统标签 {systemtag}", - "You deleted system tag %1$s" : "删除了系统标签 %1$s", - "You deleted system tag {systemtag}" : "您已删除系统标签 {systemtag}", + "{actor} created system tag {systemtag}" : "{actor} 创建了系统标签 {systemtag}", + "You deleted system tag %1$s" : "您删除了系统标签 %1$s", + "You deleted system tag {systemtag}" : "您删除了系统标签 {systemtag}", "%1$s deleted system tag %2$s" : "%1$s 删除了系统标签 %2$s", - "{actor} deleted system tag {systemtag}" : "{actor} 删除系统标签 {systemtag}", - "You updated system tag %2$s to %1$s" : "您已将系统标签 %2$s 更新为 %1$s", - "You updated system tag {oldsystemtag} to {newsystemtag}" : "您已将系统标签 {oldsystemtag} 更新为 {newsystemtag}", - "%1$s updated system tag %3$s to %2$s" : "%1$s 更新了系统标签 %3$s 为 %2$s", - "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor}更新系统标签{oldsystemtag}到{newsystemtag}", - "You added system tag %2$s to %1$s" : "你填加系统标签%2$s到%1$s", - "You added system tag {systemtag} to {file}" : "你添加了系统标记 {systemtag} 到 {file}", - "%1$s added system tag %3$s to %2$s" : "%1$s 添加系统标记 %3$s 到 %2$s", - "{actor} added system tag {systemtag} to {file}" : "{actor} 添加系统标记 {systemtag} 到 {file}", - "You removed system tag %2$s from %1$s" : "你移除的系统标记 %2$s 于 %1$s", - "You removed system tag {systemtag} from {file}" : "你移除了系统标记 {systemtag} 从 {file}", - "%1$s removed system tag %3$s from %2$s" : "%1$s 移除了系统标记 %3$s 从 %2$s", - "{actor} removed system tag {systemtag} from {file}" : "{actor} 移除了系统标记 {systemtag} 从 {file}", + "{actor} deleted system tag {systemtag}" : "{actor} 删除了系统标签 {systemtag}", + "You updated system tag %2$s to %1$s" : "您已经将系统标签 %2$s 更新为 %1$s", + "You updated system tag {oldsystemtag} to {newsystemtag}" : "您已经将系统标签 {oldsystemtag} 更新为 {newsystemtag}", + "%1$s updated system tag %3$s to %2$s" : "%1$s 已经将系统标签 %3$s 更新为 %2$s", + "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} 已经将系统标签 {oldsystemtag} 更新为 {newsystemtag}", + "You added system tag %2$s to %1$s" : "您为 %1$s 填加了系统标签 %2$s", + "You added system tag {systemtag} to {file}" : "您为 {file} 添加了系统标签 {systemtag}", + "%1$s added system tag %3$s to %2$s" : "%1$s 为 %2$s 添加了系统标签 %3$s", + "{actor} added system tag {systemtag} to {file}" : "{actor} 为 {file} 添加了系统标签 {systemtag}", + "You removed system tag %2$s from %1$s" : "您从 %1$s 移除了系统标签 %2$s", + "You removed system tag {systemtag} from {file}" : "您从 {file} 移除了系统标签 {systemtag}.", + "%1$s removed system tag %3$s from %2$s" : "%1$s 从 %2$s 移除了系统标签 %3$s", + "{actor} removed system tag {systemtag} from {file}" : "{actor} 从 {file} 中移除了系统标签 {systemtag}", "%s (restricted)" : "%s (受限)", "%s (invisible)" : "%s (不可见)", "<strong>System tags</strong> for a file have been modified" : "已更改的文件的<strong>系统标签</strong> ", - "Collaborative tags" : "协同标记", + "Collaborative tags" : "协同标签", + "Create and edit collaborative tags. These tags affect all users." : "创建并编辑协同标签. 这些标签影响全部用户.", + "Select tag …" : "选择标签...", "Name" : "名称", "Delete" : "删除", "Public" : "公开", diff --git a/apps/systemtags/l10n/zh_CN.json b/apps/systemtags/l10n/zh_CN.json index d34852451ed..4d53fabe757 100644 --- a/apps/systemtags/l10n/zh_CN.json +++ b/apps/systemtags/l10n/zh_CN.json @@ -14,32 +14,34 @@ "{actor} added system tag {systemtag}" : "{actor} 已添加的系统标签 {systemtag}", "Removed system tag %1$s" : "已移除的系统标签 %1$s", "Removed system tag {systemtag}" : "已移除的系统标签 {systemtag}", - "%1$s removed system tag %2$s" : "%1$s 已移除的系统标签 %2$s", - "{actor} removed system tag {systemtag}" : "{actor} 已移除的系统标签 {systemtag}", - "You created system tag %1$s" : "您已创建的系统标签 %1$s", - "You created system tag {systemtag}" : "已创建系统标签 {systemtag}", + "%1$s removed system tag %2$s" : "%1$s 删除了系统标签 %2$s", + "{actor} removed system tag {systemtag}" : "{actor} 删除了系统标签 {systemtag}", + "You created system tag %1$s" : "您创建了系统标签 %1$s", + "You created system tag {systemtag}" : "您创建了系统标签 {systemtag}", "%1$s created system tag %2$s" : "%1$s 创建了系统标签 %2$s", - "{actor} created system tag {systemtag}" : "{actor} 已创建系统标签 {systemtag}", - "You deleted system tag %1$s" : "删除了系统标签 %1$s", - "You deleted system tag {systemtag}" : "您已删除系统标签 {systemtag}", + "{actor} created system tag {systemtag}" : "{actor} 创建了系统标签 {systemtag}", + "You deleted system tag %1$s" : "您删除了系统标签 %1$s", + "You deleted system tag {systemtag}" : "您删除了系统标签 {systemtag}", "%1$s deleted system tag %2$s" : "%1$s 删除了系统标签 %2$s", - "{actor} deleted system tag {systemtag}" : "{actor} 删除系统标签 {systemtag}", - "You updated system tag %2$s to %1$s" : "您已将系统标签 %2$s 更新为 %1$s", - "You updated system tag {oldsystemtag} to {newsystemtag}" : "您已将系统标签 {oldsystemtag} 更新为 {newsystemtag}", - "%1$s updated system tag %3$s to %2$s" : "%1$s 更新了系统标签 %3$s 为 %2$s", - "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor}更新系统标签{oldsystemtag}到{newsystemtag}", - "You added system tag %2$s to %1$s" : "你填加系统标签%2$s到%1$s", - "You added system tag {systemtag} to {file}" : "你添加了系统标记 {systemtag} 到 {file}", - "%1$s added system tag %3$s to %2$s" : "%1$s 添加系统标记 %3$s 到 %2$s", - "{actor} added system tag {systemtag} to {file}" : "{actor} 添加系统标记 {systemtag} 到 {file}", - "You removed system tag %2$s from %1$s" : "你移除的系统标记 %2$s 于 %1$s", - "You removed system tag {systemtag} from {file}" : "你移除了系统标记 {systemtag} 从 {file}", - "%1$s removed system tag %3$s from %2$s" : "%1$s 移除了系统标记 %3$s 从 %2$s", - "{actor} removed system tag {systemtag} from {file}" : "{actor} 移除了系统标记 {systemtag} 从 {file}", + "{actor} deleted system tag {systemtag}" : "{actor} 删除了系统标签 {systemtag}", + "You updated system tag %2$s to %1$s" : "您已经将系统标签 %2$s 更新为 %1$s", + "You updated system tag {oldsystemtag} to {newsystemtag}" : "您已经将系统标签 {oldsystemtag} 更新为 {newsystemtag}", + "%1$s updated system tag %3$s to %2$s" : "%1$s 已经将系统标签 %3$s 更新为 %2$s", + "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} 已经将系统标签 {oldsystemtag} 更新为 {newsystemtag}", + "You added system tag %2$s to %1$s" : "您为 %1$s 填加了系统标签 %2$s", + "You added system tag {systemtag} to {file}" : "您为 {file} 添加了系统标签 {systemtag}", + "%1$s added system tag %3$s to %2$s" : "%1$s 为 %2$s 添加了系统标签 %3$s", + "{actor} added system tag {systemtag} to {file}" : "{actor} 为 {file} 添加了系统标签 {systemtag}", + "You removed system tag %2$s from %1$s" : "您从 %1$s 移除了系统标签 %2$s", + "You removed system tag {systemtag} from {file}" : "您从 {file} 移除了系统标签 {systemtag}.", + "%1$s removed system tag %3$s from %2$s" : "%1$s 从 %2$s 移除了系统标签 %3$s", + "{actor} removed system tag {systemtag} from {file}" : "{actor} 从 {file} 中移除了系统标签 {systemtag}", "%s (restricted)" : "%s (受限)", "%s (invisible)" : "%s (不可见)", "<strong>System tags</strong> for a file have been modified" : "已更改的文件的<strong>系统标签</strong> ", - "Collaborative tags" : "协同标记", + "Collaborative tags" : "协同标签", + "Create and edit collaborative tags. These tags affect all users." : "创建并编辑协同标签. 这些标签影响全部用户.", + "Select tag …" : "选择标签...", "Name" : "名称", "Delete" : "删除", "Public" : "公开", diff --git a/apps/theming/css/settings-admin.css b/apps/theming/css/settings-admin.css index 60b9c080ad6..8cc3f0dfe14 100644 --- a/apps/theming/css/settings-admin.css +++ b/apps/theming/css/settings-admin.css @@ -1,5 +1,10 @@ #theming input { - width: 17em; + width: 230px; +} + +#theming input:focus, +#theming input:active { + padding-right: 30px; } #theming .upload-logo-field { @@ -38,19 +43,39 @@ #theming label span { display: inline-block; - min-width: 90px; + min-width: 120px; padding: 8px 0px; + vertical-align: top; } -#theming .icon-upload, #theming .icon-loading-small { display: inline-flex; padding: 8px; margin: 2px 0px; } +#theming .icon-upload { + padding: 8px 20px; + width: 20px; + margin: 2px 0px; + min-height: 32px; + display: inline-block; +} + +#theming_settings_status { + height: 26px; + margin: 10px; + +} +#theming_settings_loading.icon-loading-small { + float: left; + padding: 0; + margin-right: 10px; +} div#theming_settings_msg { - margin-left: 10px; + margin: 8px; + margin-left:20px; + display: inline-block; } #theming-preview { @@ -59,7 +84,8 @@ div#theming_settings_msg { background-size: cover; background-position: center center; text-align: center; - margin-left: 93px; + margin-left: 123px; + margin-top: 10px; } #theming-preview img { diff --git a/apps/theming/css/theming.scss b/apps/theming/css/theming.scss index 9392bfb0ae2..d2196362d3b 100644 --- a/apps/theming/css/theming.scss +++ b/apps/theming/css/theming.scss @@ -12,22 +12,25 @@ /* invert header icons on bright background */ @if (lightness($color-primary) > 50) { - #header .icon-caret { - background-image: url(../../../core/img/actions/caret-dark.svg); - } .searchbox input[type="search"] { - background: transparent url(../../../core/img/actions/search.svg) no-repeat 6px center; + background: transparent url('../../../core/img/actions/search.svg') no-repeat 6px center; } #appmenu li a img { -webkit-filter: invert(1); filter: invert(1); filter: progid:DXImageTransform.Microsoft.BasicImage(invert='1'); } + #contactsmenu .icon-contacts { + background-image: url('../../../core/img/places/contacts-dark.svg'); + } + #settings .icon-settings-white { + background-image: url('../../../core/img/actions/settings-dark.svg'); + } } /* Colorized svg images */ .icon-file, .icon-filetype-text { - background-image: url(../img/core/filetypes/text.svg?v=#{$theming-cachebuster}); + background-image: url(./img/core/filetypes/text.svg?v=#{$theming-cachebuster}); } .icon-folder, .icon-filetype-folder { @@ -59,6 +62,6 @@ input.primary { @if (lightness($color-primary) > 50) { #body-login input.login { - background-image: url(../../../core/img/actions/confirm.svg); + background-image: url('../../../core/img/actions/confirm.svg'); } }
\ No newline at end of file diff --git a/apps/theming/js/settings-admin.js b/apps/theming/js/settings-admin.js index 216463b15e0..802f6e05c07 100644 --- a/apps/theming/js/settings-admin.js +++ b/apps/theming/js/settings-admin.js @@ -19,87 +19,58 @@ * */ -function setThemingValue(setting, value) { +function startLoading() { OC.msg.startSaving('#theming_settings_msg'); + $('#theming_settings_loading').show(); +} + +function setThemingValue(setting, value) { + startLoading(); $.post( OC.generateUrl('/apps/theming/ajax/updateStylesheet'), {'setting' : setting, 'value' : value} ).done(function(response) { - OC.msg.finishedSaving('#theming_settings_msg', response); hideUndoButton(setting, value); + preview(setting, value); }).fail(function(response) { OC.msg.finishedSaving('#theming_settings_msg', response); + $('#theming_settings_loading').hide(); }); - preview(setting, value); -} - -function calculateLuminance(rgb) { - var hexValue = rgb.replace(/[^0-9A-Fa-f]/, ''); - var r,g,b; - if (hexValue.length === 3) { - hexValue = hexValue[0] + hexValue[0] + hexValue[1] + hexValue[1] + hexValue[2] + hexValue[2]; - } - if (hexValue.length !== 6) { - return 0; - } - r = parseInt(hexValue.substring(0,2), 16); - g = parseInt(hexValue.substring(2,4), 16); - b = parseInt(hexValue.substring(4,6), 16); - return (0.299*r + 0.587*g + 0.114*b)/255; -} - -function generateRadioButton(color) { - var radioButton = '<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16">' + - '<path d="M8 1a7 7 0 0 0-7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0-7-7zm0 1a6 6 0 0 1 6 6 6 6 0 0 1-6 6 6 6 0 0 1-6-6 6 6 0 0 1 6-6zm0 2a4 4 0 1 0 0 8 4 4 0 0 0 0-8z" fill="' + color + '"/></svg>'; - return btoa(radioButton); } function preview(setting, value) { - if (setting === 'color') { - var headerClass = document.getElementById('header'); - var expandDisplayNameClass = document.getElementById('expandDisplayName'); - var headerAppName = headerClass.getElementsByClassName('header-appname')[0]; - var textColor, icon; - var luminance = calculateLuminance(value); - var elementColor = value; - - if (luminance > 0.5) { - textColor = "#000000"; - icon = 'caret-dark'; - } else { - textColor = "#ffffff"; - icon = 'caret'; - } - if (luminance > 0.8) { - elementColor = '#555555'; - } + OC.msg.startAction('#theming_settings_msg', t('theming', 'Loading preview…')); + var stylesheetsLoaded = 2; + var reloadStylesheets = function(cssFile) { + var queryString = '?reload=' + new Date().getTime(); + var url = OC.generateUrl(cssFile) + queryString; + var old = $('link[href*="' + cssFile.replace("/","\/") + '"]'); + var stylesheet = $("<link/>", { + rel: "stylesheet", + type: "text/css", + href: url + }); + stylesheet.load(function () { + $(old).remove(); + stylesheetsLoaded--; + if(stylesheetsLoaded === 0) { + $('#theming_settings_loading').hide(); + var response = { status: 'success', data: {message: t('theming', 'Saved')}}; + OC.msg.finishedSaving('#theming_settings_msg', response); + } + }); + stylesheet.appendTo("head"); + }; - headerClass.style.background = value; - headerClass.style.backgroundImage = '../img/logo-icon.svg'; - expandDisplayNameClass.style.color = textColor; - headerAppName.style.color = textColor; - - $('#previewStyles').html( - '#header .icon-caret { background-image: url(\'' + OC.getRootPath() + '/core/img/actions/' + icon + '.svg\') }' + - 'input[type="checkbox"].checkbox:checked:enabled:not(.checkbox--white) + label:before {' + - 'background-image:url(\'' + OC.getRootPath() + '/core/img/actions/checkmark-white.svg\');' + - 'background-color: ' + elementColor + '; background-position: center center; background-size:contain;' + - 'width:12px; height:12px; padding:0; margin:2px 6px 6px 2px; border-radius:1px;}' + - 'input[type="radio"].radio:checked:not(.radio--white):not(:disabled) + label:before {' + - 'background-image: url(\'data:image/svg+xml;base64,' + generateRadioButton(elementColor) + '\'); }' - ); - } + reloadStylesheets('/css/core/server.css'); + reloadStylesheets('/apps/theming/styles'); + // Preview images var timestamp = new Date().getTime(); if (setting === 'logoMime') { - var logos = document.getElementsByClassName('logo-icon'); var previewImageLogo = document.getElementById('theming-preview-logo'); if (value !== '') { - logos[0].style.backgroundImage = "url('" + OC.generateUrl('/apps/theming/logo') + "?v" + timestamp + "')"; - logos[0].style.backgroundSize = "contain"; previewImageLogo.src = OC.generateUrl('/apps/theming/logo') + "?v" + timestamp; } else { - logos[0].style.backgroundImage = "url('" + OC.getRootPath() + '/core/img/logo-icon.svg?v' + timestamp + "')"; - logos[0].style.backgroundSize = "contain"; previewImageLogo.src = OC.getRootPath() + '/core/img/logo-icon.svg?v' + timestamp; } } @@ -110,8 +81,8 @@ function preview(setting, value) { } else { previewImage.style.backgroundImage = "url('" + OC.getRootPath() + '/core/img/background.jpg?v' + timestamp + "')"; } - } + if (setting === 'name') { window.document.title = t('core', 'Admin') + " - " + value; } @@ -137,8 +108,6 @@ function hideUndoButton(setting, value) { $(document).ready(function () { $('#theming [data-toggle="tooltip"]').tooltip(); - $('html > head').append($('<style type="text/css" id="previewStyles"></style>')); - $('#theming .theme-undo').each(function() { var setting = $(this).data('setting'); var value = $('#theming-'+setting).val(); @@ -157,7 +126,7 @@ $(document).ready(function () { $('.theme-undo[data-setting=logoMime]').show(); }, submit: function(e, response) { - OC.msg.startSaving('#theming_settings_msg'); + startLoading(); $('label#uploadlogo').removeClass('icon-upload').addClass('icon-loading-small'); }, fail: function (e, response){ @@ -175,7 +144,7 @@ $(document).ready(function () { $('.theme-undo[data-setting=backgroundMime]').show(); }, submit: function(e, response) { - OC.msg.startSaving('#theming_settings_msg'); + startLoading(); $('label#upload-login-background').removeClass('icon-upload').addClass('icon-loading-small'); }, fail: function (e, response){ @@ -223,7 +192,7 @@ $(document).ready(function () { $('.theme-undo').click(function (e) { var setting = $(this).data('setting'); - OC.msg.startSaving('#theming_settings_msg'); + startLoading(); $('.theme-undo[data-setting=' + setting + ']').hide(); $.post( OC.generateUrl('/apps/theming/ajax/undoChanges'), {'setting' : setting} @@ -236,9 +205,7 @@ $(document).ready(function () { var input = document.getElementById('theming-'+setting); input.value = response.data.value; } - preview(setting, response.data.value); - OC.msg.finishedSaving('#theming_settings_msg', response); }); }); }); diff --git a/apps/theming/l10n/ar.js b/apps/theming/l10n/ar.js index 19eeb742759..54e88acd860 100644 --- a/apps/theming/l10n/ar.js +++ b/apps/theming/l10n/ar.js @@ -1,13 +1,13 @@ OC.L10N.register( "theming", { + "Saved" : "تم الحفظ", "Admin" : "ادارة", "a safe home for all your data" : "مكان آمن لكل معلوماتك", "The given name is too long" : "هذا الاسم أطول مما يجب", "The given web address is too long" : "هذا العنوان أطول مما يجب", "The given slogan is too long" : "هذا الشعار أطول مما يجب", "The given color is invalid" : "هناك خطأ في اللون", - "Saved" : "تم الحفظ", "No file uploaded" : "لم يتم رفع الملف", "Unsupported image type" : "صيغة الصورة غير مقبولة", "You are already using a custom theme" : "انت تستعمل قالب مخصص", diff --git a/apps/theming/l10n/ar.json b/apps/theming/l10n/ar.json index 6a651808d5b..4a8655f2f8a 100644 --- a/apps/theming/l10n/ar.json +++ b/apps/theming/l10n/ar.json @@ -1,11 +1,11 @@ { "translations": { + "Saved" : "تم الحفظ", "Admin" : "ادارة", "a safe home for all your data" : "مكان آمن لكل معلوماتك", "The given name is too long" : "هذا الاسم أطول مما يجب", "The given web address is too long" : "هذا العنوان أطول مما يجب", "The given slogan is too long" : "هذا الشعار أطول مما يجب", "The given color is invalid" : "هناك خطأ في اللون", - "Saved" : "تم الحفظ", "No file uploaded" : "لم يتم رفع الملف", "Unsupported image type" : "صيغة الصورة غير مقبولة", "You are already using a custom theme" : "انت تستعمل قالب مخصص", diff --git a/apps/theming/l10n/bg.js b/apps/theming/l10n/bg.js index a0fd44abeae..8df4fdb0342 100644 --- a/apps/theming/l10n/bg.js +++ b/apps/theming/l10n/bg.js @@ -1,13 +1,13 @@ OC.L10N.register( "theming", { + "Saved" : "Запазено", "Admin" : "Админ", "a safe home for all your data" : "безопасен дом за всички ваши данни", "The given name is too long" : "Името е прекалено дълго", "The given web address is too long" : "web адреса е прекалено дълъг", "The given slogan is too long" : "Избраният лозунг е твърде дълъг", "The given color is invalid" : "Избраният цвят е невалиден", - "Saved" : "Запазено", "No file uploaded" : "Няма качен файл", "Unsupported image type" : "Неподдържан тип изображение", "You are already using a custom theme" : "Вие вече използвате персонализирана тема", diff --git a/apps/theming/l10n/bg.json b/apps/theming/l10n/bg.json index 0b842b12b1a..f3964d2aea0 100644 --- a/apps/theming/l10n/bg.json +++ b/apps/theming/l10n/bg.json @@ -1,11 +1,11 @@ { "translations": { + "Saved" : "Запазено", "Admin" : "Админ", "a safe home for all your data" : "безопасен дом за всички ваши данни", "The given name is too long" : "Името е прекалено дълго", "The given web address is too long" : "web адреса е прекалено дълъг", "The given slogan is too long" : "Избраният лозунг е твърде дълъг", "The given color is invalid" : "Избраният цвят е невалиден", - "Saved" : "Запазено", "No file uploaded" : "Няма качен файл", "Unsupported image type" : "Неподдържан тип изображение", "You are already using a custom theme" : "Вие вече използвате персонализирана тема", diff --git a/apps/theming/l10n/cs.js b/apps/theming/l10n/cs.js index c0046a209a8..9d5f573e6fa 100644 --- a/apps/theming/l10n/cs.js +++ b/apps/theming/l10n/cs.js @@ -1,13 +1,14 @@ OC.L10N.register( "theming", { + "Loading preview…" : "Načítání náhledu…", + "Saved" : "Uloženo", "Admin" : "Administrace", "a safe home for all your data" : "bezpečný domov pro všechna vaše data", "The given name is too long" : "Zadaný název je příliš dlouhý", "The given web address is too long" : "Zadaná webová adresa je příliš dlouhá", "The given slogan is too long" : "Zadaný slogan je příliš dlouhý", "The given color is invalid" : "Zadaná barva je neplatná", - "Saved" : "Uloženo", "No file uploaded" : "Nenahrán žádný soubor", "Unsupported image type" : "Nepodporovaný typ obrázku", "You are already using a custom theme" : "Již používáte vlastní motiv", diff --git a/apps/theming/l10n/cs.json b/apps/theming/l10n/cs.json index bf9c4cfb681..b4fc64ac37e 100644 --- a/apps/theming/l10n/cs.json +++ b/apps/theming/l10n/cs.json @@ -1,11 +1,12 @@ { "translations": { + "Loading preview…" : "Načítání náhledu…", + "Saved" : "Uloženo", "Admin" : "Administrace", "a safe home for all your data" : "bezpečný domov pro všechna vaše data", "The given name is too long" : "Zadaný název je příliš dlouhý", "The given web address is too long" : "Zadaná webová adresa je příliš dlouhá", "The given slogan is too long" : "Zadaný slogan je příliš dlouhý", "The given color is invalid" : "Zadaná barva je neplatná", - "Saved" : "Uloženo", "No file uploaded" : "Nenahrán žádný soubor", "Unsupported image type" : "Nepodporovaný typ obrázku", "You are already using a custom theme" : "Již používáte vlastní motiv", diff --git a/apps/theming/l10n/da.js b/apps/theming/l10n/da.js index 3085c1336c7..4f9bb0f6c77 100644 --- a/apps/theming/l10n/da.js +++ b/apps/theming/l10n/da.js @@ -1,17 +1,19 @@ OC.L10N.register( "theming", { + "Loading preview…" : "Indlæser forhåndsvisning...", + "Saved" : "Gemt", "Admin" : "Admin", "a safe home for all your data" : "Et sikket hjem til alt dit data", "The given name is too long" : "Navnet er for langt", "The given web address is too long" : "Webadressen er for lang", "The given slogan is too long" : "Sloganet er for langt", "The given color is invalid" : "Farven er ikke gyldig", - "Saved" : "Gemt", "No file uploaded" : "Ingen fil uploadet", "Unsupported image type" : "Ikke-understøttet billede format", "You are already using a custom theme" : "Du bruger allerede et brugerdefineret tema", "Theming" : "Temaer", + "Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "Theming gør det muligt nemt at tilpasse udseendet på din installation og understøttede klienter. Dette vil være synlig for alle brugere.", "Name" : "Navn", "reset to default" : "nulstil til standardindstillinger ", "Web address" : "Web adresse", diff --git a/apps/theming/l10n/da.json b/apps/theming/l10n/da.json index 5261db8c5a6..15436b5d2f5 100644 --- a/apps/theming/l10n/da.json +++ b/apps/theming/l10n/da.json @@ -1,15 +1,17 @@ { "translations": { + "Loading preview…" : "Indlæser forhåndsvisning...", + "Saved" : "Gemt", "Admin" : "Admin", "a safe home for all your data" : "Et sikket hjem til alt dit data", "The given name is too long" : "Navnet er for langt", "The given web address is too long" : "Webadressen er for lang", "The given slogan is too long" : "Sloganet er for langt", "The given color is invalid" : "Farven er ikke gyldig", - "Saved" : "Gemt", "No file uploaded" : "Ingen fil uploadet", "Unsupported image type" : "Ikke-understøttet billede format", "You are already using a custom theme" : "Du bruger allerede et brugerdefineret tema", "Theming" : "Temaer", + "Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "Theming gør det muligt nemt at tilpasse udseendet på din installation og understøttede klienter. Dette vil være synlig for alle brugere.", "Name" : "Navn", "reset to default" : "nulstil til standardindstillinger ", "Web address" : "Web adresse", diff --git a/apps/theming/l10n/de.js b/apps/theming/l10n/de.js index 8e67d5c28ea..a9b99f973f9 100644 --- a/apps/theming/l10n/de.js +++ b/apps/theming/l10n/de.js @@ -1,17 +1,19 @@ OC.L10N.register( "theming", { + "Loading preview…" : "Lade Vorschau…", + "Saved" : "Gespeichert", "Admin" : "Administrator", "a safe home for all your data" : "Ein sicheres Zuhause für Deine Daten", "The given name is too long" : "Der eingegebene Name ist zu lang", "The given web address is too long" : "Die eingegebene Adresse ist zu lang", "The given slogan is too long" : "Der eingegebene Slogan ist zu lang", "The given color is invalid" : "Die gewählte Farbe ist ungültig", - "Saved" : "Gespeichert", "No file uploaded" : "Keine Datei hochgeladen", "Unsupported image type" : "Nicht unterstütztes Bild-Format", "You are already using a custom theme" : "Du benutzt bereits ein eigenes Thema", "Theming" : "Theming", + "Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "Theming ermöglicht es auf einfache Weise das Aussehen Ihrer Installation und Clients anzupassen. Die Änderungen wirken sich auf alle Benutzer aus.", "Name" : "Name", "reset to default" : "Auf Standard zurücksetzen", "Web address" : "Internetadresse", diff --git a/apps/theming/l10n/de.json b/apps/theming/l10n/de.json index 7f52928343e..8f4a7b023fc 100644 --- a/apps/theming/l10n/de.json +++ b/apps/theming/l10n/de.json @@ -1,15 +1,17 @@ { "translations": { + "Loading preview…" : "Lade Vorschau…", + "Saved" : "Gespeichert", "Admin" : "Administrator", "a safe home for all your data" : "Ein sicheres Zuhause für Deine Daten", "The given name is too long" : "Der eingegebene Name ist zu lang", "The given web address is too long" : "Die eingegebene Adresse ist zu lang", "The given slogan is too long" : "Der eingegebene Slogan ist zu lang", "The given color is invalid" : "Die gewählte Farbe ist ungültig", - "Saved" : "Gespeichert", "No file uploaded" : "Keine Datei hochgeladen", "Unsupported image type" : "Nicht unterstütztes Bild-Format", "You are already using a custom theme" : "Du benutzt bereits ein eigenes Thema", "Theming" : "Theming", + "Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "Theming ermöglicht es auf einfache Weise das Aussehen Ihrer Installation und Clients anzupassen. Die Änderungen wirken sich auf alle Benutzer aus.", "Name" : "Name", "reset to default" : "Auf Standard zurücksetzen", "Web address" : "Internetadresse", diff --git a/apps/theming/l10n/de_DE.js b/apps/theming/l10n/de_DE.js index af808f39c91..9528ba0f412 100644 --- a/apps/theming/l10n/de_DE.js +++ b/apps/theming/l10n/de_DE.js @@ -1,17 +1,19 @@ OC.L10N.register( "theming", { + "Loading preview…" : "Lade Vorschau…", + "Saved" : "Gespeichert", "Admin" : "Administrator", "a safe home for all your data" : "Ein sicheres Zuhause für Ihre Daten", "The given name is too long" : "Der eingegebene Name ist zu lang", "The given web address is too long" : "Die eingegebene Adresse ist zu lang", "The given slogan is too long" : "Der eingegebene Slogan ist zu lang", "The given color is invalid" : "Die gewählte Farbe ist ungültig", - "Saved" : "Gespeichert", "No file uploaded" : "Keine Datei hochgeladen", "Unsupported image type" : "Nicht unterstütztes Bild-Format", "You are already using a custom theme" : "Sie benutzen bereits ein eigenes Thema", "Theming" : "Theming", + "Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "Theming ermöglicht es auf einfache Weise das Aussehen Ihrer Installation und Clients anzupassen. Die Änderungen wirken sich auf alle Benutzer aus.", "Name" : "Name", "reset to default" : "Auf Standard zurücksetzen", "Web address" : "Internetadresse", diff --git a/apps/theming/l10n/de_DE.json b/apps/theming/l10n/de_DE.json index f613058fe3f..78b43f3d3da 100644 --- a/apps/theming/l10n/de_DE.json +++ b/apps/theming/l10n/de_DE.json @@ -1,15 +1,17 @@ { "translations": { + "Loading preview…" : "Lade Vorschau…", + "Saved" : "Gespeichert", "Admin" : "Administrator", "a safe home for all your data" : "Ein sicheres Zuhause für Ihre Daten", "The given name is too long" : "Der eingegebene Name ist zu lang", "The given web address is too long" : "Die eingegebene Adresse ist zu lang", "The given slogan is too long" : "Der eingegebene Slogan ist zu lang", "The given color is invalid" : "Die gewählte Farbe ist ungültig", - "Saved" : "Gespeichert", "No file uploaded" : "Keine Datei hochgeladen", "Unsupported image type" : "Nicht unterstütztes Bild-Format", "You are already using a custom theme" : "Sie benutzen bereits ein eigenes Thema", "Theming" : "Theming", + "Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "Theming ermöglicht es auf einfache Weise das Aussehen Ihrer Installation und Clients anzupassen. Die Änderungen wirken sich auf alle Benutzer aus.", "Name" : "Name", "reset to default" : "Auf Standard zurücksetzen", "Web address" : "Internetadresse", diff --git a/apps/theming/l10n/el.js b/apps/theming/l10n/el.js index 82c5ea726e4..4bfd9bf3cf7 100644 --- a/apps/theming/l10n/el.js +++ b/apps/theming/l10n/el.js @@ -1,13 +1,13 @@ OC.L10N.register( "theming", { + "Saved" : "Αποθηκεύτηκαν", "Admin" : "Διαχειριστής", "a safe home for all your data" : "μια ασφαλής τοποθεσία για όλα σας τα δεδομένα", "The given name is too long" : "Το όνομα που δόθηκε είναι πολύ μεγάλο", "The given web address is too long" : "Η διεύθυνση ιστοσελίδας που δόθηκε είναι πολύ μεγάλη.", "The given slogan is too long" : "Το ρητό που δόθηκε είναι πολύ μεγάλο", "The given color is invalid" : "Δόθηκε μη έγκυρο χρώμα", - "Saved" : "Αποθηκεύτηκαν", "No file uploaded" : "Δεν έχει μεταφορτωθεί αρχείο", "Unsupported image type" : "Μη υποστηριζόμενος τύπος εικόνας", "You are already using a custom theme" : "Χρησιμοποιείτε ήδη προσαρμοσμένο θέμα", diff --git a/apps/theming/l10n/el.json b/apps/theming/l10n/el.json index 046209ea285..9169c1e4ad3 100644 --- a/apps/theming/l10n/el.json +++ b/apps/theming/l10n/el.json @@ -1,11 +1,11 @@ { "translations": { + "Saved" : "Αποθηκεύτηκαν", "Admin" : "Διαχειριστής", "a safe home for all your data" : "μια ασφαλής τοποθεσία για όλα σας τα δεδομένα", "The given name is too long" : "Το όνομα που δόθηκε είναι πολύ μεγάλο", "The given web address is too long" : "Η διεύθυνση ιστοσελίδας που δόθηκε είναι πολύ μεγάλη.", "The given slogan is too long" : "Το ρητό που δόθηκε είναι πολύ μεγάλο", "The given color is invalid" : "Δόθηκε μη έγκυρο χρώμα", - "Saved" : "Αποθηκεύτηκαν", "No file uploaded" : "Δεν έχει μεταφορτωθεί αρχείο", "Unsupported image type" : "Μη υποστηριζόμενος τύπος εικόνας", "You are already using a custom theme" : "Χρησιμοποιείτε ήδη προσαρμοσμένο θέμα", diff --git a/apps/theming/l10n/es.js b/apps/theming/l10n/es.js index 36fafe3cb6f..cb1629de223 100644 --- a/apps/theming/l10n/es.js +++ b/apps/theming/l10n/es.js @@ -1,13 +1,13 @@ OC.L10N.register( "theming", { + "Saved" : "Guardado", "Admin" : "Administración", "a safe home for all your data" : "un hogar seguro para todos tus datos", "The given name is too long" : "El nombre provisto es muy largo", "The given web address is too long" : "La dirección provista es muy larga", "The given slogan is too long" : "El eslogan provisto es muy largo", "The given color is invalid" : "El color provisto es inválido", - "Saved" : "Guardado", "No file uploaded" : "No se ha subido archivo", "Unsupported image type" : "Tipo de imagen no soportado", "You are already using a custom theme" : "Usted ya usa un tema personalizado", diff --git a/apps/theming/l10n/es.json b/apps/theming/l10n/es.json index a724f4bbd9d..4aa3cadcef7 100644 --- a/apps/theming/l10n/es.json +++ b/apps/theming/l10n/es.json @@ -1,11 +1,11 @@ { "translations": { + "Saved" : "Guardado", "Admin" : "Administración", "a safe home for all your data" : "un hogar seguro para todos tus datos", "The given name is too long" : "El nombre provisto es muy largo", "The given web address is too long" : "La dirección provista es muy larga", "The given slogan is too long" : "El eslogan provisto es muy largo", "The given color is invalid" : "El color provisto es inválido", - "Saved" : "Guardado", "No file uploaded" : "No se ha subido archivo", "Unsupported image type" : "Tipo de imagen no soportado", "You are already using a custom theme" : "Usted ya usa un tema personalizado", diff --git a/apps/theming/l10n/es_MX.js b/apps/theming/l10n/es_MX.js index fb1bfca4914..c5640d03436 100644 --- a/apps/theming/l10n/es_MX.js +++ b/apps/theming/l10n/es_MX.js @@ -1,13 +1,13 @@ OC.L10N.register( "theming", { + "Saved" : "Guardado", "Admin" : "Administración", "a safe home for all your data" : "un lugar seguro para todos sus datos", "The given name is too long" : "El nombre dado es demasiado largo", "The given web address is too long" : "La dirección web dada es demasiado larga", "The given slogan is too long" : "El lema dado es demasiado largo", "The given color is invalid" : "El color dado es inválido", - "Saved" : "Guardado", "No file uploaded" : "No hay archivos cargados", "Unsupported image type" : "Tipo de imagen no soportado", "You are already using a custom theme" : "Usted ya se encuentra usando un tema personalizado", diff --git a/apps/theming/l10n/es_MX.json b/apps/theming/l10n/es_MX.json index d2d65f4b0c8..12ed64f3f84 100644 --- a/apps/theming/l10n/es_MX.json +++ b/apps/theming/l10n/es_MX.json @@ -1,11 +1,11 @@ { "translations": { + "Saved" : "Guardado", "Admin" : "Administración", "a safe home for all your data" : "un lugar seguro para todos sus datos", "The given name is too long" : "El nombre dado es demasiado largo", "The given web address is too long" : "La dirección web dada es demasiado larga", "The given slogan is too long" : "El lema dado es demasiado largo", "The given color is invalid" : "El color dado es inválido", - "Saved" : "Guardado", "No file uploaded" : "No hay archivos cargados", "Unsupported image type" : "Tipo de imagen no soportado", "You are already using a custom theme" : "Usted ya se encuentra usando un tema personalizado", diff --git a/apps/theming/l10n/fi.js b/apps/theming/l10n/fi.js index cd9b98d29d7..76ddfff8ec9 100644 --- a/apps/theming/l10n/fi.js +++ b/apps/theming/l10n/fi.js @@ -1,17 +1,17 @@ OC.L10N.register( "theming", { + "Saved" : "Tallennettu", "Admin" : "Ylläpito", "a safe home for all your data" : "turvallinen koti kaikille tiedostoillesi", "The given name is too long" : "Nimi on liian pitkä", "The given web address is too long" : "Verkko-osoite on liian pitkä", "The given slogan is too long" : "Slogani on liian pitkä", "The given color is invalid" : "Väri on virheellinen", - "Saved" : "Tallennettu", "No file uploaded" : "Ei tiedostoa lähetetty", "Unsupported image type" : "Ei-tuettu kuvatiedostomuoto", "You are already using a custom theme" : "Käytät jo kustomoitua ulkoasua", - "Theming" : "Ulkoasu", + "Theming" : "Teema", "Name" : "Nimi", "reset to default" : "palauta oletukseksi", "Web address" : "Verkko-osoite", diff --git a/apps/theming/l10n/fi.json b/apps/theming/l10n/fi.json index d4577c727dd..854bf98897a 100644 --- a/apps/theming/l10n/fi.json +++ b/apps/theming/l10n/fi.json @@ -1,15 +1,15 @@ { "translations": { + "Saved" : "Tallennettu", "Admin" : "Ylläpito", "a safe home for all your data" : "turvallinen koti kaikille tiedostoillesi", "The given name is too long" : "Nimi on liian pitkä", "The given web address is too long" : "Verkko-osoite on liian pitkä", "The given slogan is too long" : "Slogani on liian pitkä", "The given color is invalid" : "Väri on virheellinen", - "Saved" : "Tallennettu", "No file uploaded" : "Ei tiedostoa lähetetty", "Unsupported image type" : "Ei-tuettu kuvatiedostomuoto", "You are already using a custom theme" : "Käytät jo kustomoitua ulkoasua", - "Theming" : "Ulkoasu", + "Theming" : "Teema", "Name" : "Nimi", "reset to default" : "palauta oletukseksi", "Web address" : "Verkko-osoite", diff --git a/apps/theming/l10n/fr.js b/apps/theming/l10n/fr.js index e608fc4b7e2..c68883483b8 100644 --- a/apps/theming/l10n/fr.js +++ b/apps/theming/l10n/fr.js @@ -1,17 +1,19 @@ OC.L10N.register( "theming", { + "Loading preview…" : "Chargement de la prévisualisation...", + "Saved" : "Enregistré", "Admin" : "Administration", "a safe home for all your data" : "un endroit sûr pour toutes vos données", "The given name is too long" : "Le nom donné est trop long", "The given web address is too long" : "L'adresse web donnée est trop longue", "The given slogan is too long" : "Le slogan donné est trop long", "The given color is invalid" : "La couleur donnée est invalide", - "Saved" : "Enregistré", "No file uploaded" : "Aucun fichier téléversé", "Unsupported image type" : "Ce type d'image n'est pas pris en charge", "You are already using a custom theme" : "Vous utilisez déjà un thème personnalisé", "Theming" : "Personnaliser l'apparence", + "Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "Cet extension permet de personnaliser facilement l'apparence de votre instance et des clients supportés. Cela sera visible pour tous les utilisateurs.", "Name" : "Nom", "reset to default" : "Restaurer les valeurs par défaut", "Web address" : "Adresse web", diff --git a/apps/theming/l10n/fr.json b/apps/theming/l10n/fr.json index 4b3d54e57da..d3bfed696db 100644 --- a/apps/theming/l10n/fr.json +++ b/apps/theming/l10n/fr.json @@ -1,15 +1,17 @@ { "translations": { + "Loading preview…" : "Chargement de la prévisualisation...", + "Saved" : "Enregistré", "Admin" : "Administration", "a safe home for all your data" : "un endroit sûr pour toutes vos données", "The given name is too long" : "Le nom donné est trop long", "The given web address is too long" : "L'adresse web donnée est trop longue", "The given slogan is too long" : "Le slogan donné est trop long", "The given color is invalid" : "La couleur donnée est invalide", - "Saved" : "Enregistré", "No file uploaded" : "Aucun fichier téléversé", "Unsupported image type" : "Ce type d'image n'est pas pris en charge", "You are already using a custom theme" : "Vous utilisez déjà un thème personnalisé", "Theming" : "Personnaliser l'apparence", + "Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "Cet extension permet de personnaliser facilement l'apparence de votre instance et des clients supportés. Cela sera visible pour tous les utilisateurs.", "Name" : "Nom", "reset to default" : "Restaurer les valeurs par défaut", "Web address" : "Adresse web", diff --git a/apps/theming/l10n/hu.js b/apps/theming/l10n/hu.js index a0549dfd06b..ca3299ff98f 100644 --- a/apps/theming/l10n/hu.js +++ b/apps/theming/l10n/hu.js @@ -1,13 +1,13 @@ OC.L10N.register( "theming", { + "Saved" : "Mentve!", "Admin" : "Adminisztrátor", "a safe home for all your data" : "biztonságos hely az adataid számára", "The given name is too long" : "A bevitt név túl hosszú", "The given web address is too long" : "A bevitt webcím túl hosszú", "The given slogan is too long" : "A bevitt szlogen túl hosszú", "The given color is invalid" : "A bevitt szín érvénytelen", - "Saved" : "Mentve!", "No file uploaded" : "Nincs fájl feltöltve", "Unsupported image type" : "Nem támogatott képtípus", "You are already using a custom theme" : "Már egyedi témát használ", diff --git a/apps/theming/l10n/hu.json b/apps/theming/l10n/hu.json index 6023637c81d..3589db365c7 100644 --- a/apps/theming/l10n/hu.json +++ b/apps/theming/l10n/hu.json @@ -1,11 +1,11 @@ { "translations": { + "Saved" : "Mentve!", "Admin" : "Adminisztrátor", "a safe home for all your data" : "biztonságos hely az adataid számára", "The given name is too long" : "A bevitt név túl hosszú", "The given web address is too long" : "A bevitt webcím túl hosszú", "The given slogan is too long" : "A bevitt szlogen túl hosszú", "The given color is invalid" : "A bevitt szín érvénytelen", - "Saved" : "Mentve!", "No file uploaded" : "Nincs fájl feltöltve", "Unsupported image type" : "Nem támogatott képtípus", "You are already using a custom theme" : "Már egyedi témát használ", diff --git a/apps/theming/l10n/is.js b/apps/theming/l10n/is.js index 050c24d1aa3..bee8f7c42bd 100644 --- a/apps/theming/l10n/is.js +++ b/apps/theming/l10n/is.js @@ -1,13 +1,13 @@ OC.L10N.register( "theming", { + "Saved" : "Vistað", "Admin" : "Stjórnandi", "a safe home for all your data" : "öruggur staður fyrir öll gögnin þín", "The given name is too long" : "Uppgefið nafn er of langt", "The given web address is too long" : "Uppgefið veffang er of langt", "The given slogan is too long" : "Uppgefið slagorð er of langt", "The given color is invalid" : "Uppgefinn litur er ógildur", - "Saved" : "Vistað", "No file uploaded" : "Engin skrá var send inn", "Unsupported image type" : "Óstudd gerð myndar", "You are already using a custom theme" : "Þú ert nú þegar að nota sérsniðið þema", diff --git a/apps/theming/l10n/is.json b/apps/theming/l10n/is.json index cfb7459f6d5..99d4e92a409 100644 --- a/apps/theming/l10n/is.json +++ b/apps/theming/l10n/is.json @@ -1,11 +1,11 @@ { "translations": { + "Saved" : "Vistað", "Admin" : "Stjórnandi", "a safe home for all your data" : "öruggur staður fyrir öll gögnin þín", "The given name is too long" : "Uppgefið nafn er of langt", "The given web address is too long" : "Uppgefið veffang er of langt", "The given slogan is too long" : "Uppgefið slagorð er of langt", "The given color is invalid" : "Uppgefinn litur er ógildur", - "Saved" : "Vistað", "No file uploaded" : "Engin skrá var send inn", "Unsupported image type" : "Óstudd gerð myndar", "You are already using a custom theme" : "Þú ert nú þegar að nota sérsniðið þema", diff --git a/apps/theming/l10n/it.js b/apps/theming/l10n/it.js index 629dc4e71dc..15be95c50ea 100644 --- a/apps/theming/l10n/it.js +++ b/apps/theming/l10n/it.js @@ -1,13 +1,13 @@ OC.L10N.register( "theming", { + "Saved" : "Salvato", "Admin" : "Amministratore", "a safe home for all your data" : "una casa sicura per i tuoi dati", "The given name is too long" : "Questo nome è troppo lungo", "The given web address is too long" : "Questo indirizzo web è troppo lungo", "The given slogan is too long" : "Questo slogan è troppo lungo", "The given color is invalid" : "Questo colore non è valido", - "Saved" : "Salvato", "No file uploaded" : "Nessun file caricato", "Unsupported image type" : "Tipo di immagine non supportato", "You are already using a custom theme" : "Stai già usando un tema personalizzato", diff --git a/apps/theming/l10n/it.json b/apps/theming/l10n/it.json index 771d46f2189..2e4f3618e8f 100644 --- a/apps/theming/l10n/it.json +++ b/apps/theming/l10n/it.json @@ -1,11 +1,11 @@ { "translations": { + "Saved" : "Salvato", "Admin" : "Amministratore", "a safe home for all your data" : "una casa sicura per i tuoi dati", "The given name is too long" : "Questo nome è troppo lungo", "The given web address is too long" : "Questo indirizzo web è troppo lungo", "The given slogan is too long" : "Questo slogan è troppo lungo", "The given color is invalid" : "Questo colore non è valido", - "Saved" : "Salvato", "No file uploaded" : "Nessun file caricato", "Unsupported image type" : "Tipo di immagine non supportato", "You are already using a custom theme" : "Stai già usando un tema personalizzato", diff --git a/apps/theming/l10n/nb.js b/apps/theming/l10n/nb.js index dba3f2af333..f91176aa79e 100644 --- a/apps/theming/l10n/nb.js +++ b/apps/theming/l10n/nb.js @@ -1,13 +1,13 @@ OC.L10N.register( "theming", { + "Saved" : "Lagret", "Admin" : "Admin", "a safe home for all your data" : "et trygt hjem for alle dine data", "The given name is too long" : "Navnet er for langt", "The given web address is too long" : "Nettadressen er for lang", "The given slogan is too long" : "Slagordet er for langt", "The given color is invalid" : "Fargen er ugyldig", - "Saved" : "Lagret", "No file uploaded" : "Ingen fil lastet opp", "Unsupported image type" : "Filtypen støttes ikke", "You are already using a custom theme" : "Du bruker allerede en egendefinert drakt", diff --git a/apps/theming/l10n/nb.json b/apps/theming/l10n/nb.json index 5f6a65d87b9..2dfb84f1a15 100644 --- a/apps/theming/l10n/nb.json +++ b/apps/theming/l10n/nb.json @@ -1,11 +1,11 @@ { "translations": { + "Saved" : "Lagret", "Admin" : "Admin", "a safe home for all your data" : "et trygt hjem for alle dine data", "The given name is too long" : "Navnet er for langt", "The given web address is too long" : "Nettadressen er for lang", "The given slogan is too long" : "Slagordet er for langt", "The given color is invalid" : "Fargen er ugyldig", - "Saved" : "Lagret", "No file uploaded" : "Ingen fil lastet opp", "Unsupported image type" : "Filtypen støttes ikke", "You are already using a custom theme" : "Du bruker allerede en egendefinert drakt", diff --git a/apps/theming/l10n/nl.js b/apps/theming/l10n/nl.js index 509333859af..b4646d4f993 100644 --- a/apps/theming/l10n/nl.js +++ b/apps/theming/l10n/nl.js @@ -1,13 +1,14 @@ OC.L10N.register( "theming", { + "Loading preview…" : "Laden voorbeeld...", + "Saved" : "Opgeslagen", "Admin" : "Beheer", "a safe home for all your data" : "een veilige plek voor al je gegevens", "The given name is too long" : "De opgegeven naam is te lang", "The given web address is too long" : "Het opgegeven internetadres is te lang", "The given slogan is too long" : "De opgegeven slagzin is te lang", "The given color is invalid" : "De opgegeven kleur is ongeldig", - "Saved" : "Opgeslagen", "No file uploaded" : "Geen bestand geüpload", "Unsupported image type" : "Afbeeldingstype wordt niet ondersteund", "You are already using a custom theme" : "Je gebruikt al een maatwerkthema", diff --git a/apps/theming/l10n/nl.json b/apps/theming/l10n/nl.json index df816256bb5..83f500d0d82 100644 --- a/apps/theming/l10n/nl.json +++ b/apps/theming/l10n/nl.json @@ -1,11 +1,12 @@ { "translations": { + "Loading preview…" : "Laden voorbeeld...", + "Saved" : "Opgeslagen", "Admin" : "Beheer", "a safe home for all your data" : "een veilige plek voor al je gegevens", "The given name is too long" : "De opgegeven naam is te lang", "The given web address is too long" : "Het opgegeven internetadres is te lang", "The given slogan is too long" : "De opgegeven slagzin is te lang", "The given color is invalid" : "De opgegeven kleur is ongeldig", - "Saved" : "Opgeslagen", "No file uploaded" : "Geen bestand geüpload", "Unsupported image type" : "Afbeeldingstype wordt niet ondersteund", "You are already using a custom theme" : "Je gebruikt al een maatwerkthema", diff --git a/apps/theming/l10n/pl.js b/apps/theming/l10n/pl.js index 59ee1aa3c78..9eaa70b2120 100644 --- a/apps/theming/l10n/pl.js +++ b/apps/theming/l10n/pl.js @@ -1,13 +1,13 @@ OC.L10N.register( "theming", { + "Saved" : "Zapisano", "Admin" : "Admin", "a safe home for all your data" : "bezpieczna schowek dla wszystkich twoich danych", "The given name is too long" : "Wpisana nazwa jest zbyt długi", "The given web address is too long" : "Wpisany adres internetowy jest zbyt długi", "The given slogan is too long" : "Wpisany slogan jest zbyt długi", "The given color is invalid" : "Podany kolor jest nieprawidłowy", - "Saved" : "Zapisano", "No file uploaded" : "Nie wysłano pliku", "Unsupported image type" : "Nieobsługiwany typ zdjęcia", "You are already using a custom theme" : "Używasz już motywu niestandarowego", diff --git a/apps/theming/l10n/pl.json b/apps/theming/l10n/pl.json index 2f191dc13d5..b9b05f4a5bd 100644 --- a/apps/theming/l10n/pl.json +++ b/apps/theming/l10n/pl.json @@ -1,11 +1,11 @@ { "translations": { + "Saved" : "Zapisano", "Admin" : "Admin", "a safe home for all your data" : "bezpieczna schowek dla wszystkich twoich danych", "The given name is too long" : "Wpisana nazwa jest zbyt długi", "The given web address is too long" : "Wpisany adres internetowy jest zbyt długi", "The given slogan is too long" : "Wpisany slogan jest zbyt długi", "The given color is invalid" : "Podany kolor jest nieprawidłowy", - "Saved" : "Zapisano", "No file uploaded" : "Nie wysłano pliku", "Unsupported image type" : "Nieobsługiwany typ zdjęcia", "You are already using a custom theme" : "Używasz już motywu niestandarowego", diff --git a/apps/theming/l10n/pt_BR.js b/apps/theming/l10n/pt_BR.js index e789208c47e..2b56768334b 100644 --- a/apps/theming/l10n/pt_BR.js +++ b/apps/theming/l10n/pt_BR.js @@ -1,17 +1,19 @@ OC.L10N.register( "theming", { + "Loading preview…" : "Carregando pré-visualização...", + "Saved" : "Salva", "Admin" : "Administrador", "a safe home for all your data" : "um lugar seguro para seus dados", "The given name is too long" : "O nome é muito longo", "The given web address is too long" : "O endereço da Web fornecido é muito longo", "The given slogan is too long" : "O slogan dado é muito longo", "The given color is invalid" : "A cor fornecida é inválida", - "Saved" : "Salva", "No file uploaded" : "Nenhum arquivo enviado", "Unsupported image type" : "Tipo de imagem não suportado", "You are already using a custom theme" : "Você já está usando um tema personalizado", "Theming" : "Personalização", + "Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "Criar e alterar temas torna possível personalizar facilmente o Nextcloud e clientes suportados. Isso será visível a todos os usuários.", "Name" : "Nome", "reset to default" : "restaurar ao padrão", "Web address" : "Endereço da Web", diff --git a/apps/theming/l10n/pt_BR.json b/apps/theming/l10n/pt_BR.json index 95bfcea2bc0..4544daa7556 100644 --- a/apps/theming/l10n/pt_BR.json +++ b/apps/theming/l10n/pt_BR.json @@ -1,15 +1,17 @@ { "translations": { + "Loading preview…" : "Carregando pré-visualização...", + "Saved" : "Salva", "Admin" : "Administrador", "a safe home for all your data" : "um lugar seguro para seus dados", "The given name is too long" : "O nome é muito longo", "The given web address is too long" : "O endereço da Web fornecido é muito longo", "The given slogan is too long" : "O slogan dado é muito longo", "The given color is invalid" : "A cor fornecida é inválida", - "Saved" : "Salva", "No file uploaded" : "Nenhum arquivo enviado", "Unsupported image type" : "Tipo de imagem não suportado", "You are already using a custom theme" : "Você já está usando um tema personalizado", "Theming" : "Personalização", + "Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "Criar e alterar temas torna possível personalizar facilmente o Nextcloud e clientes suportados. Isso será visível a todos os usuários.", "Name" : "Nome", "reset to default" : "restaurar ao padrão", "Web address" : "Endereço da Web", diff --git a/apps/theming/l10n/ru.js b/apps/theming/l10n/ru.js index 817adbbdc1d..2169af679f6 100644 --- a/apps/theming/l10n/ru.js +++ b/apps/theming/l10n/ru.js @@ -1,13 +1,13 @@ OC.L10N.register( "theming", { + "Saved" : "Сохранено", "Admin" : "Администратор", "a safe home for all your data" : "надежный дом для всех ваших данных", "The given name is too long" : "Указанное название слишком длинное", "The given web address is too long" : "Указанный веб адрес слишком длинный", "The given slogan is too long" : "Указанный слоган слишком длинный", "The given color is invalid" : "Задан неправильный цвет", - "Saved" : "Сохранено", "No file uploaded" : "Нет загруженных файлов", "Unsupported image type" : "Неподдерживаемый тип изображения", "You are already using a custom theme" : "Вы уже используете настраиваемую тему", diff --git a/apps/theming/l10n/ru.json b/apps/theming/l10n/ru.json index 3666c2a0d63..fe15a6b5670 100644 --- a/apps/theming/l10n/ru.json +++ b/apps/theming/l10n/ru.json @@ -1,11 +1,11 @@ { "translations": { + "Saved" : "Сохранено", "Admin" : "Администратор", "a safe home for all your data" : "надежный дом для всех ваших данных", "The given name is too long" : "Указанное название слишком длинное", "The given web address is too long" : "Указанный веб адрес слишком длинный", "The given slogan is too long" : "Указанный слоган слишком длинный", "The given color is invalid" : "Задан неправильный цвет", - "Saved" : "Сохранено", "No file uploaded" : "Нет загруженных файлов", "Unsupported image type" : "Неподдерживаемый тип изображения", "You are already using a custom theme" : "Вы уже используете настраиваемую тему", diff --git a/apps/theming/l10n/sk.js b/apps/theming/l10n/sk.js index f735ce5a409..8a01b6f2f4a 100644 --- a/apps/theming/l10n/sk.js +++ b/apps/theming/l10n/sk.js @@ -1,13 +1,13 @@ OC.L10N.register( "theming", { + "Saved" : "Uložené", "Admin" : "Správca", "a safe home for all your data" : "bezpečný domov pre všetky vaše dáta", "The given name is too long" : "Zadané meno je príliš dlhé", "The given web address is too long" : "Zadaná web adresa je príliš dlhá", "The given slogan is too long" : "Zadaný slogan je príliš dlhý", "The given color is invalid" : "Zadaná farba nie je platná", - "Saved" : "Uložené", "No file uploaded" : "Žiadny súbor nebol nahraný", "Unsupported image type" : "Typ obrázka nie je podporovaný", "You are already using a custom theme" : "Už používate upravený vzhľad", diff --git a/apps/theming/l10n/sk.json b/apps/theming/l10n/sk.json index 31ab56f00c0..4cbac33e811 100644 --- a/apps/theming/l10n/sk.json +++ b/apps/theming/l10n/sk.json @@ -1,11 +1,11 @@ { "translations": { + "Saved" : "Uložené", "Admin" : "Správca", "a safe home for all your data" : "bezpečný domov pre všetky vaše dáta", "The given name is too long" : "Zadané meno je príliš dlhé", "The given web address is too long" : "Zadaná web adresa je príliš dlhá", "The given slogan is too long" : "Zadaný slogan je príliš dlhý", "The given color is invalid" : "Zadaná farba nie je platná", - "Saved" : "Uložené", "No file uploaded" : "Žiadny súbor nebol nahraný", "Unsupported image type" : "Typ obrázka nie je podporovaný", "You are already using a custom theme" : "Už používate upravený vzhľad", diff --git a/apps/theming/l10n/sv.js b/apps/theming/l10n/sv.js index 7b75d1d8511..cbc5282d8bd 100644 --- a/apps/theming/l10n/sv.js +++ b/apps/theming/l10n/sv.js @@ -1,13 +1,13 @@ OC.L10N.register( "theming", { + "Saved" : "Sparat", "Admin" : "Admin", "a safe home for all your data" : "En säker plats för alla dina filer och data", "The given name is too long" : "Det angivna namnet är för långt", "The given web address is too long" : "Den angivna adressen är för lång", "The given slogan is too long" : "Den angivna slogan är för lång", "The given color is invalid" : "Den angivna färgen är inte tillgänglig", - "Saved" : "Sparat", "No file uploaded" : "Ingen fil uppladdad", "Unsupported image type" : "Filtypen är ej giltig", "You are already using a custom theme" : "Du använder redan ett annat tema", diff --git a/apps/theming/l10n/sv.json b/apps/theming/l10n/sv.json index 3de28c76008..ecd37a0753c 100644 --- a/apps/theming/l10n/sv.json +++ b/apps/theming/l10n/sv.json @@ -1,11 +1,11 @@ { "translations": { + "Saved" : "Sparat", "Admin" : "Admin", "a safe home for all your data" : "En säker plats för alla dina filer och data", "The given name is too long" : "Det angivna namnet är för långt", "The given web address is too long" : "Den angivna adressen är för lång", "The given slogan is too long" : "Den angivna slogan är för lång", "The given color is invalid" : "Den angivna färgen är inte tillgänglig", - "Saved" : "Sparat", "No file uploaded" : "Ingen fil uppladdad", "Unsupported image type" : "Filtypen är ej giltig", "You are already using a custom theme" : "Du använder redan ett annat tema", diff --git a/apps/theming/l10n/tr.js b/apps/theming/l10n/tr.js index a48fd2327d0..6f043ba9477 100644 --- a/apps/theming/l10n/tr.js +++ b/apps/theming/l10n/tr.js @@ -1,17 +1,19 @@ OC.L10N.register( "theming", { + "Loading preview…" : "Önizleme yükleniyor...", + "Saved" : "Kaydedildi", "Admin" : "Yönetici", "a safe home for all your data" : "verileriniz için güvenli bir barınak", "The given name is too long" : "Belirtilen ad çok uzun", "The given web address is too long" : "Belirtilen web adresi çok uzun", "The given slogan is too long" : "Belirtilen slogan çok uzun", "The given color is invalid" : "Belirtilen renk geçersiz", - "Saved" : "Kaydedildi", "No file uploaded" : "Herhangi bir dosya yüklenmemiş", "Unsupported image type" : "Görsel türü desteklenmiyor", "You are already using a custom theme" : "Zaten özel bir tema kullanıyorsunuz", "Theming" : "Tema", + "Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "Temalar kullandığınız kopyanın ve desteklenen istemcilerin genel görünümün kolayca değiştirilmesini sağlar. Tüm kullanıcılara görüntülenir.", "Name" : "Ad", "reset to default" : "varsayılana dön", "Web address" : "Web adresi", diff --git a/apps/theming/l10n/tr.json b/apps/theming/l10n/tr.json index 4e2071a0cf9..22c13e170f5 100644 --- a/apps/theming/l10n/tr.json +++ b/apps/theming/l10n/tr.json @@ -1,15 +1,17 @@ { "translations": { + "Loading preview…" : "Önizleme yükleniyor...", + "Saved" : "Kaydedildi", "Admin" : "Yönetici", "a safe home for all your data" : "verileriniz için güvenli bir barınak", "The given name is too long" : "Belirtilen ad çok uzun", "The given web address is too long" : "Belirtilen web adresi çok uzun", "The given slogan is too long" : "Belirtilen slogan çok uzun", "The given color is invalid" : "Belirtilen renk geçersiz", - "Saved" : "Kaydedildi", "No file uploaded" : "Herhangi bir dosya yüklenmemiş", "Unsupported image type" : "Görsel türü desteklenmiyor", "You are already using a custom theme" : "Zaten özel bir tema kullanıyorsunuz", "Theming" : "Tema", + "Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "Temalar kullandığınız kopyanın ve desteklenen istemcilerin genel görünümün kolayca değiştirilmesini sağlar. Tüm kullanıcılara görüntülenir.", "Name" : "Ad", "reset to default" : "varsayılana dön", "Web address" : "Web adresi", diff --git a/apps/theming/l10n/vi.js b/apps/theming/l10n/vi.js index 5dbedc87f7b..4bc27a36332 100644 --- a/apps/theming/l10n/vi.js +++ b/apps/theming/l10n/vi.js @@ -1,11 +1,11 @@ OC.L10N.register( "theming", { + "Saved" : "Đã lưu", "The given name is too long" : "Tên quá dài", "The given web address is too long" : "Địa chỉ web quá dài", "The given slogan is too long" : "Khẩu hiệu quá dài", "The given color is invalid" : "Màu đã chọn không hợp lệ", - "Saved" : "Đã lưu", "No file uploaded" : "Không có tệp nào được tải lên", "Unsupported image type" : "Loại hình ảnh không được hỗ trợ", "You are already using a custom theme" : "Bạn đã sử dụng một chủ đề tuỳ chỉnh", diff --git a/apps/theming/l10n/vi.json b/apps/theming/l10n/vi.json index de50a696d82..dac197289d7 100644 --- a/apps/theming/l10n/vi.json +++ b/apps/theming/l10n/vi.json @@ -1,9 +1,9 @@ { "translations": { + "Saved" : "Đã lưu", "The given name is too long" : "Tên quá dài", "The given web address is too long" : "Địa chỉ web quá dài", "The given slogan is too long" : "Khẩu hiệu quá dài", "The given color is invalid" : "Màu đã chọn không hợp lệ", - "Saved" : "Đã lưu", "No file uploaded" : "Không có tệp nào được tải lên", "Unsupported image type" : "Loại hình ảnh không được hỗ trợ", "You are already using a custom theme" : "Bạn đã sử dụng một chủ đề tuỳ chỉnh", diff --git a/apps/theming/l10n/zh_CN.js b/apps/theming/l10n/zh_CN.js index a8be448fe93..c51cc8aee84 100644 --- a/apps/theming/l10n/zh_CN.js +++ b/apps/theming/l10n/zh_CN.js @@ -1,13 +1,13 @@ OC.L10N.register( "theming", { + "Saved" : "已保存", "Admin" : "管理", "a safe home for all your data" : "给您所有的数据一个安全的家", "The given name is too long" : "输入的名称过长", "The given web address is too long" : "输入的地址过长", "The given slogan is too long" : "输入的标语过长", "The given color is invalid" : "提供的颜色无效", - "Saved" : "已保存", "No file uploaded" : "文件没有上传", "Unsupported image type" : "不支持图片格式", "You are already using a custom theme" : "你已经在使用自定义主题", diff --git a/apps/theming/l10n/zh_CN.json b/apps/theming/l10n/zh_CN.json index 9fab5a516ea..af485f7820b 100644 --- a/apps/theming/l10n/zh_CN.json +++ b/apps/theming/l10n/zh_CN.json @@ -1,11 +1,11 @@ { "translations": { + "Saved" : "已保存", "Admin" : "管理", "a safe home for all your data" : "给您所有的数据一个安全的家", "The given name is too long" : "输入的名称过长", "The given web address is too long" : "输入的地址过长", "The given slogan is too long" : "输入的标语过长", "The given color is invalid" : "提供的颜色无效", - "Saved" : "已保存", "No file uploaded" : "文件没有上传", "Unsupported image type" : "不支持图片格式", "You are already using a custom theme" : "你已经在使用自定义主题", diff --git a/apps/theming/lib/Controller/ThemingController.php b/apps/theming/lib/Controller/ThemingController.php index b2d603bb68a..cffc628e9b9 100644 --- a/apps/theming/lib/Controller/ThemingController.php +++ b/apps/theming/lib/Controller/ThemingController.php @@ -163,6 +163,10 @@ class ThemingController extends Controller { } $this->themingDefaults->set($setting, $value); + + // reprocess server scss for preview + $cssCached = $this->scssCacher->process(\OC::$SERVERROOT, '/core/css/server.scss', 'core'); + return new DataResponse( [ 'data' => @@ -259,6 +263,8 @@ class ThemingController extends Controller { */ public function undo($setting) { $value = $this->themingDefaults->undo($setting); + // reprocess server scss for preview + $cssCached = $this->scssCacher->process(\OC::$SERVERROOT, '/core/css/server.scss', 'core'); return new DataResponse( [ 'data' => diff --git a/apps/theming/lib/ThemingDefaults.php b/apps/theming/lib/ThemingDefaults.php index 85ad11943dd..2935355f26d 100644 --- a/apps/theming/lib/ThemingDefaults.php +++ b/apps/theming/lib/ThemingDefaults.php @@ -66,11 +66,11 @@ class ThemingDefaults extends \OC_Defaults { public function __construct(IConfig $config, IL10N $l, IURLGenerator $urlGenerator, - \OC_Defaults $defaults, IAppData $appData, ICacheFactory $cacheFactory, Util $util ) { + parent::__construct(); $this->config = $config; $this->l = $l; $this->urlGenerator = $urlGenerator; @@ -78,10 +78,10 @@ class ThemingDefaults extends \OC_Defaults { $this->cacheFactory = $cacheFactory; $this->util = $util; - $this->name = $defaults->getName(); - $this->url = $defaults->getBaseUrl(); - $this->slogan = $defaults->getSlogan(); - $this->color = $defaults->getColorPrimary(); + $this->name = parent::getName(); + $this->url = parent::getBaseUrl(); + $this->slogan = parent::getSlogan(); + $this->color = parent::getColorPrimary(); } public function getName() { diff --git a/apps/theming/templates/settings-admin.php b/apps/theming/templates/settings-admin.php index 61fe57c3c75..858329eca48 100644 --- a/apps/theming/templates/settings-admin.php +++ b/apps/theming/templates/settings-admin.php @@ -28,8 +28,11 @@ style('theming', 'settings-admin'); ?> <div id="theming" class="section"> <h2 class="inlineblock"><?php p($l->t('Theming')); ?></h2> - <p class="settings-hint"><?php p($l->t('Theming makes it possible to easily customize the look and feel of your instance. This will be visible for all users.')); ?></p> - <div id="theming_settings_msg" class="msg success inlineblock" style="display: none;">Saved</div> + <p class="settings-hint"><?php p($l->t('Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users.')); ?></p> + <div id="theming_settings_status"> + <div id="theming_settings_loading" class="icon-loading-small" style="display: none;"></div> + <span id="theming_settings_msg" class="msg success" style="display: none;">Saved</span> + </div> <?php if ($_['themable'] === false) { ?> <p> <?php p($_['errorMessage']) ?> diff --git a/apps/theming/tests/ThemingDefaultsTest.php b/apps/theming/tests/ThemingDefaultsTest.php index f8ecc78d8ba..736eeb3afc3 100644 --- a/apps/theming/tests/ThemingDefaultsTest.php +++ b/apps/theming/tests/ThemingDefaultsTest.php @@ -65,25 +65,7 @@ class ThemingDefaultsTest extends TestCase { $this->cacheFactory = $this->createMock(ICacheFactory::class); $this->cache = $this->createMock(ICache::class); $this->util = $this->createMock(Util::class); - $this->defaults = $this->getMockBuilder(\OC_Defaults::class) - ->disableOriginalConstructor() - ->getMock(); - $this->defaults - ->expects($this->at(0)) - ->method('getName') - ->willReturn('Nextcloud'); - $this->defaults - ->expects($this->at(1)) - ->method('getBaseUrl') - ->willReturn('https://nextcloud.com/'); - $this->defaults - ->expects($this->at(2)) - ->method('getSlogan') - ->willReturn('Safe Data'); - $this->defaults - ->expects($this->at(3)) - ->method('getColorPrimary') - ->willReturn('#000'); + $this->defaults = new \OC_Defaults(); $this->cacheFactory ->expects($this->any()) ->method('create') @@ -93,7 +75,6 @@ class ThemingDefaultsTest extends TestCase { $this->config, $this->l10n, $this->urlGenerator, - $this->defaults, $this->appData, $this->cacheFactory, $this->util @@ -185,17 +166,17 @@ class ThemingDefaultsTest extends TestCase { $this->config ->expects($this->once()) ->method('getAppValue') - ->with('theming', 'url', 'https://nextcloud.com/') - ->willReturn('https://nextcloud.com/'); + ->with('theming', 'url', $this->defaults->getBaseUrl()) + ->willReturn($this->defaults->getBaseUrl()); - $this->assertEquals('https://nextcloud.com/', $this->template->getBaseUrl()); + $this->assertEquals($this->defaults->getBaseUrl(), $this->template->getBaseUrl()); } public function testGetBaseUrlWithCustom() { $this->config ->expects($this->once()) ->method('getAppValue') - ->with('theming', 'url', 'https://nextcloud.com/') + ->with('theming', 'url', $this->defaults->getBaseUrl()) ->willReturn('https://example.com/'); $this->assertEquals('https://example.com/', $this->template->getBaseUrl()); @@ -205,17 +186,17 @@ class ThemingDefaultsTest extends TestCase { $this->config ->expects($this->once()) ->method('getAppValue') - ->with('theming', 'slogan', 'Safe Data') - ->willReturn('Safe Data'); + ->with('theming', 'slogan', $this->defaults->getSlogan()) + ->willReturn($this->defaults->getSlogan()); - $this->assertEquals('Safe Data', $this->template->getSlogan()); + $this->assertEquals($this->defaults->getSlogan(), $this->template->getSlogan()); } public function testGetSloganWithCustom() { $this->config ->expects($this->once()) ->method('getAppValue') - ->with('theming', 'slogan', 'Safe Data') + ->with('theming', 'slogan', $this->defaults->getSlogan()) ->willReturn('My custom Slogan'); $this->assertEquals('My custom Slogan', $this->template->getSlogan()); @@ -226,9 +207,9 @@ class ThemingDefaultsTest extends TestCase { ->expects($this->exactly(3)) ->method('getAppValue') ->willReturnMap([ - ['theming', 'url', 'https://nextcloud.com/', 'url'], + ['theming', 'url', $this->defaults->getBaseUrl(), 'url'], ['theming', 'name', 'Nextcloud', 'Name'], - ['theming', 'slogan', 'Safe Data', 'Slogan'], + ['theming', 'slogan', $this->defaults->getSlogan(), 'Slogan'], ]); $this->assertEquals('<a href="url" target="_blank" rel="noreferrer">Name</a> – Slogan', $this->template->getShortFooter()); @@ -239,9 +220,9 @@ class ThemingDefaultsTest extends TestCase { ->expects($this->exactly(3)) ->method('getAppValue') ->willReturnMap([ - ['theming', 'url', 'https://nextcloud.com/', 'url'], + ['theming', 'url', $this->defaults->getBaseUrl(), 'url'], ['theming', 'name', 'Nextcloud', 'Name'], - ['theming', 'slogan', 'Safe Data', ''], + ['theming', 'slogan', $this->defaults->getSlogan(), ''], ]); $this->assertEquals('<a href="url" target="_blank" rel="noreferrer">Name</a>', $this->template->getShortFooter()); @@ -251,17 +232,17 @@ class ThemingDefaultsTest extends TestCase { $this->config ->expects($this->once()) ->method('getAppValue') - ->with('theming', 'color', '#000') - ->willReturn('#000'); + ->with('theming', 'color', $this->defaults->getColorPrimary()) + ->willReturn($this->defaults->getColorPrimary()); - $this->assertEquals('#000', $this->template->getColorPrimary()); + $this->assertEquals($this->defaults->getColorPrimary(), $this->template->getColorPrimary()); } public function testgetColorPrimaryWithCustom() { $this->config ->expects($this->once()) ->method('getAppValue') - ->with('theming', 'color', '#000') + ->with('theming', 'color', $this->defaults->getColorPrimary()) ->willReturn('#fff'); $this->assertEquals('#fff', $this->template->getColorPrimary()); @@ -328,10 +309,10 @@ class ThemingDefaultsTest extends TestCase { $this->config ->expects($this->at(3)) ->method('getAppValue') - ->with('theming', 'url', 'https://nextcloud.com/') - ->willReturn('https://nextcloud.com/'); + ->with('theming', 'url', $this->defaults->getBaseUrl()) + ->willReturn($this->defaults->getBaseUrl()); - $this->assertSame('https://nextcloud.com/', $this->template->undo('url')); + $this->assertSame($this->defaults->getBaseUrl(), $this->template->undo('url')); } public function testUndoSlogan() { @@ -351,10 +332,10 @@ class ThemingDefaultsTest extends TestCase { $this->config ->expects($this->at(3)) ->method('getAppValue') - ->with('theming', 'slogan', 'Safe Data') - ->willReturn('Safe Data'); + ->with('theming', 'slogan', $this->defaults->getSlogan()) + ->willReturn($this->defaults->getSlogan()); - $this->assertSame('Safe Data', $this->template->undo('slogan')); + $this->assertSame($this->defaults->getSlogan(), $this->template->undo('slogan')); } public function testUndoColor() { @@ -374,10 +355,10 @@ class ThemingDefaultsTest extends TestCase { $this->config ->expects($this->at(3)) ->method('getAppValue') - ->with('theming', 'color', '#000') - ->willReturn('#000'); + ->with('theming', 'color', $this->defaults->getColorPrimary()) + ->willReturn($this->defaults->getColorPrimary()); - $this->assertSame('#000', $this->template->undo('color')); + $this->assertSame($this->defaults->getColorPrimary(), $this->template->undo('color')); } public function testUndoDefaultAction() { @@ -502,11 +483,11 @@ class ThemingDefaultsTest extends TestCase { $this->config->expects($this->at(1))->method('getAppValue')->with('theming', 'logoMime', false)->willReturn('jpeg'); $this->config->expects($this->at(2))->method('getAppValue')->with('theming', 'cachebuster', '0')->willReturn('0'); $this->config->expects($this->at(3))->method('getAppValue')->with('theming', 'backgroundMime', false)->willReturn('jpeg'); - $this->config->expects($this->at(4))->method('getAppValue')->with('theming', 'color', null)->willReturn('#000000'); - $this->config->expects($this->at(5))->method('getAppValue')->with('theming', 'color', '#000')->willReturn('#000000'); - $this->config->expects($this->at(6))->method('getAppValue')->with('theming', 'color', '#000')->willReturn('#000000'); + $this->config->expects($this->at(4))->method('getAppValue')->with('theming', 'color', null)->willReturn($this->defaults->getColorPrimary()); + $this->config->expects($this->at(5))->method('getAppValue')->with('theming', 'color', $this->defaults->getColorPrimary())->willReturn($this->defaults->getColorPrimary()); + $this->config->expects($this->at(6))->method('getAppValue')->with('theming', 'color', $this->defaults->getColorPrimary())->willReturn($this->defaults->getColorPrimary()); - $this->util->expects($this->any())->method('invertTextColor')->with('#000000')->willReturn(false); + $this->util->expects($this->any())->method('invertTextColor')->with($this->defaults->getColorPrimary())->willReturn(false); $this->cache->expects($this->once())->method('get')->with('getScssVariables')->willReturn(null); $folder = $this->createMock(ISimpleFolder::class); $file = $this->createMock(ISimpleFile::class); @@ -532,7 +513,7 @@ class ThemingDefaultsTest extends TestCase { 'theming-cachebuster' => '\'0\'', 'image-logo' => "'absolute-custom-logo?v=0'", 'image-login-background' => "'absolute-custom-background'", - 'color-primary' => '#000000', + 'color-primary' => $this->defaults->getColorPrimary(), 'color-primary-text' => '#ffffff' ]; diff --git a/apps/twofactor_backupcodes/templates/personal.php b/apps/twofactor_backupcodes/templates/personal.php index 23b06e23058..3076e16a166 100644 --- a/apps/twofactor_backupcodes/templates/personal.php +++ b/apps/twofactor_backupcodes/templates/personal.php @@ -7,6 +7,6 @@ style('twofactor_backupcodes', 'style'); ?> <div class="section"> - <h2><?php p($l->t('Second-factor backup codes')); ?></h2> + <h2 data-anchor-name="second-factor-backup-codes"><?php p($l->t('Second-factor backup codes')); ?></h2> <div id="twofactor-backupcodes-settings"></div> </div> diff --git a/apps/updatenotification/l10n/cs.js b/apps/updatenotification/l10n/cs.js index 0338800a2c5..44f92f97759 100644 --- a/apps/updatenotification/l10n/cs.js +++ b/apps/updatenotification/l10n/cs.js @@ -6,6 +6,7 @@ OC.L10N.register( "{version} is available. Get more information on how to update." : "Je dostupná {version}. Přečtěte si více informací jak aktualizovat.", "Channel updated" : "Kanál aktualizován", "The update server could not be reached since %d days to check for new updates." : "Aktualizační server nebyl dosažen %d dní pro kontrolu aktualizací.", + "Please check the Nextcloud and server log files for errors." : "Po chybách se podívejte v protokolech Nextcloudu a webového serveru.", "Update to %1$s is available." : "Je dostupná aktualizace na %1$s.", "Update for %1$s to version %2$s is available." : "Je dostupná aktualizace pro %1$s na verzi %2$s.", "Update for {app} to version %s is available." : "Pro {app} je dostupná aktualizace na verzi %s.", diff --git a/apps/updatenotification/l10n/cs.json b/apps/updatenotification/l10n/cs.json index 19e1c509ea2..22676eebcdd 100644 --- a/apps/updatenotification/l10n/cs.json +++ b/apps/updatenotification/l10n/cs.json @@ -4,6 +4,7 @@ "{version} is available. Get more information on how to update." : "Je dostupná {version}. Přečtěte si více informací jak aktualizovat.", "Channel updated" : "Kanál aktualizován", "The update server could not be reached since %d days to check for new updates." : "Aktualizační server nebyl dosažen %d dní pro kontrolu aktualizací.", + "Please check the Nextcloud and server log files for errors." : "Po chybách se podívejte v protokolech Nextcloudu a webového serveru.", "Update to %1$s is available." : "Je dostupná aktualizace na %1$s.", "Update for %1$s to version %2$s is available." : "Je dostupná aktualizace pro %1$s na verzi %2$s.", "Update for {app} to version %s is available." : "Pro {app} je dostupná aktualizace na verzi %s.", diff --git a/apps/updatenotification/l10n/is.js b/apps/updatenotification/l10n/is.js index 5c118d23518..ae4dd1894fe 100644 --- a/apps/updatenotification/l10n/is.js +++ b/apps/updatenotification/l10n/is.js @@ -6,6 +6,7 @@ OC.L10N.register( "{version} is available. Get more information on how to update." : "{version} er í boði. Fáðu frekari upplýsingar um hvernig á að uppfæra.", "Channel updated" : "Rás uppfærð", "The update server could not be reached since %d days to check for new updates." : "Ekki hefur verið hægt að nálgast uppfærsluþjóninn í %d daga til að athuga með nýjar uppfærslur.", + "Please check the Nextcloud and server log files for errors." : "Skoðaðu hvort einhver villuboð séu í annálaskrám Nextcloud þjónsins.", "Update to %1$s is available." : "Uppfærsla fyrir %1$s er tiltæk.", "Update for %1$s to version %2$s is available." : "Uppfærsla %1$s í útgáfu %2$s er tiltæk.", "Update for {app} to version %s is available." : "Uppfærsla fyrir {app} í útgáfu %s er tiltæk.", diff --git a/apps/updatenotification/l10n/is.json b/apps/updatenotification/l10n/is.json index 758ade75705..7682520c169 100644 --- a/apps/updatenotification/l10n/is.json +++ b/apps/updatenotification/l10n/is.json @@ -4,6 +4,7 @@ "{version} is available. Get more information on how to update." : "{version} er í boði. Fáðu frekari upplýsingar um hvernig á að uppfæra.", "Channel updated" : "Rás uppfærð", "The update server could not be reached since %d days to check for new updates." : "Ekki hefur verið hægt að nálgast uppfærsluþjóninn í %d daga til að athuga með nýjar uppfærslur.", + "Please check the Nextcloud and server log files for errors." : "Skoðaðu hvort einhver villuboð séu í annálaskrám Nextcloud þjónsins.", "Update to %1$s is available." : "Uppfærsla fyrir %1$s er tiltæk.", "Update for %1$s to version %2$s is available." : "Uppfærsla %1$s í útgáfu %2$s er tiltæk.", "Update for {app} to version %s is available." : "Uppfærsla fyrir {app} í útgáfu %s er tiltæk.", diff --git a/apps/updatenotification/l10n/nb.js b/apps/updatenotification/l10n/nb.js index 8ec22fad947..bd1e6cf8859 100644 --- a/apps/updatenotification/l10n/nb.js +++ b/apps/updatenotification/l10n/nb.js @@ -5,6 +5,7 @@ OC.L10N.register( "Could not start updater, please try the manual update" : "Kunne ikke starte oppdateringen, prøv å oppdatere manuelt", "{version} is available. Get more information on how to update." : "{version} er tilgjengelig. Få mer informasjon om å oppdatere.", "Channel updated" : "Kanal oppdatert", + "The update server could not be reached since %d days to check for new updates." : "Har ikke oppnådd kontakt med oppdateringstjeneren på %d dager for å se etter nye oppdateringer.", "Please check the Nextcloud and server log files for errors." : "Se i Nextcloud- og tjener-loggen etter feil.", "Update to %1$s is available." : "Oppdatering til %1$s er tilgjengelig.", "Update for %1$s to version %2$s is available." : "Oppdatering for %1$s til versjon %2$s er tilgjengelig.", @@ -18,7 +19,7 @@ OC.L10N.register( "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Du kan alltid oppdatere til en nyere versjon / eksperimentell kanal. Men du kan aldri nedgradere til en mer stabil kanal.", "Notify members of the following groups about available updates:" : "Informer medlemmene i følgende grupper om tilgjengelig oppdateringer:", "Only notification for app updates are available." : "Kun varsler for app oppdateringer er tilgjengelig.", - "The selected update channel makes dedicated notifications for the server obsolete." : "Den valgte oppdateringskanalen gjør at dedikerte varsler til denne serveren utdatert.", + "The selected update channel makes dedicated notifications for the server obsolete." : "Den valgte oppdateringskanalen gjør dedikerte varsler til denne tjeneren utdatert.", "The selected update channel does not support updates of the server." : "Den valgte oppdateringskanalen tilbyr ikke oppdateringer av tjeneren." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/updatenotification/l10n/nb.json b/apps/updatenotification/l10n/nb.json index 8f700c9c3b1..9d2127ace72 100644 --- a/apps/updatenotification/l10n/nb.json +++ b/apps/updatenotification/l10n/nb.json @@ -3,6 +3,7 @@ "Could not start updater, please try the manual update" : "Kunne ikke starte oppdateringen, prøv å oppdatere manuelt", "{version} is available. Get more information on how to update." : "{version} er tilgjengelig. Få mer informasjon om å oppdatere.", "Channel updated" : "Kanal oppdatert", + "The update server could not be reached since %d days to check for new updates." : "Har ikke oppnådd kontakt med oppdateringstjeneren på %d dager for å se etter nye oppdateringer.", "Please check the Nextcloud and server log files for errors." : "Se i Nextcloud- og tjener-loggen etter feil.", "Update to %1$s is available." : "Oppdatering til %1$s er tilgjengelig.", "Update for %1$s to version %2$s is available." : "Oppdatering for %1$s til versjon %2$s er tilgjengelig.", @@ -16,7 +17,7 @@ "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Du kan alltid oppdatere til en nyere versjon / eksperimentell kanal. Men du kan aldri nedgradere til en mer stabil kanal.", "Notify members of the following groups about available updates:" : "Informer medlemmene i følgende grupper om tilgjengelig oppdateringer:", "Only notification for app updates are available." : "Kun varsler for app oppdateringer er tilgjengelig.", - "The selected update channel makes dedicated notifications for the server obsolete." : "Den valgte oppdateringskanalen gjør at dedikerte varsler til denne serveren utdatert.", + "The selected update channel makes dedicated notifications for the server obsolete." : "Den valgte oppdateringskanalen gjør dedikerte varsler til denne tjeneren utdatert.", "The selected update channel does not support updates of the server." : "Den valgte oppdateringskanalen tilbyr ikke oppdateringer av tjeneren." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/de.js b/apps/user_ldap/l10n/de.js index 723a2ab4149..a1f6bb440a4 100644 --- a/apps/user_ldap/l10n/de.js +++ b/apps/user_ldap/l10n/de.js @@ -56,7 +56,9 @@ OC.L10N.register( "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Das Gruppenfeld wurde deaktiviert, da der LDAP / AD-Server memberOf nicht unterstützt.", "Password change rejected. Hint: " : "Passwortändertung verweigert. Hinweis:", "Please login with the new password" : "Bitte mit dem neuen Passwort anmelden", - "Your password will expire within %s day(s)." : "Dein Passwort läuft in %s Tag(en) ab.", + "Your password will expire tomorrow." : "Dein Passwort läuft morgen ab", + "Your password will expire today." : "Dein Passwort läuft heute ab", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Dein Passwort läuft in %n Tag ab","Dein Passwort läuft in %n Tagen ab"], "LDAP / AD integration" : "LDAP / AD Integration", "_%s group found_::_%s groups found_" : ["%s Gruppe gefunden","%s Gruppen gefunden"], "_%s user found_::_%s users found_" : ["%s Benutzer gefunden","%s Benutzer gefunden"], diff --git a/apps/user_ldap/l10n/de.json b/apps/user_ldap/l10n/de.json index d4ee92b54d6..234355bc34c 100644 --- a/apps/user_ldap/l10n/de.json +++ b/apps/user_ldap/l10n/de.json @@ -54,7 +54,9 @@ "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Das Gruppenfeld wurde deaktiviert, da der LDAP / AD-Server memberOf nicht unterstützt.", "Password change rejected. Hint: " : "Passwortändertung verweigert. Hinweis:", "Please login with the new password" : "Bitte mit dem neuen Passwort anmelden", - "Your password will expire within %s day(s)." : "Dein Passwort läuft in %s Tag(en) ab.", + "Your password will expire tomorrow." : "Dein Passwort läuft morgen ab", + "Your password will expire today." : "Dein Passwort läuft heute ab", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Dein Passwort läuft in %n Tag ab","Dein Passwort läuft in %n Tagen ab"], "LDAP / AD integration" : "LDAP / AD Integration", "_%s group found_::_%s groups found_" : ["%s Gruppe gefunden","%s Gruppen gefunden"], "_%s user found_::_%s users found_" : ["%s Benutzer gefunden","%s Benutzer gefunden"], diff --git a/apps/user_ldap/l10n/de_DE.js b/apps/user_ldap/l10n/de_DE.js index 54e8647ecec..16a39130585 100644 --- a/apps/user_ldap/l10n/de_DE.js +++ b/apps/user_ldap/l10n/de_DE.js @@ -56,7 +56,9 @@ OC.L10N.register( "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Das Gruppenfeld wurde deaktiviert, da der LDAP / AD-Server memberOf nicht unterstützt.", "Password change rejected. Hint: " : "Passwortändertung verweigert. Hinweis:", "Please login with the new password" : "Bitte mit dem neuen Passwort anmelden", - "Your password will expire within %s day(s)." : "Ihr Passwort läuft in %s Tag(en) ab.", + "Your password will expire tomorrow." : "Ihr Passwort läuft morgen ab", + "Your password will expire today." : "Ihr Passwort läuft heute ab", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Ihr Passwort läuft in %n Tage ab","Ihr Passwort läuft in %n Tagen ab"], "LDAP / AD integration" : "LDAP/AD-Integration", "_%s group found_::_%s groups found_" : ["%s Gruppe gefunden","%s Gruppen gefunden"], "_%s user found_::_%s users found_" : ["%s Benutzer gefunden","%s Benutzer gefunden"], diff --git a/apps/user_ldap/l10n/de_DE.json b/apps/user_ldap/l10n/de_DE.json index 8108453ef58..3e707d6ba17 100644 --- a/apps/user_ldap/l10n/de_DE.json +++ b/apps/user_ldap/l10n/de_DE.json @@ -54,7 +54,9 @@ "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Das Gruppenfeld wurde deaktiviert, da der LDAP / AD-Server memberOf nicht unterstützt.", "Password change rejected. Hint: " : "Passwortändertung verweigert. Hinweis:", "Please login with the new password" : "Bitte mit dem neuen Passwort anmelden", - "Your password will expire within %s day(s)." : "Ihr Passwort läuft in %s Tag(en) ab.", + "Your password will expire tomorrow." : "Ihr Passwort läuft morgen ab", + "Your password will expire today." : "Ihr Passwort läuft heute ab", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Ihr Passwort läuft in %n Tage ab","Ihr Passwort läuft in %n Tagen ab"], "LDAP / AD integration" : "LDAP/AD-Integration", "_%s group found_::_%s groups found_" : ["%s Gruppe gefunden","%s Gruppen gefunden"], "_%s user found_::_%s users found_" : ["%s Benutzer gefunden","%s Benutzer gefunden"], diff --git a/apps/user_ldap/l10n/el.js b/apps/user_ldap/l10n/el.js index bb01c24533c..e33d8a0a82e 100644 --- a/apps/user_ldap/l10n/el.js +++ b/apps/user_ldap/l10n/el.js @@ -95,6 +95,8 @@ OC.L10N.register( "Saving" : "Αποθήκευση", "Back" : "Επιστροφή", "Continue" : "Συνέχεια", + "Current password" : "Τρέχον συνθηματικό", + "New password" : "Νέο συνθηματικό", "LDAP" : "LDAP", "Server" : "Διακομιστής", "Users" : "Χρήστες", diff --git a/apps/user_ldap/l10n/el.json b/apps/user_ldap/l10n/el.json index 83db36afa19..5e7b7e322be 100644 --- a/apps/user_ldap/l10n/el.json +++ b/apps/user_ldap/l10n/el.json @@ -93,6 +93,8 @@ "Saving" : "Αποθήκευση", "Back" : "Επιστροφή", "Continue" : "Συνέχεια", + "Current password" : "Τρέχον συνθηματικό", + "New password" : "Νέο συνθηματικό", "LDAP" : "LDAP", "Server" : "Διακομιστής", "Users" : "Χρήστες", diff --git a/apps/user_ldap/l10n/es_MX.js b/apps/user_ldap/l10n/es_MX.js index 6c1fdcd0143..6a3dd19978a 100644 --- a/apps/user_ldap/l10n/es_MX.js +++ b/apps/user_ldap/l10n/es_MX.js @@ -12,6 +12,7 @@ OC.L10N.register( "No data specified" : "No se han especificado datos", " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", + "LDAP user and group backend" : "Backend de LDAP para usuario y grupo", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", "Weak password" : "Contraseña debill", @@ -55,7 +56,9 @@ OC.L10N.register( "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Favor de iniciar sesion con la nueva contraseña", - "Your password will expire within %s day(s)." : "Su contraseña expirará dentro de %s día(s).", + "Your password will expire tomorrow." : "Su contraseña expirará mañana.", + "Your password will expire today." : "Su contraseña expirará el día de hoy. ", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], "LDAP / AD integration" : "Integración con LDAP / AD", "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], @@ -163,6 +166,8 @@ OC.L10N.register( "Enable LDAP password changes per user" : "Habilitar cambio de contraseñas en LDAP por el usuario", "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Permitir que los usuarios LDAP puedan cambiar su contraseña y permitir a los Super Administradortes y Administradores de grupo cambiar la contraseña de sus usuarios LDAP. Únicamente funciona si configuración de las poiíticas de control de acceso en el servidor LDAP está alineada. Como las contraseñas son enviadas en texto plano al servidor LDAP, se debe usar encripción en el transporte y del mismo modo se debe configurar el uso de funciones de resumen en el servidor LDAP", "(New password is sent as plain text to LDAP)" : "(La nueva contraseña se envía como texto plano a LDAP)", + "Default password policy DN" : "DN de la política predeterminada de contraseñas", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "El DN de la política de contraseñas predeterminada que será usada para el manejo de expiración de contraseñas. Solo funciona cuando está habilitado el cambio de contraseñas por el usuario y solo está soportado para OpenLDAP. Deje en blanco para deshabilitar el manejo de expiración de contraseñas.", "Special Attributes" : "Atributos Especiales", "Quota Field" : "Campo de cuota", "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Dejar en blanco para usar la cuota predeterminada del usuario. En caso contrario, favor de especificar el atributo LDAP / AD.", diff --git a/apps/user_ldap/l10n/es_MX.json b/apps/user_ldap/l10n/es_MX.json index 6c82def13dc..b3a56b09562 100644 --- a/apps/user_ldap/l10n/es_MX.json +++ b/apps/user_ldap/l10n/es_MX.json @@ -10,6 +10,7 @@ "No data specified" : "No se han especificado datos", " Could not set configuration %s" : "No fue posible establecer la configuración %s", "Action does not exist" : "La acción no existe", + "LDAP user and group backend" : "Backend de LDAP para usuario y grupo", "Renewing …" : "Renovando ...", "Very weak password" : "Contraseña muy debil", "Weak password" : "Contraseña debill", @@ -53,7 +54,9 @@ "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadro de grupo está deshabilitado, porque el servidor LDAP / AD no soporta memberOf.", "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ", "Please login with the new password" : "Favor de iniciar sesion con la nueva contraseña", - "Your password will expire within %s day(s)." : "Su contraseña expirará dentro de %s día(s).", + "Your password will expire tomorrow." : "Su contraseña expirará mañana.", + "Your password will expire today." : "Su contraseña expirará el día de hoy. ", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["La contraseña expirará dentro de %n día. ","La contraseña expirará dentro de %n días. "], "LDAP / AD integration" : "Integración con LDAP / AD", "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"], "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"], @@ -161,6 +164,8 @@ "Enable LDAP password changes per user" : "Habilitar cambio de contraseñas en LDAP por el usuario", "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Permitir que los usuarios LDAP puedan cambiar su contraseña y permitir a los Super Administradortes y Administradores de grupo cambiar la contraseña de sus usuarios LDAP. Únicamente funciona si configuración de las poiíticas de control de acceso en el servidor LDAP está alineada. Como las contraseñas son enviadas en texto plano al servidor LDAP, se debe usar encripción en el transporte y del mismo modo se debe configurar el uso de funciones de resumen en el servidor LDAP", "(New password is sent as plain text to LDAP)" : "(La nueva contraseña se envía como texto plano a LDAP)", + "Default password policy DN" : "DN de la política predeterminada de contraseñas", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "El DN de la política de contraseñas predeterminada que será usada para el manejo de expiración de contraseñas. Solo funciona cuando está habilitado el cambio de contraseñas por el usuario y solo está soportado para OpenLDAP. Deje en blanco para deshabilitar el manejo de expiración de contraseñas.", "Special Attributes" : "Atributos Especiales", "Quota Field" : "Campo de cuota", "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Dejar en blanco para usar la cuota predeterminada del usuario. En caso contrario, favor de especificar el atributo LDAP / AD.", diff --git a/apps/user_ldap/l10n/fr.js b/apps/user_ldap/l10n/fr.js index aea2afe9a16..f2d2c22fac7 100644 --- a/apps/user_ldap/l10n/fr.js +++ b/apps/user_ldap/l10n/fr.js @@ -55,7 +55,9 @@ OC.L10N.register( "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Les groupes sont désactivés car le serveur LDAP / AD ne prend pas en charge memberOf.", "Password change rejected. Hint: " : "La modification du mot de passe a été rejetée. Indice :", "Please login with the new password" : "Veuillez vous connecter avec le nouveau mot de passe", - "Your password will expire within %s day(s)." : "Votre mot de passe va expirer dans %s jour(s).", + "Your password will expire tomorrow." : "Votre mot de passe va expirer demain.", + "Your password will expire today." : "Votre mot de passe va expirer aujourd'hui.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Votre mot de passe va expirer dans %n jour.","Votre mot de passe va expirer dans %n jours."], "LDAP / AD integration" : "Intégration LDAP/AD", "_%s group found_::_%s groups found_" : ["%s groupe trouvé","%s groupes trouvés"], "_%s user found_::_%s users found_" : ["%s utilisateur trouvé","%s utilisateurs trouvés"], diff --git a/apps/user_ldap/l10n/fr.json b/apps/user_ldap/l10n/fr.json index b396d11f106..217cd85b5d0 100644 --- a/apps/user_ldap/l10n/fr.json +++ b/apps/user_ldap/l10n/fr.json @@ -53,7 +53,9 @@ "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Les groupes sont désactivés car le serveur LDAP / AD ne prend pas en charge memberOf.", "Password change rejected. Hint: " : "La modification du mot de passe a été rejetée. Indice :", "Please login with the new password" : "Veuillez vous connecter avec le nouveau mot de passe", - "Your password will expire within %s day(s)." : "Votre mot de passe va expirer dans %s jour(s).", + "Your password will expire tomorrow." : "Votre mot de passe va expirer demain.", + "Your password will expire today." : "Votre mot de passe va expirer aujourd'hui.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Votre mot de passe va expirer dans %n jour.","Votre mot de passe va expirer dans %n jours."], "LDAP / AD integration" : "Intégration LDAP/AD", "_%s group found_::_%s groups found_" : ["%s groupe trouvé","%s groupes trouvés"], "_%s user found_::_%s users found_" : ["%s utilisateur trouvé","%s utilisateurs trouvés"], diff --git a/apps/user_ldap/l10n/nb.js b/apps/user_ldap/l10n/nb.js index 5d470f02fc0..30f67da3568 100644 --- a/apps/user_ldap/l10n/nb.js +++ b/apps/user_ldap/l10n/nb.js @@ -12,6 +12,7 @@ OC.L10N.register( "No data specified" : "Ingen data spesifisert", " Could not set configuration %s" : "Klarte ikke å utføre oppsett %s", "Action does not exist" : "Handlingen finnes ikke", + "LDAP user and group backend" : "LDAP bruker- og gruppe -bakende", "Renewing …" : "Fornyer…", "Very weak password" : "Veldig svakt passord", "Weak password" : "Svakt passord", @@ -29,7 +30,7 @@ OC.L10N.register( "Please specify the port, it could not be auto-detected." : "Spesifiser porten. Den kunne ikke påvises automatisk.", "Base DN could not be auto-detected, please revise credentials, host and port." : "Base-DN kunne ikke påvises automatisk. Se igjennom pålogginsdetaljer, vertsnavn og portnummer.", "Could not detect Base DN, please enter it manually." : "Klarte ikke å påvise base-DN. Det må skrives inn manuelt.", - "{nthServer}. Server" : "{nthServer}. tjener", + "{nthServer}. Server" : "{nthServer}. Tjener", "No object found in the given Base DN. Please revise." : "Intet objekt funnet i angitt base-DN. Revider oppsettet.", "More than 1,000 directory entries available." : "Mer enn 1.000 katalogoppføringer tilgjengelig.", " entries available within the provided Base DN" : "oppføringer tilgjengelig innenfor angitt base-DN", @@ -54,7 +55,9 @@ OC.L10N.register( "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Gruppeboksen ble deaktivert fordi LDAP- / AD-tjeneren ikke støtter memberOf.", "Password change rejected. Hint: " : "Passordendring avslått. Hint:", "Please login with the new password" : "Logg inn med det nye passordet", - "Your password will expire within %s day(s)." : "Passordet ditt vil utløpe innen %s dag(er).", + "Your password will expire tomorrow." : "Passordet ditt utløper i morgen.", + "Your password will expire today." : "Passordet ditt utløper i dag.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Passordet ditt utløper om %n dag.","Passordet ditt utløper om %n dager."], "LDAP / AD integration" : "LDAP / AD integrasjon", "_%s group found_::_%s groups found_" : ["%s gruppe funnet","%s grupper funnet"], "_%s user found_::_%s users found_" : ["%s bruker funnet","%s brukere funnet"], @@ -122,7 +125,7 @@ OC.L10N.register( "Expert" : "Ekspert", "Advanced" : "Avansert", "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Advarsel:</b> Appene user_ldap og user_webdavauth er ikke kompatible med hverandre. Uventet oppførsel kan forekomme. Be systemadministratoren om å deaktivere en av dem.", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advarsel:</b> PHP LDAP-modulen er ikke installert og serveren vil ikke virke. Be systemadministratoren installere den.", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advarsel:</b> PHP LDAP-modulen er ikke installert og tjeneren vil ikke virke. Be systemadministratoren installere den.", "Connection Settings" : "Innstillinger for tilkobling", "Configuration Active" : "Oppsett aktivt", "When unchecked, this configuration will be skipped." : "Overser oppsettet når ikke avhuket.", diff --git a/apps/user_ldap/l10n/nb.json b/apps/user_ldap/l10n/nb.json index 7da50250c38..dccc6f3e8b0 100644 --- a/apps/user_ldap/l10n/nb.json +++ b/apps/user_ldap/l10n/nb.json @@ -10,6 +10,7 @@ "No data specified" : "Ingen data spesifisert", " Could not set configuration %s" : "Klarte ikke å utføre oppsett %s", "Action does not exist" : "Handlingen finnes ikke", + "LDAP user and group backend" : "LDAP bruker- og gruppe -bakende", "Renewing …" : "Fornyer…", "Very weak password" : "Veldig svakt passord", "Weak password" : "Svakt passord", @@ -27,7 +28,7 @@ "Please specify the port, it could not be auto-detected." : "Spesifiser porten. Den kunne ikke påvises automatisk.", "Base DN could not be auto-detected, please revise credentials, host and port." : "Base-DN kunne ikke påvises automatisk. Se igjennom pålogginsdetaljer, vertsnavn og portnummer.", "Could not detect Base DN, please enter it manually." : "Klarte ikke å påvise base-DN. Det må skrives inn manuelt.", - "{nthServer}. Server" : "{nthServer}. tjener", + "{nthServer}. Server" : "{nthServer}. Tjener", "No object found in the given Base DN. Please revise." : "Intet objekt funnet i angitt base-DN. Revider oppsettet.", "More than 1,000 directory entries available." : "Mer enn 1.000 katalogoppføringer tilgjengelig.", " entries available within the provided Base DN" : "oppføringer tilgjengelig innenfor angitt base-DN", @@ -52,7 +53,9 @@ "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Gruppeboksen ble deaktivert fordi LDAP- / AD-tjeneren ikke støtter memberOf.", "Password change rejected. Hint: " : "Passordendring avslått. Hint:", "Please login with the new password" : "Logg inn med det nye passordet", - "Your password will expire within %s day(s)." : "Passordet ditt vil utløpe innen %s dag(er).", + "Your password will expire tomorrow." : "Passordet ditt utløper i morgen.", + "Your password will expire today." : "Passordet ditt utløper i dag.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Passordet ditt utløper om %n dag.","Passordet ditt utløper om %n dager."], "LDAP / AD integration" : "LDAP / AD integrasjon", "_%s group found_::_%s groups found_" : ["%s gruppe funnet","%s grupper funnet"], "_%s user found_::_%s users found_" : ["%s bruker funnet","%s brukere funnet"], @@ -120,7 +123,7 @@ "Expert" : "Ekspert", "Advanced" : "Avansert", "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Advarsel:</b> Appene user_ldap og user_webdavauth er ikke kompatible med hverandre. Uventet oppførsel kan forekomme. Be systemadministratoren om å deaktivere en av dem.", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advarsel:</b> PHP LDAP-modulen er ikke installert og serveren vil ikke virke. Be systemadministratoren installere den.", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advarsel:</b> PHP LDAP-modulen er ikke installert og tjeneren vil ikke virke. Be systemadministratoren installere den.", "Connection Settings" : "Innstillinger for tilkobling", "Configuration Active" : "Oppsett aktivt", "When unchecked, this configuration will be skipped." : "Overser oppsettet når ikke avhuket.", diff --git a/apps/user_ldap/l10n/nl.js b/apps/user_ldap/l10n/nl.js index 08042e96ba1..9b4cecadb8b 100644 --- a/apps/user_ldap/l10n/nl.js +++ b/apps/user_ldap/l10n/nl.js @@ -12,6 +12,13 @@ OC.L10N.register( "No data specified" : "Geen gegevens verstrekt", " Could not set configuration %s" : "Kon configuratie %s niet instellen", "Action does not exist" : "Actie bestaat niet", + "LDAP user and group backend" : "LDAP gebruikers en groep backend", + "Renewing …" : "Herstellen ...", + "Very weak password" : "Zeer zwak wachtwoord", + "Weak password" : "Zwak wachtwoord", + "So-so password" : "Matig wachtwoord", + "Good password" : "Goed wachtwoord", + "Strong password" : "Sterk wachtwoord", "The Base DN appears to be wrong" : "De Basis DN lijkt onjuist", "Testing configuration…" : "Testen van de configuratie…", "Configuration incorrect" : "Configuratie onjuist", @@ -48,6 +55,10 @@ OC.L10N.register( "Please provide a login name to test against" : "Geef een inlognaam op om opnieuw tegen te testen", "The group box was disabled, because the LDAP / AD server does not support memberOf." : "De groepsbox was uitgeschakeld, omdat de LDAP / AD server het attribuut memberOf niet ondersteunt.", "Password change rejected. Hint: " : "Wachtwoordwijziging geweigerd. Hint:", + "Please login with the new password" : "Login met je nieuwe wachtwoord", + "Your password will expire tomorrow." : "Je wachtwoord vervalt morgen.", + "Your password will expire today." : "Je wachtwoord vervalt vandaag.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Je wachtwoord verloopt binnen %n dag.","Je wachtwoord verloopt binnen %n dagen."], "LDAP / AD integration" : "LDAP / AD integratie", "_%s group found_::_%s groups found_" : ["%s groep gevonden","%s groepen gevonden"], "_%s user found_::_%s users found_" : ["%s gebruiker gevonden","%s gebruikers gevonden"], @@ -101,6 +112,15 @@ OC.L10N.register( "Saving" : "Opslaan", "Back" : "Terug", "Continue" : "Verder", + "Please renew your password." : "Herstel je wachtwoord", + "An internal error occurred." : "Er heeft zich een interne fout voorgedaan.", + "Please try again or contact your administrator." : "Probeer het opnieuw of neem contact op met je beheerder.", + "Current password" : "Huidig wachtwoord", + "New password" : "Nieuw wachtwoord", + "Renew password" : "Herstel wachtwoord", + "Wrong password. Reset it?" : "Onjuist wachtwoord. Resetten?", + "Wrong password." : "Onjuist wachtwoord.", + "Cancel" : "Annuleren", "LDAP" : "LDAP", "Server" : "Server", "Users" : "Gebruikers", @@ -146,6 +166,8 @@ OC.L10N.register( "Enable LDAP password changes per user" : "Activeren LDAP wachtwoordwijziging per gebruiker:", "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Sta LDAP gebruikers toe om hun wachtwoord te wijzigen en sta Superbeheerders en Groepsbeheerder toe om het wachtwoord van hun LDAP gebruikers te wijzigen. Dit werkt alleen als het toegangsbeveiligingsbeleid als zodanig ook op de LDAP server is ingericht. Omdat wachtwoorden in leesbare tekst naar de LDAP worden verstuurd, moet transportversleuteling worden gebruikt en moet wachtwoord hashing zijn geconfigureerd op de LDAP server.", "(New password is sent as plain text to LDAP)" : "(Nieuw wachtwoord is als leesbare tekst verstuurd naar LDAP)", + "Default password policy DN" : "Standaard wachtwoordbeleid DN", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "Het DN of standaard wachtwoordbeleid dat wordt gebruikt voor het verlopen van wachtwoorden. Wordt alleen ondersteund in combinaite met OpenLDAP wanneer paswoord wijzigingen per gebruiker is ingeschakeld. Leeg laten wanneer wanneer je wachtwoord verloop wil uitschakelen.", "Special Attributes" : "Speciale attributen", "Quota Field" : "Quota veld", "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Laat leeg voor het standaard gebruikersquotum. Of specificeer een LDAP/AD attribuut.", diff --git a/apps/user_ldap/l10n/nl.json b/apps/user_ldap/l10n/nl.json index 418a99aaeb8..7e0ea433ca1 100644 --- a/apps/user_ldap/l10n/nl.json +++ b/apps/user_ldap/l10n/nl.json @@ -10,6 +10,13 @@ "No data specified" : "Geen gegevens verstrekt", " Could not set configuration %s" : "Kon configuratie %s niet instellen", "Action does not exist" : "Actie bestaat niet", + "LDAP user and group backend" : "LDAP gebruikers en groep backend", + "Renewing …" : "Herstellen ...", + "Very weak password" : "Zeer zwak wachtwoord", + "Weak password" : "Zwak wachtwoord", + "So-so password" : "Matig wachtwoord", + "Good password" : "Goed wachtwoord", + "Strong password" : "Sterk wachtwoord", "The Base DN appears to be wrong" : "De Basis DN lijkt onjuist", "Testing configuration…" : "Testen van de configuratie…", "Configuration incorrect" : "Configuratie onjuist", @@ -46,6 +53,10 @@ "Please provide a login name to test against" : "Geef een inlognaam op om opnieuw tegen te testen", "The group box was disabled, because the LDAP / AD server does not support memberOf." : "De groepsbox was uitgeschakeld, omdat de LDAP / AD server het attribuut memberOf niet ondersteunt.", "Password change rejected. Hint: " : "Wachtwoordwijziging geweigerd. Hint:", + "Please login with the new password" : "Login met je nieuwe wachtwoord", + "Your password will expire tomorrow." : "Je wachtwoord vervalt morgen.", + "Your password will expire today." : "Je wachtwoord vervalt vandaag.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Je wachtwoord verloopt binnen %n dag.","Je wachtwoord verloopt binnen %n dagen."], "LDAP / AD integration" : "LDAP / AD integratie", "_%s group found_::_%s groups found_" : ["%s groep gevonden","%s groepen gevonden"], "_%s user found_::_%s users found_" : ["%s gebruiker gevonden","%s gebruikers gevonden"], @@ -99,6 +110,15 @@ "Saving" : "Opslaan", "Back" : "Terug", "Continue" : "Verder", + "Please renew your password." : "Herstel je wachtwoord", + "An internal error occurred." : "Er heeft zich een interne fout voorgedaan.", + "Please try again or contact your administrator." : "Probeer het opnieuw of neem contact op met je beheerder.", + "Current password" : "Huidig wachtwoord", + "New password" : "Nieuw wachtwoord", + "Renew password" : "Herstel wachtwoord", + "Wrong password. Reset it?" : "Onjuist wachtwoord. Resetten?", + "Wrong password." : "Onjuist wachtwoord.", + "Cancel" : "Annuleren", "LDAP" : "LDAP", "Server" : "Server", "Users" : "Gebruikers", @@ -144,6 +164,8 @@ "Enable LDAP password changes per user" : "Activeren LDAP wachtwoordwijziging per gebruiker:", "Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Sta LDAP gebruikers toe om hun wachtwoord te wijzigen en sta Superbeheerders en Groepsbeheerder toe om het wachtwoord van hun LDAP gebruikers te wijzigen. Dit werkt alleen als het toegangsbeveiligingsbeleid als zodanig ook op de LDAP server is ingericht. Omdat wachtwoorden in leesbare tekst naar de LDAP worden verstuurd, moet transportversleuteling worden gebruikt en moet wachtwoord hashing zijn geconfigureerd op de LDAP server.", "(New password is sent as plain text to LDAP)" : "(Nieuw wachtwoord is als leesbare tekst verstuurd naar LDAP)", + "Default password policy DN" : "Standaard wachtwoordbeleid DN", + "The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling." : "Het DN of standaard wachtwoordbeleid dat wordt gebruikt voor het verlopen van wachtwoorden. Wordt alleen ondersteund in combinaite met OpenLDAP wanneer paswoord wijzigingen per gebruiker is ingeschakeld. Leeg laten wanneer wanneer je wachtwoord verloop wil uitschakelen.", "Special Attributes" : "Speciale attributen", "Quota Field" : "Quota veld", "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Laat leeg voor het standaard gebruikersquotum. Of specificeer een LDAP/AD attribuut.", diff --git a/apps/user_ldap/l10n/pt_BR.js b/apps/user_ldap/l10n/pt_BR.js index c60862a804d..5242b928672 100644 --- a/apps/user_ldap/l10n/pt_BR.js +++ b/apps/user_ldap/l10n/pt_BR.js @@ -56,7 +56,9 @@ OC.L10N.register( "The group box was disabled, because the LDAP / AD server does not support memberOf." : "A caixa do grupo foi desativada pois o servidor LDAP / AD não suporta memberOf.", "Password change rejected. Hint: " : "Troca de senha rejeitada. Dica:", "Please login with the new password" : "Logue-se com a nova senha", - "Your password will expire within %s day(s)." : "Sua senha vai expirar dentro de %s dia(s).", + "Your password will expire tomorrow." : "Sua senha vai expirar amanhã.", + "Your password will expire today." : "Sua senha vai expirar hoje.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Sua senha vai expirar dentro de%n dia.","Sua senha vai expirar dentro de%ndias."], "LDAP / AD integration" : "Integração LDAP / AD", "_%s group found_::_%s groups found_" : ["grupo% s encontrado","grupos% s encontrado"], "_%s user found_::_%s users found_" : ["usuário %s encontrado","%s usuários encontrados"], diff --git a/apps/user_ldap/l10n/pt_BR.json b/apps/user_ldap/l10n/pt_BR.json index fb01a1d2224..db0dd00c381 100644 --- a/apps/user_ldap/l10n/pt_BR.json +++ b/apps/user_ldap/l10n/pt_BR.json @@ -54,7 +54,9 @@ "The group box was disabled, because the LDAP / AD server does not support memberOf." : "A caixa do grupo foi desativada pois o servidor LDAP / AD não suporta memberOf.", "Password change rejected. Hint: " : "Troca de senha rejeitada. Dica:", "Please login with the new password" : "Logue-se com a nova senha", - "Your password will expire within %s day(s)." : "Sua senha vai expirar dentro de %s dia(s).", + "Your password will expire tomorrow." : "Sua senha vai expirar amanhã.", + "Your password will expire today." : "Sua senha vai expirar hoje.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Sua senha vai expirar dentro de%n dia.","Sua senha vai expirar dentro de%ndias."], "LDAP / AD integration" : "Integração LDAP / AD", "_%s group found_::_%s groups found_" : ["grupo% s encontrado","grupos% s encontrado"], "_%s user found_::_%s users found_" : ["usuário %s encontrado","%s usuários encontrados"], diff --git a/apps/user_ldap/l10n/ru.js b/apps/user_ldap/l10n/ru.js index a571f68dffe..036f78ea9b3 100644 --- a/apps/user_ldap/l10n/ru.js +++ b/apps/user_ldap/l10n/ru.js @@ -56,7 +56,6 @@ OC.L10N.register( "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Настройка групп была отключена, так как сервер LDAP / AD не поддерживает memberOf.", "Password change rejected. Hint: " : "Смена пароля отклонена. Подсказка:", "Please login with the new password" : "Войдите в систему со своим новым паролем", - "Your password will expire within %s day(s)." : "Срок действия пароля истечёт через %s дней (дня).", "LDAP / AD integration" : "Интеграция LDAP / AD", "_%s group found_::_%s groups found_" : ["%s группа найдена","%s группы найдены","%s групп найдено","%s групп найдено"], "_%s user found_::_%s users found_" : ["%s пользователь найден","%s пользователя найдено","%s пользователей найдено","%s пользователей найдено"], diff --git a/apps/user_ldap/l10n/ru.json b/apps/user_ldap/l10n/ru.json index a84f416273c..0b61ca441cd 100644 --- a/apps/user_ldap/l10n/ru.json +++ b/apps/user_ldap/l10n/ru.json @@ -54,7 +54,6 @@ "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Настройка групп была отключена, так как сервер LDAP / AD не поддерживает memberOf.", "Password change rejected. Hint: " : "Смена пароля отклонена. Подсказка:", "Please login with the new password" : "Войдите в систему со своим новым паролем", - "Your password will expire within %s day(s)." : "Срок действия пароля истечёт через %s дней (дня).", "LDAP / AD integration" : "Интеграция LDAP / AD", "_%s group found_::_%s groups found_" : ["%s группа найдена","%s группы найдены","%s групп найдено","%s групп найдено"], "_%s user found_::_%s users found_" : ["%s пользователь найден","%s пользователя найдено","%s пользователей найдено","%s пользователей найдено"], diff --git a/apps/user_ldap/l10n/tr.js b/apps/user_ldap/l10n/tr.js index cc41ed59a3a..842500e18bd 100644 --- a/apps/user_ldap/l10n/tr.js +++ b/apps/user_ldap/l10n/tr.js @@ -56,7 +56,9 @@ OC.L10N.register( "The group box was disabled, because the LDAP / AD server does not support memberOf." : "LDAP / AD sunucusu memberOf parametresini desteklemediğinden grup kutusu devre dışı.", "Password change rejected. Hint: " : "Parola değişimi reddedildi. İpucu:", "Please login with the new password" : "Lütfen yeni parolanız ile oturum açın", - "Your password will expire within %s day(s)." : "Parolanızın süresi %s gün içinde dolacak.", + "Your password will expire tomorrow." : "Parolanızın süresi yarın dolacak.", + "Your password will expire today." : "Parolanızın süresi bugün dolacak.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Parolanızın süresi %n gün içinde dolacak.","Parolanızın süresi %n gün içinde dolacak."], "LDAP / AD integration" : "LDAP / AD bütünleştirmesi", "_%s group found_::_%s groups found_" : ["%s grup bulundu","%s grup bulundu"], "_%s user found_::_%s users found_" : ["%s kullanıcı bulundu","%s kullanıcı bulundu"], diff --git a/apps/user_ldap/l10n/tr.json b/apps/user_ldap/l10n/tr.json index b58444d4da6..94bd9b6ccef 100644 --- a/apps/user_ldap/l10n/tr.json +++ b/apps/user_ldap/l10n/tr.json @@ -54,7 +54,9 @@ "The group box was disabled, because the LDAP / AD server does not support memberOf." : "LDAP / AD sunucusu memberOf parametresini desteklemediğinden grup kutusu devre dışı.", "Password change rejected. Hint: " : "Parola değişimi reddedildi. İpucu:", "Please login with the new password" : "Lütfen yeni parolanız ile oturum açın", - "Your password will expire within %s day(s)." : "Parolanızın süresi %s gün içinde dolacak.", + "Your password will expire tomorrow." : "Parolanızın süresi yarın dolacak.", + "Your password will expire today." : "Parolanızın süresi bugün dolacak.", + "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Parolanızın süresi %n gün içinde dolacak.","Parolanızın süresi %n gün içinde dolacak."], "LDAP / AD integration" : "LDAP / AD bütünleştirmesi", "_%s group found_::_%s groups found_" : ["%s grup bulundu","%s grup bulundu"], "_%s user found_::_%s users found_" : ["%s kullanıcı bulundu","%s kullanıcı bulundu"], diff --git a/apps/user_ldap/l10n/zh_CN.js b/apps/user_ldap/l10n/zh_CN.js index b45ac7a3662..70ace5ad71c 100644 --- a/apps/user_ldap/l10n/zh_CN.js +++ b/apps/user_ldap/l10n/zh_CN.js @@ -12,6 +12,10 @@ OC.L10N.register( "No data specified" : "未指定数据", " Could not set configuration %s" : " 无法设定配置文件 %s", "Action does not exist" : "操作不存在", + "Weak password" : "弱密码", + "So-so password" : "一般的密码", + "Good password" : "不错的密码", + "Strong password" : "很好的密码", "The Base DN appears to be wrong" : "Base DN似乎错了", "Testing configuration…" : "测试配置...", "Configuration incorrect" : "配置错误", @@ -47,6 +51,9 @@ OC.L10N.register( "Please provide a login name to test against" : "请提供登录名以测试", "The group box was disabled, because the LDAP / AD server does not support memberOf." : "该组框被禁用,因为LDAP/ AD服务器不支持memberOf。", "Password change rejected. Hint: " : "密码更改出错。提示:", + "Please login with the new password" : "请使用新密码登录", + "Your password will expire tomorrow." : "您的密码将在明天过期", + "Your password will expire today." : "您的明码将在今天过期", "LDAP / AD integration" : "LDAP / AD 整合", "_%s group found_::_%s groups found_" : ["发现 %s 个群组"], "_%s user found_::_%s users found_" : ["发现 %s 个用户"], @@ -74,6 +81,7 @@ OC.L10N.register( "Verify settings" : "验证设置", "1. Server" : "1.服务器", "%s. Server:" : "%s.服务器", + "Add a new configuration" : "增加一个新的配置", "Copy current configuration into new directory binding" : "当前配置复制到新目录", "Delete the current configuration" : "删除当前配置", "Host" : "主机", @@ -96,6 +104,14 @@ OC.L10N.register( "Saving" : "保存中", "Back" : "返回", "Continue" : "继续", + "An internal error occurred." : "发生了一个内部错误。", + "Please try again or contact your administrator." : "请重试,或联系您的管理员。", + "Current password" : "当前密码", + "New password" : "新密码", + "Renew password" : "更新密码", + "Wrong password. Reset it?" : "密码错误。是否重置?", + "Wrong password." : "密码错误。", + "Cancel" : "取消!", "LDAP" : "LDAP", "Server" : "服务器", "Users" : "用户", diff --git a/apps/user_ldap/l10n/zh_CN.json b/apps/user_ldap/l10n/zh_CN.json index 1f78778fe8b..77dfd92f31a 100644 --- a/apps/user_ldap/l10n/zh_CN.json +++ b/apps/user_ldap/l10n/zh_CN.json @@ -10,6 +10,10 @@ "No data specified" : "未指定数据", " Could not set configuration %s" : " 无法设定配置文件 %s", "Action does not exist" : "操作不存在", + "Weak password" : "弱密码", + "So-so password" : "一般的密码", + "Good password" : "不错的密码", + "Strong password" : "很好的密码", "The Base DN appears to be wrong" : "Base DN似乎错了", "Testing configuration…" : "测试配置...", "Configuration incorrect" : "配置错误", @@ -45,6 +49,9 @@ "Please provide a login name to test against" : "请提供登录名以测试", "The group box was disabled, because the LDAP / AD server does not support memberOf." : "该组框被禁用,因为LDAP/ AD服务器不支持memberOf。", "Password change rejected. Hint: " : "密码更改出错。提示:", + "Please login with the new password" : "请使用新密码登录", + "Your password will expire tomorrow." : "您的密码将在明天过期", + "Your password will expire today." : "您的明码将在今天过期", "LDAP / AD integration" : "LDAP / AD 整合", "_%s group found_::_%s groups found_" : ["发现 %s 个群组"], "_%s user found_::_%s users found_" : ["发现 %s 个用户"], @@ -72,6 +79,7 @@ "Verify settings" : "验证设置", "1. Server" : "1.服务器", "%s. Server:" : "%s.服务器", + "Add a new configuration" : "增加一个新的配置", "Copy current configuration into new directory binding" : "当前配置复制到新目录", "Delete the current configuration" : "删除当前配置", "Host" : "主机", @@ -94,6 +102,14 @@ "Saving" : "保存中", "Back" : "返回", "Continue" : "继续", + "An internal error occurred." : "发生了一个内部错误。", + "Please try again or contact your administrator." : "请重试,或联系您的管理员。", + "Current password" : "当前密码", + "New password" : "新密码", + "Renew password" : "更新密码", + "Wrong password. Reset it?" : "密码错误。是否重置?", + "Wrong password." : "密码错误。", + "Cancel" : "取消!", "LDAP" : "LDAP", "Server" : "服务器", "Users" : "用户", diff --git a/apps/user_ldap/lib/Notification/Notifier.php b/apps/user_ldap/lib/Notification/Notifier.php index a6053cfcb19..0099d764f03 100644 --- a/apps/user_ldap/lib/Notification/Notifier.php +++ b/apps/user_ldap/lib/Notification/Notifier.php @@ -60,7 +60,19 @@ class Notifier implements INotifier { switch ($notification->getSubject()) { // Deal with known subjects case 'pwd_exp_warn_days': - $notification->setParsedSubject($l->t('Your password will expire within %s day(s).', $notification->getSubjectParameters())); + $params = $notification->getSubjectParameters(); + $days = (int) $params[0]; + if ($days === 2) { + $notification->setParsedSubject($l->t('Your password will expire tomorrow.', $days)); + } else if ($days === 1) { + $notification->setParsedSubject($l->t('Your password will expire today.', $days)); + } else { + $notification->setParsedSubject($l->n( + 'Your password will expire within %n day.', + 'Your password will expire within %n days.', + $days + )); + } return $notification; default: diff --git a/apps/user_ldap/lib/User/User.php b/apps/user_ldap/lib/User/User.php index a9e7eb6cc0c..5017f35ed0a 100644 --- a/apps/user_ldap/lib/User/User.php +++ b/apps/user_ldap/lib/User/User.php @@ -683,7 +683,7 @@ class User { ->setUser($uid) ->setDateTime($currentDateTime) ->setObject('pwd_exp_warn', $uid) - ->setSubject('pwd_exp_warn_days', [strval(ceil($secondsToExpiry / 60 / 60 / 24))]) + ->setSubject('pwd_exp_warn_days', [(int) ceil($secondsToExpiry / 60 / 60 / 24)]) ; $this->notificationManager->notify($notification); } diff --git a/apps/workflowengine/l10n/cs.js b/apps/workflowengine/l10n/cs.js index feb91f37cbc..50cf2affb0b 100644 --- a/apps/workflowengine/l10n/cs.js +++ b/apps/workflowengine/l10n/cs.js @@ -1,7 +1,9 @@ OC.L10N.register( "workflowengine", { + "Saved" : "Uloženo", "Saving failed:" : "Ukládání selhalo:", + "File MIME type" : "MIME typ souboru", "is" : "je", "is not" : "není", "matches" : "odpovídá", diff --git a/apps/workflowengine/l10n/cs.json b/apps/workflowengine/l10n/cs.json index 4715e0ebdbb..82ba8a80639 100644 --- a/apps/workflowengine/l10n/cs.json +++ b/apps/workflowengine/l10n/cs.json @@ -1,5 +1,7 @@ { "translations": { + "Saved" : "Uloženo", "Saving failed:" : "Ukládání selhalo:", + "File MIME type" : "MIME typ souboru", "is" : "je", "is not" : "není", "matches" : "odpovídá", diff --git a/apps/workflowengine/l10n/is.js b/apps/workflowengine/l10n/is.js index 941ba0273b1..bd58e51965c 100644 --- a/apps/workflowengine/l10n/is.js +++ b/apps/workflowengine/l10n/is.js @@ -1,7 +1,9 @@ OC.L10N.register( "workflowengine", { + "Saved" : "Vistað", "Saving failed:" : "Vistun mistókst:", + "File MIME type" : "MIME-skráartegund", "is" : "er", "is not" : "er ekki", "matches" : "samsvarar", diff --git a/apps/workflowengine/l10n/is.json b/apps/workflowengine/l10n/is.json index aedebea56a1..3dd3ee9304b 100644 --- a/apps/workflowengine/l10n/is.json +++ b/apps/workflowengine/l10n/is.json @@ -1,5 +1,7 @@ { "translations": { + "Saved" : "Vistað", "Saving failed:" : "Vistun mistókst:", + "File MIME type" : "MIME-skráartegund", "is" : "er", "is not" : "er ekki", "matches" : "samsvarar", diff --git a/apps/workflowengine/templates/admin.php b/apps/workflowengine/templates/admin.php index 500300f93b3..4f4dab4043f 100644 --- a/apps/workflowengine/templates/admin.php +++ b/apps/workflowengine/templates/admin.php @@ -24,7 +24,6 @@ ?> <div id="<?php p($_['appid']); ?>" class="section workflowengine"> <h2 class="inlineblock"><?php p($_['heading']); ?></h2> - <?php if (!empty($_['docs'])): ?> <a target="_blank" rel="noreferrer" class="icon-info svg" title="<?php p($l->t('Open documentation'));?>" @@ -32,6 +31,10 @@ </a> <?php endif; ?> + <?php if (!empty($_['settings-hint'])): ?> + <p class="settings-hint"><?php p($_['settings-hint']); ?></p> + <?php endif; ?> + <?php if (!empty($_['description'])): ?> <p><?php p($_['description']); ?></p> <?php endif; ?> diff --git a/build/integration/features/bootstrap/WebDav.php b/build/integration/features/bootstrap/WebDav.php index 3a018a2d0fa..9242b80ac13 100644 --- a/build/integration/features/bootstrap/WebDav.php +++ b/build/integration/features/bootstrap/WebDav.php @@ -45,8 +45,10 @@ trait WebDav { private $usingOldDavPath = true; /** @var ResponseInterface */ private $response; - /** @var map with user as key and another map as value, which has path as key and etag as value */ - private $storedETAG = NULL; + /** @var array map with user as key and another map as value, which has path as key and etag as value */ + private $storedETAG = null; + /** @var int */ + private $storedFileID = null; /** * @Given /^using dav path "([^"]*)"$/ @@ -749,4 +751,33 @@ trait WebDav { } + /** + * @param string $user + * @param string $path + * @return int + */ + private function getFileIdForPath($user, $path) { + $propertiesTable = new \Behat\Gherkin\Node\TableNode([["{http://owncloud.org/ns}fileid"]]); + $this->asGetsPropertiesOfFolderWith($user, 'file', $path, $propertiesTable); + return (int) $this->response['{http://owncloud.org/ns}fileid']; + } + + /** + * @Given /^User "([^"]*)" stores id of file "([^"]*)"$/ + * @param string $user + * @param string $path + */ + public function userStoresFileIdForPath($user, $path) { + $this->storedFileID = $this->getFileIdForPath($user, $path); + } + + /** + * @Given /^User "([^"]*)" checks id of file "([^"]*)"$/ + * @param string $user + * @param string $path + */ + public function userChecksFileIdForPath($user, $path) { + $currentFileID = $this->getFileIdForPath($user, $path); + PHPUnit_Framework_Assert::assertEquals($currentFileID, $this->storedFileID); + } } diff --git a/build/integration/features/webdav-related.feature b/build/integration/features/webdav-related.feature index 6aee59036d3..b8ed1c4a778 100644 --- a/build/integration/features/webdav-related.feature +++ b/build/integration/features/webdav-related.feature @@ -517,3 +517,64 @@ Feature: webdav-related | /textfile2.txt | | /textfile3.txt | | /textfile4.txt | + + Scenario: Checking file id after a move using new endpoint + Given using new dav path + And user "user0" exists + And User "user0" stores id of file "/textfile0.txt" + When User "user0" moves file "/textfile0.txt" to "/FOLDER/textfile0.txt" + Then User "user0" checks id of file "/FOLDER/textfile0.txt" + + Scenario: Checking file id after a move overwrite using new chunking endpoint + Given using new dav path + And user "user0" exists + And User "user0" copies file "/textfile0.txt" to "/existingFile.txt" + And User "user0" stores id of file "/existingFile.txt" + And user "user0" creates a new chunking upload with id "chunking-42" + And user "user0" uploads new chunk file "1" with "AAAAA" to id "chunking-42" + And user "user0" uploads new chunk file "2" with "BBBBB" to id "chunking-42" + And user "user0" uploads new chunk file "3" with "CCCCC" to id "chunking-42" + When user "user0" moves new chunk file with id "chunking-42" to "/existingFile.txt" + Then User "user0" checks id of file "/existingFile.txt" + + Scenario: Renaming a folder to a backslash encoded should return an error using old endpoint + Given using old dav path + And user "user0" exists + And user "user0" created a folder "/testshare" + When User "user0" moves folder "/testshare" to "/%5C" + Then the HTTP status code should be "400" + + Scenario: Renaming a folder beginning with a backslash encoded should return an error using old endpoint + Given using old dav path + And user "user0" exists + And user "user0" created a folder "/testshare" + When User "user0" moves folder "/testshare" to "/%5Ctestshare" + Then the HTTP status code should be "400" + + Scenario: Renaming a folder including a backslash encoded should return an error using old endpoint + Given using old dav path + And user "user0" exists + And user "user0" created a folder "/testshare" + When User "user0" moves folder "/testshare" to "/hola%5Chola" + Then the HTTP status code should be "400" + + Scenario: Renaming a folder to a backslash encoded should return an error using new endpoint + Given using new dav path + And user "user0" exists + And user "user0" created a folder "/testshare" + When User "user0" moves folder "/testshare" to "/%5C" + Then the HTTP status code should be "400" + + Scenario: Renaming a folder beginning with a backslash encoded should return an error using new endpoint + Given using new dav path + And user "user0" exists + And user "user0" created a folder "/testshare" + When User "user0" moves folder "/testshare" to "/%5Ctestshare" + Then the HTTP status code should be "400" + + Scenario: Renaming a folder including a backslash encoded should return an error using new endpoint + Given using new dav path + And user "user0" exists + And user "user0" created a folder "/testshare" + When User "user0" moves folder "/testshare" to "/hola%5Chola" + Then the HTTP status code should be "400" diff --git a/config/config.sample.php b/config/config.sample.php index 84b98550fb0..4646de33082 100644 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -1515,4 +1515,9 @@ $CONFIG = array( */ 'copied_sample_config' => true, +/** + * use a custom lookup server to publish user data + */ +'lookup_server' => 'https://lookup.nextcloud.com', + ); diff --git a/core/Command/Upgrade.php b/core/Command/Upgrade.php index aec74849fea..2e518f52e21 100644 --- a/core/Command/Upgrade.php +++ b/core/Command/Upgrade.php @@ -87,12 +87,6 @@ class Upgrade extends Command { */ protected function execute(InputInterface $input, OutputInterface $output) { - $skip3rdPartyAppsDisable = false; - - if ($input->getOption('no-app-disable')) { - $skip3rdPartyAppsDisable = true; - } - if(\OC::checkUpgrade(false)) { if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) { // Prepend each line with a little timestamp @@ -107,7 +101,9 @@ class Upgrade extends Command { $this->logger ); - $updater->setSkip3rdPartyAppsDisable($skip3rdPartyAppsDisable); + if ($input->getOption('no-app-disable')) { + $updater->setSkip3rdPartyAppsDisable(true); + } $dispatcher = \OC::$server->getEventDispatcher(); $progress = new ProgressBar($output); $progress->setFormat(" %message%\n %current%/%max% [%bar%] %percent:3s%%"); diff --git a/core/Controller/ContactsMenuController.php b/core/Controller/ContactsMenuController.php index b0e0e0c6a77..bbb990f1a4f 100644 --- a/core/Controller/ContactsMenuController.php +++ b/core/Controller/ContactsMenuController.php @@ -26,6 +26,7 @@ namespace OC\Core\Controller; use OC\Contacts\ContactsMenu\Manager; use OCP\AppFramework\Controller; +use OCP\AppFramework\Http; use OCP\AppFramework\Http\JSONResponse; use OCP\IRequest; use OCP\IUserSession; @@ -59,4 +60,20 @@ class ContactsMenuController extends Controller { return $this->manager->getEntries($this->userSession->getUser(), $filter); } + /** + * @NoAdminRequired + * + * @param integer $shareType + * @param string $shareWith + * @return JSONResponse + */ + public function findOne($shareType, $shareWith) { + $contact = $this->manager->findOne($this->userSession->getUser(), $shareType, $shareWith); + + if ($contact) { + return $contact; + } else { + return new JSONResponse([], Http::STATUS_NOT_FOUND); + } + } } diff --git a/core/css/inputs.scss b/core/css/inputs.scss index e76e5bea150..13a164e13f2 100644 --- a/core/css/inputs.scss +++ b/core/css/inputs.scss @@ -206,7 +206,6 @@ input { height: 1px; overflow: hidden; + label { - padding: 6px 0; user-select: none; } &:disabled + label, @@ -220,8 +219,8 @@ input { width: 12px; vertical-align: middle; border-radius: 50%; - margin: 6px; - margin-top: -2px; + margin: 3px; + margin-top: 1px; border: 1px solid nc-lighten($color-main-text, 53%); } &:not(:disabled):not(:checked) + label:hover:before, diff --git a/core/css/share.scss b/core/css/share.scss index 552e20c80cc..2e1c99b6f41 100644 --- a/core/css/share.scss +++ b/core/css/share.scss @@ -87,6 +87,7 @@ list-style-type: none; padding: 8px; > li { + position: relative; padding-top: 10px; padding-bottom: 10px; font-weight: bold; @@ -103,6 +104,7 @@ padding: 3px 6px; } } + .shareOption { white-space: nowrap; display: inline-block; @@ -159,6 +161,10 @@ a { padding: 6px 4px; } +.resharerInfoView.subView { + position: relative; +} + #defaultExpireMessage, .reshare { /* fix shared by text going out of box */ white-space: normal; @@ -185,6 +191,19 @@ a { color: rgba($color-main-text, .4); } +.contactsmenu-popover { + left: -8px; + right: auto; + padding: 3px 6px; + li.hidden { + display: none !important; + } + &:after { + left: 8px; + right: auto; + } +} + .popovermenu .datepicker { margin-left: 35px; } diff --git a/core/css/styles.scss b/core/css/styles.scss index 69a876240b0..f85ae93ccc8 100644 --- a/core/css/styles.scss +++ b/core/css/styles.scss @@ -1064,7 +1064,7 @@ span.ui-icon { background-size: 16px 16px; padding: 14px; cursor: pointer; - opacity: .7; + opacity: .6; } } diff --git a/core/css/tooltip.scss b/core/css/tooltip.scss index 66234cad9f2..7c6a2f8a580 100644 --- a/core/css/tooltip.scss +++ b/core/css/tooltip.scss @@ -13,12 +13,12 @@ .tooltip { position: absolute; display: block; - font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif; font-style: normal; - font-weight: normal; + font-weight: 400; letter-spacing: normal; line-break: auto; - line-height: 1.42857143; + line-height: 1.6; text-align: left; text-align: start; text-decoration: none; @@ -33,28 +33,28 @@ z-index: 100000; filter: alpha(opacity = 0); &.in { - opacity: 0.9; - filter: alpha(opacity = 90); + opacity: 1; + filter: alpha(opacity = 100); } &.top { margin-top: -3px; - padding: 5px 0; + padding: 10px 0; } &.bottom { margin-top: 3px; - padding: 5px 0; + padding: 10px 0; } &.right { margin-left: 3px; - padding: 0 5px; + padding: 0 10px; .tooltip-arrow { top: 50%; left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: $color-main-text; + margin-top: -10px; + border-width: 10px 10px 10px 0; + border-right-color: $color-main-background; } } &.left { @@ -63,9 +63,9 @@ .tooltip-arrow { top: 50%; right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: $color-main-text; + margin-top: -10px; + border-width: 10px 0 10px 10px; + border-left-color: $color-main-background; } } @@ -74,20 +74,20 @@ &.top-left .tooltip-arrow, &.top-right .tooltip-arrow { bottom: 0; - border-width: 5px 5px 0; - border-top-color: $color-main-text; + border-width: 10px 10px 0; + border-top-color: $color-main-background; } &.top .tooltip-arrow { left: 50%; - margin-left: -5px; + margin-left: -10px; } &.top-left .tooltip-arrow { - right: 5px; - margin-bottom: -5px; + right: 10px; + margin-bottom: -10px; } &.top-right .tooltip-arrow { - left: 5px; - margin-bottom: -5px; + left: 10px; + margin-bottom: -10px; } /* BOTTOM */ @@ -95,30 +95,31 @@ &.bottom-left .tooltip-arrow, &.bottom-right .tooltip-arrow { top: 0; - border-width: 0 5px 5px; - border-bottom-color: $color-main-text; + border-width: 0 10px 10px; + border-bottom-color: $color-main-background; } &.bottom .tooltip-arrow { left: 50%; - margin-left: -5px; + margin-left: -10px; } &.bottom-left .tooltip-arrow { - right: 5px; - margin-top: -5px; + right: 10px; + margin-top: -10px; } &.bottom-right .tooltip-arrow { - left: 5px; - margin-top: -5px; + left: 10px; + margin-top: -10px; } } .tooltip-inner { max-width: 350px; - padding: 3px 8px; - color: $color-main-background; + padding: 5px 8px; + background-color: $color-main-background; + color: $color-main-text; + box-shadow: 0 1px 10px rgba(150, 150, 150, .75); text-align: center; - background-color: $color-main-text; - border-radius: 4px; + border-radius: 3px; } .tooltip-arrow { diff --git a/core/img/actions/user-plus.svg b/core/img/actions/user-plus.svg new file mode 100644 index 00000000000..16c59261a73 --- /dev/null +++ b/core/img/actions/user-plus.svg @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 1792 1792"> + <path d="m576 896q-159 0-271.5-112.5t-112.5-271.5 112.5-271.5 271.5-112.5 271.5 112.5 112.5 271.5-112.5 271.5-271.5 112.5zm960 128h352q13 0 22.5 9.5t9.5 22.5v192q0 13-9.5 22.5t-22.5 9.5h-352v352q0 13-9.5 22.5t-22.5 9.5h-192q-13 0-22.5-9.5t-9.5-22.5v-352h-352q-13 0-22.5-9.5t-9.5-22.5v-192q0-13 9.5-22.5t22.5-9.5h352v-352q0-13 9.5-22.5t22.5-9.5h192q13 0 22.5 9.5t9.5 22.5v352zm-736 224q0 52 38 90t90 38h256v238q-68 50-171 50h-874q-121 0-194-69t-73-190q0-53 3.5-103.5t14-109 26.5-108.5 43-97.5 62-81 85.5-53.5 111.5-20q19 0 39 17 79 61 154.5 91.5t164.5 30.5 164.5-30.5 154.5-91.5q20-17 39-17 132 0 217 96h-223q-52 0-90 38t-38 90v192z"/> +</svg> diff --git a/core/img/actions/user-times.svg b/core/img/actions/user-times.svg new file mode 100644 index 00000000000..f853784efc2 --- /dev/null +++ b/core/img/actions/user-times.svg @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 1792 1792"> + <path d="m576 896q-159 0-271.5-112.5t-112.5-271.5 112.5-271.5 271.5-112.5 271.5 112.5 112.5 271.5-112.5 271.5-271.5 112.5zm1077 320l249 249q9 9 9 23 0 13-9 22l-136 136q-9 9-22 9-14 0-23-9l-249-249-249 249q-9 9-23 9-13 0-22-9l-136-136q-9-9-9-22 0-14 9-23l249-249-249-249q-9-9-9-23 0-13 9-22l136-136q9-9 22-9 14 0 23 9l249 249 249-249q9-9 23-9 13 0 22 9l136 136q9 9 9 22 0 14-9 23zm-498 0l-181 181q-37 37-37 91 0 53 37 90l83 83q-21 3-44 3h-874q-121 0-194-69t-73-190q0-53 3.5-103.5t14-109 26.5-108.5 43-97.5 62-81 85.5-53.5 111.5-20q19 0 39 17 154 122 319 122t319-122q20-17 39-17 28 0 57 6-28 27-41 50t-13 56q0 54 37 91z"/> +</svg> diff --git a/core/img/actions/verified.svg b/core/img/actions/verified.svg new file mode 100644 index 00000000000..2f9e34e2394 --- /dev/null +++ b/core/img/actions/verified.svg @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1"> + <path d="m8 0a3 3 0 0 0 -2.8281 2.0098 3 3 0 0 0 -0.1719 -0.0098 3 3 0 0 0 -3 3 3 3 0 0 0 0.0059 0.1719 3 3 0 0 0 -2.0059 2.8281 3 3 0 0 0 2.0098 2.828 3 3 0 0 0 -0.0098 0.172 3 3 0 0 0 3 3 3 3 0 0 0 0.1719 -0.006 3 3 0 0 0 2.8281 2.006 3 3 0 0 0 2.828 -2.01 3 3 0 0 0 0.172 0.01 3 3 0 0 0 3 -3 3 3 0 0 0 -0.006 -0.172 3 3 0 0 0 2.006 -2.828 3 3 0 0 0 -2.01 -2.8281 3 3 0 0 0 0.01 -0.1719 3 3 0 0 0 -3 -3 3 3 0 0 0 -0.172 0.0059 3 3 0 0 0 -2.828 -2.0059zm2.934 4.5625 1.433 1.4336-5.7772 5.7789-2.9511-2.9508 1.414-1.414 1.5371 1.5351 4.3442-4.3828z" fill-rule="evenodd" fill="#0082c9"/> +</svg> diff --git a/core/img/actions/verify.svg b/core/img/actions/verify.svg new file mode 100644 index 00000000000..5ad11481055 --- /dev/null +++ b/core/img/actions/verify.svg @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1"> + <path d="m8 0a3 3 0 0 0 -2.8281 2.0098 3 3 0 0 0 -0.1719 -0.0098 3 3 0 0 0 -3 3 3 3 0 0 0 0.0059 0.1719 3 3 0 0 0 -2.0059 2.8281 3 3 0 0 0 2.0098 2.828 3 3 0 0 0 -0.0098 0.172 3 3 0 0 0 3 3 3 3 0 0 0 0.1719 -0.006 3 3 0 0 0 2.8281 2.006 3 3 0 0 0 2.828 -2.01 3 3 0 0 0 0.172 0.01 3 3 0 0 0 3 -3 3 3 0 0 0 -0.006 -0.172 3 3 0 0 0 2.006 -2.828 3 3 0 0 0 -2.01 -2.8281 3 3 0 0 0 0.01 -0.1719 3 3 0 0 0 -3 -3 3 3 0 0 0 -0.172 0.0059 3 3 0 0 0 -2.828 -2.0059zm2.934 4.5625 1.433 1.4336-5.7772 5.7789-2.9511-2.9508 1.414-1.414 1.5371 1.5351 4.3442-4.3828z" fill-rule="evenodd" fill="#969696"/> +</svg> diff --git a/core/img/actions/verifying.svg b/core/img/actions/verifying.svg new file mode 100644 index 00000000000..beb824b7eec --- /dev/null +++ b/core/img/actions/verifying.svg @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1"> + <path d="m8 0a3 3 0 0 0 -2.8281 2.0098 3 3 0 0 0 -0.1719 -0.0098 3 3 0 0 0 -3 3 3 3 0 0 0 0.0059 0.1719 3 3 0 0 0 -2.0059 2.8281 3 3 0 0 0 2.0098 2.828 3 3 0 0 0 -0.0098 0.172 3 3 0 0 0 3 3 3 3 0 0 0 0.1719 -0.006 3 3 0 0 0 2.8281 2.006 3 3 0 0 0 2.828 -2.01 3 3 0 0 0 0.172 0.01 3 3 0 0 0 3 -3 3 3 0 0 0 -0.006 -0.172 3 3 0 0 0 2.006 -2.828 3 3 0 0 0 -2.01 -2.8281 3 3 0 0 0 0.01 -0.1719 3 3 0 0 0 -3 -3 3 3 0 0 0 -0.172 0.0059 3 3 0 0 0 -2.828 -2.0059zm-0.0352 3.4922c0.58455-0.00435 1.1821 0.096216 1.7559 0.33398 0.69638 0.28822 1.2735 0.7423 1.7246 1.2832l1.055-1.0547v3.375h-3.375l1.125-1.125c-0.2925-0.3924-0.6924-0.7131-1.1777-0.9141-1.4351-0.5944-3.0794 0.0942-3.6739 1.5293l-1.5644-0.6504c0.7133-1.7221 2.3772-2.7643 4.1308-2.7773zm-4.4648 5.3437h3.375l-0.98438 0.98438c0.2773 0.3207 0.6189 0.5997 1.0371 0.7737 1.4351 0.594 3.0793-0.095 3.6743-1.5295l1.5625 0.65039c-0.951 2.2961-3.5905 3.3941-5.8867 2.4431-0.6318-0.261-1.1678-0.651-1.5996-1.125l-1.1777 1.178v-3.3751z" fill-rule="evenodd" fill="#0082c9"/> +</svg> diff --git a/core/js/contactsmenu.js b/core/js/contactsmenu.js index 15c48887d20..9ce27509e8b 100644 --- a/core/js/contactsmenu.js +++ b/core/js/contactsmenu.js @@ -64,7 +64,7 @@ + '</a>' + '{{/if}}' + '{{#if contact.hasTwoActions}}' - + '<a class="second-action" href="{{contact.secondAction.hyperlink}}">' + + '<a class="second-action" href="{{contact.secondAction.hyperlink}}" title="{{contact.secondAction.title}}">' + ' <img src="{{contact.secondAction.icon}}">' + '</a>' + '{{/if}}' @@ -228,6 +228,8 @@ // Show tooltip for top action this.$('.top-action').tooltip({placement: 'left'}); + // Show tooltip for second action + this.$('.second-action').tooltip({placement: 'left'}); return this; }, diff --git a/core/js/core.json b/core/js/core.json index aadd66a0558..15e406bf2d2 100644 --- a/core/js/core.json +++ b/core/js/core.json @@ -20,6 +20,7 @@ "libraries": [ "jquery-showpassword.js", "jquery.avatar.js", + "jquery.contactsmenu.js", "placeholder.js" ], "modules": [ diff --git a/core/js/files/client.js b/core/js/files/client.js index cde3afde9d7..e8cf5b9bdb4 100644 --- a/core/js/files/client.js +++ b/core/js/files/client.js @@ -114,7 +114,11 @@ /** * Preview availability */ - [Client.NS_NEXTCLOUD, 'has-preview'] + [Client.NS_NEXTCLOUD, 'has-preview'], + /** + * Mount type + */ + [Client.NS_NEXTCLOUD, 'mount-type'], ]; /** @@ -361,6 +365,11 @@ } } + var mounTypeProp = props['{' + Client.NS_NEXTCLOUD + '}mount-type']; + if (!_.isUndefined(mounTypeProp)) { + data.mountType = mounTypeProp; + } + // extend the parsed data using the custom parsers _.each(this._fileInfoParsers, function(parserFunction) { _.extend(data, parserFunction(response) || {}); diff --git a/core/js/jquery-showpassword.js b/core/js/jquery-showpassword.js index 23ddf947719..5d518c78bcb 100644 --- a/core/js/jquery-showpassword.js +++ b/core/js/jquery-showpassword.js @@ -17,8 +17,8 @@ showPassword: function(c) { // Setup callback object - var callback = {'fn':null,'args':{}} - callback.fn = c; + var callback = {'fn':null,'args':{}}; + callback.fn = c; // Clones passwords and turn the clones into text inputs var cloneElement = function( element ) { @@ -90,7 +90,7 @@ }); $input.bind('keyup', function() { - update( $input, $clone ) + update( $input, $clone ); }); $clone.bind('keyup', function(){ diff --git a/core/js/jquery-ui-fixes.js b/core/js/jquery-ui-fixes.js index 9ccaa38cc47..39f6d7a354e 100644 --- a/core/js/jquery-ui-fixes.js +++ b/core/js/jquery-ui-fixes.js @@ -5,4 +5,4 @@ jQuery.ui.autocomplete.prototype._resizeMenu = function () { var ul = this.menu.element; ul.outerWidth(this.element.outerWidth()); -} +}; diff --git a/core/js/jquery.contactsmenu.js b/core/js/jquery.contactsmenu.js new file mode 100644 index 00000000000..1ea9f732f79 --- /dev/null +++ b/core/js/jquery.contactsmenu.js @@ -0,0 +1,117 @@ +/** + * Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +(function ($) { + var ENTRY = '' + + '<li>' + + ' <a href="{{hyperlink}}">' + + ' {{#if icon}}<img src="{{icon}}">{{/if}}' + + ' <span>{{title}}</span>' + + ' </a>' + + '</li>'; + + var LIST = '' + + '<div class="menu popovermenu bubble hidden contactsmenu-popover">' + + ' <ul>' + + ' <li>' + + ' <a>' + + ' <span class="icon-loading-small"></span>' + + ' </a>' + + ' </li>' + + ' </ul>' + + '</div>'; + + $.fn.contactsMenu = function(shareWith, shareType, appendTo) { + // 0 - user, 4 - email, 6 - remote + var allowedTypes = [0, 4, 6]; + if (allowedTypes.indexOf(shareType) === -1) { + return; + } + + var $div = this; + appendTo.append(LIST); + var $list = appendTo.find('div.contactsmenu-popover'); + + $div.click(function() { + if (!$list.hasClass('hidden')) { + $list.addClass('hidden'); + $list.hide(); + return; + } + + $list.removeClass('hidden'); + $list.show(); + + if ($list.hasClass('loaded')) { + return; + } + + $list.addClass('loaded'); + $.ajax(OC.generateUrl('/contactsmenu/findOne'), { + method: 'POST', + data: { + shareType: shareType, + shareWith: shareWith + } + }).then(function(data) { + $list.find('ul').find('li').addClass('hidden'); + + var actions; + if (!data.topAction) { + actions = [{ + hyperlink: '#', + title: t('core', 'No action available') + }]; + } else { + actions = [data.topAction].concat(data.actions); + } + + actions.forEach(function(action) { + var template = Handlebars.compile(ENTRY); + $list.find('ul').append(template(action)); + }); + + if (actions.length === 0) { + + } + }, function(jqXHR) { + $list.find('ul').find('li').addClass('hidden'); + + var title; + if (jqXHR.status === 404) { + title = t('core', 'No action available'); + } else { + title = t('core', 'Error fetching contact actions'); + } + + var template = Handlebars.compile(ENTRY); + $list.find('ul').append(template({ + hyperlink: '#', + title: title + })); + }); + }); + + $(document).click(function(event) { + var clickedList = ($list.has(event.target).length > 0); + var clickedTarget = ($div.has(event.target).length > 0); + + $div.each(function() { + if ($(this).is(event.target)) { + clickedTarget = true; + } + }); + + if (clickedList || clickedTarget) { + return; + } + + $list.addClass('hidden'); + $list.hide(); + }); + }; +}(jQuery)); diff --git a/core/js/js.js b/core/js/js.js index d601f79033e..b6086846d59 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -150,7 +150,7 @@ var OCP = {}, _.defaults(allOptions, defaultOptions); var _build = function (text, vars) { - var vars = vars || []; + vars = vars || []; return text.replace(/{([^{}]*)}/g, function (a, b) { var r = (vars[b]); @@ -1422,7 +1422,7 @@ function initCore() { } else { // Close navigation when opening app in // a new tab - OC.hideMenus(function(){return false}); + OC.hideMenus(function(){return false;}); } }); @@ -1430,7 +1430,7 @@ function initCore() { if(event.which === 2) { // Close navigation when opening app in // a new tab via middle click - OC.hideMenus(function(){return false}); + OC.hideMenus(function(){return false;}); } }); @@ -1444,7 +1444,7 @@ function initCore() { } else { // Close navigation when opening app in // a new tab - OC.hideMenus(function(){return false}); + OC.hideMenus(function(){return false;}); } }); } @@ -1465,7 +1465,7 @@ function initCore() { } else { // Close navigation when opening menu entry in // a new tab - OC.hideMenus(function(){return false}); + OC.hideMenus(function(){return false;}); } }); @@ -1473,7 +1473,7 @@ function initCore() { if(event.which === 2) { // Close navigation when opening app in // a new tab via middle click - OC.hideMenus(function(){return false}); + OC.hideMenus(function(){return false;}); } }); } @@ -1884,7 +1884,7 @@ OC.Util = { * @return {boolean} true if the browser supports SVG, false otherwise */ hasSVGSupport: function(){ - return true + return true; }, /** * If SVG is not supported, replaces the given icon's extension @@ -2385,4 +2385,4 @@ jQuery.fn.tipsy = function(argument) { jQuery.fn.tooltip.call(this, argument); } return this; -} +}; diff --git a/core/js/merged-template-prepend.json b/core/js/merged-template-prepend.json index 12b7ca8faa3..0dd6bed5329 100644 --- a/core/js/merged-template-prepend.json +++ b/core/js/merged-template-prepend.json @@ -13,5 +13,6 @@ "mimetypelist.js", "oc-backbone.js", "placeholder.js", - "jquery.avatar.js" + "jquery.avatar.js", + "jquery.contactsmenu.js" ] diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js index 92f256699af..5fc224e38bf 100644 --- a/core/js/oc-dialogs.js +++ b/core/js/oc-dialogs.js @@ -561,7 +561,7 @@ var OCdialogs = { .prop('checked', true) .prop('disabled', true); $originalDiv.find('.message') - .text(t('core','read-only')) + .text(t('core','read-only')); } }; //var selection = controller.getSelection(data.originalFiles); @@ -813,11 +813,13 @@ var OCdialogs = { $.each(files, function(idx, entry) { entry.icon = OC.MimeType.getIconUrl(entry.mimetype); + var simpleSize, sizeColor; if (typeof(entry.size) !== 'undefined' && entry.size >= 0) { - var simpleSize = humanFileSize(parseInt(entry.size, 10), true); - var sizeColor = Math.round(160 - Math.pow((entry.size / (1024 * 1024)), 2)); + simpleSize = humanFileSize(parseInt(entry.size, 10), true); + sizeColor = Math.round(160 - Math.pow((entry.size / (1024 * 1024)), 2)); } else { simpleSize = t('files', 'Pending'); + sizeColor = 80; } var $row = self.$listTmpl.octemplate({ type: entry.type, diff --git a/core/js/octemplate.js b/core/js/octemplate.js index b24ad95c2b0..659f795982a 100644 --- a/core/js/octemplate.js +++ b/core/js/octemplate.js @@ -94,7 +94,7 @@ }; $.fn.octemplate = function(vars, options) { - var vars = vars ? vars : {}; + vars = vars || {}; if(this.length) { var _template = Object.create(Template); return _template.init(vars, options, this); diff --git a/core/js/placeholder.js b/core/js/placeholder.js index 1b03a28ecca..b8075b5397f 100644 --- a/core/js/placeholder.js +++ b/core/js/placeholder.js @@ -71,7 +71,7 @@ } function rgbToHsl(r, g, b) { - r /= 255, g /= 255, b /= 255; + r /= 255; g /= 255; b /= 255; var max = Math.max(r, g, b), min = Math.min(r, g, b); var h, s, l = (max + min) / 2; if(max === min) { diff --git a/core/js/setup.js b/core/js/setup.js index 3c09bb6da49..b3b2049c447 100644 --- a/core/js/setup.js +++ b/core/js/setup.js @@ -66,7 +66,7 @@ $(document).ready(function() { $('.strengthify-wrapper, .tipsy') .css('-ms-filter', '"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"') .css('filter', 'alpha(opacity=30)') - .css('opacity', .3); + .css('opacity', 0.3); // Create the form var form = $('<form>'); diff --git a/core/js/share.js b/core/js/share.js index 262d0a5d166..194eba5fbd4 100644 --- a/core/js/share.js +++ b/core/js/share.js @@ -10,6 +10,7 @@ OC.Share = _.extend(OC.Share || {}, { SHARE_TYPE_EMAIL:4, SHARE_TYPE_REMOTE:6, SHARE_TYPE_CIRCLE:7, + SHARE_TYPE_GUEST:8, /** * Regular expression for splitting parts of remote share owners: diff --git a/core/js/sharedialogresharerinfoview.js b/core/js/sharedialogresharerinfoview.js index a82b495bdcc..201484c52a8 100644 --- a/core/js/sharedialogresharerinfoview.js +++ b/core/js/sharedialogresharerinfoview.js @@ -100,6 +100,11 @@ $this.avatar($this.data('username'), 32); }); + this.$el.find('.reshare').contactsMenu( + this.model.getReshareOwner(), + OC.Share.SHARE_TYPE_USER, + this.$el); + return this; }, diff --git a/core/js/sharedialogshareelistview.js b/core/js/sharedialogshareelistview.js index 3a481e53dde..d51504c3771 100644 --- a/core/js/sharedialogshareelistview.js +++ b/core/js/sharedialogshareelistview.js @@ -26,7 +26,7 @@ '{{#each sharees}}' + '<li data-share-id="{{shareId}}" data-share-type="{{shareType}}" data-share-with="{{shareWith}}">' + '<div class="avatar {{#if modSeed}}imageplaceholderseed{{/if}}" data-username="{{shareWith}}" data-displayname="{{shareWithDisplayName}}" {{#if modSeed}}data-seed="{{shareWith}} {{shareType}}"{{/if}}></div>' + - '<span class="has-tooltip username" title="{{shareWithTitle}}">{{shareWithDisplayName}}</span>' + + '<span class="username" title="{{shareWithTitle}}">{{shareWithDisplayName}}</span>' + '<span class="sharingOptionsGroup">' + '{{#if editPermissionPossible}}' + '<span class="shareOption">' + @@ -361,6 +361,15 @@ this.$('.has-tooltip').tooltip({ placement: 'bottom' }); + + this.$('ul.shareWithList > li').each(function() { + var $this = $(this); + + var shareWith = $this.data('share-with'); + var shareType = $this.data('share-type'); + + $this.find('div.avatar, span.username').contactsMenu(shareWith, shareType, $this); + }); } else { var permissionChangeShareId = parseInt(this._renderPermissionChange, 10); var shareWithIndex = this.model.findShareWithIndex(permissionChangeShareId); @@ -399,7 +408,7 @@ var shareId = parseInt(this._menuOpen, 10); if(!_.isNaN(shareId)) { var liSelector = 'li[data-share-id=' + shareId + ']'; - OC.showMenu(null, this.$(liSelector + ' .popovermenu')); + OC.showMenu(null, this.$(liSelector + '.sharingOptionsGroup .popovermenu')); } } @@ -476,7 +485,7 @@ event.stopPropagation(); var $element = $(event.target); var $li = $element.closest('li[data-share-id]'); - var $menu = $li.find('.popovermenu'); + var $menu = $li.find('.sharingOptionsGroup .popovermenu'); OC.showMenu(null, $menu); this._menuOpen = $li.data('share-id'); diff --git a/core/js/sharedialogview.js b/core/js/sharedialogview.js index 3b09d13a7e2..157887fbb94 100644 --- a/core/js/sharedialogview.js +++ b/core/js/sharedialogview.js @@ -121,7 +121,7 @@ 'onShareWithFieldChanged' ); - OC.Plugins.attach('OCA.Share.ShareDialogView', this); + OC.Plugins.attach('OC.Share.ShareDialogView', this); }, onShareWithFieldChanged: function() { @@ -183,15 +183,13 @@ var groups = result.ocs.data.exact.groups.concat(result.ocs.data.groups); var remotes = result.ocs.data.exact.remotes.concat(result.ocs.data.remotes); var lookup = result.ocs.data.lookup; + var emails = [], + circles = []; if (typeof(result.ocs.data.emails) !== 'undefined') { - var emails = result.ocs.data.exact.emails.concat(result.ocs.data.emails); - } else { - var emails = []; + emails = result.ocs.data.exact.emails.concat(result.ocs.data.emails); } if (typeof(result.ocs.data.circles) !== 'undefined') { - var circles = result.ocs.data.exact.circles.concat(result.ocs.data.circles); - } else { - var circles = []; + circles = result.ocs.data.exact.circles.concat(result.ocs.data.circles); } var usersLength; @@ -199,7 +197,6 @@ var remotesLength; var emailsLength; var circlesLength; - var lookupLength; var i, j; diff --git a/core/js/shareitemmodel.js b/core/js/shareitemmodel.js index 41f9eb5e0aa..4118a8a0188 100644 --- a/core/js/shareitemmodel.js +++ b/core/js/shareitemmodel.js @@ -841,6 +841,20 @@ } } return time; + }, + + /** + * Returns a list of share types from the existing shares. + * + * @return {Array.<int>} array of share types + */ + getShareTypes: function() { + var result; + result = _.pluck(this.getSharesWithCurrentItem(), 'share_type'); + if (this.hasLinkShare()) { + result.push(OC.Share.SHARE_TYPE_LINK); + } + return _.uniq(result); } }); diff --git a/core/js/singleselect.js b/core/js/singleselect.js index 1b2016aabb9..cd0dd52651a 100644 --- a/core/js/singleselect.js +++ b/core/js/singleselect.js @@ -8,7 +8,7 @@ input.attr('title', inputTooltip); } if (typeof gravity === 'undefined') { - gravity = 'n' + gravity = 'n'; } select = $(select); input.css('position', 'absolute'); diff --git a/core/js/tests/specs/jquery.contactsmenuSpec.js b/core/js/tests/specs/jquery.contactsmenuSpec.js new file mode 100644 index 00000000000..7287648f5a2 --- /dev/null +++ b/core/js/tests/specs/jquery.contactsmenuSpec.js @@ -0,0 +1,213 @@ +/** + * Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com> + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +describe('jquery.contactsMenu tests', function() { + + var $selector1, $selector2, $appendTo; + + beforeEach(function() { + $('#testArea').append($('<div id="selector1">')); + $('#testArea').append($('<div id="selector2">')); + $('#testArea').append($('<div id="appendTo">')); + $selector1 = $('#selector1'); + $selector2 = $('#selector2'); + $appendTo = $('#appendTo'); + }); + + afterEach(function() { + $selector1.remove(); + $selector2.remove(); + $appendTo.remove(); + }); + + describe('shareType', function() { + it('stops if type not supported', function() { + $selector1.contactsMenu('user', 1, $appendTo); + expect($appendTo.children().length).toEqual(0); + + $selector1.contactsMenu('user', 2, $appendTo); + expect($appendTo.children().length).toEqual(0); + + $selector1.contactsMenu('user', 3, $appendTo); + expect($appendTo.children().length).toEqual(0); + + $selector1.contactsMenu('user', 5, $appendTo); + expect($appendTo.children().length).toEqual(0); + }); + + it('append list if shareType supported', function() { + $selector1.contactsMenu('user', 0, $appendTo); + expect($appendTo.children().length).toEqual(1); + expect($appendTo.html()).toEqual('<div class="menu popovermenu bubble hidden contactsmenu-popover"> <ul> <li> <a> <span class="icon-loading-small"></span> </a> </li> </ul></div>'); + }); + }); + + describe('open on click', function() { + it('with one selector', function() { + $selector1.contactsMenu('user', 0, $appendTo); + expect($appendTo.children().length).toEqual(1); + expect($appendTo.find('div.contactsmenu-popover').hasClass('hidden')).toEqual(true); + $selector1.click(); + expect($appendTo.find('div.contactsmenu-popover').hasClass('hidden')).toEqual(false); + }); + + it('with multiple selectors - 1', function() { + $('#selector1, #selector2').contactsMenu('user', 0, $appendTo); + + expect($appendTo.children().length).toEqual(1); + expect($appendTo.find('div.contactsmenu-popover').hasClass('hidden')).toEqual(true); + $selector1.click(); + expect($appendTo.find('div.contactsmenu-popover').hasClass('hidden')).toEqual(false); + }); + + it('with multiple selectors - 2', function() { + $('#selector1, #selector2').contactsMenu('user', 0, $appendTo); + + expect($appendTo.children().length).toEqual(1); + expect($appendTo.find('div.contactsmenu-popover').hasClass('hidden')).toEqual(true); + $selector2.click(); + expect($appendTo.find('div.contactsmenu-popover').hasClass('hidden')).toEqual(false); + }); + + it ('should close when clicking the selector again - 1', function() { + $('#selector1, #selector2').contactsMenu('user', 0, $appendTo); + + expect($appendTo.children().length).toEqual(1); + expect($appendTo.find('div').hasClass('hidden')).toEqual(true); + $selector1.click(); + expect($appendTo.find('div').hasClass('hidden')).toEqual(false); + $selector1.click(); + expect($appendTo.find('div').hasClass('hidden')).toEqual(true); + }); + + it ('should close when clicking the selector again - 1', function() { + $('#selector1, #selector2').contactsMenu('user', 0, $appendTo); + + expect($appendTo.children().length).toEqual(1); + expect($appendTo.find('div').hasClass('hidden')).toEqual(true); + $selector1.click(); + expect($appendTo.find('div').hasClass('hidden')).toEqual(false); + $selector2.click(); + expect($appendTo.find('div').hasClass('hidden')).toEqual(true); + }); + }); + + describe('send requests to the server and render', function() { + it('load a topaction only', function() { + $('#selector1, #selector2').contactsMenu('user', 0, $appendTo); + $selector1.click(); + + fakeServer.requests[0].respond( + 200, + { 'Content-Type': 'application/json; charset=utf-8' }, + JSON.stringify({ + "id": null, + "fullName": "Name 123", + "topAction": { + "title": "bar@baz.wtf", + "icon": "foo.svg", + "hyperlink": "mailto:bar%40baz.wtf"}, + "actions": [] + }) + ); + expect(fakeServer.requests[0].method).toEqual('POST'); + expect(fakeServer.requests[0].url).toEqual('http://localhost/index.php/contactsmenu/findOne'); + + expect($appendTo.html()).toEqual('<div class="menu popovermenu bubble contactsmenu-popover loaded" style="display: block;"> <ul> <li class="hidden"> <a> <span class="icon-loading-small"></span> </a> </li> <li> <a href="mailto:bar%40baz.wtf"> <img src="foo.svg"> <span>bar@baz.wtf</span> </a></li></ul></div>'); + }); + + it('load topaction and more actions', function() { + $('#selector1, #selector2').contactsMenu('user', 0, $appendTo); + $selector1.click(); + + fakeServer.requests[0].respond( + 200, + { 'Content-Type': 'application/json; charset=utf-8' }, + JSON.stringify({ + "id": null, + "fullName": "Name 123", + "topAction": { + "title": "bar@baz.wtf", + "icon": "foo.svg", + "hyperlink": "mailto:bar%40baz.wtf"}, + "actions": [{ + "title": "Details", + "icon": "details.svg", + "hyperlink": "http:\/\/localhost\/index.php\/apps\/contacts" + }] + }) + ); + expect(fakeServer.requests[0].method).toEqual('POST'); + expect(fakeServer.requests[0].url).toEqual('http://localhost/index.php/contactsmenu/findOne'); + + expect($appendTo.html()).toEqual('<div class="menu popovermenu bubble contactsmenu-popover loaded" style="display: block;"> <ul> <li class="hidden"> <a> <span class="icon-loading-small"></span> </a> </li> <li> <a href="mailto:bar%40baz.wtf"> <img src="foo.svg"> <span>bar@baz.wtf</span> </a></li><li> <a href="http://localhost/index.php/apps/contacts"> <img src="details.svg"> <span>Details</span> </a></li></ul></div>'); + }); + + it('load no actions', function() { + $('#selector1, #selector2').contactsMenu('user', 0, $appendTo); + $selector1.click(); + + fakeServer.requests[0].respond( + 200, + { 'Content-Type': 'application/json; charset=utf-8' }, + JSON.stringify({ + "id": null, + "fullName": "Name 123", + "topAction": null, + "actions": [] + }) + ); + expect(fakeServer.requests[0].method).toEqual('POST'); + expect(fakeServer.requests[0].url).toEqual('http://localhost/index.php/contactsmenu/findOne'); + + expect($appendTo.html()).toEqual('<div class="menu popovermenu bubble contactsmenu-popover loaded" style="display: block;"> <ul> <li class="hidden"> <a> <span class="icon-loading-small"></span> </a> </li> <li> <a href="#"> <span>No action available</span> </a></li></ul></div>'); + }); + + it('should throw an error', function() { + $('#selector1, #selector2').contactsMenu('user', 0, $appendTo); + $selector1.click(); + + fakeServer.requests[0].respond( + 400, + { 'Content-Type': 'application/json; charset=utf-8' }, + JSON.stringify([]) + ); + expect(fakeServer.requests[0].method).toEqual('POST'); + expect(fakeServer.requests[0].url).toEqual('http://localhost/index.php/contactsmenu/findOne'); + + expect($appendTo.html()).toEqual('<div class="menu popovermenu bubble contactsmenu-popover loaded" style="display: block;"> <ul> <li class="hidden"> <a> <span class="icon-loading-small"></span> </a> </li> <li> <a href="#"> <span>Error fetching contact actions</span> </a></li></ul></div>'); + }); + + it('should handle 404', function() { + $('#selector1, #selector2').contactsMenu('user', 0, $appendTo); + $selector1.click(); + + fakeServer.requests[0].respond( + 404, + { 'Content-Type': 'application/json; charset=utf-8' }, + JSON.stringify([]) + ); + expect(fakeServer.requests[0].method).toEqual('POST'); + expect(fakeServer.requests[0].url).toEqual('http://localhost/index.php/contactsmenu/findOne'); + + expect($appendTo.html()).toEqual('<div class="menu popovermenu bubble contactsmenu-popover loaded" style="display: block;"> <ul> <li class="hidden"> <a> <span class="icon-loading-small"></span> </a> </li> <li> <a href="#"> <span>No action available</span> </a></li></ul></div>'); + }); + }); + + it('click anywhere else to close the menu', function() { + $('#selector1, #selector2').contactsMenu('user', 0, $appendTo); + + expect($appendTo.find('div').hasClass('hidden')).toEqual(true); + $selector1.click(); + expect($appendTo.find('div').hasClass('hidden')).toEqual(false); + $(document).click(); + expect($appendTo.find('div').hasClass('hidden')).toEqual(true); + }); +}); diff --git a/core/js/tests/specs/shareitemmodelSpec.js b/core/js/tests/specs/shareitemmodelSpec.js index 771a9263709..3b17051508e 100644 --- a/core/js/tests/specs/shareitemmodelSpec.js +++ b/core/js/tests/specs/shareitemmodelSpec.js @@ -924,5 +924,66 @@ describe('OC.Share.ShareItemModel', function() { expect(errorStub.lastCall.args[1]).toEqual('Some error message'); }); }); + + describe('getShareTypes', function() { + + var dataProvider = [ + [ + ], + [ + OC.Share.SHARE_TYPE_USER, + OC.Share.SHARE_TYPE_USER, + ], + [ + OC.Share.SHARE_TYPE_USER, + OC.Share.SHARE_TYPE_GROUP, + OC.Share.SHARE_TYPE_LINK, + OC.Share.SHARE_TYPE_REMOTE + ], + [ + OC.Share.SHARE_TYPE_USER, + OC.Share.SHARE_TYPE_GROUP, + OC.Share.SHARE_TYPE_GROUP, + OC.Share.SHARE_TYPE_LINK, + OC.Share.SHARE_TYPE_LINK, + OC.Share.SHARE_TYPE_REMOTE, + OC.Share.SHARE_TYPE_REMOTE, + OC.Share.SHARE_TYPE_REMOTE + ], + [ + OC.Share.SHARE_TYPE_LINK, + OC.Share.SHARE_TYPE_LINK, + OC.Share.SHARE_TYPE_USER + ] + ]; + + _.each(dataProvider, function testCase(shareTypes, i) { + it('returns set of share types for case ' + i, function() { + /* jshint camelcase: false */ + fetchReshareDeferred.resolve(makeOcsResponse([])); + + var id = 100; + var shares = _.map(shareTypes, function(shareType) { + return { + id: id++, + item_source: 123, + permissions: 31, + share_type: shareType, + uid_owner: 'root' + }; + }); + + var expectedResult = _.uniq(shareTypes).sort(); + + fetchSharesDeferred.resolve(makeOcsResponse(shares)); + + OC.currentUser = 'root'; + + model.fetch(); + + expect(model.getShareTypes().sort()).toEqual(expectedResult); + }); + }); + }); }); diff --git a/core/l10n/de.js b/core/l10n/de.js index 18e2faae626..e0ed6681902 100644 --- a/core/l10n/de.js +++ b/core/l10n/de.js @@ -14,6 +14,8 @@ OC.L10N.register( "No crop data provided" : "Keine Beschnittdaten zur Verfügung gestellt", "No valid crop data provided" : "Keine gültigen Zuschnittdaten zur Verfügung gestellt", "Crop is not square" : "Zuschnitt ist nicht quadratisch", + "State token does not match" : "Status-Token stimmen nicht überein", + "Auth flow can only be started unauthenticated." : "Der Authentifizierungs-Ablauf kann nur als \"nicht angemeldet\" gestartet werden.", "Couldn't reset password because the token is invalid" : "Das Passwort konnte aufgrund eines ungültigen Tokens nicht zurückgesetzt werden", "Couldn't reset password because the token is expired" : "Das Passwort konnte nicht zurückgesetzt werden, da der Token abgelaufen ist", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Es konnte keine E-Mail verschickt werden um das Passwort zurückzusetzten, da keine E-Mail im Benutzerkonto hinterlegt ist. Bitte kontaktiere deinen Administrator.", @@ -49,7 +51,14 @@ OC.L10N.register( "%s (incompatible)" : "%s (inkompatibel)", "Following apps have been disabled: %s" : "Die folgenden Apps wurden deaktiviert: %s", "Already up to date" : "Bereits aktuell", + "No contacts found" : "Keine Kontakte gefunden", + "Show all contacts …" : "Zeige alle Kontakte...", + "There was an error loading your contacts" : "Fehler beim Laden Deiner Kontakte", + "Loading your contacts …" : "Lade Deine Adressen...", + "Looking for {term} …" : "Suche nach {term} …", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Bei der Code-Integritätsprüfung sind Fehler aufgetreten. Mehr Informationen…</a>", + "No action available" : "Keine Aktion verfügbar", + "Error fetching contact actions" : "Fehler beim Einlesen der Kontakt-Aktionen", "Settings" : "Einstellungen", "Connection to server lost" : "Verbindung zum Server verloren", "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Problem beim Laden der Seite, Seite wird in %n Sekunde nochmals geladen","Problem beim Laden der Seite, Seite wird in %n Sekunden nochmals geladen"], @@ -265,6 +274,10 @@ OC.L10N.register( "Log in" : "Anmelden", "Stay logged in" : "Angemeldet bleiben", "Alternative Logins" : "Alternative Logins", + "You are about to grant \"%s\" access to your %s account." : "Du bist dabei \"%s\" Zugriff auf Dein %s-Konto zu gewähren.", + "App token" : "App-Token", + "Alternative login using app token" : "Alternative Anmeldung via App-Token", + "Redirecting …" : "Weiterleiten...", "New password" : "Neues Passwort", "New Password" : "Neues Passwort", "Reset password" : "Passwort zurücksetzen", diff --git a/core/l10n/de.json b/core/l10n/de.json index 58154223dcc..3533b1eb96a 100644 --- a/core/l10n/de.json +++ b/core/l10n/de.json @@ -12,6 +12,8 @@ "No crop data provided" : "Keine Beschnittdaten zur Verfügung gestellt", "No valid crop data provided" : "Keine gültigen Zuschnittdaten zur Verfügung gestellt", "Crop is not square" : "Zuschnitt ist nicht quadratisch", + "State token does not match" : "Status-Token stimmen nicht überein", + "Auth flow can only be started unauthenticated." : "Der Authentifizierungs-Ablauf kann nur als \"nicht angemeldet\" gestartet werden.", "Couldn't reset password because the token is invalid" : "Das Passwort konnte aufgrund eines ungültigen Tokens nicht zurückgesetzt werden", "Couldn't reset password because the token is expired" : "Das Passwort konnte nicht zurückgesetzt werden, da der Token abgelaufen ist", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Es konnte keine E-Mail verschickt werden um das Passwort zurückzusetzten, da keine E-Mail im Benutzerkonto hinterlegt ist. Bitte kontaktiere deinen Administrator.", @@ -47,7 +49,14 @@ "%s (incompatible)" : "%s (inkompatibel)", "Following apps have been disabled: %s" : "Die folgenden Apps wurden deaktiviert: %s", "Already up to date" : "Bereits aktuell", + "No contacts found" : "Keine Kontakte gefunden", + "Show all contacts …" : "Zeige alle Kontakte...", + "There was an error loading your contacts" : "Fehler beim Laden Deiner Kontakte", + "Loading your contacts …" : "Lade Deine Adressen...", + "Looking for {term} …" : "Suche nach {term} …", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Bei der Code-Integritätsprüfung sind Fehler aufgetreten. Mehr Informationen…</a>", + "No action available" : "Keine Aktion verfügbar", + "Error fetching contact actions" : "Fehler beim Einlesen der Kontakt-Aktionen", "Settings" : "Einstellungen", "Connection to server lost" : "Verbindung zum Server verloren", "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Problem beim Laden der Seite, Seite wird in %n Sekunde nochmals geladen","Problem beim Laden der Seite, Seite wird in %n Sekunden nochmals geladen"], @@ -263,6 +272,10 @@ "Log in" : "Anmelden", "Stay logged in" : "Angemeldet bleiben", "Alternative Logins" : "Alternative Logins", + "You are about to grant \"%s\" access to your %s account." : "Du bist dabei \"%s\" Zugriff auf Dein %s-Konto zu gewähren.", + "App token" : "App-Token", + "Alternative login using app token" : "Alternative Anmeldung via App-Token", + "Redirecting …" : "Weiterleiten...", "New password" : "Neues Passwort", "New Password" : "Neues Passwort", "Reset password" : "Passwort zurücksetzen", diff --git a/core/l10n/de_DE.js b/core/l10n/de_DE.js index c2611c74707..708bd46b6bf 100644 --- a/core/l10n/de_DE.js +++ b/core/l10n/de_DE.js @@ -14,6 +14,8 @@ OC.L10N.register( "No crop data provided" : "Keine Beschnittdaten zur Verfügung gestellt", "No valid crop data provided" : "Keine gültigen Zuschnittdaten zur Verfügung gestellt", "Crop is not square" : "Zuschnitt ist nicht quadratisch", + "State token does not match" : "Status-Token stimmen nicht überein", + "Auth flow can only be started unauthenticated." : "Der Authentifizierungs-Ablauf kann nur als \"nicht angemeldet\" gestartet werden.", "Couldn't reset password because the token is invalid" : "Das Passwort konnte aufgrund eines ungültigen Tokens nicht zurückgesetzt werden", "Couldn't reset password because the token is expired" : "Das Passwort konnte nicht zurückgesetzt werden, da der Token abgelaufen ist", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Es konnte keine E-Mail verschickt werden um das Passwort zurückzusetzten, da keine E-Mail im Benutzerkonto hinterlegt ist. Bitte kontaktieren Sie den Administrator.", @@ -49,7 +51,14 @@ OC.L10N.register( "%s (incompatible)" : "%s (inkompatibel)", "Following apps have been disabled: %s" : "Die folgenden Apps wurden deaktiviert: %s", "Already up to date" : "Bereits aktuell", + "No contacts found" : "Keine Kontakte gefunden", + "Show all contacts …" : "Zeige alle Kontakte...", + "There was an error loading your contacts" : "Fehler beim Laden Ihrer Kontakte", + "Loading your contacts …" : "Lade Ihre Kontakte ...", + "Looking for {term} …" : "Suche nach {term} …", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Es gab Probleme bei der Code Integritätsprüfung. Mehr Informationen...</a>", + "No action available" : "Keine Aktion verfügbar", + "Error fetching contact actions" : "Fehler beim Einlesen der Kontakt-Aktionen", "Settings" : "Einstellungen", "Connection to server lost" : "Verbindung zum Server verloren", "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Problem beim Laden der Seite, Seite wird in %n Sekunde nochmals geladen","Problem beim Laden der Seite. Seite wird in %n Sekunden erneut geladen"], @@ -265,6 +274,10 @@ OC.L10N.register( "Log in" : "Einloggen", "Stay logged in" : "Angemeldet bleiben", "Alternative Logins" : "Alternative Logins", + "You are about to grant \"%s\" access to your %s account." : "Sie sind dabei \"%s\" Zugriff auf Ihr %s-Konto zu gewähren.", + "App token" : "App-Token", + "Alternative login using app token" : "Alternative Anmeldung via App-Token", + "Redirecting …" : "Weiterleiten ...", "New password" : "Neues Passwort", "New Password" : "Neues Passwort", "Reset password" : "Passwort zurücksetzen", diff --git a/core/l10n/de_DE.json b/core/l10n/de_DE.json index f165b0ccbbe..1825a5c74c4 100644 --- a/core/l10n/de_DE.json +++ b/core/l10n/de_DE.json @@ -12,6 +12,8 @@ "No crop data provided" : "Keine Beschnittdaten zur Verfügung gestellt", "No valid crop data provided" : "Keine gültigen Zuschnittdaten zur Verfügung gestellt", "Crop is not square" : "Zuschnitt ist nicht quadratisch", + "State token does not match" : "Status-Token stimmen nicht überein", + "Auth flow can only be started unauthenticated." : "Der Authentifizierungs-Ablauf kann nur als \"nicht angemeldet\" gestartet werden.", "Couldn't reset password because the token is invalid" : "Das Passwort konnte aufgrund eines ungültigen Tokens nicht zurückgesetzt werden", "Couldn't reset password because the token is expired" : "Das Passwort konnte nicht zurückgesetzt werden, da der Token abgelaufen ist", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Es konnte keine E-Mail verschickt werden um das Passwort zurückzusetzten, da keine E-Mail im Benutzerkonto hinterlegt ist. Bitte kontaktieren Sie den Administrator.", @@ -47,7 +49,14 @@ "%s (incompatible)" : "%s (inkompatibel)", "Following apps have been disabled: %s" : "Die folgenden Apps wurden deaktiviert: %s", "Already up to date" : "Bereits aktuell", + "No contacts found" : "Keine Kontakte gefunden", + "Show all contacts …" : "Zeige alle Kontakte...", + "There was an error loading your contacts" : "Fehler beim Laden Ihrer Kontakte", + "Loading your contacts …" : "Lade Ihre Kontakte ...", + "Looking for {term} …" : "Suche nach {term} …", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Es gab Probleme bei der Code Integritätsprüfung. Mehr Informationen...</a>", + "No action available" : "Keine Aktion verfügbar", + "Error fetching contact actions" : "Fehler beim Einlesen der Kontakt-Aktionen", "Settings" : "Einstellungen", "Connection to server lost" : "Verbindung zum Server verloren", "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Problem beim Laden der Seite, Seite wird in %n Sekunde nochmals geladen","Problem beim Laden der Seite. Seite wird in %n Sekunden erneut geladen"], @@ -263,6 +272,10 @@ "Log in" : "Einloggen", "Stay logged in" : "Angemeldet bleiben", "Alternative Logins" : "Alternative Logins", + "You are about to grant \"%s\" access to your %s account." : "Sie sind dabei \"%s\" Zugriff auf Ihr %s-Konto zu gewähren.", + "App token" : "App-Token", + "Alternative login using app token" : "Alternative Anmeldung via App-Token", + "Redirecting …" : "Weiterleiten ...", "New password" : "Neues Passwort", "New Password" : "Neues Passwort", "Reset password" : "Passwort zurücksetzen", diff --git a/core/l10n/es_MX.js b/core/l10n/es_MX.js index 89a263e3972..bf2e584c82d 100644 --- a/core/l10n/es_MX.js +++ b/core/l10n/es_MX.js @@ -14,6 +14,8 @@ OC.L10N.register( "No crop data provided" : "No se han proporcionado datos del recorte", "No valid crop data provided" : "No se han proporcionado datos válidos del recorte", "Crop is not square" : "El recorte no está cuadrado", + "State token does not match" : "La ficha de estado no corresponde", + "Auth flow can only be started unauthenticated." : "El flujo de autenticación solo se puede iniciar sin encontrarse autenticado. ", "Couldn't reset password because the token is invalid" : "No ha sido posible restablecer la contraseña porque la ficha es inválida", "Couldn't reset password because the token is expired" : "No ha sido posible restablecer la contraseña porque la ficha ha expirado", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "No fue posible enviar el correo electrónico para restablecer porque no hay una dirección de correo electrónico para este usuario. Favor de contactar a su adminsitrador. ", @@ -49,7 +51,14 @@ OC.L10N.register( "%s (incompatible)" : "%s (incompatible)", "Following apps have been disabled: %s" : "Las siguientes aplicaciones han sido deshabilitadas: %s", "Already up to date" : "Ya está actualizado", + "No contacts found" : "No se encontraron contactos", + "Show all contacts …" : "Mostrar todos los contactos ...", + "There was an error loading your contacts" : "Se presentó un error al cargar sus contactos", + "Loading your contacts …" : "Cargando sus contactos ... ", + "Looking for {term} …" : "Buscando {term} ...", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Se presentaron problemas con la verificación de integridad del código. Mayor información ...</a>", + "No action available" : "No hay acciones disponibles", + "Error fetching contact actions" : "Se presentó un error al traer las acciónes de contatos", "Settings" : "Ajustes", "Connection to server lost" : "Se ha perdido la conexión con el servidor", "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Se presentó un erorr al cargar la página, recargando en %n segundo","Se presentó un erorr al cargar la página, recargando en %n segundo"], @@ -162,7 +171,12 @@ OC.L10N.register( "{sharee} (email)" : "{sharee} (correo electrónico)", "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})", "Share" : "Compartir", + "Share with other people by entering a user or group, a federated cloud ID or an email address." : "Comparta con otras personas ingresando un usuario, un grupo, un ID de nube federado o una dirección de correo electrónico.", + "Share with other people by entering a user or group or a federated cloud ID." : "Comparta con otras personas ingresando un usuario, un grupo o un ID de nube federado.", + "Share with other people by entering a user or group or an email address." : "Comparta con otras personas ingresando un usuario, un grupo o una dirección de correo electrónico.", "Name or email address..." : "Nombre o dirección de correo electrónico", + "Name or federated cloud ID..." : "Nombre o ID de nube federada...", + "Name, federated cloud ID or email address..." : "Nombre, ID de nube federada o dirección de correo electrónico...", "Name..." : "Nombre...", "Error removing share" : "Se presentó un error al dejar de compartir", "Non-existing tag #{tag}" : "Etiqueta #{tag} no-existente", @@ -260,6 +274,10 @@ OC.L10N.register( "Log in" : "Ingresar", "Stay logged in" : "Mantener la sesión abierta", "Alternative Logins" : "Accesos Alternativos", + "You are about to grant \"%s\" access to your %s account." : "Está apunto de concederle a \"%s\" acceso a su cuenta %s.", + "App token" : "Ficha de la aplicación", + "Alternative login using app token" : "Inicio de sesión alternativo usando la ficha de la aplicación", + "Redirecting …" : "Redireccionando ... ", "New password" : "Nueva contraseña", "New Password" : "Nueva Contraseña", "Reset password" : "Restablecer contraseña", diff --git a/core/l10n/es_MX.json b/core/l10n/es_MX.json index eacce9aac86..46c1a003bfc 100644 --- a/core/l10n/es_MX.json +++ b/core/l10n/es_MX.json @@ -12,6 +12,8 @@ "No crop data provided" : "No se han proporcionado datos del recorte", "No valid crop data provided" : "No se han proporcionado datos válidos del recorte", "Crop is not square" : "El recorte no está cuadrado", + "State token does not match" : "La ficha de estado no corresponde", + "Auth flow can only be started unauthenticated." : "El flujo de autenticación solo se puede iniciar sin encontrarse autenticado. ", "Couldn't reset password because the token is invalid" : "No ha sido posible restablecer la contraseña porque la ficha es inválida", "Couldn't reset password because the token is expired" : "No ha sido posible restablecer la contraseña porque la ficha ha expirado", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "No fue posible enviar el correo electrónico para restablecer porque no hay una dirección de correo electrónico para este usuario. Favor de contactar a su adminsitrador. ", @@ -47,7 +49,14 @@ "%s (incompatible)" : "%s (incompatible)", "Following apps have been disabled: %s" : "Las siguientes aplicaciones han sido deshabilitadas: %s", "Already up to date" : "Ya está actualizado", + "No contacts found" : "No se encontraron contactos", + "Show all contacts …" : "Mostrar todos los contactos ...", + "There was an error loading your contacts" : "Se presentó un error al cargar sus contactos", + "Loading your contacts …" : "Cargando sus contactos ... ", + "Looking for {term} …" : "Buscando {term} ...", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Se presentaron problemas con la verificación de integridad del código. Mayor información ...</a>", + "No action available" : "No hay acciones disponibles", + "Error fetching contact actions" : "Se presentó un error al traer las acciónes de contatos", "Settings" : "Ajustes", "Connection to server lost" : "Se ha perdido la conexión con el servidor", "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Se presentó un erorr al cargar la página, recargando en %n segundo","Se presentó un erorr al cargar la página, recargando en %n segundo"], @@ -160,7 +169,12 @@ "{sharee} (email)" : "{sharee} (correo electrónico)", "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})", "Share" : "Compartir", + "Share with other people by entering a user or group, a federated cloud ID or an email address." : "Comparta con otras personas ingresando un usuario, un grupo, un ID de nube federado o una dirección de correo electrónico.", + "Share with other people by entering a user or group or a federated cloud ID." : "Comparta con otras personas ingresando un usuario, un grupo o un ID de nube federado.", + "Share with other people by entering a user or group or an email address." : "Comparta con otras personas ingresando un usuario, un grupo o una dirección de correo electrónico.", "Name or email address..." : "Nombre o dirección de correo electrónico", + "Name or federated cloud ID..." : "Nombre o ID de nube federada...", + "Name, federated cloud ID or email address..." : "Nombre, ID de nube federada o dirección de correo electrónico...", "Name..." : "Nombre...", "Error removing share" : "Se presentó un error al dejar de compartir", "Non-existing tag #{tag}" : "Etiqueta #{tag} no-existente", @@ -258,6 +272,10 @@ "Log in" : "Ingresar", "Stay logged in" : "Mantener la sesión abierta", "Alternative Logins" : "Accesos Alternativos", + "You are about to grant \"%s\" access to your %s account." : "Está apunto de concederle a \"%s\" acceso a su cuenta %s.", + "App token" : "Ficha de la aplicación", + "Alternative login using app token" : "Inicio de sesión alternativo usando la ficha de la aplicación", + "Redirecting …" : "Redireccionando ... ", "New password" : "Nueva contraseña", "New Password" : "Nueva Contraseña", "Reset password" : "Restablecer contraseña", diff --git a/core/l10n/fi.js b/core/l10n/fi.js index 2feec654d1e..12a26dbc354 100644 --- a/core/l10n/fi.js +++ b/core/l10n/fi.js @@ -49,6 +49,10 @@ OC.L10N.register( "%s (incompatible)" : "%s (ei yhteensopiva)", "Following apps have been disabled: %s" : "Seuraavat sovellukset on poistettu käytöstä: %s", "Already up to date" : "Kaikki on jo ajan tasalla", + "No contacts found" : "Yhteystietoja ei löytynyt", + "Show all contacts …" : "Näytä kaikki yhteystiedot…", + "There was an error loading your contacts" : "Virhe yhteystietojasi ladatessa", + "Loading your contacts …" : "Ladataan yhteystietojasi…", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Eheystarkistus tuotti ongelmia. Lisätietoja…</a>", "Settings" : "Asetukset", "Connection to server lost" : "Yhteys palvelimelle menetetty", @@ -263,6 +267,7 @@ OC.L10N.register( "Log in" : "Kirjaudu sisään", "Stay logged in" : "Pysy sisäänkirjautuneena", "Alternative Logins" : "Vaihtoehtoiset kirjautumistavat", + "Redirecting …" : "Ohjataan uudelleen…", "New password" : "Uusi salasana", "New Password" : "Uusi salasana", "Reset password" : "Palauta salasana", diff --git a/core/l10n/fi.json b/core/l10n/fi.json index 9fa22392e6a..f05e0c5b07c 100644 --- a/core/l10n/fi.json +++ b/core/l10n/fi.json @@ -47,6 +47,10 @@ "%s (incompatible)" : "%s (ei yhteensopiva)", "Following apps have been disabled: %s" : "Seuraavat sovellukset on poistettu käytöstä: %s", "Already up to date" : "Kaikki on jo ajan tasalla", + "No contacts found" : "Yhteystietoja ei löytynyt", + "Show all contacts …" : "Näytä kaikki yhteystiedot…", + "There was an error loading your contacts" : "Virhe yhteystietojasi ladatessa", + "Loading your contacts …" : "Ladataan yhteystietojasi…", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Eheystarkistus tuotti ongelmia. Lisätietoja…</a>", "Settings" : "Asetukset", "Connection to server lost" : "Yhteys palvelimelle menetetty", @@ -261,6 +265,7 @@ "Log in" : "Kirjaudu sisään", "Stay logged in" : "Pysy sisäänkirjautuneena", "Alternative Logins" : "Vaihtoehtoiset kirjautumistavat", + "Redirecting …" : "Ohjataan uudelleen…", "New password" : "Uusi salasana", "New Password" : "Uusi salasana", "Reset password" : "Palauta salasana", diff --git a/core/l10n/fr.js b/core/l10n/fr.js index ff14ca326c6..edbcce86e91 100644 --- a/core/l10n/fr.js +++ b/core/l10n/fr.js @@ -49,7 +49,13 @@ OC.L10N.register( "%s (incompatible)" : "%s (incompatible)", "Following apps have been disabled: %s" : "Les applications suivantes ont été désactivées : %s", "Already up to date" : "Déjà à jour", + "No contacts found" : "Aucun contact trouvé", + "Show all contacts …" : "Montrer tous les contacts...", + "There was an error loading your contacts" : "Il y a eu une erreur lors du chargement de vos contacts", + "Loading your contacts …" : "Chargement de vos contacts...", + "Looking for {term} …" : "Recherche de {term} ...", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Il y a eu des problèmes à la vérification de l’intégrité du code. Plus d'infos...</a>", + "No action available" : "Aucune action disponible", "Settings" : "Paramètres", "Connection to server lost" : "Connexion au serveur perdu", "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Problème de chargement de la page, actualisation dans %n seconde","Problème de chargement de la page, actualisation dans %n secondes"], @@ -162,6 +168,9 @@ OC.L10N.register( "{sharee} (email)" : "{sharee} (email)", "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})", "Share" : "Partager", + "Share with other people by entering a user or group, a federated cloud ID or an email address." : "Partager avec d'autres personnes en indiquant un nom d'utilisateur, un groupe, un identifiant cloud ou une adresse email.", + "Share with other people by entering a user or group or a federated cloud ID." : "Partager avec d'autres personnes en indiquant un utilisateur, un groupe ou un identifiant cloud.", + "Share with other people by entering a user or group or an email address." : "Partager avec d'autres personnes en indiquant un utilisateur, un groupe ou une adresse email.", "Name or email address..." : "Nom ou adresse mail...", "Name or federated cloud ID..." : "Nom ou ID du cloud fédéré...", "Name, federated cloud ID or email address..." : "Nom, ID du cloud fédéré ou adresse mail...", @@ -262,6 +271,8 @@ OC.L10N.register( "Log in" : "Se connecter", "Stay logged in" : "Rester connecté", "Alternative Logins" : "Identifiants alternatifs", + "You are about to grant \"%s\" access to your %s account." : "Vous êtes sur le point d'accorder à \"%s\" l'accès à votre compte \"%s\".", + "Redirecting …" : "Redirection en cours...", "New password" : "Nouveau mot de passe", "New Password" : "Nouveau mot de passe", "Reset password" : "Réinitialiser le mot de passe", diff --git a/core/l10n/fr.json b/core/l10n/fr.json index 8892cac7b46..500063cc7ea 100644 --- a/core/l10n/fr.json +++ b/core/l10n/fr.json @@ -47,7 +47,13 @@ "%s (incompatible)" : "%s (incompatible)", "Following apps have been disabled: %s" : "Les applications suivantes ont été désactivées : %s", "Already up to date" : "Déjà à jour", + "No contacts found" : "Aucun contact trouvé", + "Show all contacts …" : "Montrer tous les contacts...", + "There was an error loading your contacts" : "Il y a eu une erreur lors du chargement de vos contacts", + "Loading your contacts …" : "Chargement de vos contacts...", + "Looking for {term} …" : "Recherche de {term} ...", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Il y a eu des problèmes à la vérification de l’intégrité du code. Plus d'infos...</a>", + "No action available" : "Aucune action disponible", "Settings" : "Paramètres", "Connection to server lost" : "Connexion au serveur perdu", "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Problème de chargement de la page, actualisation dans %n seconde","Problème de chargement de la page, actualisation dans %n secondes"], @@ -160,6 +166,9 @@ "{sharee} (email)" : "{sharee} (email)", "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})", "Share" : "Partager", + "Share with other people by entering a user or group, a federated cloud ID or an email address." : "Partager avec d'autres personnes en indiquant un nom d'utilisateur, un groupe, un identifiant cloud ou une adresse email.", + "Share with other people by entering a user or group or a federated cloud ID." : "Partager avec d'autres personnes en indiquant un utilisateur, un groupe ou un identifiant cloud.", + "Share with other people by entering a user or group or an email address." : "Partager avec d'autres personnes en indiquant un utilisateur, un groupe ou une adresse email.", "Name or email address..." : "Nom ou adresse mail...", "Name or federated cloud ID..." : "Nom ou ID du cloud fédéré...", "Name, federated cloud ID or email address..." : "Nom, ID du cloud fédéré ou adresse mail...", @@ -260,6 +269,8 @@ "Log in" : "Se connecter", "Stay logged in" : "Rester connecté", "Alternative Logins" : "Identifiants alternatifs", + "You are about to grant \"%s\" access to your %s account." : "Vous êtes sur le point d'accorder à \"%s\" l'accès à votre compte \"%s\".", + "Redirecting …" : "Redirection en cours...", "New password" : "Nouveau mot de passe", "New Password" : "Nouveau mot de passe", "Reset password" : "Réinitialiser le mot de passe", diff --git a/core/l10n/is.js b/core/l10n/is.js index e27ac0a89b2..1f5f4676fec 100644 --- a/core/l10n/is.js +++ b/core/l10n/is.js @@ -14,9 +14,12 @@ OC.L10N.register( "No crop data provided" : "Enginn gögn um utanskurð gefin", "No valid crop data provided" : "Enginn gild gögn um utanskurð gefin", "Crop is not square" : "Utanskurður er ekki ferningslaga", + "State token does not match" : "Stöðuteikn samsvarar ekki", "Couldn't reset password because the token is invalid" : "Gat ekki endurstillt lykilorðið vegna þess að teiknið er ógilt", "Couldn't reset password because the token is expired" : "Gat ekki endurstillt lykilorðið vegna þess að teiknið er útrunnið", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Gat ekki sent endurstillingu í tölvupósti því það er ekkert gilt tölvupóstfang fyrir þennan notanda. Hafðu samband við kerfisstjóra.", + "Password reset" : "Endurstilling lykilorðs", + "Reset your password" : "Endurstilltu lykilorðið þitt", "%s password reset" : "%s lykilorð endurstillt", "Couldn't send reset email. Please contact your administrator." : "Gat ekki sent endurstillingu í tölvupósti. Hafðu samband við kerfisstjóra.", "Couldn't send reset email. Please make sure your username is correct." : "Gat ekki sent endurstillingu í tölvupósti. Gakktu úr skugga um að notandanafn þitt sé rétt.", @@ -45,7 +48,13 @@ OC.L10N.register( "%s (incompatible)" : "%s (ósamhæft)", "Following apps have been disabled: %s" : "Eftirfarandi forrit hafa verið gerð óvirk: %s", "Already up to date" : "Allt uppfært nú þegar", + "No contacts found" : "Engir tengiliðir fundust", + "Show all contacts …" : "Birta alla tengiliði ...", + "There was an error loading your contacts" : "Það kom upp villa við að hlaða inn tengiliðunum þínum", + "Loading your contacts …" : "Hleð inn tengiliðalistum ...", + "Looking for {term} …" : "Leita að {term} …", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Það komu upp vandamál með athugun á áreiðanleika kóða. Nánari upplýsingar…</a>", + "No action available" : "Engin aðgerð tiltæk", "Settings" : "Stillingar", "Connection to server lost" : "Tenging við miðlara rofnaði", "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Vandamál við að hlaða inn síðu, endurhleð eftir %n sekúndu","Vandamál við að hlaða inn síðu, endurhleð eftir %n sekúndur"], @@ -68,6 +77,7 @@ OC.L10N.register( "No files in here" : "Engar skrár hér", "Choose" : "Veldu", "Error loading file picker template: {error}" : "Villa við að hlaða inn sniðmáti fyrir skráaveljara: {error}", + "OK" : "Í lagi", "Error loading message template: {error}" : "Villa við að hlaða inn sniðmáti fyrir skilaboð: {error}", "read-only" : "skrifvarið", "_{count} file conflict_::_{count} file conflicts_" : ["{count} árekstur skráa","{count} árekstrar skráa"], @@ -98,6 +108,7 @@ OC.L10N.register( "The PHP Opcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For better performance we recommend ↗</a> to use following settings in the <code>php.ini</code>:" : "PHP Opcache er ekki rétt uppsett. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Fyrir betri afköst mælum við með ↗</a> því að nota eftirfarandi stillingar í <code>php.ini</code>:", "The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. We strongly recommend enabling this function." : "PHP-fallið \"set_time_limit\" er ekki tiltækt. Þetta gæti valdið því að skriftur stöðvist í miðri keyrslu og skemmi uppsetninguna þína. Við mælumst til þess að þetta fall sé gert virkt.", "Error occurred while checking server setup" : "Villa kom upp við athugun á uppsetningu þjóns", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended 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." : "Gagnamappan og skrárnar þínar eru líklega aðgengilegar öllum af internetinu vegna þess að .htaccess skrá er ekki virk. Við mælum eindregið með að þú stillir vefþjóninn þinn á þann hátt að gagnamappa er ekki lengur aðgengileg eða þú færir gagnamöppu út fyrir skjalarót vefþjóns.", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP-haus er ekki stilltur til jafns við \"{expected}\". Þetta er möguleg áhætta varðandi öryggi og gagnaleynd, við mælum með því að laga þessa stillingu.", "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>." : "\"Strict-Transport-Security\" HTTP-hausinn er ekki stilltur á að minnsa kosti \"{seconds}\" sekúndur. Fyrir aukið öryggi mælum við með því að virkja HSTS eins og lýst er í <a href=\"{docUrl}\" rel=\"noreferrer\">öryggisleiðbeiningum</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>." : " Þú ert að tengjast þessu vefsvæði með HTTP. Við mælum eindregið með að þú stillir þjóninn á að krefjast HTTPS í staðinn eins og lýst er í <a href=\"{docUrl}\">öryggisleiðbeiningunum</a> okkar.", @@ -112,6 +123,7 @@ OC.L10N.register( "Expiration" : "Rennur út", "Expiration date" : "Gildir til", "Choose a password for the public link" : "Veldu þér lykilorð fyrir almenningstengil", + "Choose a password for the public link or press \"Enter ↵\"" : "Veldu þér lykilorð fyrir opinberan tengil eða ýttu á \"Enter ↵\"", "Copied!" : "Afritað!", "Copy" : "Afrita", "Not supported!" : "Óstutt!", @@ -129,11 +141,20 @@ OC.L10N.register( "Send" : "Senda", "Shared with you and the group {group} by {owner}" : "Deilt með þér og hópnum {group} af {owner}", "Shared with you by {owner}" : "Deilt með þér af {owner}", + "Choose a password for the mail share" : "Veldu lykilorð fyrir póstsameign", "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} deildi með tengli", "group" : "hópur", "remote" : "fjartengt", "email" : "tölvupóstur", + "shared by {sharer}" : "deilt af {sharer}", "Unshare" : "Hætta deilingu", + "Can reshare" : "Getur endurdeilt", + "Can edit" : "Getur breytt", + "Can create" : "Getur búið til", + "Can change" : "Getur skipt um", + "Can delete" : "Getur eytt", + "Secure drop (upload only)" : "Örugg slepping skráa (einungis innsending)", + "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"], @@ -146,6 +167,10 @@ OC.L10N.register( "{sharee} (email)" : "{sharee} (tölvupóstur)", "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})", "Share" : "Deila", + "Name or email address..." : "Nafn eða tölvupóstfang...", + "Name or federated cloud ID..." : "Nafn eða skýjasambandsauðkenni (Federated Cloud ID)...", + "Name, federated cloud ID or email address..." : "Nafn, skýjasambandsauðkenni eða tölvupóstfang...", + "Name..." : "Nafn...", "Error removing share" : "Villa við að fjarlægja sameign", "Non-existing tag #{tag}" : "Merki sem er ekki til #{tag}", "restricted" : "takmarkaður aðgangur", @@ -242,6 +267,10 @@ OC.L10N.register( "Log in" : "Skrá inn", "Stay logged in" : "Haldast skráður inn", "Alternative Logins" : "Aðrar innskráningar", + "You are about to grant \"%s\" access to your %s account." : "Þú ert að fara að leyfa \"%s\" aðgang að %s notandaaðgangnum þínum.", + "App token" : "Teikn forrits", + "Alternative login using app token" : "Önnur innskráning með forritsteikni", + "Redirecting …" : "Endurbeini ...", "New password" : "Nýtt lykilorð", "New Password" : "Nýtt lykilorð", "Reset password" : "Endursetja lykilorð", diff --git a/core/l10n/is.json b/core/l10n/is.json index 701427fad95..9bd7e96bc46 100644 --- a/core/l10n/is.json +++ b/core/l10n/is.json @@ -12,9 +12,12 @@ "No crop data provided" : "Enginn gögn um utanskurð gefin", "No valid crop data provided" : "Enginn gild gögn um utanskurð gefin", "Crop is not square" : "Utanskurður er ekki ferningslaga", + "State token does not match" : "Stöðuteikn samsvarar ekki", "Couldn't reset password because the token is invalid" : "Gat ekki endurstillt lykilorðið vegna þess að teiknið er ógilt", "Couldn't reset password because the token is expired" : "Gat ekki endurstillt lykilorðið vegna þess að teiknið er útrunnið", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Gat ekki sent endurstillingu í tölvupósti því það er ekkert gilt tölvupóstfang fyrir þennan notanda. Hafðu samband við kerfisstjóra.", + "Password reset" : "Endurstilling lykilorðs", + "Reset your password" : "Endurstilltu lykilorðið þitt", "%s password reset" : "%s lykilorð endurstillt", "Couldn't send reset email. Please contact your administrator." : "Gat ekki sent endurstillingu í tölvupósti. Hafðu samband við kerfisstjóra.", "Couldn't send reset email. Please make sure your username is correct." : "Gat ekki sent endurstillingu í tölvupósti. Gakktu úr skugga um að notandanafn þitt sé rétt.", @@ -43,7 +46,13 @@ "%s (incompatible)" : "%s (ósamhæft)", "Following apps have been disabled: %s" : "Eftirfarandi forrit hafa verið gerð óvirk: %s", "Already up to date" : "Allt uppfært nú þegar", + "No contacts found" : "Engir tengiliðir fundust", + "Show all contacts …" : "Birta alla tengiliði ...", + "There was an error loading your contacts" : "Það kom upp villa við að hlaða inn tengiliðunum þínum", + "Loading your contacts …" : "Hleð inn tengiliðalistum ...", + "Looking for {term} …" : "Leita að {term} …", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Það komu upp vandamál með athugun á áreiðanleika kóða. Nánari upplýsingar…</a>", + "No action available" : "Engin aðgerð tiltæk", "Settings" : "Stillingar", "Connection to server lost" : "Tenging við miðlara rofnaði", "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Vandamál við að hlaða inn síðu, endurhleð eftir %n sekúndu","Vandamál við að hlaða inn síðu, endurhleð eftir %n sekúndur"], @@ -66,6 +75,7 @@ "No files in here" : "Engar skrár hér", "Choose" : "Veldu", "Error loading file picker template: {error}" : "Villa við að hlaða inn sniðmáti fyrir skráaveljara: {error}", + "OK" : "Í lagi", "Error loading message template: {error}" : "Villa við að hlaða inn sniðmáti fyrir skilaboð: {error}", "read-only" : "skrifvarið", "_{count} file conflict_::_{count} file conflicts_" : ["{count} árekstur skráa","{count} árekstrar skráa"], @@ -96,6 +106,7 @@ "The PHP Opcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For better performance we recommend ↗</a> to use following settings in the <code>php.ini</code>:" : "PHP Opcache er ekki rétt uppsett. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Fyrir betri afköst mælum við með ↗</a> því að nota eftirfarandi stillingar í <code>php.ini</code>:", "The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. We strongly recommend enabling this function." : "PHP-fallið \"set_time_limit\" er ekki tiltækt. Þetta gæti valdið því að skriftur stöðvist í miðri keyrslu og skemmi uppsetninguna þína. Við mælumst til þess að þetta fall sé gert virkt.", "Error occurred while checking server setup" : "Villa kom upp við athugun á uppsetningu þjóns", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended 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." : "Gagnamappan og skrárnar þínar eru líklega aðgengilegar öllum af internetinu vegna þess að .htaccess skrá er ekki virk. Við mælum eindregið með að þú stillir vefþjóninn þinn á þann hátt að gagnamappa er ekki lengur aðgengileg eða þú færir gagnamöppu út fyrir skjalarót vefþjóns.", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP-haus er ekki stilltur til jafns við \"{expected}\". Þetta er möguleg áhætta varðandi öryggi og gagnaleynd, við mælum með því að laga þessa stillingu.", "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>." : "\"Strict-Transport-Security\" HTTP-hausinn er ekki stilltur á að minnsa kosti \"{seconds}\" sekúndur. Fyrir aukið öryggi mælum við með því að virkja HSTS eins og lýst er í <a href=\"{docUrl}\" rel=\"noreferrer\">öryggisleiðbeiningum</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>." : " Þú ert að tengjast þessu vefsvæði með HTTP. Við mælum eindregið með að þú stillir þjóninn á að krefjast HTTPS í staðinn eins og lýst er í <a href=\"{docUrl}\">öryggisleiðbeiningunum</a> okkar.", @@ -110,6 +121,7 @@ "Expiration" : "Rennur út", "Expiration date" : "Gildir til", "Choose a password for the public link" : "Veldu þér lykilorð fyrir almenningstengil", + "Choose a password for the public link or press \"Enter ↵\"" : "Veldu þér lykilorð fyrir opinberan tengil eða ýttu á \"Enter ↵\"", "Copied!" : "Afritað!", "Copy" : "Afrita", "Not supported!" : "Óstutt!", @@ -127,11 +139,20 @@ "Send" : "Senda", "Shared with you and the group {group} by {owner}" : "Deilt með þér og hópnum {group} af {owner}", "Shared with you by {owner}" : "Deilt með þér af {owner}", + "Choose a password for the mail share" : "Veldu lykilorð fyrir póstsameign", "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} deildi með tengli", "group" : "hópur", "remote" : "fjartengt", "email" : "tölvupóstur", + "shared by {sharer}" : "deilt af {sharer}", "Unshare" : "Hætta deilingu", + "Can reshare" : "Getur endurdeilt", + "Can edit" : "Getur breytt", + "Can create" : "Getur búið til", + "Can change" : "Getur skipt um", + "Can delete" : "Getur eytt", + "Secure drop (upload only)" : "Örugg slepping skráa (einungis innsending)", + "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"], @@ -144,6 +165,10 @@ "{sharee} (email)" : "{sharee} (tölvupóstur)", "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})", "Share" : "Deila", + "Name or email address..." : "Nafn eða tölvupóstfang...", + "Name or federated cloud ID..." : "Nafn eða skýjasambandsauðkenni (Federated Cloud ID)...", + "Name, federated cloud ID or email address..." : "Nafn, skýjasambandsauðkenni eða tölvupóstfang...", + "Name..." : "Nafn...", "Error removing share" : "Villa við að fjarlægja sameign", "Non-existing tag #{tag}" : "Merki sem er ekki til #{tag}", "restricted" : "takmarkaður aðgangur", @@ -240,6 +265,10 @@ "Log in" : "Skrá inn", "Stay logged in" : "Haldast skráður inn", "Alternative Logins" : "Aðrar innskráningar", + "You are about to grant \"%s\" access to your %s account." : "Þú ert að fara að leyfa \"%s\" aðgang að %s notandaaðgangnum þínum.", + "App token" : "Teikn forrits", + "Alternative login using app token" : "Önnur innskráning með forritsteikni", + "Redirecting …" : "Endurbeini ...", "New password" : "Nýtt lykilorð", "New Password" : "Nýtt lykilorð", "Reset password" : "Endursetja lykilorð", diff --git a/core/l10n/nb.js b/core/l10n/nb.js index e20783b3f4f..16ac5e151db 100644 --- a/core/l10n/nb.js +++ b/core/l10n/nb.js @@ -14,10 +14,14 @@ OC.L10N.register( "No crop data provided" : "Ingen beskjæringsinformasjon angitt", "No valid crop data provided" : "Ingen gyldige beskjæringsdata oppgitt", "Crop is not square" : "Beskjæringen er ikke kvadratisk", + "State token does not match" : "Tilstands-symbolet samsvarer ikke", + "Auth flow can only be started unauthenticated." : "Autentiseringsflyt kan bare startes ikke-autentisert.", "Couldn't reset password because the token is invalid" : "Klarte ikke å tilbakestille passordet fordi symbolet er ugyldig.", "Couldn't reset password because the token is expired" : "Klarte ikke å tilbakestille passordet fordi symbolet er utløpt.", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Klarte ikke å sende e-post for tilbakestilling av passord fordi det ikke finnes noen e-postadresse for dette brukernavnet. Kontakt administratoren din.", "Password reset" : "Tilbakestilling av passord", + "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Klikk følgende knapp for å tilbakestille passordet ditt. Ignorer denne e-posten hvis du ikke har forespurt dette.", + "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Klikk følgende lenke for å tilbakestille passordet ditt. Ignorer denne e-posten hvis du ikke har forespurt dette.", "Reset your password" : "Tilbakestill passordet ditt", "%s password reset" : "%s tilbakestilling av passord", "Couldn't send reset email. Please contact your administrator." : "Klarte ikke å sende e-post for tilbakestilling. Kontakt administratoren.", @@ -47,7 +51,14 @@ OC.L10N.register( "%s (incompatible)" : "%s (ikke kompatibel)", "Following apps have been disabled: %s" : "Følgende programmer har blitt avskrudd: %s", "Already up to date" : "Allerede oppdatert", + "No contacts found" : "Fant ingen kontakter", + "Show all contacts …" : "Vis alle kontakter…", + "There was an error loading your contacts" : "Feil ved innlasting av kontaktene dine", + "Loading your contacts …" : "Laster inn kontaktene dine…", + "Looking for {term} …" : "Ser etter {term}…", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Det oppstod problemer med sjekk av kode-integritet. Mer informasjon…</a>", + "No action available" : "Ingen handling tilgjengelig", + "Error fetching contact actions" : "Feil ved innhenting av kontakt-handlinger", "Settings" : "Innstillinger", "Connection to server lost" : "Mistet tilkobling til tjener", "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Problem ved lasting av side, laster på nytt om %n sekund","Problem ved lasting av side, laster på nytt om %n sekunder"], @@ -91,14 +102,19 @@ OC.L10N.register( "Strong password" : "Sterkt passord", "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Vev-tjeneren din er ikke satt opp til å tillate synkronisering av filer ennå, fordi WebDAV-grensesnittet ikke ser ut til å virke.", "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Din vevtjener er ikke satt opp korrekt for å hente \"{url}\". Mer informasjon finner du i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasjon</a>.", - "This server has no working Internet connection: Multiple endpoints could not be reached. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Denne serveren har ingen fungerende internett-forbindelse. Dette betyr at noen funksjoner, som tilknytning av eksterne lagre, varslinger om oppdateringer eller installering av tredjeparts apper ikke vil virke. Fjerntilgang til filer og utsending av varsler på e-post vil kanskje ikke virke heller. Vi anbefaler å aktivere en internett-forbindelse for denne serveren hvis du vil ha full funksjonalitet.", + "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." : "Denne tjeneren har ingen fungerende internett-forbindelse. Dette betyr at noen funksjoner, som tilknytning av eksterne lagre, varslinger om oppdateringer eller installering av tredjeparts apper ikke vil virke. Fjerntilgang til filer og utsending av varsler på e-post vil kanskje ikke virke heller. Vi anbefaler å aktivere en internett-forbindelse for denne tjeneren hvis du vil ha full funksjonalitet.", "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>." : "Ingen hurtigminne har blitt satt opp. For å øke ytelsen bør du sette opp et hurtigminne hvis det er tilgjengelig. Mer informasjon finnes i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasjon</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 er ikke lesbar for PHP, noe som frarådes av sikkerhetsgrunner. Mer informasjon finnes i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasjon</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." : "Du bruker PHP versjonen {version}. Vi anbefaler deg å oppgradere PHP versjonen for å utnytte <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\"> ytelse og sikkerhetsoppdateringer som tilbys av PHP Group</a>, så fort din distribusjon støtter det.", + "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>." : "De omvendte mellomtjener-hodene er ikke satt opp rett, eller du kobler til Nextcloud fra en betrodd mellomtjener. Hvis du ikke kobler til Nextcloud fra en betrodd mellomtjener, er dette et sikkerhetsproblem, og kan tillate en angriper å forfalske deres IP-adresse slik den er synlig for Nextcloud. Ytterligere informasjon er å finne i <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasjonen</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 er satt opp som distribuert mellomlager, men feil PHP-modul \"memcache\" er installert. \\OC\\Memcache\\Memcached støtter bare \"memcached\" og ikke \"memcache\". Se <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached-wikien</a> for informasjon om begge modulene.", "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>)" : "Noen filer besto ikke gyldighetssjekken. Ytterligere informasjon om hvordan dette problemet kan løses finnes i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasjon</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Liste over ugyldige filer…</a> / <a href=\"{rescanEndpoint}\">Skann på ny…</a>)", + "The PHP Opcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For better performance we recommend ↗</a> to use following settings in the <code>php.ini</code>:" : "PHP OPcache er ikke satt opp rett. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For bedre ytelse anbefales det ↗</a> å bruke følgende innstillinger i <code>php.ini</code>:", + "The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. We strongly recommend enabling this function." : "PHP-funksjonen \"set_time_limit\" er ikke tilgjengelig. Dette kan resultere i at skript blir stoppet midt i kjøring, noe som knekker installasjonen din. Det anbefales sterkt å skru på denne funksjonen.", "Error occurred while checking server setup" : "Feil oppstod ved sjekking av tjener-oppsett", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Datamappen og filene dine er sannsynligvis tilgjengelige fra Internett. .htaccess-filen fungerer ikke. Det anbefales sterkt at du setter opp vev-tjeneren slik at datamappen ikke kan aksesseres eller at du flytter datamappen ut av vev-tjenerens dokumentrot.", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-header \"{header}\" er ikke satt opp lik \"{expected}\". Dette kan være en sikkerhetsrisiko og vi anbefaler at denne innstillingen endres.", + "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>." : "\"Strict-Transport-Security\"- (Streng transportsikkerhet) HTTP-hodet er ikke satt opp til minst \"{seconds}\" sekunder. For forbedret sikkerhet anbefales det å skru på HSTS som beskrevet i våre <a href=\"{docUrl}\" rel=\"noreferrer\">sikkerhetstips</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>." : "Du aksesserer denne nettsiden via HTTP. Vi anbefaler på det sterkeste at du konfigurerer tjeneren til å kreve HTTPS i stedet, som beskrevet i <a href=\"{docUrl}\">sikkerhetstips</a>.", "Shared" : "Delt", "Shared with {recipients}" : "Delt med {recipients}", @@ -129,6 +145,7 @@ OC.L10N.register( "Send" : "Send", "Shared with you and the group {group} by {owner}" : "Delt med deg og gruppen {group} av {owner}", "Shared with you by {owner}" : "Delt med deg av {owner}", + "Choose a password for the mail share" : "Velg et passord for e-postlageret", "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} delt via lenke", "group" : "gruppe", "remote" : "ekstern", @@ -140,6 +157,7 @@ OC.L10N.register( "Can create" : "Kan opprette", "Can change" : "Kan endre", "Can delete" : "Kan slette", + "Secure drop (upload only)" : "Sikret filkasse (bare opplasting)", "Access control" : "Tilgangskontroll", "Could not unshare" : "Kunne ikke avslutte deling", "Share details could not be loaded for this item." : "Klarte ikke å laste inn detaljer om deling for dette elementet.", @@ -153,7 +171,12 @@ OC.L10N.register( "{sharee} (email)" : "{sharee} (email)", "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})", "Share" : "Del", + "Share with other people by entering a user or group, a federated cloud ID or an email address." : "Del med andre ved å skrive inn en bruker, en gruppe, en federert sky-ID eller en e-postadresse.", + "Share with other people by entering a user or group or a federated cloud ID." : "Del med andre ved å skrive inn en bruker, en gruppe eller en federert sky-ID", + "Share with other people by entering a user or group or an email address." : "Del med andre ved å skrive inn en bruker, en gruppe, eller en e-postadresse.", "Name or email address..." : "Navn eller e-postadresse…", + "Name or federated cloud ID..." : "Navn eller federert sky-ID…", + "Name, federated cloud ID or email address..." : "Navn, federert sky-ID eller e-postadresse…", "Name..." : "Navn…", "Error removing share" : "Feil ved fjerning av deling", "Non-existing tag #{tag}" : "Ikke-eksisterende merkelapp #{tag}", @@ -183,7 +206,7 @@ OC.L10N.register( "An error occurred." : "En feil oppstod.", "Please reload the page." : "Last inn siden på nytt.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Oppdateringen var mislykket. For mer informasjon <a href=\"{url}\">se vår forum-artikkel</a> som beskriver dette problemet.", - "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Oppdateringen feilet. Vennligst rapporter dette problemet til <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud miljøet</a>.", + "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Oppdateringen feilet. Rapporter dette problemet til <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud-gemenskapen</a>.", "Continue to Nextcloud" : "Fortsett til Nextcloud", "_The update was successful. Redirecting you to Nextcloud in %n second._::_The update was successful. Redirecting you to Nextcloud in %n seconds._" : ["Oppdateringen var vellykket. Videresender deg til Nextcloud om %s sekund.","Oppdateringen var vellykket. Videresender deg til Nextcloud om %s sekunder."], "Searching other places" : "Søker andre steder", @@ -210,6 +233,7 @@ OC.L10N.register( "Message: %s" : "Melding: %s", "File: %s" : "Fil: %s", "Line: %s" : "Linje: %s", + "Trace" : "Sporing", "Security warning" : "Sikkerhetsadvarsel", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Datamappen og filene dine er sannsynligvis tilgjengelig fra Internett fordi .htaccess-filen ikke fungerer.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "For informasjon om hvordan du skal konfigurere tjeneren skikkelig, vennligst se i <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">dokumentasjonen</a>.", @@ -250,6 +274,10 @@ OC.L10N.register( "Log in" : "Logg inn", "Stay logged in" : "Forbli innlogget", "Alternative Logins" : "Alternative innlogginger", + "You are about to grant \"%s\" access to your %s account." : "Du er i ferd med å gi \"%s\" tilgang til din %s-konto.", + "App token" : "Program-symbol", + "Alternative login using app token" : "Alternativ innlogging ved bruk av program-symbol", + "Redirecting …" : "Videresender…", "New password" : "Nytt passord", "New Password" : "Nytt passord", "Reset password" : "Tilbakestill passord", diff --git a/core/l10n/nb.json b/core/l10n/nb.json index e30cb8ac120..f9e5b6616d1 100644 --- a/core/l10n/nb.json +++ b/core/l10n/nb.json @@ -12,10 +12,14 @@ "No crop data provided" : "Ingen beskjæringsinformasjon angitt", "No valid crop data provided" : "Ingen gyldige beskjæringsdata oppgitt", "Crop is not square" : "Beskjæringen er ikke kvadratisk", + "State token does not match" : "Tilstands-symbolet samsvarer ikke", + "Auth flow can only be started unauthenticated." : "Autentiseringsflyt kan bare startes ikke-autentisert.", "Couldn't reset password because the token is invalid" : "Klarte ikke å tilbakestille passordet fordi symbolet er ugyldig.", "Couldn't reset password because the token is expired" : "Klarte ikke å tilbakestille passordet fordi symbolet er utløpt.", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Klarte ikke å sende e-post for tilbakestilling av passord fordi det ikke finnes noen e-postadresse for dette brukernavnet. Kontakt administratoren din.", "Password reset" : "Tilbakestilling av passord", + "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Klikk følgende knapp for å tilbakestille passordet ditt. Ignorer denne e-posten hvis du ikke har forespurt dette.", + "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Klikk følgende lenke for å tilbakestille passordet ditt. Ignorer denne e-posten hvis du ikke har forespurt dette.", "Reset your password" : "Tilbakestill passordet ditt", "%s password reset" : "%s tilbakestilling av passord", "Couldn't send reset email. Please contact your administrator." : "Klarte ikke å sende e-post for tilbakestilling. Kontakt administratoren.", @@ -45,7 +49,14 @@ "%s (incompatible)" : "%s (ikke kompatibel)", "Following apps have been disabled: %s" : "Følgende programmer har blitt avskrudd: %s", "Already up to date" : "Allerede oppdatert", + "No contacts found" : "Fant ingen kontakter", + "Show all contacts …" : "Vis alle kontakter…", + "There was an error loading your contacts" : "Feil ved innlasting av kontaktene dine", + "Loading your contacts …" : "Laster inn kontaktene dine…", + "Looking for {term} …" : "Ser etter {term}…", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Det oppstod problemer med sjekk av kode-integritet. Mer informasjon…</a>", + "No action available" : "Ingen handling tilgjengelig", + "Error fetching contact actions" : "Feil ved innhenting av kontakt-handlinger", "Settings" : "Innstillinger", "Connection to server lost" : "Mistet tilkobling til tjener", "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Problem ved lasting av side, laster på nytt om %n sekund","Problem ved lasting av side, laster på nytt om %n sekunder"], @@ -89,14 +100,19 @@ "Strong password" : "Sterkt passord", "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Vev-tjeneren din er ikke satt opp til å tillate synkronisering av filer ennå, fordi WebDAV-grensesnittet ikke ser ut til å virke.", "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Din vevtjener er ikke satt opp korrekt for å hente \"{url}\". Mer informasjon finner du i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasjon</a>.", - "This server has no working Internet connection: Multiple endpoints could not be reached. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Denne serveren har ingen fungerende internett-forbindelse. Dette betyr at noen funksjoner, som tilknytning av eksterne lagre, varslinger om oppdateringer eller installering av tredjeparts apper ikke vil virke. Fjerntilgang til filer og utsending av varsler på e-post vil kanskje ikke virke heller. Vi anbefaler å aktivere en internett-forbindelse for denne serveren hvis du vil ha full funksjonalitet.", + "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." : "Denne tjeneren har ingen fungerende internett-forbindelse. Dette betyr at noen funksjoner, som tilknytning av eksterne lagre, varslinger om oppdateringer eller installering av tredjeparts apper ikke vil virke. Fjerntilgang til filer og utsending av varsler på e-post vil kanskje ikke virke heller. Vi anbefaler å aktivere en internett-forbindelse for denne tjeneren hvis du vil ha full funksjonalitet.", "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>." : "Ingen hurtigminne har blitt satt opp. For å øke ytelsen bør du sette opp et hurtigminne hvis det er tilgjengelig. Mer informasjon finnes i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasjon</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 er ikke lesbar for PHP, noe som frarådes av sikkerhetsgrunner. Mer informasjon finnes i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasjon</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." : "Du bruker PHP versjonen {version}. Vi anbefaler deg å oppgradere PHP versjonen for å utnytte <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\"> ytelse og sikkerhetsoppdateringer som tilbys av PHP Group</a>, så fort din distribusjon støtter det.", + "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>." : "De omvendte mellomtjener-hodene er ikke satt opp rett, eller du kobler til Nextcloud fra en betrodd mellomtjener. Hvis du ikke kobler til Nextcloud fra en betrodd mellomtjener, er dette et sikkerhetsproblem, og kan tillate en angriper å forfalske deres IP-adresse slik den er synlig for Nextcloud. Ytterligere informasjon er å finne i <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasjonen</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 er satt opp som distribuert mellomlager, men feil PHP-modul \"memcache\" er installert. \\OC\\Memcache\\Memcached støtter bare \"memcached\" og ikke \"memcache\". Se <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached-wikien</a> for informasjon om begge modulene.", "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>)" : "Noen filer besto ikke gyldighetssjekken. Ytterligere informasjon om hvordan dette problemet kan løses finnes i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasjon</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Liste over ugyldige filer…</a> / <a href=\"{rescanEndpoint}\">Skann på ny…</a>)", + "The PHP Opcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For better performance we recommend ↗</a> to use following settings in the <code>php.ini</code>:" : "PHP OPcache er ikke satt opp rett. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For bedre ytelse anbefales det ↗</a> å bruke følgende innstillinger i <code>php.ini</code>:", + "The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. We strongly recommend enabling this function." : "PHP-funksjonen \"set_time_limit\" er ikke tilgjengelig. Dette kan resultere i at skript blir stoppet midt i kjøring, noe som knekker installasjonen din. Det anbefales sterkt å skru på denne funksjonen.", "Error occurred while checking server setup" : "Feil oppstod ved sjekking av tjener-oppsett", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Datamappen og filene dine er sannsynligvis tilgjengelige fra Internett. .htaccess-filen fungerer ikke. Det anbefales sterkt at du setter opp vev-tjeneren slik at datamappen ikke kan aksesseres eller at du flytter datamappen ut av vev-tjenerens dokumentrot.", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-header \"{header}\" er ikke satt opp lik \"{expected}\". Dette kan være en sikkerhetsrisiko og vi anbefaler at denne innstillingen endres.", + "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>." : "\"Strict-Transport-Security\"- (Streng transportsikkerhet) HTTP-hodet er ikke satt opp til minst \"{seconds}\" sekunder. For forbedret sikkerhet anbefales det å skru på HSTS som beskrevet i våre <a href=\"{docUrl}\" rel=\"noreferrer\">sikkerhetstips</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>." : "Du aksesserer denne nettsiden via HTTP. Vi anbefaler på det sterkeste at du konfigurerer tjeneren til å kreve HTTPS i stedet, som beskrevet i <a href=\"{docUrl}\">sikkerhetstips</a>.", "Shared" : "Delt", "Shared with {recipients}" : "Delt med {recipients}", @@ -127,6 +143,7 @@ "Send" : "Send", "Shared with you and the group {group} by {owner}" : "Delt med deg og gruppen {group} av {owner}", "Shared with you by {owner}" : "Delt med deg av {owner}", + "Choose a password for the mail share" : "Velg et passord for e-postlageret", "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} delt via lenke", "group" : "gruppe", "remote" : "ekstern", @@ -138,6 +155,7 @@ "Can create" : "Kan opprette", "Can change" : "Kan endre", "Can delete" : "Kan slette", + "Secure drop (upload only)" : "Sikret filkasse (bare opplasting)", "Access control" : "Tilgangskontroll", "Could not unshare" : "Kunne ikke avslutte deling", "Share details could not be loaded for this item." : "Klarte ikke å laste inn detaljer om deling for dette elementet.", @@ -151,7 +169,12 @@ "{sharee} (email)" : "{sharee} (email)", "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})", "Share" : "Del", + "Share with other people by entering a user or group, a federated cloud ID or an email address." : "Del med andre ved å skrive inn en bruker, en gruppe, en federert sky-ID eller en e-postadresse.", + "Share with other people by entering a user or group or a federated cloud ID." : "Del med andre ved å skrive inn en bruker, en gruppe eller en federert sky-ID", + "Share with other people by entering a user or group or an email address." : "Del med andre ved å skrive inn en bruker, en gruppe, eller en e-postadresse.", "Name or email address..." : "Navn eller e-postadresse…", + "Name or federated cloud ID..." : "Navn eller federert sky-ID…", + "Name, federated cloud ID or email address..." : "Navn, federert sky-ID eller e-postadresse…", "Name..." : "Navn…", "Error removing share" : "Feil ved fjerning av deling", "Non-existing tag #{tag}" : "Ikke-eksisterende merkelapp #{tag}", @@ -181,7 +204,7 @@ "An error occurred." : "En feil oppstod.", "Please reload the page." : "Last inn siden på nytt.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Oppdateringen var mislykket. For mer informasjon <a href=\"{url}\">se vår forum-artikkel</a> som beskriver dette problemet.", - "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Oppdateringen feilet. Vennligst rapporter dette problemet til <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud miljøet</a>.", + "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Oppdateringen feilet. Rapporter dette problemet til <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud-gemenskapen</a>.", "Continue to Nextcloud" : "Fortsett til Nextcloud", "_The update was successful. Redirecting you to Nextcloud in %n second._::_The update was successful. Redirecting you to Nextcloud in %n seconds._" : ["Oppdateringen var vellykket. Videresender deg til Nextcloud om %s sekund.","Oppdateringen var vellykket. Videresender deg til Nextcloud om %s sekunder."], "Searching other places" : "Søker andre steder", @@ -208,6 +231,7 @@ "Message: %s" : "Melding: %s", "File: %s" : "Fil: %s", "Line: %s" : "Linje: %s", + "Trace" : "Sporing", "Security warning" : "Sikkerhetsadvarsel", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Datamappen og filene dine er sannsynligvis tilgjengelig fra Internett fordi .htaccess-filen ikke fungerer.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "For informasjon om hvordan du skal konfigurere tjeneren skikkelig, vennligst se i <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">dokumentasjonen</a>.", @@ -248,6 +272,10 @@ "Log in" : "Logg inn", "Stay logged in" : "Forbli innlogget", "Alternative Logins" : "Alternative innlogginger", + "You are about to grant \"%s\" access to your %s account." : "Du er i ferd med å gi \"%s\" tilgang til din %s-konto.", + "App token" : "Program-symbol", + "Alternative login using app token" : "Alternativ innlogging ved bruk av program-symbol", + "Redirecting …" : "Videresender…", "New password" : "Nytt passord", "New Password" : "Nytt passord", "Reset password" : "Tilbakestill passord", diff --git a/core/l10n/nl.js b/core/l10n/nl.js index 3838ff4c7d5..f093534af74 100644 --- a/core/l10n/nl.js +++ b/core/l10n/nl.js @@ -14,6 +14,8 @@ OC.L10N.register( "No crop data provided" : "Geen bijsnijdingsgegevens opgegeven", "No valid crop data provided" : "Geen geldige bijsnijdingsgegevens opgegeven", "Crop is not square" : "Bijsnijden is niet vierkant", + "State token does not match" : "Token staat komt niet overeen", + "Auth flow can only be started unauthenticated." : "Auth flow kan alleen niet geautoriseerd gestart worden.", "Couldn't reset password because the token is invalid" : "Kon het wachtwoord niet herstellen, omdat het token ongeldig is", "Couldn't reset password because the token is expired" : "Kon het wachtwoord niet herstellen, omdat het token verlopen is", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Kon geen herstel e-mail versturen, omdat er geen e-mailadres bekend is bij deze gebruikersnaam. Neem contact op met je beheerder.", @@ -49,7 +51,14 @@ OC.L10N.register( "%s (incompatible)" : "%s (incompatibel)", "Following apps have been disabled: %s" : "De volgende apps zijn uitgeschakeld: %s", "Already up to date" : "Al bijgewerkt", + "No contacts found" : "Geen contacten gevonden", + "Show all contacts …" : "Alle contacten weergeven", + "There was an error loading your contacts" : "Er was een probleem bij het laden van je contacten", + "Loading your contacts …" : "Je contacten wordt geladen ...", + "Looking for {term} …" : "Kijken voor {term} …", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Er traden problemen op tijdens de code betrouwbaarheidscontrole. Meer informatie…</a>", + "No action available" : "Geen actie beschikbaar", + "Error fetching contact actions" : "Fout bij ophalen contact acties", "Settings" : "Instellingen", "Connection to server lost" : "Verbinding met server verbroken", "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Probleem met laden pagina, herladen over %n seconde","Probleem met laden pagina, herladen over %n seconden"], @@ -162,6 +171,13 @@ OC.L10N.register( "{sharee} (email)" : "{sharee} (e-mail)", "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})", "Share" : "Delen", + "Share with other people by entering a user or group, a federated cloud ID or an email address." : "Deel met anderen door het invullen van een gebruiker, groep, gefedereerd cloud ID of een e-mail adres.", + "Share with other people by entering a user or group or a federated cloud ID." : "Deel met anderen door middel van gebruikers, groep of een gefedereerd cloud ID.", + "Share with other people by entering a user or group or an email address." : "Deel met anderen door het invullen van een gebruiker, groep of een e-mailadres.", + "Name or email address..." : "Naam of e-mailadres", + "Name or federated cloud ID..." : "Naam of gefedereerd Cloud ID:", + "Name, federated cloud ID or email address..." : "Naam, gefedereed cloud ID of een e-mailadres", + "Name..." : "Naam...", "Error removing share" : "Fout bij verwijderen gedeelde", "Non-existing tag #{tag}" : "Niet bestaande markering #{tag}", "restricted" : "beperkt", @@ -258,6 +274,10 @@ OC.L10N.register( "Log in" : "Meld u aan", "Stay logged in" : "Ingelogd blijven", "Alternative Logins" : "Alternatieve inlogs", + "You are about to grant \"%s\" access to your %s account." : "Je staat op het punt om \"%s\" toegang te verlenen to je %s account.", + "App token" : "App token", + "Alternative login using app token" : "Alternatieve login doormiddel van app token", + "Redirecting …" : "Omleiding ...", "New password" : "Nieuw wachtwoord", "New Password" : "Nieuw wachtwoord", "Reset password" : "Reset wachtwoord", diff --git a/core/l10n/nl.json b/core/l10n/nl.json index 9f7efe029fd..e206946327b 100644 --- a/core/l10n/nl.json +++ b/core/l10n/nl.json @@ -12,6 +12,8 @@ "No crop data provided" : "Geen bijsnijdingsgegevens opgegeven", "No valid crop data provided" : "Geen geldige bijsnijdingsgegevens opgegeven", "Crop is not square" : "Bijsnijden is niet vierkant", + "State token does not match" : "Token staat komt niet overeen", + "Auth flow can only be started unauthenticated." : "Auth flow kan alleen niet geautoriseerd gestart worden.", "Couldn't reset password because the token is invalid" : "Kon het wachtwoord niet herstellen, omdat het token ongeldig is", "Couldn't reset password because the token is expired" : "Kon het wachtwoord niet herstellen, omdat het token verlopen is", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Kon geen herstel e-mail versturen, omdat er geen e-mailadres bekend is bij deze gebruikersnaam. Neem contact op met je beheerder.", @@ -47,7 +49,14 @@ "%s (incompatible)" : "%s (incompatibel)", "Following apps have been disabled: %s" : "De volgende apps zijn uitgeschakeld: %s", "Already up to date" : "Al bijgewerkt", + "No contacts found" : "Geen contacten gevonden", + "Show all contacts …" : "Alle contacten weergeven", + "There was an error loading your contacts" : "Er was een probleem bij het laden van je contacten", + "Loading your contacts …" : "Je contacten wordt geladen ...", + "Looking for {term} …" : "Kijken voor {term} …", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Er traden problemen op tijdens de code betrouwbaarheidscontrole. Meer informatie…</a>", + "No action available" : "Geen actie beschikbaar", + "Error fetching contact actions" : "Fout bij ophalen contact acties", "Settings" : "Instellingen", "Connection to server lost" : "Verbinding met server verbroken", "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Probleem met laden pagina, herladen over %n seconde","Probleem met laden pagina, herladen over %n seconden"], @@ -160,6 +169,13 @@ "{sharee} (email)" : "{sharee} (e-mail)", "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})", "Share" : "Delen", + "Share with other people by entering a user or group, a federated cloud ID or an email address." : "Deel met anderen door het invullen van een gebruiker, groep, gefedereerd cloud ID of een e-mail adres.", + "Share with other people by entering a user or group or a federated cloud ID." : "Deel met anderen door middel van gebruikers, groep of een gefedereerd cloud ID.", + "Share with other people by entering a user or group or an email address." : "Deel met anderen door het invullen van een gebruiker, groep of een e-mailadres.", + "Name or email address..." : "Naam of e-mailadres", + "Name or federated cloud ID..." : "Naam of gefedereerd Cloud ID:", + "Name, federated cloud ID or email address..." : "Naam, gefedereed cloud ID of een e-mailadres", + "Name..." : "Naam...", "Error removing share" : "Fout bij verwijderen gedeelde", "Non-existing tag #{tag}" : "Niet bestaande markering #{tag}", "restricted" : "beperkt", @@ -256,6 +272,10 @@ "Log in" : "Meld u aan", "Stay logged in" : "Ingelogd blijven", "Alternative Logins" : "Alternatieve inlogs", + "You are about to grant \"%s\" access to your %s account." : "Je staat op het punt om \"%s\" toegang te verlenen to je %s account.", + "App token" : "App token", + "Alternative login using app token" : "Alternatieve login doormiddel van app token", + "Redirecting …" : "Omleiding ...", "New password" : "Nieuw wachtwoord", "New Password" : "Nieuw wachtwoord", "Reset password" : "Reset wachtwoord", diff --git a/core/l10n/pl.js b/core/l10n/pl.js index ff414663d13..14e1af9a33b 100644 --- a/core/l10n/pl.js +++ b/core/l10n/pl.js @@ -14,6 +14,8 @@ OC.L10N.register( "No crop data provided" : "Brak danych do przycięcia", "No valid crop data provided" : "Brak danych do przycięcia", "Crop is not square" : "Przycięcie nie jest prostokątem", + "State token does not match" : "Token stanu nie pasuje", + "Auth flow can only be started unauthenticated." : "Autoryzacja przepływu może być rozpoczęta tylko niezautoryzowana", "Couldn't reset password because the token is invalid" : "Nie można zresetować hasła, ponieważ token jest niepoprawny", "Couldn't reset password because the token is expired" : "Nie można zresetować hasła, ponieważ token wygasł", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Nie udało się wysłać ponownego e-maila, ponieważ nie ma adresu e-mail do tego użytkownika. Proszę skontaktować się z administratorem.", @@ -49,7 +51,14 @@ OC.L10N.register( "%s (incompatible)" : "%s (niekompatybilne)", "Following apps have been disabled: %s" : "Poniższe aplikacje zostały wyłączone: %s", "Already up to date" : "Już zaktualizowano", + "No contacts found" : "Nie znaleziono żadnych kontaktów", + "Show all contacts …" : "Pokazuję wszystkie kontakty...", + "There was an error loading your contacts" : "Wystąpił błąd podczas ładowania twoich kontaktów", + "Loading your contacts …" : "Ładuję twoje kontakty...", + "Looking for {term} …" : "Szukam {term}...", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Wystąpiły problemy przy sprawdzaniu integralności kodu Więcej informacji…</a>", + "No action available" : "Żadna akcja nie jest dostępna", + "Error fetching contact actions" : "Błąd podczas pobierania akcji dla kontaktu", "Settings" : "Ustawienia", "Connection to server lost" : "Utracone połączenie z serwerem", "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Problem z załadowaniem strony, przeładowanie za %n sekundę","Problem z załadowaniem strony, przeładowanie za %n sekund","Problem z załadowaniem strony, przeładowanie za %n sekund"], @@ -103,6 +112,7 @@ OC.L10N.register( "The PHP Opcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For better performance we recommend ↗</a> to use following settings in the <code>php.ini</code>:" : "PHP Opcache nie jest prawidłowo skonfigurowany <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dla lepszej wydajności zalecamy ↗</a> użycie następujących ustawień w <code>php.ini</code>:", "The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. We strongly recommend enabling this function." : "Funkcja PHP \"set_time_limit\" nie jest dostępna. Może to powodować zatrzymanie skryptów w podczas działania i w efekcie przerwanie instalacji. Silnie rekomendujemy włączenie tej funkcji.", "Error occurred while checking server setup" : "Pojawił się błąd podczas sprawdzania ustawień serwera", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended 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." : "Twój katalog z danymi i twoje pliki prawdopodobnie są dostępne przez Internet. Plik .htaccess nie działa. Usilnie zalecamy, żebyś tak skonfigurował swój serwer, żeby katalog z danymi nie był dalej dostępny lub przenieś swój katalog z danymi poza katalog root serwera webowego.", "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." : "Nagłówek HTTP {header} nie jest skonfigurowany, aby pasował do {expected}. Jest to poterncjalne zagrożenie prywatności oraz bezpieczeństwa i zalecamy poprawienie tego ustawienia.", "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>." : "Nagłówek HTTP \"Strict-Transport-Security\" nie jest ustawiony na przynajmniej \"{seconds}\" sekund. Dla zwiększenia bezpieczeństwa zalecamy ustawienie HSTS tak jak opisaliśmy to w naszych <a href=\"{docUrl}\" rel=\"noreferrer\">wskazówkach dot. bezpieczeństwa</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>." : "Dostęp do tej strony jest za pośrednictwem protokołu HTTP. Zalecamy skonfigurowanie dostępu do serwera za pomocą protokołu HTTPS zamiast HTTP, jak to opisano w naszych <a href=\"{docUrl}\">wskazówkach bezpieczeństwa</a>.", @@ -161,6 +171,13 @@ OC.L10N.register( "{sharee} (email)" : "{sharee} (e-mail)", "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})", "Share" : "Udostępnij", + "Share with other people by entering a user or group, a federated cloud ID or an email address." : "Współdziel z innymi osobami przez wpisanie użytkownika lub grupy, ID chmury stowarzyszonej lub adres e-mail.", + "Share with other people by entering a user or group or a federated cloud ID." : "Współdziel z innymi osobami przez wpisanie użytkownika lub grupy lub ID chmury stowarzyszonej.", + "Share with other people by entering a user or group or an email address." : "Współdziel z innymi osobami przez wpisanie użytkownika lub grupy lub adresu e-mail.", + "Name or email address..." : "Nazwa lub adres e-mail...", + "Name or federated cloud ID..." : "Nazwa lub ID chmury stowarzyszonej...", + "Name, federated cloud ID or email address..." : "Nazwa, ID chmury stowarzyszonej lub adres e-mail...", + "Name..." : "Nazwa...", "Error removing share" : "Błąd podczas usuwania współdzielenia", "Non-existing tag #{tag}" : "Znacznik #{tag} nie istnieje", "restricted" : "ograniczone", @@ -257,6 +274,10 @@ OC.L10N.register( "Log in" : "Zaloguj", "Stay logged in" : "Pozostań zalogowany", "Alternative Logins" : "Alternatywne loginy", + "You are about to grant \"%s\" access to your %s account." : "Masz zamiar przyznać \"%s\" dostep do twojego %s konta.", + "App token" : "Token aplikacji", + "Alternative login using app token" : "Zaloguj alternatywnie używając tokenu aplikacji", + "Redirecting …" : "Przekierowuję...", "New password" : "Nowe hasło", "New Password" : "Nowe hasło", "Reset password" : "Zresetuj hasło", diff --git a/core/l10n/pl.json b/core/l10n/pl.json index 997d6b024a8..95589c8997b 100644 --- a/core/l10n/pl.json +++ b/core/l10n/pl.json @@ -12,6 +12,8 @@ "No crop data provided" : "Brak danych do przycięcia", "No valid crop data provided" : "Brak danych do przycięcia", "Crop is not square" : "Przycięcie nie jest prostokątem", + "State token does not match" : "Token stanu nie pasuje", + "Auth flow can only be started unauthenticated." : "Autoryzacja przepływu może być rozpoczęta tylko niezautoryzowana", "Couldn't reset password because the token is invalid" : "Nie można zresetować hasła, ponieważ token jest niepoprawny", "Couldn't reset password because the token is expired" : "Nie można zresetować hasła, ponieważ token wygasł", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Nie udało się wysłać ponownego e-maila, ponieważ nie ma adresu e-mail do tego użytkownika. Proszę skontaktować się z administratorem.", @@ -47,7 +49,14 @@ "%s (incompatible)" : "%s (niekompatybilne)", "Following apps have been disabled: %s" : "Poniższe aplikacje zostały wyłączone: %s", "Already up to date" : "Już zaktualizowano", + "No contacts found" : "Nie znaleziono żadnych kontaktów", + "Show all contacts …" : "Pokazuję wszystkie kontakty...", + "There was an error loading your contacts" : "Wystąpił błąd podczas ładowania twoich kontaktów", + "Loading your contacts …" : "Ładuję twoje kontakty...", + "Looking for {term} …" : "Szukam {term}...", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Wystąpiły problemy przy sprawdzaniu integralności kodu Więcej informacji…</a>", + "No action available" : "Żadna akcja nie jest dostępna", + "Error fetching contact actions" : "Błąd podczas pobierania akcji dla kontaktu", "Settings" : "Ustawienia", "Connection to server lost" : "Utracone połączenie z serwerem", "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Problem z załadowaniem strony, przeładowanie za %n sekundę","Problem z załadowaniem strony, przeładowanie za %n sekund","Problem z załadowaniem strony, przeładowanie za %n sekund"], @@ -101,6 +110,7 @@ "The PHP Opcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For better performance we recommend ↗</a> to use following settings in the <code>php.ini</code>:" : "PHP Opcache nie jest prawidłowo skonfigurowany <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dla lepszej wydajności zalecamy ↗</a> użycie następujących ustawień w <code>php.ini</code>:", "The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. We strongly recommend enabling this function." : "Funkcja PHP \"set_time_limit\" nie jest dostępna. Może to powodować zatrzymanie skryptów w podczas działania i w efekcie przerwanie instalacji. Silnie rekomendujemy włączenie tej funkcji.", "Error occurred while checking server setup" : "Pojawił się błąd podczas sprawdzania ustawień serwera", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended 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." : "Twój katalog z danymi i twoje pliki prawdopodobnie są dostępne przez Internet. Plik .htaccess nie działa. Usilnie zalecamy, żebyś tak skonfigurował swój serwer, żeby katalog z danymi nie był dalej dostępny lub przenieś swój katalog z danymi poza katalog root serwera webowego.", "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." : "Nagłówek HTTP {header} nie jest skonfigurowany, aby pasował do {expected}. Jest to poterncjalne zagrożenie prywatności oraz bezpieczeństwa i zalecamy poprawienie tego ustawienia.", "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>." : "Nagłówek HTTP \"Strict-Transport-Security\" nie jest ustawiony na przynajmniej \"{seconds}\" sekund. Dla zwiększenia bezpieczeństwa zalecamy ustawienie HSTS tak jak opisaliśmy to w naszych <a href=\"{docUrl}\" rel=\"noreferrer\">wskazówkach dot. bezpieczeństwa</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>." : "Dostęp do tej strony jest za pośrednictwem protokołu HTTP. Zalecamy skonfigurowanie dostępu do serwera za pomocą protokołu HTTPS zamiast HTTP, jak to opisano w naszych <a href=\"{docUrl}\">wskazówkach bezpieczeństwa</a>.", @@ -159,6 +169,13 @@ "{sharee} (email)" : "{sharee} (e-mail)", "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})", "Share" : "Udostępnij", + "Share with other people by entering a user or group, a federated cloud ID or an email address." : "Współdziel z innymi osobami przez wpisanie użytkownika lub grupy, ID chmury stowarzyszonej lub adres e-mail.", + "Share with other people by entering a user or group or a federated cloud ID." : "Współdziel z innymi osobami przez wpisanie użytkownika lub grupy lub ID chmury stowarzyszonej.", + "Share with other people by entering a user or group or an email address." : "Współdziel z innymi osobami przez wpisanie użytkownika lub grupy lub adresu e-mail.", + "Name or email address..." : "Nazwa lub adres e-mail...", + "Name or federated cloud ID..." : "Nazwa lub ID chmury stowarzyszonej...", + "Name, federated cloud ID or email address..." : "Nazwa, ID chmury stowarzyszonej lub adres e-mail...", + "Name..." : "Nazwa...", "Error removing share" : "Błąd podczas usuwania współdzielenia", "Non-existing tag #{tag}" : "Znacznik #{tag} nie istnieje", "restricted" : "ograniczone", @@ -255,6 +272,10 @@ "Log in" : "Zaloguj", "Stay logged in" : "Pozostań zalogowany", "Alternative Logins" : "Alternatywne loginy", + "You are about to grant \"%s\" access to your %s account." : "Masz zamiar przyznać \"%s\" dostep do twojego %s konta.", + "App token" : "Token aplikacji", + "Alternative login using app token" : "Zaloguj alternatywnie używając tokenu aplikacji", + "Redirecting …" : "Przekierowuję...", "New password" : "Nowe hasło", "New Password" : "Nowe hasło", "Reset password" : "Zresetuj hasło", diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js index 35060344623..dc6e0f5bd27 100644 --- a/core/l10n/pt_BR.js +++ b/core/l10n/pt_BR.js @@ -14,6 +14,8 @@ OC.L10N.register( "No crop data provided" : "Nenhum dado recortado fornecido", "No valid crop data provided" : "Nenhum dado recortado válido", "Crop is not square" : "Recorte não é quadrado", + "State token does not match" : "O estado do token não coincide", + "Auth flow can only be started unauthenticated." : "O fluxo de autenticação só pode ser iniciado como não autenticado.", "Couldn't reset password because the token is invalid" : "Não foi possível redefinir a senha porque o token é inválido", "Couldn't reset password because the token is expired" : "Não foi possível redefinir a senha porque o token expirou", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Não foi possível enviar email de redefinição porque não há nenhum endereço de email para este nome de usuário. Entre em contato com o administrador.", @@ -49,7 +51,14 @@ OC.L10N.register( "%s (incompatible)" : "%s (incompatível)", "Following apps have been disabled: %s" : "Os seguintes aplicativos foram desabilitados: %s", "Already up to date" : "Já está atualizado", + "No contacts found" : "Nenhum contato encontrado", + "Show all contacts …" : "Mostrar todos os contatos...", + "There was an error loading your contacts" : "Houve um erro carregando seus contatos", + "Loading your contacts …" : "Carregando seus contatos...", + "Looking for {term} …" : "Procurando por {term}…", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Houve problemas com a verificação de integridade do código. Mais informações…</a>", + "No action available" : "Nenhuma ação disponível", + "Error fetching contact actions" : "Erro ao obter as ações de contato", "Settings" : "Configurações", "Connection to server lost" : "Conexão perdida com o servidor", "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Problema no carregamento da página, recarregando em %n segundo","Problema no carregamento da página, recarregando em %n segundos"], @@ -265,6 +274,10 @@ OC.L10N.register( "Log in" : "Entrar", "Stay logged in" : "Permaneça logado", "Alternative Logins" : "Logins alternativos", + "You are about to grant \"%s\" access to your %s account." : "Você está prestes a conceder acesso a \"%s\" para sua conta %s.", + "App token" : "Token do aplicativo", + "Alternative login using app token" : "Login alternativo usando o token do aplicativo", + "Redirecting …" : "Redirecionando...", "New password" : "Nova senha", "New Password" : "Nova senha", "Reset password" : "Redefinir senha", @@ -319,7 +332,7 @@ OC.L10N.register( "The update was successful. Redirecting you to Nextcloud now." : "A atualização terminou com sucesso. Redirecionando para Nextcloud agora.", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Olá,\n\napenas para avisar que %s compartilhou %s com você.\nVeja isto: %s\n\n", "The share will expire on %s." : "O compartilhamento irá expirar em %s.", - "Cheers!" : "Saúde!", + "Cheers!" : "Saudações!", "Use the following link to reset your password: {link}" : "Use o seguinte link para redefinir sua senha: {link}", "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>" : "Olá,<br><br>só para avisar que %s compartilhou <strong>%s</strong> com você. <br><a href=\"%s\">Visualize-o!</a><br><br>" }, diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json index 65ae989441f..3e12d124d0f 100644 --- a/core/l10n/pt_BR.json +++ b/core/l10n/pt_BR.json @@ -12,6 +12,8 @@ "No crop data provided" : "Nenhum dado recortado fornecido", "No valid crop data provided" : "Nenhum dado recortado válido", "Crop is not square" : "Recorte não é quadrado", + "State token does not match" : "O estado do token não coincide", + "Auth flow can only be started unauthenticated." : "O fluxo de autenticação só pode ser iniciado como não autenticado.", "Couldn't reset password because the token is invalid" : "Não foi possível redefinir a senha porque o token é inválido", "Couldn't reset password because the token is expired" : "Não foi possível redefinir a senha porque o token expirou", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Não foi possível enviar email de redefinição porque não há nenhum endereço de email para este nome de usuário. Entre em contato com o administrador.", @@ -47,7 +49,14 @@ "%s (incompatible)" : "%s (incompatível)", "Following apps have been disabled: %s" : "Os seguintes aplicativos foram desabilitados: %s", "Already up to date" : "Já está atualizado", + "No contacts found" : "Nenhum contato encontrado", + "Show all contacts …" : "Mostrar todos os contatos...", + "There was an error loading your contacts" : "Houve um erro carregando seus contatos", + "Loading your contacts …" : "Carregando seus contatos...", + "Looking for {term} …" : "Procurando por {term}…", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Houve problemas com a verificação de integridade do código. Mais informações…</a>", + "No action available" : "Nenhuma ação disponível", + "Error fetching contact actions" : "Erro ao obter as ações de contato", "Settings" : "Configurações", "Connection to server lost" : "Conexão perdida com o servidor", "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Problema no carregamento da página, recarregando em %n segundo","Problema no carregamento da página, recarregando em %n segundos"], @@ -263,6 +272,10 @@ "Log in" : "Entrar", "Stay logged in" : "Permaneça logado", "Alternative Logins" : "Logins alternativos", + "You are about to grant \"%s\" access to your %s account." : "Você está prestes a conceder acesso a \"%s\" para sua conta %s.", + "App token" : "Token do aplicativo", + "Alternative login using app token" : "Login alternativo usando o token do aplicativo", + "Redirecting …" : "Redirecionando...", "New password" : "Nova senha", "New Password" : "Nova senha", "Reset password" : "Redefinir senha", @@ -317,7 +330,7 @@ "The update was successful. Redirecting you to Nextcloud now." : "A atualização terminou com sucesso. Redirecionando para Nextcloud agora.", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Olá,\n\napenas para avisar que %s compartilhou %s com você.\nVeja isto: %s\n\n", "The share will expire on %s." : "O compartilhamento irá expirar em %s.", - "Cheers!" : "Saúde!", + "Cheers!" : "Saudações!", "Use the following link to reset your password: {link}" : "Use o seguinte link para redefinir sua senha: {link}", "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>" : "Olá,<br><br>só para avisar que %s compartilhou <strong>%s</strong> com você. <br><a href=\"%s\">Visualize-o!</a><br><br>" },"pluralForm" :"nplurals=2; plural=(n > 1);" diff --git a/core/l10n/ru.js b/core/l10n/ru.js index 0e93185dcb3..eb26ec997ec 100644 --- a/core/l10n/ru.js +++ b/core/l10n/ru.js @@ -14,8 +14,10 @@ OC.L10N.register( "No crop data provided" : "Не указана информация о кадрировании", "No valid crop data provided" : "Не указаны корректные данные о кадрировании", "Crop is not square" : "Кадр не является квадратом", - "Couldn't reset password because the token is invalid" : "Не удалось сбросить пароль из-за неверного токена", - "Couldn't reset password because the token is expired" : "Не удалось сбросить пароль, так как срок действия токена истек.", + "State token does not match" : "Токен состояния не соответствует", + "Auth flow can only be started unauthenticated." : "Процесс аутентификации может быть запущен только неаутентифицированным.", + "Couldn't reset password because the token is invalid" : "Не удалось сбросить пароль, неверный токен", + "Couldn't reset password because the token is expired" : "Не удалось сбросить пароль, срок действия токена истёк", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Не удалось отправить письмо сброса так как у данного пользователя не задан адрес электронной почты. Пожалуйста, обратитесь к администратору.", "Password reset" : "Сброс пароля", "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Для сброса пароля нажмите на кнопку. Если вы не запрашивали сброс пароля, просто проигнорируйе это письмо.", @@ -49,6 +51,11 @@ OC.L10N.register( "%s (incompatible)" : "%s (несовместимое)", "Following apps have been disabled: %s" : "Были отключены следующие приложения: %s", "Already up to date" : "Не нуждается в обновлении", + "No contacts found" : "Контактов не найдено", + "Show all contacts …" : "Показать все контакты…", + "There was an error loading your contacts" : "При загрузке контактов произошла ошибка", + "Loading your contacts …" : "Загрузка контактов…", + "Looking for {term} …" : "Поиск {term}…", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\"> Были обнаружены проблемы с проверкой целостности кода. Подробнее ...", "Settings" : "Настройки", "Connection to server lost" : "Подключение к серверу потеряно", @@ -265,6 +272,10 @@ OC.L10N.register( "Log in" : "Войти", "Stay logged in" : "Оставаться в системе", "Alternative Logins" : "Альтернативные имена пользователя", + "You are about to grant \"%s\" access to your %s account." : "Вы собираетесь предоставить «%s» доступ к вашему аккаунту «%s».", + "App token" : "Токен приложения", + "Alternative login using app token" : "Альтернативный вход с токеном приложения", + "Redirecting …" : "Перенаправление…", "New password" : "Новый пароль", "New Password" : "Новый пароль", "Reset password" : "Сбросить пароль", diff --git a/core/l10n/ru.json b/core/l10n/ru.json index 5ab0037a7f0..774f4477ab3 100644 --- a/core/l10n/ru.json +++ b/core/l10n/ru.json @@ -12,8 +12,10 @@ "No crop data provided" : "Не указана информация о кадрировании", "No valid crop data provided" : "Не указаны корректные данные о кадрировании", "Crop is not square" : "Кадр не является квадратом", - "Couldn't reset password because the token is invalid" : "Не удалось сбросить пароль из-за неверного токена", - "Couldn't reset password because the token is expired" : "Не удалось сбросить пароль, так как срок действия токена истек.", + "State token does not match" : "Токен состояния не соответствует", + "Auth flow can only be started unauthenticated." : "Процесс аутентификации может быть запущен только неаутентифицированным.", + "Couldn't reset password because the token is invalid" : "Не удалось сбросить пароль, неверный токен", + "Couldn't reset password because the token is expired" : "Не удалось сбросить пароль, срок действия токена истёк", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Не удалось отправить письмо сброса так как у данного пользователя не задан адрес электронной почты. Пожалуйста, обратитесь к администратору.", "Password reset" : "Сброс пароля", "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Для сброса пароля нажмите на кнопку. Если вы не запрашивали сброс пароля, просто проигнорируйе это письмо.", @@ -47,6 +49,11 @@ "%s (incompatible)" : "%s (несовместимое)", "Following apps have been disabled: %s" : "Были отключены следующие приложения: %s", "Already up to date" : "Не нуждается в обновлении", + "No contacts found" : "Контактов не найдено", + "Show all contacts …" : "Показать все контакты…", + "There was an error loading your contacts" : "При загрузке контактов произошла ошибка", + "Loading your contacts …" : "Загрузка контактов…", + "Looking for {term} …" : "Поиск {term}…", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\"> Были обнаружены проблемы с проверкой целостности кода. Подробнее ...", "Settings" : "Настройки", "Connection to server lost" : "Подключение к серверу потеряно", @@ -263,6 +270,10 @@ "Log in" : "Войти", "Stay logged in" : "Оставаться в системе", "Alternative Logins" : "Альтернативные имена пользователя", + "You are about to grant \"%s\" access to your %s account." : "Вы собираетесь предоставить «%s» доступ к вашему аккаунту «%s».", + "App token" : "Токен приложения", + "Alternative login using app token" : "Альтернативный вход с токеном приложения", + "Redirecting …" : "Перенаправление…", "New password" : "Новый пароль", "New Password" : "Новый пароль", "Reset password" : "Сбросить пароль", diff --git a/core/l10n/sv.js b/core/l10n/sv.js index b5f8f8bfcc7..27364ee10f5 100644 --- a/core/l10n/sv.js +++ b/core/l10n/sv.js @@ -48,7 +48,14 @@ OC.L10N.register( "%s (incompatible)" : "%s (incompatible)", "Following apps have been disabled: %s" : "Följande appar har inaktiverats: %s", "Already up to date" : "Redan uppdaterad", + "No contacts found" : "Inga kontakter hittades", + "Show all contacts …" : "Visa alla kontakter ...", + "There was an error loading your contacts" : "Det uppstod ett fel vid hämtning av dina kontakter", + "Loading your contacts …" : "Laddar dina kontakter ...", + "Looking for {term} …" : "Letar efter {term} …", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\"> Ett problem uppstod under integritetskontrollen av koden. Mer information ... </a>", + "No action available" : "Ingen åtgärd tillgänglig", + "Error fetching contact actions" : "Fel vid hämtning av kontakthändelser", "Settings" : "Inställningar", "Connection to server lost" : "Anslutning till server förlorad", "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Problem med att ladda sidan, laddar om sidan om %n sekund","Problem med att ladda sidan, laddar om sidan om %n sekunder"], @@ -157,6 +164,10 @@ OC.L10N.register( "{sharee} (email)" : "{sharee} (e-post)", "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})", "Share" : "Dela", + "Name or email address..." : "Namn eller e-postadress", + "Name or federated cloud ID..." : "Namn eller federerat cloud-ID", + "Name, federated cloud ID or email address..." : "Namn, federerat cloud-ID eller e-postadress...", + "Name..." : "Namn...", "Error removing share" : "Fel uppstod när delning försökte tas bort", "Non-existing tag #{tag}" : "Icke-existerande tag #{tag}", "restricted" : "begränsad", @@ -253,6 +264,7 @@ OC.L10N.register( "Log in" : "Logga in", "Stay logged in" : "Fortsätt vara inloggad.", "Alternative Logins" : "Alternativa inloggningar", + "Redirecting …" : "Omdirigerar ...", "New password" : "Nytt lösenord", "New Password" : "Nytt lösenord", "Reset password" : "Återställ lösenord", diff --git a/core/l10n/sv.json b/core/l10n/sv.json index e06ab0428ec..2583b380e09 100644 --- a/core/l10n/sv.json +++ b/core/l10n/sv.json @@ -46,7 +46,14 @@ "%s (incompatible)" : "%s (incompatible)", "Following apps have been disabled: %s" : "Följande appar har inaktiverats: %s", "Already up to date" : "Redan uppdaterad", + "No contacts found" : "Inga kontakter hittades", + "Show all contacts …" : "Visa alla kontakter ...", + "There was an error loading your contacts" : "Det uppstod ett fel vid hämtning av dina kontakter", + "Loading your contacts …" : "Laddar dina kontakter ...", + "Looking for {term} …" : "Letar efter {term} …", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\"> Ett problem uppstod under integritetskontrollen av koden. Mer information ... </a>", + "No action available" : "Ingen åtgärd tillgänglig", + "Error fetching contact actions" : "Fel vid hämtning av kontakthändelser", "Settings" : "Inställningar", "Connection to server lost" : "Anslutning till server förlorad", "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Problem med att ladda sidan, laddar om sidan om %n sekund","Problem med att ladda sidan, laddar om sidan om %n sekunder"], @@ -155,6 +162,10 @@ "{sharee} (email)" : "{sharee} (e-post)", "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})", "Share" : "Dela", + "Name or email address..." : "Namn eller e-postadress", + "Name or federated cloud ID..." : "Namn eller federerat cloud-ID", + "Name, federated cloud ID or email address..." : "Namn, federerat cloud-ID eller e-postadress...", + "Name..." : "Namn...", "Error removing share" : "Fel uppstod när delning försökte tas bort", "Non-existing tag #{tag}" : "Icke-existerande tag #{tag}", "restricted" : "begränsad", @@ -251,6 +262,7 @@ "Log in" : "Logga in", "Stay logged in" : "Fortsätt vara inloggad.", "Alternative Logins" : "Alternativa inloggningar", + "Redirecting …" : "Omdirigerar ...", "New password" : "Nytt lösenord", "New Password" : "Nytt lösenord", "Reset password" : "Återställ lösenord", diff --git a/core/l10n/tr.js b/core/l10n/tr.js index e0edb374618..0fa3793cb77 100644 --- a/core/l10n/tr.js +++ b/core/l10n/tr.js @@ -14,6 +14,8 @@ OC.L10N.register( "No crop data provided" : "Kırpma verileri belirtilmemiş", "No valid crop data provided" : "Geçerli bir kırpma verisi belirtilmemiş", "Crop is not square" : "Kırpma kare şeklinde değil", + "State token does not match" : "Durum kodu eşleşmiyor", + "Auth flow can only be started unauthenticated." : "Kimlik doğrulama işlemi yalnız kimlik doğrulanmamışken başlatılabilir.", "Couldn't reset password because the token is invalid" : "Kod geçersiz olduğundan parola sıfırlanamadı", "Couldn't reset password because the token is expired" : "Kodun süresi geçtiğinden parola sıfırlanamadı", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Bu kullanıcı için bir e-posta adresi olmadığından sıfırlama e-postası gönderilemedi. Lütfen yöneticiniz ile görüşün.", @@ -49,7 +51,14 @@ OC.L10N.register( "%s (incompatible)" : "%s (uyumsuz)", "Following apps have been disabled: %s" : "Aşağıdaki uygulamalar devre dışı bırakıldı: %s", "Already up to date" : "Zaten güncel", + "No contacts found" : "Herhangi bir kişi bulunamadı", + "Show all contacts …" : "Tüm kişileri görüntüle...", + "There was an error loading your contacts" : "Kişileriniz yüklenirken bir sorun çıktı", + "Loading your contacts …" : "Kişileriniz yükleniyor...", + "Looking for {term} …" : "{term} ifadesi aranıyor...", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Kod bütünlük sınamasında sorunlar çıktı. Ayrıntılı bilgi…</a>", + "No action available" : "Yapılabilecek bir işlem yok", + "Error fetching contact actions" : "Kişi işlemleri alınırken sorun çıktı", "Settings" : "Ayarlar", "Connection to server lost" : "Sunucu bağlantısı kesildi", "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Sayfa yüklenirken bir sorun çıktı. %n saniye sonra yeniden yüklenecek","Sayfa yüklenirken bir sorun çıktı. %n saniye sonra yeniden yüklenecek"], @@ -265,6 +274,10 @@ OC.L10N.register( "Log in" : "Oturum Aç", "Stay logged in" : "Bağlı kal", "Alternative Logins" : "Alternatif Oturum Açmalar", + "You are about to grant \"%s\" access to your %s account." : "\"%s\" erişim iznini %s hesabınıza vermek üzeresiniz.", + "App token" : "Uygulama Kodu", + "Alternative login using app token" : "Uygulama kodu ile alternatif oturum açma", + "Redirecting …" : "Yönlendiriliyor...", "New password" : "Yeni parola", "New Password" : "Yeni Parola", "Reset password" : "Parolayı sıfırla", diff --git a/core/l10n/tr.json b/core/l10n/tr.json index 922a9957310..e21e3c25728 100644 --- a/core/l10n/tr.json +++ b/core/l10n/tr.json @@ -12,6 +12,8 @@ "No crop data provided" : "Kırpma verileri belirtilmemiş", "No valid crop data provided" : "Geçerli bir kırpma verisi belirtilmemiş", "Crop is not square" : "Kırpma kare şeklinde değil", + "State token does not match" : "Durum kodu eşleşmiyor", + "Auth flow can only be started unauthenticated." : "Kimlik doğrulama işlemi yalnız kimlik doğrulanmamışken başlatılabilir.", "Couldn't reset password because the token is invalid" : "Kod geçersiz olduğundan parola sıfırlanamadı", "Couldn't reset password because the token is expired" : "Kodun süresi geçtiğinden parola sıfırlanamadı", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Bu kullanıcı için bir e-posta adresi olmadığından sıfırlama e-postası gönderilemedi. Lütfen yöneticiniz ile görüşün.", @@ -47,7 +49,14 @@ "%s (incompatible)" : "%s (uyumsuz)", "Following apps have been disabled: %s" : "Aşağıdaki uygulamalar devre dışı bırakıldı: %s", "Already up to date" : "Zaten güncel", + "No contacts found" : "Herhangi bir kişi bulunamadı", + "Show all contacts …" : "Tüm kişileri görüntüle...", + "There was an error loading your contacts" : "Kişileriniz yüklenirken bir sorun çıktı", + "Loading your contacts …" : "Kişileriniz yükleniyor...", + "Looking for {term} …" : "{term} ifadesi aranıyor...", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Kod bütünlük sınamasında sorunlar çıktı. Ayrıntılı bilgi…</a>", + "No action available" : "Yapılabilecek bir işlem yok", + "Error fetching contact actions" : "Kişi işlemleri alınırken sorun çıktı", "Settings" : "Ayarlar", "Connection to server lost" : "Sunucu bağlantısı kesildi", "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Sayfa yüklenirken bir sorun çıktı. %n saniye sonra yeniden yüklenecek","Sayfa yüklenirken bir sorun çıktı. %n saniye sonra yeniden yüklenecek"], @@ -263,6 +272,10 @@ "Log in" : "Oturum Aç", "Stay logged in" : "Bağlı kal", "Alternative Logins" : "Alternatif Oturum Açmalar", + "You are about to grant \"%s\" access to your %s account." : "\"%s\" erişim iznini %s hesabınıza vermek üzeresiniz.", + "App token" : "Uygulama Kodu", + "Alternative login using app token" : "Uygulama kodu ile alternatif oturum açma", + "Redirecting …" : "Yönlendiriliyor...", "New password" : "Yeni parola", "New Password" : "Yeni Parola", "Reset password" : "Parolayı sıfırla", diff --git a/core/l10n/zh_CN.js b/core/l10n/zh_CN.js index 731e2705933..ac94ef05305 100644 --- a/core/l10n/zh_CN.js +++ b/core/l10n/zh_CN.js @@ -14,10 +14,14 @@ OC.L10N.register( "No crop data provided" : "没有提供剪裁数据", "No valid crop data provided" : "没有提供有效的裁剪数据", "Crop is not square" : "裁剪的不是正方形", + "State token does not match" : "状态令牌无法匹配", "Couldn't reset password because the token is invalid" : "令牌无效, 无法重置密码", "Couldn't reset password because the token is expired" : "令牌已过期, 无法重置密码", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "该用户没有设置电子邮件地址, 无发送重置邮件. 请联系管理员.", + "Password reset" : "重置密码", "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "点击下面的按钮来重置你的密码。如果你并没有请求密码重置,请忽略这封邮件。", + "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "点击下述链接重置您的密码. 如果您没有请求重置密码, 请忽略本邮件.", + "Reset your password" : "重置您的密码", "%s password reset" : "重置 %s 的密码", "Couldn't send reset email. Please contact your administrator." : "未能成功发送重置邮件, 请联系管理员.", "Couldn't send reset email. Please make sure your username is correct." : "无法发送重置邮件, 请检查您的用户名是否正确.", @@ -46,7 +50,13 @@ OC.L10N.register( "%s (incompatible)" : "%s (不兼容)", "Following apps have been disabled: %s" : "下列应用已经被禁用: %s", "Already up to date" : "已经是最新", + "No contacts found" : "无法找到联系人", + "Show all contacts …" : "显示所有联系人...", + "There was an error loading your contacts" : "加载联系人出错", + "Loading your contacts …" : "加载您的联系人...", + "Looking for {term} …" : "查找 {term} ...", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">代码完整性检查出现异常, 点击查看详细信息...</a>", + "No action available" : "无可用操作", "Settings" : "设置", "Connection to server lost" : "与服务器的连接断开", "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["加载页面出现问题,将在 %n 秒后重新加载"], @@ -69,6 +79,7 @@ OC.L10N.register( "No files in here" : "未找到文件", "Choose" : "选择", "Error loading file picker template: {error}" : "加载文件选择模板出错: {error}", + "OK" : "确认", "Error loading message template: {error}" : "加载消息模板出错: {error}", "read-only" : "只读", "_{count} file conflict_::_{count} file conflicts_" : ["{count} 个文件冲突"], @@ -114,6 +125,7 @@ OC.L10N.register( "Expiration" : "过期", "Expiration date" : "过期日期", "Choose a password for the public link" : "为共享链接设置密码", + "Choose a password for the public link or press \"Enter ↵\"" : "为公开链接选择一个密码, 或按 \"Enter
\"", "Copied!" : "已经复制!", "Copy" : "复制", "Not supported!" : "无法支持!", @@ -126,15 +138,24 @@ OC.L10N.register( "Password protect" : "密码保护", "Allow upload and editing" : "允许上传和编辑", "Allow editing" : "允许编辑", + "upload only" : "仅上传", "Email link to person" : "发送链接到个人", "Send" : "发送", "Shared with you and the group {group} by {owner}" : "{owner} 分享给您及 {group} 分组", "Shared with you by {owner}" : "{owner} 分享给您", + "Choose a password for the mail share" : "为电子邮件分享选择一个密码", "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} 通过链接分享", "group" : "群组", "remote" : "外部", "email" : "邮件", + "shared by {sharer}" : "由 {sharer} 分享", "Unshare" : "取消共享", + "Can reshare" : "可以再次分享", + "Can edit" : "可以编辑", + "Can create" : "可以创建", + "Can change" : "可以修改", + "Can delete" : "可以删除", + "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}字符需要自动完成"], @@ -147,6 +168,10 @@ OC.L10N.register( "{sharee} (email)" : "{sharee} (邮件)", "{sharee} ({type}, {owner})" : "{share}({type},{owner})", "Share" : "分享", + "Name or email address..." : "姓名或电子邮件地址...", + "Name or federated cloud ID..." : "姓名或联合云 ID", + "Name, federated cloud ID or email address..." : "姓名, 联合云 ID 或电子邮件地址...", + "Name..." : "名称...", "Error removing share" : "移除分享时出错", "Non-existing tag #{tag}" : "标签 #{tag} 不存在", "restricted" : "受限", @@ -243,6 +268,8 @@ OC.L10N.register( "Log in" : "登录", "Stay logged in" : "保持登录", "Alternative Logins" : "其他登录方式", + "App token" : "App 令牌", + "Redirecting …" : "正在转向...", "New password" : "新密码", "New Password" : "新密码", "Reset password" : "重置密码", diff --git a/core/l10n/zh_CN.json b/core/l10n/zh_CN.json index 5d95fb9aff3..31f0615379c 100644 --- a/core/l10n/zh_CN.json +++ b/core/l10n/zh_CN.json @@ -12,10 +12,14 @@ "No crop data provided" : "没有提供剪裁数据", "No valid crop data provided" : "没有提供有效的裁剪数据", "Crop is not square" : "裁剪的不是正方形", + "State token does not match" : "状态令牌无法匹配", "Couldn't reset password because the token is invalid" : "令牌无效, 无法重置密码", "Couldn't reset password because the token is expired" : "令牌已过期, 无法重置密码", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "该用户没有设置电子邮件地址, 无发送重置邮件. 请联系管理员.", + "Password reset" : "重置密码", "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "点击下面的按钮来重置你的密码。如果你并没有请求密码重置,请忽略这封邮件。", + "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "点击下述链接重置您的密码. 如果您没有请求重置密码, 请忽略本邮件.", + "Reset your password" : "重置您的密码", "%s password reset" : "重置 %s 的密码", "Couldn't send reset email. Please contact your administrator." : "未能成功发送重置邮件, 请联系管理员.", "Couldn't send reset email. Please make sure your username is correct." : "无法发送重置邮件, 请检查您的用户名是否正确.", @@ -44,7 +48,13 @@ "%s (incompatible)" : "%s (不兼容)", "Following apps have been disabled: %s" : "下列应用已经被禁用: %s", "Already up to date" : "已经是最新", + "No contacts found" : "无法找到联系人", + "Show all contacts …" : "显示所有联系人...", + "There was an error loading your contacts" : "加载联系人出错", + "Loading your contacts …" : "加载您的联系人...", + "Looking for {term} …" : "查找 {term} ...", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">代码完整性检查出现异常, 点击查看详细信息...</a>", + "No action available" : "无可用操作", "Settings" : "设置", "Connection to server lost" : "与服务器的连接断开", "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["加载页面出现问题,将在 %n 秒后重新加载"], @@ -67,6 +77,7 @@ "No files in here" : "未找到文件", "Choose" : "选择", "Error loading file picker template: {error}" : "加载文件选择模板出错: {error}", + "OK" : "确认", "Error loading message template: {error}" : "加载消息模板出错: {error}", "read-only" : "只读", "_{count} file conflict_::_{count} file conflicts_" : ["{count} 个文件冲突"], @@ -112,6 +123,7 @@ "Expiration" : "过期", "Expiration date" : "过期日期", "Choose a password for the public link" : "为共享链接设置密码", + "Choose a password for the public link or press \"Enter ↵\"" : "为公开链接选择一个密码, 或按 \"Enter
\"", "Copied!" : "已经复制!", "Copy" : "复制", "Not supported!" : "无法支持!", @@ -124,15 +136,24 @@ "Password protect" : "密码保护", "Allow upload and editing" : "允许上传和编辑", "Allow editing" : "允许编辑", + "upload only" : "仅上传", "Email link to person" : "发送链接到个人", "Send" : "发送", "Shared with you and the group {group} by {owner}" : "{owner} 分享给您及 {group} 分组", "Shared with you by {owner}" : "{owner} 分享给您", + "Choose a password for the mail share" : "为电子邮件分享选择一个密码", "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} 通过链接分享", "group" : "群组", "remote" : "外部", "email" : "邮件", + "shared by {sharer}" : "由 {sharer} 分享", "Unshare" : "取消共享", + "Can reshare" : "可以再次分享", + "Can edit" : "可以编辑", + "Can create" : "可以创建", + "Can change" : "可以修改", + "Can delete" : "可以删除", + "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}字符需要自动完成"], @@ -145,6 +166,10 @@ "{sharee} (email)" : "{sharee} (邮件)", "{sharee} ({type}, {owner})" : "{share}({type},{owner})", "Share" : "分享", + "Name or email address..." : "姓名或电子邮件地址...", + "Name or federated cloud ID..." : "姓名或联合云 ID", + "Name, federated cloud ID or email address..." : "姓名, 联合云 ID 或电子邮件地址...", + "Name..." : "名称...", "Error removing share" : "移除分享时出错", "Non-existing tag #{tag}" : "标签 #{tag} 不存在", "restricted" : "受限", @@ -241,6 +266,8 @@ "Log in" : "登录", "Stay logged in" : "保持登录", "Alternative Logins" : "其他登录方式", + "App token" : "App 令牌", + "Redirecting …" : "正在转向...", "New password" : "新密码", "New Password" : "新密码", "Reset password" : "重置密码", diff --git a/core/routes.php b/core/routes.php index 37db2642c1b..c167dad2f9f 100644 --- a/core/routes.php +++ b/core/routes.php @@ -61,6 +61,7 @@ $application->registerRoutes($this, [ ['name' => 'Css#getCss', 'url' => '/css/{appName}/{fileName}', 'verb' => 'GET'], ['name' => 'Js#getJs', 'url' => '/js/{appName}/{fileName}', 'verb' => 'GET'], ['name' => 'contactsMenu#index', 'url' => '/contactsmenu/contacts', 'verb' => 'POST'], + ['name' => 'contactsMenu#findOne', 'url' => '/contactsmenu/findOne', 'verb' => 'POST'], ], 'ocs' => [ ['root' => '/cloud', 'name' => 'OCS#getCapabilities', 'url' => '/capabilities', 'verb' => 'GET'], @@ -121,11 +121,9 @@ try { break; } - $logger->debug('Run ' . get_class($job) . ' job with ID ' . $job->getId(), ['app' => 'cron']); $job->execute($jobList, $logger); // clean up after unclean jobs \OC_Util::tearDownFS(); - $logger->debug('Finished ' . get_class($job) . ' job with ID ' . $job->getId(), ['app' => 'cron']); $jobList->setLastJob($job); $executedJobs[$job->getId()] = true; diff --git a/db_structure.xml b/db_structure.xml index ca832b62819..902fb56ade0 100644 --- a/db_structure.xml +++ b/db_structure.xml @@ -1012,6 +1012,14 @@ <notnull>false</notnull> </field> + <field> + <!-- time for execution of the job --> + <name>execution_duration</name> + <type>integer</type> + <default></default> + <notnull>true</notnull> + </field> + <index> <name>job_class_index</name> <field> diff --git a/lib/base.php b/lib/base.php index 1db6b84c5fb..41e4ef9573c 100644 --- a/lib/base.php +++ b/lib/base.php @@ -806,6 +806,8 @@ class OC { } catch (\OC\ServerNotAvailableException $e) { // not a GC exception, pass it on throw $e; + } catch (\OC\ForbiddenException $e) { + // filesystem blocked for this request, ignore } catch (\Exception $e) { // a GC exception should not prevent users from using OC, // so log the exception @@ -935,14 +937,15 @@ class OC { // emergency app disabling if ($requestPath === '/disableapp' && $request->getMethod() === 'POST' - && ((string)$request->getParam('appid')) !== '' + && ((array)$request->getParam('appid')) !== '' ) { \OCP\JSON::callCheck(); \OCP\JSON::checkAdminUser(); - $appId = (string)$request->getParam('appid'); - $appId = \OC_App::cleanAppId($appId); - - \OC_App::disable($appId); + $appIds = (array)$request->getParam('appid'); + foreach($appIds as $appId) { + $appId = \OC_App::cleanAppId($appId); + \OC_App::disable($appId); + } \OC_JSON::success(); exit(); } diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php index 9dea4d10fb2..2151aeff33b 100644 --- a/lib/composer/composer/autoload_classmap.php +++ b/lib/composer/composer/autoload_classmap.php @@ -318,6 +318,12 @@ return array( 'OC\\AppFramework\\Utility\\TimeFactory' => $baseDir . '/lib/private/AppFramework/Utility/TimeFactory.php', 'OC\\AppHelper' => $baseDir . '/lib/private/AppHelper.php', 'OC\\App\\AppManager' => $baseDir . '/lib/private/App/AppManager.php', + 'OC\\App\\AppStore\\Bundles\\Bundle' => $baseDir . '/lib/private/App/AppStore/Bundles/Bundle.php', + 'OC\\App\\AppStore\\Bundles\\BundleFetcher' => $baseDir . '/lib/private/App/AppStore/Bundles/BundleFetcher.php', + 'OC\\App\\AppStore\\Bundles\\CoreBundle' => $baseDir . '/lib/private/App/AppStore/Bundles/CoreBundle.php', + 'OC\\App\\AppStore\\Bundles\\EnterpriseBundle' => $baseDir . '/lib/private/App/AppStore/Bundles/EnterpriseBundle.php', + 'OC\\App\\AppStore\\Bundles\\GroupwareBundle' => $baseDir . '/lib/private/App/AppStore/Bundles/GroupwareBundle.php', + 'OC\\App\\AppStore\\Bundles\\SocialSharingBundle' => $baseDir . '/lib/private/App/AppStore/Bundles/SocialSharingBundle.php', 'OC\\App\\AppStore\\Fetcher\\AppFetcher' => $baseDir . '/lib/private/App/AppStore/Fetcher/AppFetcher.php', 'OC\\App\\AppStore\\Fetcher\\CategoryFetcher' => $baseDir . '/lib/private/App/AppStore/Fetcher/CategoryFetcher.php', 'OC\\App\\AppStore\\Fetcher\\Fetcher' => $baseDir . '/lib/private/App/AppStore/Fetcher/Fetcher.php', @@ -511,8 +517,6 @@ return array( 'OC\\DateTimeZone' => $baseDir . '/lib/private/DateTimeZone.php', 'OC\\Diagnostics\\Event' => $baseDir . '/lib/private/Diagnostics/Event.php', 'OC\\Diagnostics\\EventLogger' => $baseDir . '/lib/private/Diagnostics/EventLogger.php', - 'OC\\Diagnostics\\NullEventLogger' => $baseDir . '/lib/private/Diagnostics/NullEventLogger.php', - 'OC\\Diagnostics\\NullQueryLogger' => $baseDir . '/lib/private/Diagnostics/NullQueryLogger.php', 'OC\\Diagnostics\\Query' => $baseDir . '/lib/private/Diagnostics/Query.php', 'OC\\Diagnostics\\QueryLogger' => $baseDir . '/lib/private/Diagnostics/QueryLogger.php', 'OC\\Encryption\\DecryptAll' => $baseDir . '/lib/private/Encryption/DecryptAll.php', @@ -727,6 +731,7 @@ return array( 'OC\\Repair\\NC11\\FixMountStorages' => $baseDir . '/lib/private/Repair/NC11/FixMountStorages.php', 'OC\\Repair\\NC11\\MoveAvatars' => $baseDir . '/lib/private/Repair/NC11/MoveAvatars.php', 'OC\\Repair\\NC11\\MoveAvatarsBackgroundJob' => $baseDir . '/lib/private/Repair/NC11/MoveAvatarsBackgroundJob.php', + 'OC\\Repair\\NC12\\InstallCoreBundle' => $baseDir . '/lib/private/Repair/NC12/InstallCoreBundle.php', 'OC\\Repair\\NC12\\UpdateLanguageCodes' => $baseDir . '/lib/private/Repair/NC12/UpdateLanguageCodes.php', 'OC\\Repair\\OldGroupMembershipShares' => $baseDir . '/lib/private/Repair/OldGroupMembershipShares.php', 'OC\\Repair\\RemoveRootShares' => $baseDir . '/lib/private/Repair/RemoveRootShares.php', @@ -784,6 +789,7 @@ return array( 'OC\\Settings\\Admin\\Sharing' => $baseDir . '/lib/private/Settings/Admin/Sharing.php', 'OC\\Settings\\Admin\\TipsTricks' => $baseDir . '/lib/private/Settings/Admin/TipsTricks.php', 'OC\\Settings\\Application' => $baseDir . '/settings/Application.php', + 'OC\\Settings\\BackgroundJobs\\VerifyUserData' => $baseDir . '/settings/BackgroundJobs/VerifyUserData.php', 'OC\\Settings\\Controller\\AdminSettingsController' => $baseDir . '/settings/Controller/AdminSettingsController.php', 'OC\\Settings\\Controller\\AppSettingsController' => $baseDir . '/settings/Controller/AppSettingsController.php', 'OC\\Settings\\Controller\\AuthSettingsController' => $baseDir . '/settings/Controller/AuthSettingsController.php', diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php index 11d949de34a..ec5190bc71d 100644 --- a/lib/composer/composer/autoload_static.php +++ b/lib/composer/composer/autoload_static.php @@ -348,6 +348,12 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\AppFramework\\Utility\\TimeFactory' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Utility/TimeFactory.php', 'OC\\AppHelper' => __DIR__ . '/../../..' . '/lib/private/AppHelper.php', 'OC\\App\\AppManager' => __DIR__ . '/../../..' . '/lib/private/App/AppManager.php', + 'OC\\App\\AppStore\\Bundles\\Bundle' => __DIR__ . '/../../..' . '/lib/private/App/AppStore/Bundles/Bundle.php', + 'OC\\App\\AppStore\\Bundles\\BundleFetcher' => __DIR__ . '/../../..' . '/lib/private/App/AppStore/Bundles/BundleFetcher.php', + 'OC\\App\\AppStore\\Bundles\\CoreBundle' => __DIR__ . '/../../..' . '/lib/private/App/AppStore/Bundles/CoreBundle.php', + 'OC\\App\\AppStore\\Bundles\\EnterpriseBundle' => __DIR__ . '/../../..' . '/lib/private/App/AppStore/Bundles/EnterpriseBundle.php', + 'OC\\App\\AppStore\\Bundles\\GroupwareBundle' => __DIR__ . '/../../..' . '/lib/private/App/AppStore/Bundles/GroupwareBundle.php', + 'OC\\App\\AppStore\\Bundles\\SocialSharingBundle' => __DIR__ . '/../../..' . '/lib/private/App/AppStore/Bundles/SocialSharingBundle.php', 'OC\\App\\AppStore\\Fetcher\\AppFetcher' => __DIR__ . '/../../..' . '/lib/private/App/AppStore/Fetcher/AppFetcher.php', 'OC\\App\\AppStore\\Fetcher\\CategoryFetcher' => __DIR__ . '/../../..' . '/lib/private/App/AppStore/Fetcher/CategoryFetcher.php', 'OC\\App\\AppStore\\Fetcher\\Fetcher' => __DIR__ . '/../../..' . '/lib/private/App/AppStore/Fetcher/Fetcher.php', @@ -541,8 +547,6 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\DateTimeZone' => __DIR__ . '/../../..' . '/lib/private/DateTimeZone.php', 'OC\\Diagnostics\\Event' => __DIR__ . '/../../..' . '/lib/private/Diagnostics/Event.php', 'OC\\Diagnostics\\EventLogger' => __DIR__ . '/../../..' . '/lib/private/Diagnostics/EventLogger.php', - 'OC\\Diagnostics\\NullEventLogger' => __DIR__ . '/../../..' . '/lib/private/Diagnostics/NullEventLogger.php', - 'OC\\Diagnostics\\NullQueryLogger' => __DIR__ . '/../../..' . '/lib/private/Diagnostics/NullQueryLogger.php', 'OC\\Diagnostics\\Query' => __DIR__ . '/../../..' . '/lib/private/Diagnostics/Query.php', 'OC\\Diagnostics\\QueryLogger' => __DIR__ . '/../../..' . '/lib/private/Diagnostics/QueryLogger.php', 'OC\\Encryption\\DecryptAll' => __DIR__ . '/../../..' . '/lib/private/Encryption/DecryptAll.php', @@ -757,6 +761,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\Repair\\NC11\\FixMountStorages' => __DIR__ . '/../../..' . '/lib/private/Repair/NC11/FixMountStorages.php', 'OC\\Repair\\NC11\\MoveAvatars' => __DIR__ . '/../../..' . '/lib/private/Repair/NC11/MoveAvatars.php', 'OC\\Repair\\NC11\\MoveAvatarsBackgroundJob' => __DIR__ . '/../../..' . '/lib/private/Repair/NC11/MoveAvatarsBackgroundJob.php', + 'OC\\Repair\\NC12\\InstallCoreBundle' => __DIR__ . '/../../..' . '/lib/private/Repair/NC12/InstallCoreBundle.php', 'OC\\Repair\\NC12\\UpdateLanguageCodes' => __DIR__ . '/../../..' . '/lib/private/Repair/NC12/UpdateLanguageCodes.php', 'OC\\Repair\\OldGroupMembershipShares' => __DIR__ . '/../../..' . '/lib/private/Repair/OldGroupMembershipShares.php', 'OC\\Repair\\RemoveRootShares' => __DIR__ . '/../../..' . '/lib/private/Repair/RemoveRootShares.php', @@ -814,6 +819,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\Settings\\Admin\\Sharing' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Sharing.php', 'OC\\Settings\\Admin\\TipsTricks' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/TipsTricks.php', 'OC\\Settings\\Application' => __DIR__ . '/../../..' . '/settings/Application.php', + 'OC\\Settings\\BackgroundJobs\\VerifyUserData' => __DIR__ . '/../../..' . '/settings/BackgroundJobs/VerifyUserData.php', 'OC\\Settings\\Controller\\AdminSettingsController' => __DIR__ . '/../../..' . '/settings/Controller/AdminSettingsController.php', 'OC\\Settings\\Controller\\AppSettingsController' => __DIR__ . '/../../..' . '/settings/Controller/AppSettingsController.php', 'OC\\Settings\\Controller\\AuthSettingsController' => __DIR__ . '/../../..' . '/settings/Controller/AuthSettingsController.php', diff --git a/lib/l10n/cs.js b/lib/l10n/cs.js index 3907cb3f150..cda0cb78540 100644 --- a/lib/l10n/cs.js +++ b/lib/l10n/cs.js @@ -12,6 +12,9 @@ OC.L10N.register( "%1$s, %2$s and %3$s" : "%1$s, %2$s a %3$s", "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s a %4$s", "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s a %5$s", + "Enterprise bundle" : "Enterprise balíček", + "Groupware bundle" : "Balíček groupware", + "Social sharing bundle" : "Balíček sociálního sdílení", "PHP %s or higher is required." : "Je vyžadováno PHP %s nebo vyšší.", "PHP with a version lower than %s is required." : "Je vyžadováno PHP ve verzi nižší než %s.", "%sbit or higher PHP required." : "Je vyžadováno PHP %sbit nebo vyšší.", @@ -36,11 +39,13 @@ OC.L10N.register( "_%n hour ago_::_%n hours ago_" : ["před %n hodinou","před %n hodinami","před %n hodinami"], "_%n minute ago_::_%n minutes ago_" : ["před %n minutou","před %n minutami","před %n minutami"], "seconds ago" : "před pár sekundami", + "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul s ID: %s neexistuje. Povolte ho v nastavení aplikací, nebo kontaktujte vašeho administrátora.", "File name is a reserved word" : "Jméno souboru je rezervované slovo", "File name contains at least one invalid character" : "Jméno souboru obsahuje nejméně jeden neplatný znak", "File name is too long" : "Jméno souboru je moc dlouhé", "Dot files are not allowed" : "Jména souborů začínající tečkou nejsou povolena", "Empty filename is not allowed" : "Prázdné jméno souboru není povoleno", + "This is an automatically sent email, please do not reply." : "Toto je automaticky odesílaný e-mail, prosím, neodpovídejte.", "Help" : "Nápověda", "Apps" : "Aplikace", "Personal" : "Osobní", @@ -49,8 +54,9 @@ OC.L10N.register( "Admin" : "Administrace", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Nastavení serveru", + "Basic settings" : "Základní nastavení", "Sharing" : "Sdílení", + "Security" : "Zabezpečení", "Encryption" : "Šifrování", "Additional settings" : "Dodatečná nastavení", "Tips & tricks" : "Tipy a triky", @@ -62,6 +68,7 @@ OC.L10N.register( "Oracle username and/or password not valid" : "Uživatelské jméno či heslo Oracle není platné", "DB Error: \"%s\"" : "Chyba databáze: \"%s\"", "Offending command was: \"%s\"" : "Příslušný příkaz byl: \"%s\"", + "You need to enter details of an existing account." : "Musíte zadat údaje existujícího účtu.", "Offending command was: \"%s\", name: %s, password: %s" : "Příslušný příkaz byl: \"%s\", jméno: %s, heslo: %s", "PostgreSQL username and/or password not valid" : "Uživatelské jméno či heslo PostgreSQL není platné", "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X není podporován a %s nebude na této platformě správně fungovat. Používejte pouze na vlastní nebezpečí!", @@ -154,6 +161,7 @@ OC.L10N.register( "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Pouze následující znaky jsou povoleny pro uživatelské jméno: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"", "A valid username must be provided" : "Musíte zadat platné uživatelské jméno", "Username contains whitespace at the beginning or at the end" : "Uživatelské jméno obsahuje mezery na svém začátku nebo konci", + "Username must not consist of dots only" : "Uživatelské jméno se nesmí skládat ze samých teček", "A valid password must be provided" : "Musíte zadat platné heslo", "The username is already being used" : "Uživatelské jméno je již využíváno", "User disabled" : "Uživatel zakázán", @@ -174,6 +182,7 @@ OC.L10N.register( "Cannot write into \"config\" directory" : "Nelze zapisovat do adresáře \"config\"", "Cannot write into \"apps\" directory" : "Nelze zapisovat do adresáře \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "To lze obvykle vyřešit %spovolením zápisu webovému serveru do adresáře apps%s nebo zakázáním appstore v konfiguračním souboru.", + "Cannot create \"data\" directory" : "Nelze vytvořit datový adresář", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Toto může být obvykle opraveno <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">nastavením přístupových práv webového serveru pro zápis do kořenového adresáře</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Oprávnění lze obvykle napravit %spovolením zápisu webovému serveru do kořenového adresáře%s.", "Setting locale to %s failed" : "Nastavení jazyka na %s selhalo", @@ -193,7 +202,9 @@ OC.L10N.register( "PostgreSQL >= 9 required" : "Je vyžadováno PostgreSQL >= 9", "Please upgrade your database version" : "Aktualizujte prosím verzi své databáze", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Změňte prosím práva na 0770, aby adresář nemohl být otevřen ostatními uživateli.", + "Your data directory is readable by other users" : "Váš datový adresář mohou číst ostatní užovatelé", "Check the value of \"datadirectory\" in your configuration" : "Ověřte hodnotu \"datadirectory\" ve své konfiguraci", + "Your data directory is invalid" : "Váš datový adresář je neplatný", "Please check that the data directory contains a file \".ocdata\" in its root." : "Ověřte prosím, že kořenový adresář s daty obsahuje soubor \".ocdata\".", "Could not obtain lock type %d on \"%s\"." : "Nelze získat zámek typu %d na \"%s\".", "Storage unauthorized. %s" : "Úložiště neověřeno. %s", @@ -202,6 +213,7 @@ OC.L10N.register( "Storage is temporarily not available" : "Úložiště je dočasně nedostupné", "Storage connection timeout. %s" : "Vypršení připojení k úložišti. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul s id: %s neexistuje. Povolte ho prosím ve svých nastaveních aplikací nebo kontaktujte svého administrátora.", + "Server settings" : "Nastavení serveru", "You need to enter either an existing account or the administrator." : "Musíte zadat existující účet či správce.", "%s shared »%s« with you" : "%s s vámi sdílí »%s«", "%s via %s" : "%s pomocí %s", diff --git a/lib/l10n/cs.json b/lib/l10n/cs.json index 2eb2789a501..6aaede647c8 100644 --- a/lib/l10n/cs.json +++ b/lib/l10n/cs.json @@ -10,6 +10,9 @@ "%1$s, %2$s and %3$s" : "%1$s, %2$s a %3$s", "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s a %4$s", "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s a %5$s", + "Enterprise bundle" : "Enterprise balíček", + "Groupware bundle" : "Balíček groupware", + "Social sharing bundle" : "Balíček sociálního sdílení", "PHP %s or higher is required." : "Je vyžadováno PHP %s nebo vyšší.", "PHP with a version lower than %s is required." : "Je vyžadováno PHP ve verzi nižší než %s.", "%sbit or higher PHP required." : "Je vyžadováno PHP %sbit nebo vyšší.", @@ -34,11 +37,13 @@ "_%n hour ago_::_%n hours ago_" : ["před %n hodinou","před %n hodinami","před %n hodinami"], "_%n minute ago_::_%n minutes ago_" : ["před %n minutou","před %n minutami","před %n minutami"], "seconds ago" : "před pár sekundami", + "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul s ID: %s neexistuje. Povolte ho v nastavení aplikací, nebo kontaktujte vašeho administrátora.", "File name is a reserved word" : "Jméno souboru je rezervované slovo", "File name contains at least one invalid character" : "Jméno souboru obsahuje nejméně jeden neplatný znak", "File name is too long" : "Jméno souboru je moc dlouhé", "Dot files are not allowed" : "Jména souborů začínající tečkou nejsou povolena", "Empty filename is not allowed" : "Prázdné jméno souboru není povoleno", + "This is an automatically sent email, please do not reply." : "Toto je automaticky odesílaný e-mail, prosím, neodpovídejte.", "Help" : "Nápověda", "Apps" : "Aplikace", "Personal" : "Osobní", @@ -47,8 +52,9 @@ "Admin" : "Administrace", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Nastavení serveru", + "Basic settings" : "Základní nastavení", "Sharing" : "Sdílení", + "Security" : "Zabezpečení", "Encryption" : "Šifrování", "Additional settings" : "Dodatečná nastavení", "Tips & tricks" : "Tipy a triky", @@ -60,6 +66,7 @@ "Oracle username and/or password not valid" : "Uživatelské jméno či heslo Oracle není platné", "DB Error: \"%s\"" : "Chyba databáze: \"%s\"", "Offending command was: \"%s\"" : "Příslušný příkaz byl: \"%s\"", + "You need to enter details of an existing account." : "Musíte zadat údaje existujícího účtu.", "Offending command was: \"%s\", name: %s, password: %s" : "Příslušný příkaz byl: \"%s\", jméno: %s, heslo: %s", "PostgreSQL username and/or password not valid" : "Uživatelské jméno či heslo PostgreSQL není platné", "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X není podporován a %s nebude na této platformě správně fungovat. Používejte pouze na vlastní nebezpečí!", @@ -152,6 +159,7 @@ "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Pouze následující znaky jsou povoleny pro uživatelské jméno: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"", "A valid username must be provided" : "Musíte zadat platné uživatelské jméno", "Username contains whitespace at the beginning or at the end" : "Uživatelské jméno obsahuje mezery na svém začátku nebo konci", + "Username must not consist of dots only" : "Uživatelské jméno se nesmí skládat ze samých teček", "A valid password must be provided" : "Musíte zadat platné heslo", "The username is already being used" : "Uživatelské jméno je již využíváno", "User disabled" : "Uživatel zakázán", @@ -172,6 +180,7 @@ "Cannot write into \"config\" directory" : "Nelze zapisovat do adresáře \"config\"", "Cannot write into \"apps\" directory" : "Nelze zapisovat do adresáře \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "To lze obvykle vyřešit %spovolením zápisu webovému serveru do adresáře apps%s nebo zakázáním appstore v konfiguračním souboru.", + "Cannot create \"data\" directory" : "Nelze vytvořit datový adresář", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Toto může být obvykle opraveno <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">nastavením přístupových práv webového serveru pro zápis do kořenového adresáře</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Oprávnění lze obvykle napravit %spovolením zápisu webovému serveru do kořenového adresáře%s.", "Setting locale to %s failed" : "Nastavení jazyka na %s selhalo", @@ -191,7 +200,9 @@ "PostgreSQL >= 9 required" : "Je vyžadováno PostgreSQL >= 9", "Please upgrade your database version" : "Aktualizujte prosím verzi své databáze", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Změňte prosím práva na 0770, aby adresář nemohl být otevřen ostatními uživateli.", + "Your data directory is readable by other users" : "Váš datový adresář mohou číst ostatní užovatelé", "Check the value of \"datadirectory\" in your configuration" : "Ověřte hodnotu \"datadirectory\" ve své konfiguraci", + "Your data directory is invalid" : "Váš datový adresář je neplatný", "Please check that the data directory contains a file \".ocdata\" in its root." : "Ověřte prosím, že kořenový adresář s daty obsahuje soubor \".ocdata\".", "Could not obtain lock type %d on \"%s\"." : "Nelze získat zámek typu %d na \"%s\".", "Storage unauthorized. %s" : "Úložiště neověřeno. %s", @@ -200,6 +211,7 @@ "Storage is temporarily not available" : "Úložiště je dočasně nedostupné", "Storage connection timeout. %s" : "Vypršení připojení k úložišti. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul s id: %s neexistuje. Povolte ho prosím ve svých nastaveních aplikací nebo kontaktujte svého administrátora.", + "Server settings" : "Nastavení serveru", "You need to enter either an existing account or the administrator." : "Musíte zadat existující účet či správce.", "%s shared »%s« with you" : "%s s vámi sdílí »%s«", "%s via %s" : "%s pomocí %s", diff --git a/lib/l10n/de.js b/lib/l10n/de.js index a4c9547373a..854637d955a 100644 --- a/lib/l10n/de.js +++ b/lib/l10n/de.js @@ -12,6 +12,9 @@ OC.L10N.register( "%1$s, %2$s and %3$s" : "%1$s, %2$s und %3$s", "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s und %4$s", "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s und %5$s", + "Enterprise bundle" : "Firmen-Paket", + "Groupware bundle" : "Groupware-Paket", + "Social sharing bundle" : "Soziales-Teilen-Paket", "PHP %s or higher is required." : "PHP %s oder höher wird benötigt.", "PHP with a version lower than %s is required." : "PHP wird in einer früheren Version als %s benötigt.", "%sbit or higher PHP required." : "%sbit oder höheres PHP wird benötigt.", @@ -51,7 +54,7 @@ OC.L10N.register( "Admin" : "Administration", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Servereinstellungen", + "Basic settings" : "Grundeinstellungen", "Sharing" : "Teilen", "Security" : "Sicherheit", "Encryption" : "Verschlüsselung", @@ -211,6 +214,7 @@ OC.L10N.register( "Storage is temporarily not available" : "Speicher ist vorübergehend nicht verfügbar", "Storage connection timeout. %s" : "Zeitüberschreitung der Verbindung zum Speicherplatz. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Das Modul mit der ID: %s existiert nicht. Bitte die Aktivierung in Ihren App-Einstellungen vornehmen oder Ihren Administrator kontaktieren.", + "Server settings" : "Servereinstellungen", "You need to enter either an existing account or the administrator." : "Du musst entweder ein existierendes Benutzerkonto oder das Administratorenkonto angeben.", "%s shared »%s« with you" : "%s hat „%s“ mit Dir geteilt", "%s via %s" : "%s via %s", diff --git a/lib/l10n/de.json b/lib/l10n/de.json index 7b2051ab3bf..10934aaecb5 100644 --- a/lib/l10n/de.json +++ b/lib/l10n/de.json @@ -10,6 +10,9 @@ "%1$s, %2$s and %3$s" : "%1$s, %2$s und %3$s", "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s und %4$s", "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s und %5$s", + "Enterprise bundle" : "Firmen-Paket", + "Groupware bundle" : "Groupware-Paket", + "Social sharing bundle" : "Soziales-Teilen-Paket", "PHP %s or higher is required." : "PHP %s oder höher wird benötigt.", "PHP with a version lower than %s is required." : "PHP wird in einer früheren Version als %s benötigt.", "%sbit or higher PHP required." : "%sbit oder höheres PHP wird benötigt.", @@ -49,7 +52,7 @@ "Admin" : "Administration", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Servereinstellungen", + "Basic settings" : "Grundeinstellungen", "Sharing" : "Teilen", "Security" : "Sicherheit", "Encryption" : "Verschlüsselung", @@ -209,6 +212,7 @@ "Storage is temporarily not available" : "Speicher ist vorübergehend nicht verfügbar", "Storage connection timeout. %s" : "Zeitüberschreitung der Verbindung zum Speicherplatz. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Das Modul mit der ID: %s existiert nicht. Bitte die Aktivierung in Ihren App-Einstellungen vornehmen oder Ihren Administrator kontaktieren.", + "Server settings" : "Servereinstellungen", "You need to enter either an existing account or the administrator." : "Du musst entweder ein existierendes Benutzerkonto oder das Administratorenkonto angeben.", "%s shared »%s« with you" : "%s hat „%s“ mit Dir geteilt", "%s via %s" : "%s via %s", diff --git a/lib/l10n/de_DE.js b/lib/l10n/de_DE.js index c8c8bcf1086..9614c2ff5e4 100644 --- a/lib/l10n/de_DE.js +++ b/lib/l10n/de_DE.js @@ -12,6 +12,9 @@ OC.L10N.register( "%1$s, %2$s and %3$s" : "%1$s, %2$s und %3$s", "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s und %4$s", "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s und %5$s", + "Enterprise bundle" : "Firmen-Paket", + "Groupware bundle" : "Groupware-Paket", + "Social sharing bundle" : "Soziales-Teilen-Paket", "PHP %s or higher is required." : "PHP %s oder höher wird benötigt.", "PHP with a version lower than %s is required." : "PHP wird in einer früheren Version als %s benötigt.", "%sbit or higher PHP required." : "%sbit oder höheres PHP wird benötigt.", @@ -51,7 +54,7 @@ OC.L10N.register( "Admin" : "Administrator", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Servereinstellungen", + "Basic settings" : "Grundeinstellungen", "Sharing" : "Teilen", "Security" : "Sicherheit", "Encryption" : "Verschlüsselung", @@ -211,6 +214,7 @@ OC.L10N.register( "Storage is temporarily not available" : "Speicher ist vorübergehend nicht verfügbar", "Storage connection timeout. %s" : "Speicher-Verbindungszeitüberschreitung. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Das Modul mit der ID: %s existiert nicht. Bitte aktivieren Sie es in Ihren App-Einstellungen oder kontaktieren Sie Ihren Administrator.", + "Server settings" : "Servereinstellungen", "You need to enter either an existing account or the administrator." : "Sie müssen entweder ein existierendes Benutzerkonto oder das Administratoren-Konto angeben.", "%s shared »%s« with you" : "%s hat „%s“ mit Ihnen geteilt", "%s via %s" : "%s via %s", diff --git a/lib/l10n/de_DE.json b/lib/l10n/de_DE.json index 1e3a96b7808..b28eaf0735a 100644 --- a/lib/l10n/de_DE.json +++ b/lib/l10n/de_DE.json @@ -10,6 +10,9 @@ "%1$s, %2$s and %3$s" : "%1$s, %2$s und %3$s", "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s und %4$s", "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s und %5$s", + "Enterprise bundle" : "Firmen-Paket", + "Groupware bundle" : "Groupware-Paket", + "Social sharing bundle" : "Soziales-Teilen-Paket", "PHP %s or higher is required." : "PHP %s oder höher wird benötigt.", "PHP with a version lower than %s is required." : "PHP wird in einer früheren Version als %s benötigt.", "%sbit or higher PHP required." : "%sbit oder höheres PHP wird benötigt.", @@ -49,7 +52,7 @@ "Admin" : "Administrator", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Servereinstellungen", + "Basic settings" : "Grundeinstellungen", "Sharing" : "Teilen", "Security" : "Sicherheit", "Encryption" : "Verschlüsselung", @@ -209,6 +212,7 @@ "Storage is temporarily not available" : "Speicher ist vorübergehend nicht verfügbar", "Storage connection timeout. %s" : "Speicher-Verbindungszeitüberschreitung. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Das Modul mit der ID: %s existiert nicht. Bitte aktivieren Sie es in Ihren App-Einstellungen oder kontaktieren Sie Ihren Administrator.", + "Server settings" : "Servereinstellungen", "You need to enter either an existing account or the administrator." : "Sie müssen entweder ein existierendes Benutzerkonto oder das Administratoren-Konto angeben.", "%s shared »%s« with you" : "%s hat „%s“ mit Ihnen geteilt", "%s via %s" : "%s via %s", diff --git a/lib/l10n/el.js b/lib/l10n/el.js index eca3d48a22c..546e3b38386 100644 --- a/lib/l10n/el.js +++ b/lib/l10n/el.js @@ -45,7 +45,6 @@ OC.L10N.register( "Admin" : "Διαχείριση", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Ρυθμίσεις διακομιστή", "Sharing" : "Διαμοιρασμός", "Encryption" : "Κρυπτογράφηση", "Additional settings" : "Επιπρόσθετες ρυθμίσεις", @@ -175,6 +174,7 @@ OC.L10N.register( "Please check that the data directory contains a file \".ocdata\" in its root." : "Παρακαλώ ελέγξτε ότι ο κατάλογος δεδομένων περιέχει ένα αρχείο \".ocdata\" στη βάση του.", "Could not obtain lock type %d on \"%s\"." : "Αδυναμία ανάκτησης τύπου κλειδιού %d στο \"%s\".", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Το άρθρωμα με id: %s δεν υπάρχει. Παρακαλώ ενεργοποιήστε το από τις ρυθμίσεις των εφαρμογών ή επικοινωνήστε με τον διαχειριστή.", + "Server settings" : "Ρυθμίσεις διακομιστή", "You need to enter either an existing account or the administrator." : "Χρειάζεται να εισάγετε είτε έναν υπάρχον λογαριασμό ή του διαχειριστή.", "%s shared »%s« with you" : "Ο %s διαμοιράστηκε μαζί σας το »%s«", "%s via %s" : "%s μέσω %s", diff --git a/lib/l10n/el.json b/lib/l10n/el.json index d1f0b3bd491..b632b33b7d8 100644 --- a/lib/l10n/el.json +++ b/lib/l10n/el.json @@ -43,7 +43,6 @@ "Admin" : "Διαχείριση", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Ρυθμίσεις διακομιστή", "Sharing" : "Διαμοιρασμός", "Encryption" : "Κρυπτογράφηση", "Additional settings" : "Επιπρόσθετες ρυθμίσεις", @@ -173,6 +172,7 @@ "Please check that the data directory contains a file \".ocdata\" in its root." : "Παρακαλώ ελέγξτε ότι ο κατάλογος δεδομένων περιέχει ένα αρχείο \".ocdata\" στη βάση του.", "Could not obtain lock type %d on \"%s\"." : "Αδυναμία ανάκτησης τύπου κλειδιού %d στο \"%s\".", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Το άρθρωμα με id: %s δεν υπάρχει. Παρακαλώ ενεργοποιήστε το από τις ρυθμίσεις των εφαρμογών ή επικοινωνήστε με τον διαχειριστή.", + "Server settings" : "Ρυθμίσεις διακομιστή", "You need to enter either an existing account or the administrator." : "Χρειάζεται να εισάγετε είτε έναν υπάρχον λογαριασμό ή του διαχειριστή.", "%s shared »%s« with you" : "Ο %s διαμοιράστηκε μαζί σας το »%s«", "%s via %s" : "%s μέσω %s", diff --git a/lib/l10n/es.js b/lib/l10n/es.js index 52132180ca8..7bc6a320947 100644 --- a/lib/l10n/es.js +++ b/lib/l10n/es.js @@ -50,7 +50,6 @@ OC.L10N.register( "Admin" : "Administración", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Configuración del servidor", "Sharing" : "Compartir", "Security" : "Seguridad", "Encryption" : "Cifrado", @@ -209,6 +208,7 @@ OC.L10N.register( "Storage is temporarily not available" : "El almacenamiento no esta disponible temporalmente", "Storage connection timeout. %s" : "Tiempo de conexión de almacenamiento agotado. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Módulo con id: %s no existe. Por favor habilítelo en los ajustes de sus aplicaciones o contáctese con su administrador.", + "Server settings" : "Configuración del servidor", "You need to enter either an existing account or the administrator." : "Tiene que ingresar una cuenta existente o la del administrador.", "%s shared »%s« with you" : "%s ha compartido »%s« contigo", "%s via %s" : "%s vía %s", diff --git a/lib/l10n/es.json b/lib/l10n/es.json index 61827ee6aa6..37aa8d43219 100644 --- a/lib/l10n/es.json +++ b/lib/l10n/es.json @@ -48,7 +48,6 @@ "Admin" : "Administración", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Configuración del servidor", "Sharing" : "Compartir", "Security" : "Seguridad", "Encryption" : "Cifrado", @@ -207,6 +206,7 @@ "Storage is temporarily not available" : "El almacenamiento no esta disponible temporalmente", "Storage connection timeout. %s" : "Tiempo de conexión de almacenamiento agotado. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Módulo con id: %s no existe. Por favor habilítelo en los ajustes de sus aplicaciones o contáctese con su administrador.", + "Server settings" : "Configuración del servidor", "You need to enter either an existing account or the administrator." : "Tiene que ingresar una cuenta existente o la del administrador.", "%s shared »%s« with you" : "%s ha compartido »%s« contigo", "%s via %s" : "%s vía %s", diff --git a/lib/l10n/es_MX.js b/lib/l10n/es_MX.js index d25ade5160d..f509015ea46 100644 --- a/lib/l10n/es_MX.js +++ b/lib/l10n/es_MX.js @@ -12,6 +12,9 @@ OC.L10N.register( "%1$s, %2$s and %3$s" : "%1$s, %2$s y %3$s", "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s y %4$s", "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s y %5$s", + "Enterprise bundle" : "Paquete empresarial", + "Groupware bundle" : "Paquete de Groupware", + "Social sharing bundle" : "Paquete de compartido social", "PHP %s or higher is required." : "Se requiere de PHPH %s o superior.", "PHP with a version lower than %s is required." : "PHP con una versión inferiror a la %s es requerido. ", "%sbit or higher PHP required." : "se requiere PHP para %sbit o superior.", @@ -51,7 +54,6 @@ OC.L10N.register( "Admin" : "Administración", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Ajustes del servidor", "Sharing" : "Compartiendo", "Security" : "Seguridad", "Encryption" : "Encripción", @@ -211,6 +213,7 @@ OC.L10N.register( "Storage is temporarily not available" : "El almacenamieto se encuentra temporalmente no disponible", "Storage connection timeout. %s" : "Se agotó el tiempo de conexión del almacenamiento. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "El módulo con id: %s no existe. Favor de habilitarlo en sus ajustes de aplicación o contacte a su administrador. ", + "Server settings" : "Ajustes del servidor", "You need to enter either an existing account or the administrator." : "Necesita ingresar una cuenta ya sea existente o la del administrador.", "%s shared »%s« with you" : "%s ha compartido »%s« con usted", "%s via %s" : "%s por %s", diff --git a/lib/l10n/es_MX.json b/lib/l10n/es_MX.json index 73719fc715d..d32baedd841 100644 --- a/lib/l10n/es_MX.json +++ b/lib/l10n/es_MX.json @@ -10,6 +10,9 @@ "%1$s, %2$s and %3$s" : "%1$s, %2$s y %3$s", "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s y %4$s", "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s y %5$s", + "Enterprise bundle" : "Paquete empresarial", + "Groupware bundle" : "Paquete de Groupware", + "Social sharing bundle" : "Paquete de compartido social", "PHP %s or higher is required." : "Se requiere de PHPH %s o superior.", "PHP with a version lower than %s is required." : "PHP con una versión inferiror a la %s es requerido. ", "%sbit or higher PHP required." : "se requiere PHP para %sbit o superior.", @@ -49,7 +52,6 @@ "Admin" : "Administración", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Ajustes del servidor", "Sharing" : "Compartiendo", "Security" : "Seguridad", "Encryption" : "Encripción", @@ -209,6 +211,7 @@ "Storage is temporarily not available" : "El almacenamieto se encuentra temporalmente no disponible", "Storage connection timeout. %s" : "Se agotó el tiempo de conexión del almacenamiento. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "El módulo con id: %s no existe. Favor de habilitarlo en sus ajustes de aplicación o contacte a su administrador. ", + "Server settings" : "Ajustes del servidor", "You need to enter either an existing account or the administrator." : "Necesita ingresar una cuenta ya sea existente o la del administrador.", "%s shared »%s« with you" : "%s ha compartido »%s« con usted", "%s via %s" : "%s por %s", diff --git a/lib/l10n/eu.js b/lib/l10n/eu.js index c2b10b4f462..a8483cddb31 100644 --- a/lib/l10n/eu.js +++ b/lib/l10n/eu.js @@ -44,7 +44,6 @@ OC.L10N.register( "Admin" : "Admin", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Zerbitzariaren ezarpenak", "Sharing" : "Partekatze", "Encryption" : "Enkriptazio", "Additional settings" : "Ezarpen gehiago", @@ -162,6 +161,7 @@ OC.L10N.register( "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.", "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.", + "Server settings" : "Zerbitzariaren ezarpenak", "You need to enter either an existing account or the administrator." : "Existitzen den kontu bat edo administradorearena jarri behar duzu.", "%s shared »%s« with you" : "%s-ek »%s« zurekin partekatu du", "Cannot create \"data\" directory (%s)" : "Ezin da \"data\" karpeta sortu (%s)", diff --git a/lib/l10n/eu.json b/lib/l10n/eu.json index 6e9f1bfe5be..a1a4bed60d7 100644 --- a/lib/l10n/eu.json +++ b/lib/l10n/eu.json @@ -42,7 +42,6 @@ "Admin" : "Admin", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Zerbitzariaren ezarpenak", "Sharing" : "Partekatze", "Encryption" : "Enkriptazio", "Additional settings" : "Ezarpen gehiago", @@ -160,6 +159,7 @@ "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.", "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.", + "Server settings" : "Zerbitzariaren ezarpenak", "You need to enter either an existing account or the administrator." : "Existitzen den kontu bat edo administradorearena jarri behar duzu.", "%s shared »%s« with you" : "%s-ek »%s« zurekin partekatu du", "Cannot create \"data\" directory (%s)" : "Ezin da \"data\" karpeta sortu (%s)", diff --git a/lib/l10n/fi.js b/lib/l10n/fi.js index 6f8a597f1bd..130c99e4804 100644 --- a/lib/l10n/fi.js +++ b/lib/l10n/fi.js @@ -50,7 +50,6 @@ OC.L10N.register( "Admin" : "Ylläpito", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Palvelimen asetukset", "Sharing" : "Jakaminen", "Security" : "Turvallisuus", "Encryption" : "Salaus", @@ -199,6 +198,7 @@ OC.L10N.register( "Storage is temporarily not available" : "Tallennustila on tilapäisesti pois käytöstä", "Storage connection timeout. %s" : "Tallennustilan yhteyden aikakatkaisu. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Moduulia tunnisteella %s ei ole olemassa. Ota se käyttöön sovellusasetuksista tai ota yhteys ylläpitoon.", + "Server settings" : "Palvelimen asetukset", "You need to enter either an existing account or the administrator." : "Sinun täytyy antaa joko olemassa oleva tili tai ylläpitäjä.", "%s shared »%s« with you" : "%s jakoi kohteen »%s« kanssasi", "Cannot create \"data\" directory (%s)" : "Hakemiston \"data\" luominen ei onnistu (%s)", diff --git a/lib/l10n/fi.json b/lib/l10n/fi.json index d5b93713860..ca55d881801 100644 --- a/lib/l10n/fi.json +++ b/lib/l10n/fi.json @@ -48,7 +48,6 @@ "Admin" : "Ylläpito", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Palvelimen asetukset", "Sharing" : "Jakaminen", "Security" : "Turvallisuus", "Encryption" : "Salaus", @@ -197,6 +196,7 @@ "Storage is temporarily not available" : "Tallennustila on tilapäisesti pois käytöstä", "Storage connection timeout. %s" : "Tallennustilan yhteyden aikakatkaisu. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Moduulia tunnisteella %s ei ole olemassa. Ota se käyttöön sovellusasetuksista tai ota yhteys ylläpitoon.", + "Server settings" : "Palvelimen asetukset", "You need to enter either an existing account or the administrator." : "Sinun täytyy antaa joko olemassa oleva tili tai ylläpitäjä.", "%s shared »%s« with you" : "%s jakoi kohteen »%s« kanssasi", "Cannot create \"data\" directory (%s)" : "Hakemiston \"data\" luominen ei onnistu (%s)", diff --git a/lib/l10n/fr.js b/lib/l10n/fr.js index 86a8fb3f84a..d493c880444 100644 --- a/lib/l10n/fr.js +++ b/lib/l10n/fr.js @@ -51,7 +51,7 @@ OC.L10N.register( "Admin" : "Administration", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Paramètres serveur", + "Basic settings" : "Paramètres de base", "Sharing" : "Partage", "Security" : "Sécurité", "Encryption" : "Chiffrement", @@ -211,6 +211,7 @@ OC.L10N.register( "Storage is temporarily not available" : "Le support de stockage est temporairement indisponible", "Storage connection timeout. %s" : "Le délai d'attente pour la connexion à l'espace de stockage a été dépassé. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Le module avec l'id: %s n'existe pas. Merci de l'activer dans les paramètres d'applications ou de contacter votre administrateur.", + "Server settings" : "Paramètres serveur", "You need to enter either an existing account or the administrator." : "Vous devez indiquer un compte existant ou celui de l'administrateur.", "%s shared »%s« with you" : "%s a partagé «%s» avec vous", "%s via %s" : "%s via %s", diff --git a/lib/l10n/fr.json b/lib/l10n/fr.json index 8a3037cfd24..7b077838d40 100644 --- a/lib/l10n/fr.json +++ b/lib/l10n/fr.json @@ -49,7 +49,7 @@ "Admin" : "Administration", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Paramètres serveur", + "Basic settings" : "Paramètres de base", "Sharing" : "Partage", "Security" : "Sécurité", "Encryption" : "Chiffrement", @@ -209,6 +209,7 @@ "Storage is temporarily not available" : "Le support de stockage est temporairement indisponible", "Storage connection timeout. %s" : "Le délai d'attente pour la connexion à l'espace de stockage a été dépassé. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Le module avec l'id: %s n'existe pas. Merci de l'activer dans les paramètres d'applications ou de contacter votre administrateur.", + "Server settings" : "Paramètres serveur", "You need to enter either an existing account or the administrator." : "Vous devez indiquer un compte existant ou celui de l'administrateur.", "%s shared »%s« with you" : "%s a partagé «%s» avec vous", "%s via %s" : "%s via %s", diff --git a/lib/l10n/he.js b/lib/l10n/he.js index 872acb2e0c5..2f3bd6bb638 100644 --- a/lib/l10n/he.js +++ b/lib/l10n/he.js @@ -35,7 +35,6 @@ OC.L10N.register( "Personal" : "אישי", "Users" : "משתמשים", "Admin" : "מנהל", - "Server settings" : "הגדרות שרת", "Sharing" : "שיתוף", "Tips & tricks" : "טיפים וטריקים", "%s enter the database username and name." : "%s יש להכניס את שם המשתמש ושם מסד הנתונים.", @@ -182,6 +181,7 @@ OC.L10N.register( "Storage connection error. %s" : "שגיאת חיבור אחסון. %s", "Storage connection timeout. %s" : "פסק זמן חיבור אחסון. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "מודול עם זהות: %s אינו קיים. יש לאפשר את זה בהגדרות היישומים או ליצור קשר עם המנהל.", + "Server settings" : "הגדרות שרת", "You need to enter either an existing account or the administrator." : "יש להכניס חשבון קיים או מנהל.", "%s shared »%s« with you" : "%s שיתף/שיתפה איתך את »%s«", "%s via %s" : "%s על בסיס %s", diff --git a/lib/l10n/he.json b/lib/l10n/he.json index dda00e54f90..846d5a71bde 100644 --- a/lib/l10n/he.json +++ b/lib/l10n/he.json @@ -33,7 +33,6 @@ "Personal" : "אישי", "Users" : "משתמשים", "Admin" : "מנהל", - "Server settings" : "הגדרות שרת", "Sharing" : "שיתוף", "Tips & tricks" : "טיפים וטריקים", "%s enter the database username and name." : "%s יש להכניס את שם המשתמש ושם מסד הנתונים.", @@ -180,6 +179,7 @@ "Storage connection error. %s" : "שגיאת חיבור אחסון. %s", "Storage connection timeout. %s" : "פסק זמן חיבור אחסון. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "מודול עם זהות: %s אינו קיים. יש לאפשר את זה בהגדרות היישומים או ליצור קשר עם המנהל.", + "Server settings" : "הגדרות שרת", "You need to enter either an existing account or the administrator." : "יש להכניס חשבון קיים או מנהל.", "%s shared »%s« with you" : "%s שיתף/שיתפה איתך את »%s«", "%s via %s" : "%s על בסיס %s", diff --git a/lib/l10n/hu.js b/lib/l10n/hu.js index 5abc96d98c5..a1fd4c2ff94 100644 --- a/lib/l10n/hu.js +++ b/lib/l10n/hu.js @@ -49,7 +49,6 @@ OC.L10N.register( "Admin" : "Adminisztrátor", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Szerver beállítások", "Sharing" : "Megosztás", "Security" : "Biztonság", "Encryption" : "Titkosítás", @@ -203,6 +202,7 @@ OC.L10N.register( "Storage is temporarily not available" : "A tároló átmenetileg nem érthető el", "Storage connection timeout. %s" : "Tároló kapcsolat időtúllépés. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "A modul nem létezik, id: %s. Kérlek engedélyezd az alkalmazás beállításoknál vagy keresd az adminisztrátort.", + "Server settings" : "Szerver beállítások", "You need to enter either an existing account or the administrator." : "Vagy egy létező felhasználó vagy az adminisztrátor bejelentkezési nevét kell megadnia", "%s shared »%s« with you" : "%s megosztotta veled ezt: »%s«", "%s via %s" : "%s - %s", diff --git a/lib/l10n/hu.json b/lib/l10n/hu.json index b8f24a4f0fa..795d0c3a529 100644 --- a/lib/l10n/hu.json +++ b/lib/l10n/hu.json @@ -47,7 +47,6 @@ "Admin" : "Adminisztrátor", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Szerver beállítások", "Sharing" : "Megosztás", "Security" : "Biztonság", "Encryption" : "Titkosítás", @@ -201,6 +200,7 @@ "Storage is temporarily not available" : "A tároló átmenetileg nem érthető el", "Storage connection timeout. %s" : "Tároló kapcsolat időtúllépés. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "A modul nem létezik, id: %s. Kérlek engedélyezd az alkalmazás beállításoknál vagy keresd az adminisztrátort.", + "Server settings" : "Szerver beállítások", "You need to enter either an existing account or the administrator." : "Vagy egy létező felhasználó vagy az adminisztrátor bejelentkezési nevét kell megadnia", "%s shared »%s« with you" : "%s megosztotta veled ezt: »%s«", "%s via %s" : "%s - %s", diff --git a/lib/l10n/is.js b/lib/l10n/is.js index 92eb574cc00..45256e710a1 100644 --- a/lib/l10n/is.js +++ b/lib/l10n/is.js @@ -43,7 +43,6 @@ OC.L10N.register( "Admin" : "Stjórnun", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Stillingar þjóns", "Sharing" : "Deiling", "Encryption" : "Dulritun", "Additional settings" : "Valfrjálsar stillingar", @@ -176,6 +175,7 @@ OC.L10N.register( "Storage connection error. %s" : "Villa í tengingu við gagnageymslu. %s", "Storage is temporarily not available" : "Gagnageymsla ekki tiltæk í augnablikinu", "Storage connection timeout. %s" : "Gagnageymsla féll á tíma. %s", + "Server settings" : "Stillingar þjóns", "%s shared »%s« with you" : "%s deildi »%s« með þér", "%s via %s" : "%s með %s", "Cannot create \"data\" directory (%s)" : "Get ekki búið til \"data\" möppu (%s)", diff --git a/lib/l10n/is.json b/lib/l10n/is.json index 04cb5bc5709..11a82e161b4 100644 --- a/lib/l10n/is.json +++ b/lib/l10n/is.json @@ -41,7 +41,6 @@ "Admin" : "Stjórnun", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Stillingar þjóns", "Sharing" : "Deiling", "Encryption" : "Dulritun", "Additional settings" : "Valfrjálsar stillingar", @@ -174,6 +173,7 @@ "Storage connection error. %s" : "Villa í tengingu við gagnageymslu. %s", "Storage is temporarily not available" : "Gagnageymsla ekki tiltæk í augnablikinu", "Storage connection timeout. %s" : "Gagnageymsla féll á tíma. %s", + "Server settings" : "Stillingar þjóns", "%s shared »%s« with you" : "%s deildi »%s« með þér", "%s via %s" : "%s með %s", "Cannot create \"data\" directory (%s)" : "Get ekki búið til \"data\" möppu (%s)", diff --git a/lib/l10n/it.js b/lib/l10n/it.js index 21a5bb20d7b..4b0b28d4435 100644 --- a/lib/l10n/it.js +++ b/lib/l10n/it.js @@ -51,7 +51,6 @@ OC.L10N.register( "Admin" : "Admin", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Impostazioni server", "Sharing" : "Condivisione", "Security" : "Sicurezza", "Encryption" : "Cifratura", @@ -211,6 +210,7 @@ OC.L10N.register( "Storage is temporarily not available" : "L'archiviazione è temporaneamente non disponibile", "Storage connection timeout. %s" : "Timeout di connessione all'archiviazione. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Il modulo con id: %s non esiste. Abilitalo nelle impostazioni delle applicazioni o contatta il tuo amministratore.", + "Server settings" : "Impostazioni server", "You need to enter either an existing account or the administrator." : "È necessario inserire un account esistente o l'amministratore.", "%s shared »%s« with you" : "%s ha condiviso «%s» con te", "%s via %s" : "%s tramite %s", diff --git a/lib/l10n/it.json b/lib/l10n/it.json index 53d5a764d37..6a52c4a1608 100644 --- a/lib/l10n/it.json +++ b/lib/l10n/it.json @@ -49,7 +49,6 @@ "Admin" : "Admin", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Impostazioni server", "Sharing" : "Condivisione", "Security" : "Sicurezza", "Encryption" : "Cifratura", @@ -209,6 +208,7 @@ "Storage is temporarily not available" : "L'archiviazione è temporaneamente non disponibile", "Storage connection timeout. %s" : "Timeout di connessione all'archiviazione. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Il modulo con id: %s non esiste. Abilitalo nelle impostazioni delle applicazioni o contatta il tuo amministratore.", + "Server settings" : "Impostazioni server", "You need to enter either an existing account or the administrator." : "È necessario inserire un account esistente o l'amministratore.", "%s shared »%s« with you" : "%s ha condiviso «%s» con te", "%s via %s" : "%s tramite %s", diff --git a/lib/l10n/ja.js b/lib/l10n/ja.js index 8b32c162c23..e70a0575e76 100644 --- a/lib/l10n/ja.js +++ b/lib/l10n/ja.js @@ -49,7 +49,6 @@ OC.L10N.register( "Admin" : "管理", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "サーバー設定", "Sharing" : "共有", "Security" : "セキュリティ", "Encryption" : "暗号化", @@ -206,6 +205,7 @@ OC.L10N.register( "Storage is temporarily not available" : "ストレージは一時的に利用できません", "Storage connection timeout. %s" : "ストレージへの接続がタイムアウト。 %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "id: %sのモジュールは存在しません。アプリ設定で有効にするか、管理者に問い合わせてください。", + "Server settings" : "サーバー設定", "You need to enter either an existing account or the administrator." : "既存のアカウントもしくは管理者のどちらかを入力する必要があります。", "%s shared »%s« with you" : "%sが あなたと »%s«を共有しました", "%s via %s" : "%s に %s から", diff --git a/lib/l10n/ja.json b/lib/l10n/ja.json index 6b0fb7194cc..c494781640c 100644 --- a/lib/l10n/ja.json +++ b/lib/l10n/ja.json @@ -47,7 +47,6 @@ "Admin" : "管理", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "サーバー設定", "Sharing" : "共有", "Security" : "セキュリティ", "Encryption" : "暗号化", @@ -204,6 +203,7 @@ "Storage is temporarily not available" : "ストレージは一時的に利用できません", "Storage connection timeout. %s" : "ストレージへの接続がタイムアウト。 %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "id: %sのモジュールは存在しません。アプリ設定で有効にするか、管理者に問い合わせてください。", + "Server settings" : "サーバー設定", "You need to enter either an existing account or the administrator." : "既存のアカウントもしくは管理者のどちらかを入力する必要があります。", "%s shared »%s« with you" : "%sが あなたと »%s«を共有しました", "%s via %s" : "%s に %s から", diff --git a/lib/l10n/nb.js b/lib/l10n/nb.js index 3e824b6376e..3e2095aa0bc 100644 --- a/lib/l10n/nb.js +++ b/lib/l10n/nb.js @@ -12,6 +12,9 @@ OC.L10N.register( "%1$s, %2$s and %3$s" : "%1$s, %2$s og %3$s", "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s og %4$s", "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s og %5$s", + "Enterprise bundle" : "Bedrifts-pakke", + "Groupware bundle" : "Gruppevare-pakke", + "Social sharing bundle" : "Sosialdelings-pakke", "PHP %s or higher is required." : "PHP %s eller nyere kreves.", "PHP with a version lower than %s is required." : "PHP med en versjon lavere enn %s kreves.", "%sbit or higher PHP required." : "%sbit eller høyere PHP kreves", @@ -51,7 +54,6 @@ OC.L10N.register( "Admin" : "Admin", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Tjenerinnstillinger", "Sharing" : "Deling", "Security" : "Sikkerhet", "Encryption" : "Kryptering", @@ -96,7 +98,7 @@ OC.L10N.register( "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Kan ikke sette utøpsdato. Delinger kan ikke utløpe senere enn %s etter at de har blitt delt", "Cannot set expiration date. Expiration date is in the past" : "Kan ikke sette utløpsdato. Utløpsdato er tilbake i tid", "Cannot clear expiration date. Shares are required to have an expiration date." : "Kan ikke fjerne utløpsdato. Delinger må ha en utløpsdato.", - "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Delings-server %s må implementere grensesnittet OCP\\Share_Backend", + "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Delings-tjener %s må implementere grensesnittet OCP\\Share_Backend", "Sharing backend %s not found" : "Delings-tjener %s ikke funnet", "Sharing backend for %s not found" : "Delings-tjener for %s ikke funnet", "Sharing failed, because the user %s is the original sharer" : "Deling feilet fordi brukeren %s er den som delte opprinnelig", @@ -158,6 +160,7 @@ OC.L10N.register( "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Bare disse tegnene tillates i et brukernavn: \"a-z\", \"A-Z\", \"0-9\" og \"_.@-'\"", "A valid username must be provided" : "Oppgi et gyldig brukernavn", "Username contains whitespace at the beginning or at the end" : "Brukernavn inneholder blanke på begynnelsen eller slutten", + "Username must not consist of dots only" : "Brukernavn kan ikke bare bestå av punktum", "A valid password must be provided" : "Oppgi et gyldig passord", "The username is already being used" : "Brukernavnet er allerede i bruk", "User disabled" : "Brukeren er deaktivert", @@ -210,6 +213,7 @@ OC.L10N.register( "Storage is temporarily not available" : "Lagring er midlertidig utilgjengelig", "Storage connection timeout. %s" : "Tidsavbrudd ved tilkobling av lager: %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul med ID: %s finnes ikke. Skru den på i programinnstillingene eller kontakt en administrator.", + "Server settings" : "Tjenerinnstillinger", "You need to enter either an existing account or the administrator." : "Du må legge inn enten en eksisterende konto eller administratoren.", "%s shared »%s« with you" : "%s delte »%s« med deg", "%s via %s" : "%s via %s", diff --git a/lib/l10n/nb.json b/lib/l10n/nb.json index 246bea1e256..b7d619990f7 100644 --- a/lib/l10n/nb.json +++ b/lib/l10n/nb.json @@ -10,6 +10,9 @@ "%1$s, %2$s and %3$s" : "%1$s, %2$s og %3$s", "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s og %4$s", "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s og %5$s", + "Enterprise bundle" : "Bedrifts-pakke", + "Groupware bundle" : "Gruppevare-pakke", + "Social sharing bundle" : "Sosialdelings-pakke", "PHP %s or higher is required." : "PHP %s eller nyere kreves.", "PHP with a version lower than %s is required." : "PHP med en versjon lavere enn %s kreves.", "%sbit or higher PHP required." : "%sbit eller høyere PHP kreves", @@ -49,7 +52,6 @@ "Admin" : "Admin", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Tjenerinnstillinger", "Sharing" : "Deling", "Security" : "Sikkerhet", "Encryption" : "Kryptering", @@ -94,7 +96,7 @@ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Kan ikke sette utøpsdato. Delinger kan ikke utløpe senere enn %s etter at de har blitt delt", "Cannot set expiration date. Expiration date is in the past" : "Kan ikke sette utløpsdato. Utløpsdato er tilbake i tid", "Cannot clear expiration date. Shares are required to have an expiration date." : "Kan ikke fjerne utløpsdato. Delinger må ha en utløpsdato.", - "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Delings-server %s må implementere grensesnittet OCP\\Share_Backend", + "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Delings-tjener %s må implementere grensesnittet OCP\\Share_Backend", "Sharing backend %s not found" : "Delings-tjener %s ikke funnet", "Sharing backend for %s not found" : "Delings-tjener for %s ikke funnet", "Sharing failed, because the user %s is the original sharer" : "Deling feilet fordi brukeren %s er den som delte opprinnelig", @@ -156,6 +158,7 @@ "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Bare disse tegnene tillates i et brukernavn: \"a-z\", \"A-Z\", \"0-9\" og \"_.@-'\"", "A valid username must be provided" : "Oppgi et gyldig brukernavn", "Username contains whitespace at the beginning or at the end" : "Brukernavn inneholder blanke på begynnelsen eller slutten", + "Username must not consist of dots only" : "Brukernavn kan ikke bare bestå av punktum", "A valid password must be provided" : "Oppgi et gyldig passord", "The username is already being used" : "Brukernavnet er allerede i bruk", "User disabled" : "Brukeren er deaktivert", @@ -208,6 +211,7 @@ "Storage is temporarily not available" : "Lagring er midlertidig utilgjengelig", "Storage connection timeout. %s" : "Tidsavbrudd ved tilkobling av lager: %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul med ID: %s finnes ikke. Skru den på i programinnstillingene eller kontakt en administrator.", + "Server settings" : "Tjenerinnstillinger", "You need to enter either an existing account or the administrator." : "Du må legge inn enten en eksisterende konto eller administratoren.", "%s shared »%s« with you" : "%s delte »%s« med deg", "%s via %s" : "%s via %s", diff --git a/lib/l10n/nl.js b/lib/l10n/nl.js index dbefb2155d9..1ef342e0f13 100644 --- a/lib/l10n/nl.js +++ b/lib/l10n/nl.js @@ -12,6 +12,9 @@ OC.L10N.register( "%1$s, %2$s and %3$s" : "%1$s, %2$s en %3$s", "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s en %4$s", "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s en %5$s", + "Enterprise bundle" : "Zakelijke bundel", + "Groupware bundle" : "Groupware bundel", + "Social sharing bundle" : "Sociaal delen bundel", "PHP %s or higher is required." : "PHP %s of hoger vereist.", "PHP with a version lower than %s is required." : "PHP met een versie lager dan %s is vereist.", "%sbit or higher PHP required." : "%sbit of hogere PHP versie vereist.", @@ -51,7 +54,7 @@ OC.L10N.register( "Admin" : "Beheerder", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Serverinstellingen", + "Basic settings" : "Basisinstellingen", "Sharing" : "Delen", "Security" : "Beveiliging", "Encryption" : "Versleuteling", @@ -211,6 +214,7 @@ OC.L10N.register( "Storage is temporarily not available" : "Opslag is tijdelijk niet beschikbaar", "Storage connection timeout. %s" : "Opslagverbinding time-out. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Module met id: %s bestaat niet. Activeer het in je apps instellingen, of neem contact op met je beheerder.", + "Server settings" : "Serverinstellingen", "You need to enter either an existing account or the administrator." : "Geef of een bestaand account op, of het beheerdersaccount.", "%s shared »%s« with you" : "%s deelde »%s« met jou", "%s via %s" : "%s via %s", diff --git a/lib/l10n/nl.json b/lib/l10n/nl.json index 96716d0cea9..f0956b5d101 100644 --- a/lib/l10n/nl.json +++ b/lib/l10n/nl.json @@ -10,6 +10,9 @@ "%1$s, %2$s and %3$s" : "%1$s, %2$s en %3$s", "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s en %4$s", "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s en %5$s", + "Enterprise bundle" : "Zakelijke bundel", + "Groupware bundle" : "Groupware bundel", + "Social sharing bundle" : "Sociaal delen bundel", "PHP %s or higher is required." : "PHP %s of hoger vereist.", "PHP with a version lower than %s is required." : "PHP met een versie lager dan %s is vereist.", "%sbit or higher PHP required." : "%sbit of hogere PHP versie vereist.", @@ -49,7 +52,7 @@ "Admin" : "Beheerder", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Serverinstellingen", + "Basic settings" : "Basisinstellingen", "Sharing" : "Delen", "Security" : "Beveiliging", "Encryption" : "Versleuteling", @@ -209,6 +212,7 @@ "Storage is temporarily not available" : "Opslag is tijdelijk niet beschikbaar", "Storage connection timeout. %s" : "Opslagverbinding time-out. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Module met id: %s bestaat niet. Activeer het in je apps instellingen, of neem contact op met je beheerder.", + "Server settings" : "Serverinstellingen", "You need to enter either an existing account or the administrator." : "Geef of een bestaand account op, of het beheerdersaccount.", "%s shared »%s« with you" : "%s deelde »%s« met jou", "%s via %s" : "%s via %s", diff --git a/lib/l10n/pl.js b/lib/l10n/pl.js index d690d655d60..4b94c10e3ca 100644 --- a/lib/l10n/pl.js +++ b/lib/l10n/pl.js @@ -12,6 +12,9 @@ OC.L10N.register( "%1$s, %2$s and %3$s" : "%1$s, %2$s i %3$s", "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s i %4$s", "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s i %5$s", + "Enterprise bundle" : "Zestaw biznesowy", + "Groupware bundle" : "Zestaw pracy grupowej", + "Social sharing bundle" : "Zestaw współdzielenia społecznościowego", "PHP %s or higher is required." : "PHP %s lub wyższe jest wymagane.", "PHP with a version lower than %s is required." : "Wersja PHP jest niższa niż %s, która jest wymagana.", "%sbit or higher PHP required." : "%sbit lub wyższe PHP jest wymagane.", @@ -51,7 +54,6 @@ OC.L10N.register( "Admin" : "Administracja", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Ustawienia serwera", "Sharing" : "Udostępnianie", "Security" : "Bepieczeństwo", "Encryption" : "Szyfrowanie", @@ -211,6 +213,7 @@ OC.L10N.register( "Storage is temporarily not available" : "Magazyn jest tymczasowo niedostępny", "Storage connection timeout. %s" : "Limit czasu połączenia do magazynu został przekroczony. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Moduł z id: %s nie istnieje. Należy go włączyć w ustawieniach aplikacji lub skontaktować się z administratorem.", + "Server settings" : "Ustawienia serwera", "You need to enter either an existing account or the administrator." : "Należy wprowadzić istniejące konto użytkownika lub administratora.", "%s shared »%s« with you" : "%s współdzieli »%s« z tobą", "%s via %s" : "%s przez %s", diff --git a/lib/l10n/pl.json b/lib/l10n/pl.json index a46ec2da2cf..f335d2bfa62 100644 --- a/lib/l10n/pl.json +++ b/lib/l10n/pl.json @@ -10,6 +10,9 @@ "%1$s, %2$s and %3$s" : "%1$s, %2$s i %3$s", "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s i %4$s", "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s i %5$s", + "Enterprise bundle" : "Zestaw biznesowy", + "Groupware bundle" : "Zestaw pracy grupowej", + "Social sharing bundle" : "Zestaw współdzielenia społecznościowego", "PHP %s or higher is required." : "PHP %s lub wyższe jest wymagane.", "PHP with a version lower than %s is required." : "Wersja PHP jest niższa niż %s, która jest wymagana.", "%sbit or higher PHP required." : "%sbit lub wyższe PHP jest wymagane.", @@ -49,7 +52,6 @@ "Admin" : "Administracja", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Ustawienia serwera", "Sharing" : "Udostępnianie", "Security" : "Bepieczeństwo", "Encryption" : "Szyfrowanie", @@ -209,6 +211,7 @@ "Storage is temporarily not available" : "Magazyn jest tymczasowo niedostępny", "Storage connection timeout. %s" : "Limit czasu połączenia do magazynu został przekroczony. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Moduł z id: %s nie istnieje. Należy go włączyć w ustawieniach aplikacji lub skontaktować się z administratorem.", + "Server settings" : "Ustawienia serwera", "You need to enter either an existing account or the administrator." : "Należy wprowadzić istniejące konto użytkownika lub administratora.", "%s shared »%s« with you" : "%s współdzieli »%s« z tobą", "%s via %s" : "%s przez %s", diff --git a/lib/l10n/pt_BR.js b/lib/l10n/pt_BR.js index 4f2dd051538..72b734afcff 100644 --- a/lib/l10n/pt_BR.js +++ b/lib/l10n/pt_BR.js @@ -12,6 +12,9 @@ OC.L10N.register( "%1$s, %2$s and %3$s" : "%1$s, %2$s e %3$s", "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s e %4$s", "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s e %5$s", + "Enterprise bundle" : "Pacote Enterprise", + "Groupware bundle" : "Pacote Groupware", + "Social sharing bundle" : "Pacote de compartilhamento social", "PHP %s or higher is required." : "PHP %s ou superior é requerido.", "PHP with a version lower than %s is required." : "É requerida uma versão PHP mais antiga que a %s .", "%sbit or higher PHP required." : "%sbit ou maior é requerido.", @@ -51,7 +54,7 @@ OC.L10N.register( "Admin" : "Admininistrador", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Configurações do servidor", + "Basic settings" : "Configurações básicas", "Sharing" : "Compartilhamento", "Security" : "Segurança", "Encryption" : "Criptografia", @@ -211,6 +214,7 @@ OC.L10N.register( "Storage is temporarily not available" : "Armazenamento temporariamente indisponível", "Storage connection timeout. %s" : "Esgotado o tempo de conexão ao armazenamento. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "O módulo com ID: %s não existe. Ative-o em suas configurações de aplicativos ou contacte o administrador.", + "Server settings" : "Configurações do servidor", "You need to enter either an existing account or the administrator." : "Você precisa inserir uma conta existente ou a do administrador.", "%s shared »%s« with you" : "%s compartilhou »%s« com você", "%s via %s" : "%s via %s", diff --git a/lib/l10n/pt_BR.json b/lib/l10n/pt_BR.json index 5a965bd867b..939681966ee 100644 --- a/lib/l10n/pt_BR.json +++ b/lib/l10n/pt_BR.json @@ -10,6 +10,9 @@ "%1$s, %2$s and %3$s" : "%1$s, %2$s e %3$s", "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s e %4$s", "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s e %5$s", + "Enterprise bundle" : "Pacote Enterprise", + "Groupware bundle" : "Pacote Groupware", + "Social sharing bundle" : "Pacote de compartilhamento social", "PHP %s or higher is required." : "PHP %s ou superior é requerido.", "PHP with a version lower than %s is required." : "É requerida uma versão PHP mais antiga que a %s .", "%sbit or higher PHP required." : "%sbit ou maior é requerido.", @@ -49,7 +52,7 @@ "Admin" : "Admininistrador", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Configurações do servidor", + "Basic settings" : "Configurações básicas", "Sharing" : "Compartilhamento", "Security" : "Segurança", "Encryption" : "Criptografia", @@ -209,6 +212,7 @@ "Storage is temporarily not available" : "Armazenamento temporariamente indisponível", "Storage connection timeout. %s" : "Esgotado o tempo de conexão ao armazenamento. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "O módulo com ID: %s não existe. Ative-o em suas configurações de aplicativos ou contacte o administrador.", + "Server settings" : "Configurações do servidor", "You need to enter either an existing account or the administrator." : "Você precisa inserir uma conta existente ou a do administrador.", "%s shared »%s« with you" : "%s compartilhou »%s« com você", "%s via %s" : "%s via %s", diff --git a/lib/l10n/ru.js b/lib/l10n/ru.js index 27864e2ec10..9a590769892 100644 --- a/lib/l10n/ru.js +++ b/lib/l10n/ru.js @@ -51,7 +51,6 @@ OC.L10N.register( "Admin" : "Администрирование", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Настройки сервера", "Sharing" : "Общий доступ", "Security" : "Безопасность", "Encryption" : "Шифрование", @@ -211,6 +210,7 @@ OC.L10N.register( "Storage is temporarily not available" : "Хранилище временно недоступно", "Storage connection timeout. %s" : "Истекло время ожидания подключения к хранилищу. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Модуль с ID %s не существует. Пожалуйста включите его в настройках приложений или обратитесь к администратору.", + "Server settings" : "Настройки сервера", "You need to enter either an existing account or the administrator." : "Вы должны войти или в существующий аккаунт или под администратором.", "%s shared »%s« with you" : "%s поделился »%s« с вами", "%s via %s" : "%s через %s", diff --git a/lib/l10n/ru.json b/lib/l10n/ru.json index cdd827031ee..8aefa0e5250 100644 --- a/lib/l10n/ru.json +++ b/lib/l10n/ru.json @@ -49,7 +49,6 @@ "Admin" : "Администрирование", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Настройки сервера", "Sharing" : "Общий доступ", "Security" : "Безопасность", "Encryption" : "Шифрование", @@ -209,6 +208,7 @@ "Storage is temporarily not available" : "Хранилище временно недоступно", "Storage connection timeout. %s" : "Истекло время ожидания подключения к хранилищу. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Модуль с ID %s не существует. Пожалуйста включите его в настройках приложений или обратитесь к администратору.", + "Server settings" : "Настройки сервера", "You need to enter either an existing account or the administrator." : "Вы должны войти или в существующий аккаунт или под администратором.", "%s shared »%s« with you" : "%s поделился »%s« с вами", "%s via %s" : "%s через %s", diff --git a/lib/l10n/sk.js b/lib/l10n/sk.js index 9bb667d1d44..a3e7d14070d 100644 --- a/lib/l10n/sk.js +++ b/lib/l10n/sk.js @@ -48,7 +48,6 @@ OC.L10N.register( "Admin" : "Administrátor", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Nastavenia servera", "Sharing" : "Sprístupnenie", "Encryption" : "Šifrovanie", "Additional settings" : "Ďalšie nastavenia", @@ -194,6 +193,7 @@ OC.L10N.register( "Storage connection error. %s" : "Chyba pripojenia k úložisku. %s", "Storage is temporarily not available" : "Úložisko je dočasne nedostupné", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul s ID: %s neexistuje. Povoľte ho prosím vo vašom nastavení aplikácií alebo konaktujte správcu.", + "Server settings" : "Nastavenia servera", "You need to enter either an existing account or the administrator." : "Musíte zadať jestvujúci účet alebo administrátora.", "%s shared »%s« with you" : "%s vám sprístupnil »%s«", "%s via %s" : "%s cez %s", diff --git a/lib/l10n/sk.json b/lib/l10n/sk.json index 3f011aaa3d4..d5c3234dfd0 100644 --- a/lib/l10n/sk.json +++ b/lib/l10n/sk.json @@ -46,7 +46,6 @@ "Admin" : "Administrátor", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Nastavenia servera", "Sharing" : "Sprístupnenie", "Encryption" : "Šifrovanie", "Additional settings" : "Ďalšie nastavenia", @@ -192,6 +191,7 @@ "Storage connection error. %s" : "Chyba pripojenia k úložisku. %s", "Storage is temporarily not available" : "Úložisko je dočasne nedostupné", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modul s ID: %s neexistuje. Povoľte ho prosím vo vašom nastavení aplikácií alebo konaktujte správcu.", + "Server settings" : "Nastavenia servera", "You need to enter either an existing account or the administrator." : "Musíte zadať jestvujúci účet alebo administrátora.", "%s shared »%s« with you" : "%s vám sprístupnil »%s«", "%s via %s" : "%s cez %s", diff --git a/lib/l10n/sq.js b/lib/l10n/sq.js index 7bca9e30da0..1d68e2d49fb 100644 --- a/lib/l10n/sq.js +++ b/lib/l10n/sq.js @@ -48,7 +48,6 @@ OC.L10N.register( "Admin" : "Admin", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Konfigurimi i serverit", "Sharing" : "Ndarja", "Encryption" : "Enkriptimi", "Additional settings" : "Konfigurime shtesë", @@ -201,6 +200,7 @@ OC.L10N.register( "Storage is temporarily not available" : "Hapsira ruajtëse nuk është në dispozicion përkohësisht", "Storage connection timeout. %s" : "Mbarim kohe lidhjeje për depozitën. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "S’ka modul me id: %s. Ju lutemi, aktivizojeni te rregullimet tuaja për aplikacionin ose lidhuni me përgjegjësin tuaj.", + "Server settings" : "Konfigurimi i serverit", "You need to enter either an existing account or the administrator." : "Lypset të jepni ose një llogari ekzistuese, ose llogarinë e përgjegjësit.", "%s shared »%s« with you" : "%s ndau me ju »%s«", "%s via %s" : "%s përmes %s", diff --git a/lib/l10n/sq.json b/lib/l10n/sq.json index cbdf4334a4d..436feb6ec72 100644 --- a/lib/l10n/sq.json +++ b/lib/l10n/sq.json @@ -46,7 +46,6 @@ "Admin" : "Admin", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Konfigurimi i serverit", "Sharing" : "Ndarja", "Encryption" : "Enkriptimi", "Additional settings" : "Konfigurime shtesë", @@ -199,6 +198,7 @@ "Storage is temporarily not available" : "Hapsira ruajtëse nuk është në dispozicion përkohësisht", "Storage connection timeout. %s" : "Mbarim kohe lidhjeje për depozitën. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "S’ka modul me id: %s. Ju lutemi, aktivizojeni te rregullimet tuaja për aplikacionin ose lidhuni me përgjegjësin tuaj.", + "Server settings" : "Konfigurimi i serverit", "You need to enter either an existing account or the administrator." : "Lypset të jepni ose një llogari ekzistuese, ose llogarinë e përgjegjësit.", "%s shared »%s« with you" : "%s ndau me ju »%s«", "%s via %s" : "%s përmes %s", diff --git a/lib/l10n/sv.js b/lib/l10n/sv.js index 23179ba9048..5dc1a5d7bc1 100644 --- a/lib/l10n/sv.js +++ b/lib/l10n/sv.js @@ -41,15 +41,18 @@ OC.L10N.register( "File name is too long" : "Filnamnet är för långt", "Dot files are not allowed" : "Dot filer är inte tillåtna", "Empty filename is not allowed" : "Tomma filnamn är inte tillåtna", + "This is an automatically sent email, please do not reply." : "Detta är ett automatiskt skickat e-postmeddelande, svara inte på detta mejl.", "Help" : "Hjälp", "Apps" : "Applikationer", "Personal" : "Personliga Inställningar", + "Log out" : "Logga ut", "Users" : "Användare", "Admin" : "Administration", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Serverinställningar", + "Basic settings" : "Vanliga inställningar", "Sharing" : "Delning", + "Security" : "Säkerhet", "Encryption" : "Kryptering", "Additional settings" : "Övriga inställningar", "Tips & tricks" : "Knep & Trick", @@ -61,6 +64,7 @@ OC.L10N.register( "Oracle username and/or password not valid" : "Oracle-användarnamnet och/eller lösenordet är felaktigt", "DB Error: \"%s\"" : "DB fel: \"%s\"", "Offending command was: \"%s\"" : "Det felaktiga kommandot var: \"%s\"", + "You need to enter details of an existing account." : "Du måste ange inloggningsuppgifter av ett aktuellt konto.", "Offending command was: \"%s\", name: %s, password: %s" : "Det felande kommandot var: \"%s\", name: %s, password: %s", "PostgreSQL username and/or password not valid" : "PostgreSQL-användarnamnet och/eller lösenordet är felaktigt", "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X stöds inte och %s kommer inte att fungera korrekt på denna plattform. Använd på egen risk!", @@ -153,6 +157,7 @@ OC.L10N.register( "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Endast följande tecken är tillåtna i användarnamnet: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"", "A valid username must be provided" : "Ett giltigt användarnamn måste anges", "Username contains whitespace at the beginning or at the end" : "Användarnamnet består av ett mellanslag i början eller i slutet", + "Username must not consist of dots only" : "Användarnamnet får inte innehålla enbart punkter", "A valid password must be provided" : "Ett giltigt lösenord måste anges", "The username is already being used" : "Användarnamnet används redan", "User disabled" : "Användare inaktiverad", @@ -173,6 +178,7 @@ OC.L10N.register( "Cannot write into \"config\" directory" : "Kan inte skriva till \"config\" katalogen", "Cannot write into \"apps\" directory" : "Kan inte skriva till \"apps\" katalogen!", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Detta kan vanligtvis åtgärdas genom att %s ger webbservern skrivrättigheter till applikationskatalogen %s eller stänga av app-butik i konfigurationsfilen.", + "Cannot create \"data\" directory" : "Kan inte skapa \"datamapp\"", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Detta kan vanligtvis åtgärdas genom att <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\"> ge webbserver skrivåtkomst till rotkatalogen </a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Rättigheterna kan vanligtvis åtgärdas genom att %s ger webbservern skrivrättigheter till rootkatalogen %s.", "Setting locale to %s failed" : "Sätta locale till %s misslyckades", @@ -192,7 +198,10 @@ OC.L10N.register( "PostgreSQL >= 9 required" : "PostgreSQL >= 9 krävs", "Please upgrade your database version" : "Vänligen uppgradera din databas-version", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Vänligen ändra rättigheterna till 0770 så att katalogen inte kan listas utav andra användare.", + "Your data directory is readable by other users" : "Din datamapp är läsbar av andra användare", + "Your data directory must be an absolute path" : "Du måste specificera en korrekt sökväg till datamappen", "Check the value of \"datadirectory\" in your configuration" : "Kontrollera värdet av \"datakatalog\" i din konfiguration", + "Your data directory is invalid" : "Din datamapp är ogiltig", "Please check that the data directory contains a file \".ocdata\" in its root." : "Vänligen kontrollera att datakatalogen innehåller filen \".ocdata\" i rooten.", "Could not obtain lock type %d on \"%s\"." : "Kunde inte hämta låstyp %d på \"%s\".", "Storage unauthorized. %s" : "Lagringsutrymme ej tillåtet. %s", @@ -201,6 +210,7 @@ OC.L10N.register( "Storage is temporarily not available" : "Lagringsutrymme är för tillfället inte tillgängligt", "Storage connection timeout. %s" : "Lagringsutrymme lyckas inte ansluta \"timeout\". %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modulen med id: %s finns inte. Vänligen aktivera det i dina app-inställningar eller kontakta din administratör.", + "Server settings" : "Serverinställningar", "You need to enter either an existing account or the administrator." : "Du måste antingen ange ett befintligt konto eller administratör.", "%s shared »%s« with you" : "%s delade »%s« med dig", "%s via %s" : "%s via %s", diff --git a/lib/l10n/sv.json b/lib/l10n/sv.json index 72899843297..169a147de1c 100644 --- a/lib/l10n/sv.json +++ b/lib/l10n/sv.json @@ -39,15 +39,18 @@ "File name is too long" : "Filnamnet är för långt", "Dot files are not allowed" : "Dot filer är inte tillåtna", "Empty filename is not allowed" : "Tomma filnamn är inte tillåtna", + "This is an automatically sent email, please do not reply." : "Detta är ett automatiskt skickat e-postmeddelande, svara inte på detta mejl.", "Help" : "Hjälp", "Apps" : "Applikationer", "Personal" : "Personliga Inställningar", + "Log out" : "Logga ut", "Users" : "Användare", "Admin" : "Administration", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Serverinställningar", + "Basic settings" : "Vanliga inställningar", "Sharing" : "Delning", + "Security" : "Säkerhet", "Encryption" : "Kryptering", "Additional settings" : "Övriga inställningar", "Tips & tricks" : "Knep & Trick", @@ -59,6 +62,7 @@ "Oracle username and/or password not valid" : "Oracle-användarnamnet och/eller lösenordet är felaktigt", "DB Error: \"%s\"" : "DB fel: \"%s\"", "Offending command was: \"%s\"" : "Det felaktiga kommandot var: \"%s\"", + "You need to enter details of an existing account." : "Du måste ange inloggningsuppgifter av ett aktuellt konto.", "Offending command was: \"%s\", name: %s, password: %s" : "Det felande kommandot var: \"%s\", name: %s, password: %s", "PostgreSQL username and/or password not valid" : "PostgreSQL-användarnamnet och/eller lösenordet är felaktigt", "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X stöds inte och %s kommer inte att fungera korrekt på denna plattform. Använd på egen risk!", @@ -151,6 +155,7 @@ "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Endast följande tecken är tillåtna i användarnamnet: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"", "A valid username must be provided" : "Ett giltigt användarnamn måste anges", "Username contains whitespace at the beginning or at the end" : "Användarnamnet består av ett mellanslag i början eller i slutet", + "Username must not consist of dots only" : "Användarnamnet får inte innehålla enbart punkter", "A valid password must be provided" : "Ett giltigt lösenord måste anges", "The username is already being used" : "Användarnamnet används redan", "User disabled" : "Användare inaktiverad", @@ -171,6 +176,7 @@ "Cannot write into \"config\" directory" : "Kan inte skriva till \"config\" katalogen", "Cannot write into \"apps\" directory" : "Kan inte skriva till \"apps\" katalogen!", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Detta kan vanligtvis åtgärdas genom att %s ger webbservern skrivrättigheter till applikationskatalogen %s eller stänga av app-butik i konfigurationsfilen.", + "Cannot create \"data\" directory" : "Kan inte skapa \"datamapp\"", "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Detta kan vanligtvis åtgärdas genom att <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\"> ge webbserver skrivåtkomst till rotkatalogen </a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Rättigheterna kan vanligtvis åtgärdas genom att %s ger webbservern skrivrättigheter till rootkatalogen %s.", "Setting locale to %s failed" : "Sätta locale till %s misslyckades", @@ -190,7 +196,10 @@ "PostgreSQL >= 9 required" : "PostgreSQL >= 9 krävs", "Please upgrade your database version" : "Vänligen uppgradera din databas-version", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Vänligen ändra rättigheterna till 0770 så att katalogen inte kan listas utav andra användare.", + "Your data directory is readable by other users" : "Din datamapp är läsbar av andra användare", + "Your data directory must be an absolute path" : "Du måste specificera en korrekt sökväg till datamappen", "Check the value of \"datadirectory\" in your configuration" : "Kontrollera värdet av \"datakatalog\" i din konfiguration", + "Your data directory is invalid" : "Din datamapp är ogiltig", "Please check that the data directory contains a file \".ocdata\" in its root." : "Vänligen kontrollera att datakatalogen innehåller filen \".ocdata\" i rooten.", "Could not obtain lock type %d on \"%s\"." : "Kunde inte hämta låstyp %d på \"%s\".", "Storage unauthorized. %s" : "Lagringsutrymme ej tillåtet. %s", @@ -199,6 +208,7 @@ "Storage is temporarily not available" : "Lagringsutrymme är för tillfället inte tillgängligt", "Storage connection timeout. %s" : "Lagringsutrymme lyckas inte ansluta \"timeout\". %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modulen med id: %s finns inte. Vänligen aktivera det i dina app-inställningar eller kontakta din administratör.", + "Server settings" : "Serverinställningar", "You need to enter either an existing account or the administrator." : "Du måste antingen ange ett befintligt konto eller administratör.", "%s shared »%s« with you" : "%s delade »%s« med dig", "%s via %s" : "%s via %s", diff --git a/lib/l10n/tr.js b/lib/l10n/tr.js index 676e62f3cab..d330788b414 100644 --- a/lib/l10n/tr.js +++ b/lib/l10n/tr.js @@ -12,6 +12,9 @@ OC.L10N.register( "%1$s, %2$s and %3$s" : "%1$s, %2$s ve %3$s", "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s ve %4$s", "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s ve %5$s", + "Enterprise bundle" : "Kurumsal paket", + "Groupware bundle" : "Grup paketi", + "Social sharing bundle" : "Sosyal ağ paketi", "PHP %s or higher is required." : "PHP %s ya da daha sonraki bir sürümü gerekli.", "PHP with a version lower than %s is required." : "PHP %s ya da daha önceki bir sürümü gerekli.", "%sbit or higher PHP required." : "%sbit ya da daha sonraki bir PHP sürümü gerekli.", @@ -51,7 +54,7 @@ OC.L10N.register( "Admin" : "Yönetici", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Sunucu ayarları", + "Basic settings" : "Temel Ayarlar", "Sharing" : "Paylaşım", "Security" : "Güvenlik", "Encryption" : "Şifreleme", @@ -211,6 +214,7 @@ OC.L10N.register( "Storage is temporarily not available" : "Depolama geçici olarak kullanılamıyor", "Storage connection timeout. %s" : "Depolama bağlantısı zaman aşımı. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "%s kodlu modül bulunamadı. Lütfen uygulamalarınız içinden modülü etkinleştirin ya da sistem yöneticinizle görüşün.", + "Server settings" : "Sunucu ayarları", "You need to enter either an existing account or the administrator." : "Varolan bir hesap ya da yönetici hesabı yazmalısınız.", "%s shared »%s« with you" : "%s sizinle »%s« ögesini paylaştı", "%s via %s" : "%s, %s aracılığıyla", diff --git a/lib/l10n/tr.json b/lib/l10n/tr.json index 02b2d17cc50..677592f2724 100644 --- a/lib/l10n/tr.json +++ b/lib/l10n/tr.json @@ -10,6 +10,9 @@ "%1$s, %2$s and %3$s" : "%1$s, %2$s ve %3$s", "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s ve %4$s", "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s ve %5$s", + "Enterprise bundle" : "Kurumsal paket", + "Groupware bundle" : "Grup paketi", + "Social sharing bundle" : "Sosyal ağ paketi", "PHP %s or higher is required." : "PHP %s ya da daha sonraki bir sürümü gerekli.", "PHP with a version lower than %s is required." : "PHP %s ya da daha önceki bir sürümü gerekli.", "%sbit or higher PHP required." : "%sbit ya da daha sonraki bir PHP sürümü gerekli.", @@ -49,7 +52,7 @@ "Admin" : "Yönetici", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "Sunucu ayarları", + "Basic settings" : "Temel Ayarlar", "Sharing" : "Paylaşım", "Security" : "Güvenlik", "Encryption" : "Şifreleme", @@ -209,6 +212,7 @@ "Storage is temporarily not available" : "Depolama geçici olarak kullanılamıyor", "Storage connection timeout. %s" : "Depolama bağlantısı zaman aşımı. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "%s kodlu modül bulunamadı. Lütfen uygulamalarınız içinden modülü etkinleştirin ya da sistem yöneticinizle görüşün.", + "Server settings" : "Sunucu ayarları", "You need to enter either an existing account or the administrator." : "Varolan bir hesap ya da yönetici hesabı yazmalısınız.", "%s shared »%s« with you" : "%s sizinle »%s« ögesini paylaştı", "%s via %s" : "%s, %s aracılığıyla", diff --git a/lib/l10n/zh_CN.js b/lib/l10n/zh_CN.js index 06a00a8ce11..db8fdd239ed 100644 --- a/lib/l10n/zh_CN.js +++ b/lib/l10n/zh_CN.js @@ -49,7 +49,6 @@ OC.L10N.register( "Admin" : "管理", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "服务器设置", "Sharing" : "分享", "Security" : "安全", "Encryption" : "加密", @@ -203,6 +202,7 @@ OC.L10N.register( "Storage is temporarily not available" : "存储暂时不可用", "Storage connection timeout. %s" : "存储连接超时. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "ID 为 %s 的模块不存在. 请在应用设置中启用或联系您的管理员.", + "Server settings" : "服务器设置", "You need to enter either an existing account or the administrator." : "你需要输入一个数据库中已有的账户或管理员账户。", "%s shared »%s« with you" : "%s 向您分享了 »%s«", "%s via %s" : "%s 通过 %s", diff --git a/lib/l10n/zh_CN.json b/lib/l10n/zh_CN.json index 1094380ae5b..ebf326161ad 100644 --- a/lib/l10n/zh_CN.json +++ b/lib/l10n/zh_CN.json @@ -47,7 +47,6 @@ "Admin" : "管理", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "服务器设置", "Sharing" : "分享", "Security" : "安全", "Encryption" : "加密", @@ -201,6 +200,7 @@ "Storage is temporarily not available" : "存储暂时不可用", "Storage connection timeout. %s" : "存储连接超时. %s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "ID 为 %s 的模块不存在. 请在应用设置中启用或联系您的管理员.", + "Server settings" : "服务器设置", "You need to enter either an existing account or the administrator." : "你需要输入一个数据库中已有的账户或管理员账户。", "%s shared »%s« with you" : "%s 向您分享了 »%s«", "%s via %s" : "%s 通过 %s", diff --git a/lib/l10n/zh_TW.js b/lib/l10n/zh_TW.js index 504287aeac7..26ea5319aa0 100644 --- a/lib/l10n/zh_TW.js +++ b/lib/l10n/zh_TW.js @@ -42,7 +42,6 @@ OC.L10N.register( "Admin" : "管理", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "伺服器設定", "Sharing" : "分享", "Encryption" : "加密", "Additional settings" : "其他設定", @@ -194,6 +193,7 @@ OC.L10N.register( "Storage connection error. %s" : "儲存空間連線錯誤。%s", "Storage connection timeout. %s" : "儲存空間連線逾時。%s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "模組編號: %s 不存在,請在應用程式設定中開啟,或是聯絡系統管理員", + "Server settings" : "伺服器設定", "You need to enter either an existing account or the administrator." : "您必須輸入一個現有的帳號或管理員帳號。", "%s shared »%s« with you" : "%s 與您分享了 %s", "%s via %s" : "%s 經由 %s", diff --git a/lib/l10n/zh_TW.json b/lib/l10n/zh_TW.json index 08771fb6633..fe4c390a90d 100644 --- a/lib/l10n/zh_TW.json +++ b/lib/l10n/zh_TW.json @@ -40,7 +40,6 @@ "Admin" : "管理", "APCu" : "APCu", "Redis" : "Redis", - "Server settings" : "伺服器設定", "Sharing" : "分享", "Encryption" : "加密", "Additional settings" : "其他設定", @@ -192,6 +191,7 @@ "Storage connection error. %s" : "儲存空間連線錯誤。%s", "Storage connection timeout. %s" : "儲存空間連線逾時。%s", "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "模組編號: %s 不存在,請在應用程式設定中開啟,或是聯絡系統管理員", + "Server settings" : "伺服器設定", "You need to enter either an existing account or the administrator." : "您必須輸入一個現有的帳號或管理員帳號。", "%s shared »%s« with you" : "%s 與您分享了 %s", "%s via %s" : "%s 經由 %s", diff --git a/lib/private/Accounts/AccountManager.php b/lib/private/Accounts/AccountManager.php index 2eb518d4f04..41fdad148aa 100644 --- a/lib/private/Accounts/AccountManager.php +++ b/lib/private/Accounts/AccountManager.php @@ -23,6 +23,7 @@ namespace OC\Accounts; +use OCP\BackgroundJob\IJobList; use OCP\IDBConnection; use OCP\IUser; use Symfony\Component\EventDispatcher\EventDispatcherInterface; @@ -53,6 +54,10 @@ class AccountManager { const PROPERTY_ADDRESS = 'address'; const PROPERTY_TWITTER = 'twitter'; + const NOT_VERIFIED = '0'; + const VERIFICATION_IN_PROGRESS = '1'; + const VERIFIED = '2'; + /** @var IDBConnection database connection */ private $connection; @@ -62,15 +67,22 @@ class AccountManager { /** @var EventDispatcherInterface */ private $eventDispatcher; + /** @var IJobList */ + private $jobList; + /** * AccountManager constructor. * * @param IDBConnection $connection * @param EventDispatcherInterface $eventDispatcher + * @param IJobList $jobList */ - public function __construct(IDBConnection $connection, EventDispatcherInterface $eventDispatcher) { + public function __construct(IDBConnection $connection, + EventDispatcherInterface $eventDispatcher, + IJobList $jobList) { $this->connection = $connection; $this->eventDispatcher = $eventDispatcher; + $this->jobList = $jobList; } /** @@ -85,6 +97,8 @@ class AccountManager { if (empty($userData)) { $this->insertNewUser($user, $data); } elseif ($userData !== $data) { + $data = $this->checkEmailVerification($userData, $data, $user); + $data = $this->updateVerifyStatus($userData, $data); $this->updateExistingUser($user, $data); } else { // nothing needs to be done if new and old data set are the same @@ -120,7 +134,110 @@ class AccountManager { return $userData; } - return json_decode($result[0]['data'], true); + $userDataArray = json_decode($result[0]['data'], true); + + $userDataArray = $this->addMissingDefaultValues($userDataArray); + + return $userDataArray; + } + + /** + * check if we need to ask the server for email verification, if yes we create a cronjob + * + * @param $oldData + * @param $newData + * @param IUser $user + * @return array + */ + protected function checkEmailVerification($oldData, $newData, IUser $user) { + if ($oldData[self::PROPERTY_EMAIL]['value'] !== $newData[self::PROPERTY_EMAIL]['value']) { + $this->jobList->add('OC\Settings\BackgroundJobs\VerifyUserData', + [ + 'verificationCode' => '', + 'data' => $newData[self::PROPERTY_EMAIL]['value'], + 'type' => self::PROPERTY_EMAIL, + 'uid' => $user->getUID(), + 'try' => 0, + 'lastRun' => time() + ] + ); + $newData[AccountManager::PROPERTY_EMAIL]['verified'] = AccountManager::VERIFICATION_IN_PROGRESS; + } + + return $newData; + } + + /** + * make sure that all expected data are set + * + * @param array $userData + * @return array + */ + protected function addMissingDefaultValues(array $userData) { + + foreach ($userData as $key => $value) { + if (!isset($userData[$key]['verified'])) { + $userData[$key]['verified'] = self::NOT_VERIFIED; + } + } + + return $userData; + } + + /** + * reset verification status if personal data changed + * + * @param array $oldData + * @param array $newData + * @return array + */ + protected function updateVerifyStatus($oldData, $newData) { + + // which account was already verified successfully? + $twitterVerified = isset($oldData[self::PROPERTY_TWITTER]['verified']) && $oldData[self::PROPERTY_TWITTER]['verified'] === self::VERIFIED; + $websiteVerified = isset($oldData[self::PROPERTY_WEBSITE]['verified']) && $oldData[self::PROPERTY_WEBSITE]['verified'] === self::VERIFIED; + $emailVerified = isset($oldData[self::PROPERTY_EMAIL]['verified']) && $oldData[self::PROPERTY_EMAIL]['verified'] === self::VERIFIED; + + // keep old verification status if we don't have a new one + if(!isset($newData[self::PROPERTY_TWITTER]['verified'])) { + // keep old verification status if value didn't changed and an old value exists + $keepOldStatus = $newData[self::PROPERTY_TWITTER]['value'] === $oldData[self::PROPERTY_TWITTER]['value'] && isset($oldData[self::PROPERTY_TWITTER]['verified']); + $newData[self::PROPERTY_TWITTER]['verified'] = $keepOldStatus ? $oldData[self::PROPERTY_TWITTER]['verified'] : self::NOT_VERIFIED; + } + + if(!isset($newData[self::PROPERTY_WEBSITE]['verified'])) { + // keep old verification status if value didn't changed and an old value exists + $keepOldStatus = $newData[self::PROPERTY_WEBSITE]['value'] === $oldData[self::PROPERTY_WEBSITE]['value'] && isset($oldData[self::PROPERTY_WEBSITE]['verified']); + $newData[self::PROPERTY_WEBSITE]['verified'] = $keepOldStatus ? $oldData[self::PROPERTY_WEBSITE]['verified'] : self::NOT_VERIFIED; + } + + if(!isset($newData[self::PROPERTY_EMAIL]['verified'])) { + // keep old verification status if value didn't changed and an old value exists + $keepOldStatus = $newData[self::PROPERTY_EMAIL]['value'] === $oldData[self::PROPERTY_EMAIL]['value'] && isset($oldData[self::PROPERTY_EMAIL]['verified']); + $newData[self::PROPERTY_EMAIL]['verified'] = $keepOldStatus ? $oldData[self::PROPERTY_EMAIL]['verified'] : self::VERIFICATION_IN_PROGRESS; + } + + // reset verification status if a value from a previously verified data was changed + if($twitterVerified && + $oldData[self::PROPERTY_TWITTER]['value'] !== $newData[self::PROPERTY_TWITTER]['value'] + ) { + $newData[self::PROPERTY_TWITTER]['verified'] = self::NOT_VERIFIED; + } + + if($websiteVerified && + $oldData[self::PROPERTY_WEBSITE]['value'] !== $newData[self::PROPERTY_WEBSITE]['value'] + ) { + $newData[self::PROPERTY_WEBSITE]['verified'] = self::NOT_VERIFIED; + } + + if($emailVerified && + $oldData[self::PROPERTY_EMAIL]['value'] !== $newData[self::PROPERTY_EMAIL]['value'] + ) { + $newData[self::PROPERTY_EMAIL]['verified'] = self::NOT_VERIFIED; + } + + return $newData; + } /** @@ -171,21 +288,25 @@ class AccountManager { [ 'value' => $user->getDisplayName(), 'scope' => self::VISIBILITY_CONTACTS_ONLY, + 'verified' => self::NOT_VERIFIED, ], self::PROPERTY_ADDRESS => [ 'value' => '', 'scope' => self::VISIBILITY_PRIVATE, + 'verified' => self::NOT_VERIFIED, ], self::PROPERTY_WEBSITE => [ 'value' => '', 'scope' => self::VISIBILITY_PRIVATE, + 'verified' => self::NOT_VERIFIED, ], self::PROPERTY_EMAIL => [ 'value' => $user->getEMailAddress(), 'scope' => self::VISIBILITY_CONTACTS_ONLY, + 'verified' => self::NOT_VERIFIED, ], self::PROPERTY_AVATAR => [ @@ -195,11 +316,13 @@ class AccountManager { [ 'value' => '', 'scope' => self::VISIBILITY_PRIVATE, + 'verified' => self::NOT_VERIFIED, ], self::PROPERTY_TWITTER => [ 'value' => '', 'scope' => self::VISIBILITY_PRIVATE, + 'verified' => self::NOT_VERIFIED, ], ]; } diff --git a/lib/private/Accounts/Hooks.php b/lib/private/Accounts/Hooks.php index 38e7e20485b..eca56913fbd 100644 --- a/lib/private/Accounts/Hooks.php +++ b/lib/private/Accounts/Hooks.php @@ -89,7 +89,8 @@ class Hooks { if (is_null($this->accountManager)) { $this->accountManager = new AccountManager( \OC::$server->getDatabaseConnection(), - \OC::$server->getEventDispatcher() + \OC::$server->getEventDispatcher(), + \OC::$server->getJobList() ); } return $this->accountManager; diff --git a/lib/private/App/AppStore/Bundles/Bundle.php b/lib/private/App/AppStore/Bundles/Bundle.php new file mode 100644 index 00000000000..47efc4e0cce --- /dev/null +++ b/lib/private/App/AppStore/Bundles/Bundle.php @@ -0,0 +1,59 @@ +<?php +/** + * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OC\App\AppStore\Bundles; + +use OCP\IL10N; + +abstract class Bundle { + /** @var IL10N */ + protected $l10n; + + /** + * @param IL10N $l10n + */ + public function __construct(IL10N $l10n) { + $this->l10n = $l10n; + } + + /** + * Get the identifier of the bundle + * + * @return string + */ + public final function getIdentifier() { + return substr(strrchr(get_class($this), '\\'), 1); + } + + /** + * Get the name of the bundle + * + * @return string + */ + public abstract function getName(); + + /** + * Get the list of app identifiers in the bundle + * + * @return array + */ + public abstract function getAppIdentifiers(); +} diff --git a/lib/private/App/AppStore/Bundles/BundleFetcher.php b/lib/private/App/AppStore/Bundles/BundleFetcher.php new file mode 100644 index 00000000000..01cd4d6a518 --- /dev/null +++ b/lib/private/App/AppStore/Bundles/BundleFetcher.php @@ -0,0 +1,80 @@ +<?php +/** + * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OC\App\AppStore\Bundles; + +use OCP\IL10N; + +class BundleFetcher { + /** @var IL10N */ + private $l10n; + + /** + * @param IL10N $l10n + */ + public function __construct(IL10N $l10n) { + $this->l10n = $l10n; + } + + /** + * @return Bundle[] + */ + public function getBundles() { + return [ + new EnterpriseBundle($this->l10n), + new GroupwareBundle($this->l10n), + new SocialSharingBundle($this->l10n), + ]; + } + + /** + * Bundles that should be installed by default after installation + * + * @return Bundle[] + */ + public function getDefaultInstallationBundle() { + return [ + new CoreBundle($this->l10n), + ]; + } + + /** + * Get the bundle with the specified identifier + * + * @param string $identifier + * @return Bundle + * @throws \BadMethodCallException If the bundle does not exist + */ + public function getBundleByIdentifier($identifier) { + /** @var Bundle[] $bundles */ + $bundles = array_merge( + $this->getBundles(), + $this->getDefaultInstallationBundle() + ); + foreach($bundles as $bundle) { + if($bundle->getIdentifier() === $identifier) { + return $bundle; + } + } + + throw new \BadMethodCallException('Bundle with specified identifier does not exist'); + } +} diff --git a/lib/private/App/AppStore/Bundles/CoreBundle.php b/lib/private/App/AppStore/Bundles/CoreBundle.php new file mode 100644 index 00000000000..a87292b9ec9 --- /dev/null +++ b/lib/private/App/AppStore/Bundles/CoreBundle.php @@ -0,0 +1,42 @@ +<?php +/** + * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OC\App\AppStore\Bundles; + +class CoreBundle extends Bundle { + + /** + * {@inheritDoc} + */ + public function getName() { + return 'Core bundle'; + } + + /** + * {@inheritDoc} + */ + public function getAppIdentifiers() { + return [ + 'bruteforcesettings', + ]; + } + +} diff --git a/lib/private/App/AppStore/Bundles/EnterpriseBundle.php b/lib/private/App/AppStore/Bundles/EnterpriseBundle.php new file mode 100644 index 00000000000..6d43a6210fa --- /dev/null +++ b/lib/private/App/AppStore/Bundles/EnterpriseBundle.php @@ -0,0 +1,47 @@ +<?php +/** + * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OC\App\AppStore\Bundles; + +class EnterpriseBundle extends Bundle { + + /** + * {@inheritDoc} + */ + public function getName() { + return (string)$this->l10n->t('Enterprise bundle'); + } + + /** + * {@inheritDoc} + */ + public function getAppIdentifiers() { + return [ + 'admin_audit', + 'user_ldap', + 'files_retention', + 'files_automatedtagging', + 'user_saml', + 'files_accesscontrol', + ]; + } + +} diff --git a/lib/private/App/AppStore/Bundles/GroupwareBundle.php b/lib/private/App/AppStore/Bundles/GroupwareBundle.php new file mode 100644 index 00000000000..7e7414f69c7 --- /dev/null +++ b/lib/private/App/AppStore/Bundles/GroupwareBundle.php @@ -0,0 +1,44 @@ +<?php +/** + * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OC\App\AppStore\Bundles; + +class GroupwareBundle extends Bundle { + + /** + * {@inheritDoc} + */ + public function getName() { + return (string)$this->l10n->t('Groupware bundle'); + } + + /** + * {@inheritDoc} + */ + public function getAppIdentifiers() { + return [ + 'calendar', + 'contacts', + 'spreed', + ]; + } + +} diff --git a/lib/private/App/AppStore/Bundles/SocialSharingBundle.php b/lib/private/App/AppStore/Bundles/SocialSharingBundle.php new file mode 100644 index 00000000000..8da84e8d1ef --- /dev/null +++ b/lib/private/App/AppStore/Bundles/SocialSharingBundle.php @@ -0,0 +1,46 @@ +<?php +/** + * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OC\App\AppStore\Bundles; + +class SocialSharingBundle extends Bundle { + + /** + * {@inheritDoc} + */ + public function getName() { + return (string)$this->l10n->t('Social sharing bundle'); + } + + /** + * {@inheritDoc} + */ + public function getAppIdentifiers() { + return [ + 'socialsharing_twitter', + 'socialsharing_googleplus', + 'socialsharing_facebook', + 'socialsharing_email', + 'socialsharing_diaspora', + ]; + } + +} diff --git a/lib/private/BackgroundJob/Job.php b/lib/private/BackgroundJob/Job.php index 726c66ef5d7..cb9328f01b9 100644 --- a/lib/private/BackgroundJob/Job.php +++ b/lib/private/BackgroundJob/Job.php @@ -49,8 +49,18 @@ abstract class Job implements IJob { */ public function execute($jobList, ILogger $logger = null) { $jobList->setLastRun($this); + if ($logger === null) { + $logger = \OC::$server->getLogger(); + } + try { + $jobStartTime = time(); + $logger->debug('Run ' . get_class($this) . ' job with ID ' . $this->getId(), ['app' => 'cron']); $this->run($this->argument); + $timeTaken = time() - $jobStartTime; + + $logger->debug('Finished ' . get_class($this) . ' job with ID ' . $this->getId() . ' in ' . $timeTaken . ' seconds', ['app' => 'cron']); + $jobList->setExecutionTime($this, $timeTaken); } catch (\Exception $e) { if ($logger) { $logger->logException($e, [ diff --git a/lib/private/BackgroundJob/JobList.php b/lib/private/BackgroundJob/JobList.php index 0de5dfecc8b..b0c580290ed 100644 --- a/lib/private/BackgroundJob/JobList.php +++ b/lib/private/BackgroundJob/JobList.php @@ -275,7 +275,7 @@ class JobList implements IJobList { * * @param IJob $job */ - public function setLastJob($job) { + public function setLastJob(IJob $job) { $this->unlockJob($job); $this->config->setAppValue('backgroundjob', 'lastjob', $job->getId()); } @@ -285,7 +285,7 @@ class JobList implements IJobList { * * @param IJob $job */ - public function unlockJob($job) { + public function unlockJob(IJob $job) { $query = $this->connection->getQueryBuilder(); $query->update('jobs') ->set('reserved_at', $query->expr()->literal(0, IQueryBuilder::PARAM_INT)) @@ -310,11 +310,23 @@ class JobList implements IJobList { * * @param IJob $job */ - public function setLastRun($job) { + public function setLastRun(IJob $job) { $query = $this->connection->getQueryBuilder(); $query->update('jobs') ->set('last_run', $query->createNamedParameter(time(), IQueryBuilder::PARAM_INT)) ->where($query->expr()->eq('id', $query->createNamedParameter($job->getId(), IQueryBuilder::PARAM_INT))); $query->execute(); } + + /** + * @param IJob $job + * @param $timeTaken + */ + public function setExecutionTime(IJob $job, $timeTaken) { + $query = $this->connection->getQueryBuilder(); + $query->update('jobs') + ->set('execution_duration', $query->createNamedParameter($timeTaken, IQueryBuilder::PARAM_INT)) + ->where($query->expr()->eq('id', $query->createNamedParameter($job->getId(), IQueryBuilder::PARAM_INT))); + $query->execute(); + } } diff --git a/lib/private/Contacts/ContactsMenu/ContactsStore.php b/lib/private/Contacts/ContactsMenu/ContactsStore.php index 1cdb5d6fc5f..40a0bf87031 100644 --- a/lib/private/Contacts/ContactsMenu/ContactsStore.php +++ b/lib/private/Contacts/ContactsMenu/ContactsStore.php @@ -60,6 +60,50 @@ class ContactsStore { } /** + * @param IUser $user + * @param integer $shareType + * @param string $shareWith + * @return IEntry|null + */ + public function findOne(IUser $user, $shareType, $shareWith) { + switch($shareType) { + case 0: + case 6: + $filter = ['UID']; + break; + case 4: + $filter = ['EMAIL']; + break; + default: + return null; + } + + $userId = $user->getUID(); + $allContacts = $this->contactsManager->search($shareWith, $filter); + $contacts = array_filter($allContacts, function($contact) use ($userId) { + return $contact['UID'] !== $userId; + }); + $match = null; + + foreach ($contacts as $contact) { + if ($shareType === 4 && isset($contact['EMAIL'])) { + if (in_array($shareWith, $contact['EMAIL'])) { + $match = $contact; + break; + } + } + if ($shareType === 0 || $shareType === 6) { + if ($contact['UID'] === $shareWith && $contact['isLocalSystemBook'] === true) { + $match = $contact; + break; + } + } + } + + return $match ? $this->contactArrayToEntry($match) : null; + } + + /** * @param array $contact * @return Entry */ diff --git a/lib/private/Contacts/ContactsMenu/Manager.php b/lib/private/Contacts/ContactsMenu/Manager.php index 16d77c2df08..766b4623253 100644 --- a/lib/private/Contacts/ContactsMenu/Manager.php +++ b/lib/private/Contacts/ContactsMenu/Manager.php @@ -51,7 +51,7 @@ class Manager { } /** - * @param string $user + * @param IUser $user * @param string $filter * @return array */ @@ -70,6 +70,21 @@ class Manager { } /** + * @param IUser $user + * @param integer $shareType + * @param string $shareWith + * @return IEntry + */ + public function findOne(IUser $user, $shareType, $shareWith) { + $entry = $this->store->findOne($user, $shareType, $shareWith); + if ($entry) { + $this->processEntries([$entry], $user); + } + + return $entry; + } + + /** * @param IEntry[] $entries * @return IEntry[] */ diff --git a/lib/private/DB/Connection.php b/lib/private/DB/Connection.php index 9e116712642..6b56ae8ad5c 100644 --- a/lib/private/DB/Connection.php +++ b/lib/private/DB/Connection.php @@ -167,9 +167,6 @@ class Connection extends \Doctrine\DBAL\Connection implements IDBConnection { $statement = $this->replaceTablePrefix($statement); $statement = $this->adapter->fixupStatement($statement); - if(\OC::$server->getSystemConfig()->getValue( 'log_query', false)) { - \OCP\Util::writeLog('core', 'DB prepare : '.$statement, \OCP\Util::DEBUG); - } return parent::prepare($statement); } diff --git a/lib/private/Diagnostics/EventLogger.php b/lib/private/Diagnostics/EventLogger.php index 5abaae3f1dd..846be7efc5b 100644 --- a/lib/private/Diagnostics/EventLogger.php +++ b/lib/private/Diagnostics/EventLogger.php @@ -4,6 +4,8 @@ * * @author Morris Jobke <hey@morrisjobke.de> * @author Robin Appelman <robin@icewind.nl> + * @author Thomas Müller <thomas.mueller@tmit.eu> + * @author Piotr Mrowczynski <piotr@owncloud.com> * * @license AGPL-3.0 * @@ -29,28 +31,53 @@ class EventLogger implements IEventLogger { /** * @var \OC\Diagnostics\Event[] */ - private $events = array(); + private $events = []; + + /** + * @var bool - Module needs to be activated by some app + */ + private $activated = false; + /** + * @inheritdoc + */ public function start($id, $description) { - $this->events[$id] = new Event($id, $description, microtime(true)); + if ($this->activated){ + $this->events[$id] = new Event($id, $description, microtime(true)); + } } + /** + * @inheritdoc + */ public function end($id) { - if (isset($this->events[$id])) { + if ($this->activated && isset($this->events[$id])) { $timing = $this->events[$id]; $timing->end(microtime(true)); } } + /** + * @inheritdoc + */ public function log($id, $description, $start, $end) { - $this->events[$id] = new Event($id, $description, $start); - $this->events[$id]->end($end); + if ($this->activated) { + $this->events[$id] = new Event($id, $description, $start); + $this->events[$id]->end($end); + } } /** - * @return \OCP\Diagnostics\IEvent[] + * @inheritdoc */ public function getEvents() { return $this->events; } + + /** + * @inheritdoc + */ + public function activate() { + $this->activated = true; + } } diff --git a/lib/private/Diagnostics/NullEventLogger.php b/lib/private/Diagnostics/NullEventLogger.php deleted file mode 100644 index 9fe7461eb45..00000000000 --- a/lib/private/Diagnostics/NullEventLogger.php +++ /dev/null @@ -1,58 +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\Diagnostics; - -use OCP\Diagnostics\IEventLogger; - -/** - * Dummy event logger that doesn't actually log anything - */ -class NullEventLogger implements IEventLogger { - /** - * Mark the start of an event - * - * @param $id - * @param $description - */ - public function start($id, $description) { - } - - /** - * Mark the end of an event - * - * @param $id - */ - public function end($id) { - } - - public function log($id, $description, $start, $end) { - } - - /** - * @return \OCP\Diagnostics\IEvent[] - */ - public function getEvents() { - return array(); - } -} diff --git a/lib/private/Diagnostics/NullQueryLogger.php b/lib/private/Diagnostics/NullQueryLogger.php deleted file mode 100644 index 873f556f90e..00000000000 --- a/lib/private/Diagnostics/NullQueryLogger.php +++ /dev/null @@ -1,46 +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\Diagnostics; - -use OCP\Diagnostics\IQueryLogger; - -class NullQueryLogger implements IQueryLogger { - /** - * @param string $sql - * @param array $params - * @param array $types - */ - public function startQuery($sql, array $params = null, array $types = null) { - } - - public function stopQuery() { - } - - /** - * @return \OCP\Diagnostics\IQuery[] - */ - public function getQueries() { - return array(); - } -} diff --git a/lib/private/Diagnostics/Query.php b/lib/private/Diagnostics/Query.php index 8ac2cc0eeac..7b083ed41b7 100644 --- a/lib/private/Diagnostics/Query.php +++ b/lib/private/Diagnostics/Query.php @@ -67,7 +67,14 @@ class Query implements IQuery { } /** - * @return int + * @return float + */ + public function getStart() { + return $this->start; + } + + /** + * @return float */ public function getDuration() { return $this->end - $this->start; diff --git a/lib/private/Diagnostics/QueryLogger.php b/lib/private/Diagnostics/QueryLogger.php index 5f2a061a910..875d25e9be3 100644 --- a/lib/private/Diagnostics/QueryLogger.php +++ b/lib/private/Diagnostics/QueryLogger.php @@ -4,6 +4,8 @@ * * @author Morris Jobke <hey@morrisjobke.de> * @author Robin Appelman <robin@icewind.nl> + * @author Thomas Müller <thomas.mueller@tmit.eu> + * @author Piotr Mrowczynski <piotr@owncloud.com> * * @license AGPL-3.0 * @@ -46,12 +48,17 @@ class QueryLogger implements IQueryLogger { /** - * @param string $sql - * @param array $params - * @param array $types + * @var bool - Module needs to be activated by some app + */ + private $activated = false; + + /** + * @inheritdoc */ public function startQuery($sql, array $params = null, array $types = null) { - $this->activeQuery = new Query($sql, $params, microtime(true), $this->getStack()); + if ($this->activated) { + $this->activeQuery = new Query($sql, $params, microtime(true), $this->getStack()); + } } private function getStack() { @@ -62,8 +69,11 @@ class QueryLogger implements IQueryLogger { return $stack; } + /** + * @inheritdoc + */ public function stopQuery() { - if ($this->activeQuery) { + if ($this->activated && $this->activeQuery) { $this->activeQuery->end(microtime(true)); $this->queries[] = $this->activeQuery; $this->activeQuery = null; @@ -71,9 +81,16 @@ class QueryLogger implements IQueryLogger { } /** - * @return Query[] + * @inheritdoc */ public function getQueries() { return $this->queries->getData(); } + + /** + * @inheritdoc + */ + public function activate() { + $this->activated = true; + } } diff --git a/lib/private/Files/Mount/MountPoint.php b/lib/private/Files/Mount/MountPoint.php index 42b79596c98..e7a37e382ff 100644 --- a/lib/private/Files/Mount/MountPoint.php +++ b/lib/private/Files/Mount/MountPoint.php @@ -274,4 +274,8 @@ class MountPoint implements IMountPoint { public function getMountId() { return $this->mountId; } + + public function getMountType() { + return ''; + } } diff --git a/lib/private/Files/Utils/Scanner.php b/lib/private/Files/Utils/Scanner.php index 02f355fd4d9..fac95462ce5 100644 --- a/lib/private/Files/Utils/Scanner.php +++ b/lib/private/Files/Utils/Scanner.php @@ -47,6 +47,8 @@ use OCP\ILogger; * @package OC\Files\Utils */ class Scanner extends PublicEmitter { + const MAX_ENTRIES_TO_COMMIT = 10000; + /** * @var string $user */ @@ -63,6 +65,20 @@ class Scanner extends PublicEmitter { protected $logger; /** + * Whether to use a DB transaction + * + * @var bool + */ + protected $useTransaction; + + /** + * Number of entries scanned to commit + * + * @var int + */ + protected $entriesToCommit; + + /** * @param string $user * @param \OCP\IDBConnection $db * @param ILogger $logger @@ -71,6 +87,8 @@ class Scanner extends PublicEmitter { $this->logger = $logger; $this->user = $user; $this->db = $db; + // when DB locking is used, no DB transactions will be used + $this->useTransaction = !(\OC::$server->getLockingProvider() instanceof DBLockingProvider); } /** @@ -200,22 +218,22 @@ class Scanner extends PublicEmitter { $scanner = $storage->getScanner(); $scanner->setUseTransactions(false); $this->attachListener($mount); - $isDbLocking = \OC::$server->getLockingProvider() instanceof DBLockingProvider; $scanner->listen('\OC\Files\Cache\Scanner', 'removeFromCache', function ($path) use ($storage) { - $this->triggerPropagator($storage, $path); + $this->postProcessEntry($storage, $path); }); $scanner->listen('\OC\Files\Cache\Scanner', 'updateCache', function ($path) use ($storage) { - $this->triggerPropagator($storage, $path); + $this->postProcessEntry($storage, $path); }); $scanner->listen('\OC\Files\Cache\Scanner', 'addToCache', function ($path) use ($storage) { - $this->triggerPropagator($storage, $path); + $this->postProcessEntry($storage, $path); }); if (!$storage->file_exists($relativePath)) { throw new NotFoundException($dir); } - if (!$isDbLocking) { + + if ($this->useTransaction) { $this->db->beginTransaction(); } try { @@ -233,7 +251,7 @@ class Scanner extends PublicEmitter { $this->logger->logException($e); $this->emit('\OC\Files\Utils\Scanner', 'StorageNotAvailable', [$e]); } - if (!$isDbLocking) { + if ($this->useTransaction) { $this->db->commit(); } } @@ -242,5 +260,20 @@ class Scanner extends PublicEmitter { private function triggerPropagator(IStorage $storage, $internalPath) { $storage->getPropagator()->propagateChange($internalPath, time()); } + + private function postProcessEntry(IStorage $storage, $internalPath) { + $this->triggerPropagator($storage, $internalPath); + if ($this->useTransaction) { + $this->entriesToCommit++; + if ($this->entriesToCommit >= self::MAX_ENTRIES_TO_COMMIT) { + $propagator = $storage->getPropagator(); + $this->entriesToCommit = 0; + $this->db->commit(); + $propagator->commitBatch(); + $this->db->beginTransaction(); + $propagator->beginBatch(); + } + } + } } diff --git a/lib/private/Files/View.php b/lib/private/Files/View.php index 70b74a8242e..5e581feba6e 100644 --- a/lib/private/Files/View.php +++ b/lib/private/Files/View.php @@ -88,7 +88,7 @@ class View { /** * @var \OCP\Lock\ILockingProvider */ - private $lockingProvider; + protected $lockingProvider; private $lockingEnabled; diff --git a/lib/private/Installer.php b/lib/private/Installer.php index 0d6030d5744..8702f264e54 100644 --- a/lib/private/Installer.php +++ b/lib/private/Installer.php @@ -42,6 +42,8 @@ namespace OC; use Doctrine\DBAL\Exception\TableExistsException; +use OC\App\AppManager; +use OC\App\AppStore\Bundles\Bundle; use OC\App\AppStore\Fetcher\AppFetcher; use OC\App\CodeChecker\CodeChecker; use OC\App\CodeChecker\EmptyCheck; @@ -50,7 +52,9 @@ use OC\Archive\TAR; use OC_App; use OC_DB; use OC_Helper; +use OCP\App\IAppManager; use OCP\Http\Client\IClientService; +use OCP\IConfig; use OCP\ILogger; use OCP\ITempManager; use phpseclib\File\X509; @@ -67,21 +71,26 @@ class Installer { private $tempManager; /** @var ILogger */ private $logger; + /** @var IConfig */ + private $config; /** * @param AppFetcher $appFetcher * @param IClientService $clientService * @param ITempManager $tempManager * @param ILogger $logger + * @param IConfig $config */ public function __construct(AppFetcher $appFetcher, IClientService $clientService, ITempManager $tempManager, - ILogger $logger) { + ILogger $logger, + IConfig $config) { $this->appFetcher = $appFetcher; $this->clientService = $clientService; $this->tempManager = $tempManager; $this->logger = $logger; + $this->config = $config; } /** @@ -109,6 +118,7 @@ class Installer { } } + \OC_App::registerAutoloading($appId, $basedir); \OC_App::setupBackgroundJobs($info['background-jobs']); //run appinfo/install.php @@ -420,6 +430,27 @@ class Installer { } /** + * Installs the app within the bundle and marks the bundle as installed + * + * @param Bundle $bundle + * @throws \Exception If app could not get installed + */ + public function installAppBundle(Bundle $bundle) { + $appIds = $bundle->getAppIdentifiers(); + foreach($appIds as $appId) { + if(!$this->isDownloaded($appId)) { + $this->downloadApp($appId); + } + $this->installApp($appId); + $app = new OC_App(); + $app->enable($appId); + } + $bundles = json_decode($this->config->getAppValue('core', 'installed.bundles', json_encode([])), true); + $bundles[] = $bundle->getIdentifier(); + $this->config->setAppValue('core', 'installed.bundles', json_encode($bundles)); + } + + /** * Installs shipped apps * * This function installs all apps found in the 'apps' directory that should be enabled by default; diff --git a/lib/private/Repair.php b/lib/private/Repair.php index e808774ec93..65e0342905a 100644 --- a/lib/private/Repair.php +++ b/lib/private/Repair.php @@ -30,12 +30,14 @@ namespace OC; +use OC\App\AppStore\Bundles\BundleFetcher; use OC\Repair\CleanTags; use OC\Repair\Collation; use OC\Repair\MoveUpdaterStepFile; use OC\Repair\NC11\CleanPreviews; use OC\Repair\NC11\FixMountStorages; use OC\Repair\NC11\MoveAvatars; +use OC\Repair\NC12\InstallCoreBundle; use OC\Repair\NC12\UpdateLanguageCodes; use OC\Repair\OldGroupMembershipShares; use OC\Repair\RemoveRootShares; @@ -136,6 +138,11 @@ class Repair implements IOutput{ ), new FixMountStorages(\OC::$server->getDatabaseConnection()), new UpdateLanguageCodes(\OC::$server->getDatabaseConnection(), \OC::$server->getConfig()), + new InstallCoreBundle( + \OC::$server->query(BundleFetcher::class), + \OC::$server->getConfig(), + \OC::$server->query(Installer::class) + ) ]; } diff --git a/lib/private/Repair/NC12/InstallCoreBundle.php b/lib/private/Repair/NC12/InstallCoreBundle.php new file mode 100644 index 00000000000..38583b09a89 --- /dev/null +++ b/lib/private/Repair/NC12/InstallCoreBundle.php @@ -0,0 +1,78 @@ +<?php +/** + * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OC\Repair\NC12; + +use OC\App\AppStore\Bundles\BundleFetcher; +use OC\Installer; +use OCP\IConfig; +use OCP\Migration\IOutput; +use OCP\Migration\IRepairStep; + +class InstallCoreBundle implements IRepairStep { + /** @var BundleFetcher */ + private $bundleFetcher; + /** @var IConfig */ + private $config; + /** @var Installer */ + private $installer; + + /** + * @param BundleFetcher $bundleFetcher + * @param IConfig $config + * @param Installer $installer + */ + public function __construct(BundleFetcher $bundleFetcher, + IConfig $config, + Installer $installer) { + $this->bundleFetcher = $bundleFetcher; + $this->config = $config; + $this->installer = $installer; + } + + /** + * {@inheritdoc} + */ + public function getName() { + return 'Install new core bundle components'; + } + + /** + * {@inheritdoc} + */ + public function run(IOutput $output) { + $versionFromBeforeUpdate = $this->config->getSystemValue('version', '0.0.0'); + + if (version_compare($versionFromBeforeUpdate, '12.0.0.14', '>')) { + return; + } + + $defaultBundle = $this->bundleFetcher->getDefaultInstallationBundle(); + foreach($defaultBundle as $bundle) { + try { + $this->installer->installAppBundle($bundle); + $output->info('Successfully installed core app bundle.'); + } catch (\Exception $e) { + $output->warning('Could not install core app bundle: ' . $e->getMessage()); + } + } + } +} diff --git a/lib/private/Server.php b/lib/private/Server.php index 7724feb551b..6bc9a1429cd 100644 --- a/lib/private/Server.php +++ b/lib/private/Server.php @@ -43,6 +43,7 @@ namespace OC; use bantu\IniGetWrapper\IniGetWrapper; use OC\App\AppManager; +use OC\App\AppStore\Bundles\BundleFetcher; use OC\App\AppStore\Fetcher\AppFetcher; use OC\App\AppStore\Fetcher\CategoryFetcher; use OC\AppFramework\Http\Request; @@ -602,22 +603,23 @@ class Server extends ServerContainer implements IServerContainer { ); }); $this->registerAlias('HttpClientService', \OCP\Http\Client\IClientService::class); - $this->registerService(\OCP\Diagnostics\IEventLogger::class, function (Server $c) { + $eventLogger = new EventLogger(); if ($c->getSystemConfig()->getValue('debug', false)) { - return new EventLogger(); - } else { - return new NullEventLogger(); + // In debug mode, module is being activated by default + $eventLogger->activate(); } + return $eventLogger; }); $this->registerAlias('EventLogger', \OCP\Diagnostics\IEventLogger::class); $this->registerService(\OCP\Diagnostics\IQueryLogger::class, function (Server $c) { + $queryLogger = new QueryLogger(); if ($c->getSystemConfig()->getValue('debug', false)) { - return new QueryLogger(); - } else { - return new NullQueryLogger(); + // In debug mode, module is being activated by default + $queryLogger->activate(); } + return $queryLogger; }); $this->registerAlias('QueryLogger', \OCP\Diagnostics\IQueryLogger::class); @@ -816,7 +818,12 @@ class Server extends ServerContainer implements IServerContainer { ); }); $this->registerAlias('MimeTypeLoader', \OCP\Files\IMimeTypeLoader::class); - + $this->registerService(BundleFetcher::class, function () { + return new BundleFetcher($this->getL10N('lib')); + }); + $this->registerService(AppFetcher::class, function() { + return $this->getAppFetcher(); + }); $this->registerService(\OCP\Notification\IManager::class, function (Server $c) { return new Manager( $c->query(IValidator::class) @@ -861,7 +868,6 @@ class Server extends ServerContainer implements IServerContainer { $c->getConfig(), $c->getL10N('theming'), $c->getURLGenerator(), - new \OC_Defaults(), $c->getAppDataDir('theming'), $c->getMemCacheFactory(), new Util($c->getConfig(), $this->getRootFolder(), $this->getAppManager()) diff --git a/lib/private/Settings/Manager.php b/lib/private/Settings/Manager.php index 080b697b238..d40dfd1e417 100644 --- a/lib/private/Settings/Manager.php +++ b/lib/private/Settings/Manager.php @@ -271,7 +271,7 @@ class Manager implements IManager { public function getAdminSections() { // built-in sections $sections = [ - 0 => [new Section('server', $this->l->t('Server settings'), 0, $this->url->imagePath('settings', 'admin.svg'))], + 0 => [new Section('server', $this->l->t('Basic settings'), 0, $this->url->imagePath('settings', 'admin.svg'))], 5 => [new Section('sharing', $this->l->t('Sharing'), 0, $this->url->imagePath('core', 'actions/share.svg'))], 10 => [new Section('security', $this->l->t('Security'), 0, $this->url->imagePath('core', 'actions/password.svg'))], 45 => [new Section('encryption', $this->l->t('Encryption'), 0, $this->url->imagePath('core', 'actions/password.svg'))], diff --git a/lib/private/Setup.php b/lib/private/Setup.php index e2806efad48..b1cf289d9aa 100644 --- a/lib/private/Setup.php +++ b/lib/private/Setup.php @@ -41,6 +41,7 @@ namespace OC; use bantu\IniGetWrapper\IniGetWrapper; use Exception; +use OC\App\AppStore\Bundles\BundleFetcher; use OCP\Defaults; use OCP\IL10N; use OCP\ILogger; @@ -63,11 +64,12 @@ class Setup { /** * @param SystemConfig $config * @param IniGetWrapper $iniWrapper + * @param IL10N $l10n * @param Defaults $defaults * @param ILogger $logger * @param ISecureRandom $random */ - function __construct(SystemConfig $config, + public function __construct(SystemConfig $config, IniGetWrapper $iniWrapper, IL10N $l10n, Defaults $defaults, @@ -364,8 +366,22 @@ class Setup { $group =\OC::$server->getGroupManager()->createGroup('admin'); $group->addUser($user); - //guess what this does + // Install shipped apps and specified app bundles Installer::installShippedApps(); + $installer = new Installer( + \OC::$server->getAppFetcher(), + \OC::$server->getHTTPClientService(), + \OC::$server->getTempManager(), + \OC::$server->getLogger(), + \OC::$server->getConfig() + ); + $bundleFetcher = new BundleFetcher(\OC::$server->getL10N('lib')); + $defaultInstallationBundles = $bundleFetcher->getDefaultInstallationBundle(); + foreach($defaultInstallationBundles as $bundle) { + try { + $installer->installAppBundle($bundle); + } catch (Exception $e) {} + } // create empty file in data dir, so we can later find // out that this is indeed an ownCloud data directory diff --git a/lib/private/Share/Constants.php b/lib/private/Share/Constants.php index 1eb5b1e078b..95480975da5 100644 --- a/lib/private/Share/Constants.php +++ b/lib/private/Share/Constants.php @@ -33,6 +33,7 @@ class Constants { const SHARE_TYPE_CONTACT = 5; // ToDo Check if it is still in use otherwise remove it const SHARE_TYPE_REMOTE = 6; const SHARE_TYPE_CIRCLE = 7; + const SHARE_TYPE_GUEST = 8; const FORMAT_NONE = -1; const FORMAT_STATUSES = -2; diff --git a/lib/private/Updater.php b/lib/private/Updater.php index 4427e4c48dc..c080ee0eb43 100644 --- a/lib/private/Updater.php +++ b/lib/private/Updater.php @@ -243,11 +243,11 @@ class Updater extends BasicEmitter { } // update all shipped apps - $disabledApps = $this->checkAppsRequirements(); + $this->checkAppsRequirements(); $this->doAppUpgrade(); // upgrade appstore apps - $this->upgradeAppStoreApps($disabledApps); + $this->upgradeAppStoreApps(\OC::$server->getAppManager()->getInstalledApps()); // install new shipped apps on upgrade OC_App::loadApps('authentication'); @@ -441,7 +441,8 @@ class Updater extends BasicEmitter { \OC::$server->getAppFetcher(), \OC::$server->getHTTPClientService(), \OC::$server->getTempManager(), - $this->log + $this->log, + \OC::$server->getConfig() ); if (Installer::isUpdateAvailable($app, \OC::$server->getAppFetcher())) { $this->emit('\OC\Updater', 'upgradeAppStoreApp', [$app]); diff --git a/lib/private/User/Manager.php b/lib/private/User/Manager.php index 6220613cbb1..0477f23e552 100644 --- a/lib/private/User/Manager.php +++ b/lib/private/User/Manager.php @@ -38,6 +38,7 @@ use OCP\IUser; use OCP\IUserBackend; use OCP\IUserManager; use OCP\IConfig; +use OCP\UserInterface; /** * Class Manager @@ -279,49 +280,64 @@ class Manager extends PublicEmitter implements IUserManager { /** * @param string $uid * @param string $password - * @throws \Exception - * @return bool|\OC\User\User the created user or false + * @throws \InvalidArgumentException + * @return bool|IUser the created user or false */ public function createUser($uid, $password) { + foreach ($this->backends as $backend) { + if ($backend->implementsActions(Backend::CREATE_USER)) { + return $this->createUserFromBackend($uid, $password, $backend); + } + } + + return false; + } + + /** + * @param string $uid + * @param string $password + * @param UserInterface $backend + * @return IUser|null + * @throws \InvalidArgumentException + */ + public function createUserFromBackend($uid, $password, UserInterface $backend) { $l = \OC::$server->getL10N('lib'); + // Check the name for bad characters // Allowed are: "a-z", "A-Z", "0-9" and "_.@-'" if (preg_match('/[^a-zA-Z0-9 _\.@\-\']/', $uid)) { - throw new \Exception($l->t('Only the following characters are allowed in a username:' + throw new \InvalidArgumentException($l->t('Only the following characters are allowed in a username:' . ' "a-z", "A-Z", "0-9", and "_.@-\'"')); } // No empty username - if (trim($uid) == '') { - throw new \Exception($l->t('A valid username must be provided')); + if (trim($uid) === '') { + throw new \InvalidArgumentException($l->t('A valid username must be provided')); } // No whitespace at the beginning or at the end if (trim($uid) !== $uid) { - throw new \Exception($l->t('Username contains whitespace at the beginning or at the end')); + throw new \InvalidArgumentException($l->t('Username contains whitespace at the beginning or at the end')); } // Username only consists of 1 or 2 dots (directory traversal) if ($uid === '.' || $uid === '..') { - throw new \Exception($l->t('Username must not consist of dots only')); + throw new \InvalidArgumentException($l->t('Username must not consist of dots only')); } // No empty password - if (trim($password) == '') { - throw new \Exception($l->t('A valid password must be provided')); + if (trim($password) === '') { + throw new \InvalidArgumentException($l->t('A valid password must be provided')); } // Check if user already exists if ($this->userExists($uid)) { - throw new \Exception($l->t('The username is already being used')); + throw new \InvalidArgumentException($l->t('The username is already being used')); } - $this->emit('\OC\User', 'preCreateUser', array($uid, $password)); - foreach ($this->backends as $backend) { - if ($backend->implementsActions(Backend::CREATE_USER)) { - $backend->createUser($uid, $password); - $user = $this->getUserObject($uid, $backend); - $this->emit('\OC\User', 'postCreateUser', array($user, $password)); - return $user; - } + $this->emit('\OC\User', 'preCreateUser', [$uid, $password]); + $backend->createUser($uid, $password); + $user = $this->getUserObject($uid, $backend); + if ($user instanceof IUser) { + $this->emit('\OC\User', 'postCreateUser', [$user, $password]); } - return false; + return $user; } /** @@ -396,6 +412,28 @@ class Manager extends PublicEmitter implements IUserManager { * returns how many users have logged in once * * @return int + * @since 12.0.0 + */ + public function countDisabledUsers() { + $queryBuilder = \OC::$server->getDatabaseConnection()->getQueryBuilder(); + $queryBuilder->select($queryBuilder->createFunction('COUNT(*)')) + ->from('preferences') + ->where($queryBuilder->expr()->eq('appid', $queryBuilder->createNamedParameter('core'))) + ->andWhere($queryBuilder->expr()->eq('configkey', $queryBuilder->createNamedParameter('enabled'))) + ->andWhere($queryBuilder->expr()->eq('configvalue', $queryBuilder->createNamedParameter('false'))); + + $query = $queryBuilder->execute(); + + $result = (int)$query->fetchColumn(); + $query->closeCursor(); + + return $result; + } + + /** + * returns how many users have logged in once + * + * @return int * @since 11.0.0 */ public function countSeenUsers() { diff --git a/lib/private/legacy/app.php b/lib/private/legacy/app.php index 3800b8b770e..111da7d0d40 100644 --- a/lib/private/legacy/app.php +++ b/lib/private/legacy/app.php @@ -365,7 +365,8 @@ class OC_App { \OC::$server->getAppFetcher(), \OC::$server->getHTTPClientService(), \OC::$server->getTempManager(), - \OC::$server->getLogger() + \OC::$server->getLogger(), + \OC::$server->getConfig() ); $isDownloaded = $installer->isDownloaded($appId); @@ -427,7 +428,8 @@ class OC_App { \OC::$server->getAppFetcher(), \OC::$server->getHTTPClientService(), \OC::$server->getTempManager(), - \OC::$server->getLogger() + \OC::$server->getLogger(), + \OC::$server->getConfig() ); return $installer->removeApp($app); } diff --git a/lib/private/legacy/db/statementwrapper.php b/lib/private/legacy/db/statementwrapper.php index dedaf2d8cef..53f7b484d04 100644 --- a/lib/private/legacy/db/statementwrapper.php +++ b/lib/private/legacy/db/statementwrapper.php @@ -64,14 +64,7 @@ class OC_DB_StatementWrapper { * @param array $input * @return \OC_DB_StatementWrapper|int */ - public function execute($input=array()) { - if(\OC::$server->getSystemConfig()->getValue( "log_query", false)) { - $backTrace = debug_backtrace(); - $class = $backTrace[1]['class'] . ':' . $backTrace[1]['function']; - $file = substr($backTrace[0]['file'], strlen(\OC::$SERVERROOT)) . ':' . $backTrace[0]['line']; - $params_str = str_replace("\n", " ", var_export($input, true)); - \OCP\Util::writeLog('core', "DB execute with arguments : $params_str in $class; $file", \OCP\Util::DEBUG); - } + public function execute($input= []) { $this->lastArguments = $input; if (count($input) > 0) { $result = $this->statement->execute($input); diff --git a/lib/private/legacy/util.php b/lib/private/legacy/util.php index 9516a67af48..d49599cb8a1 100644 --- a/lib/private/legacy/util.php +++ b/lib/private/legacy/util.php @@ -1388,6 +1388,12 @@ class OC_Util { if (\OC\Files\Filesystem::isIgnoredDir($trimmed)) { return false; } + + // detect part files + if (preg_match('/' . \OCP\Files\FileInfo::BLACKLIST_FILES_REGEX . '/', $trimmed) !== 0) { + return false; + } + foreach (str_split($trimmed) as $char) { if (strpos(\OCP\Constants::FILENAME_INVALID_CHARS, $char) !== false) { return false; diff --git a/lib/public/BackgroundJob/IJobList.php b/lib/public/BackgroundJob/IJobList.php index fbc46192227..d7c2642712c 100644 --- a/lib/public/BackgroundJob/IJobList.php +++ b/lib/public/BackgroundJob/IJobList.php @@ -91,7 +91,7 @@ interface IJobList { * @param \OCP\BackgroundJob\IJob $job * @since 7.0.0 */ - public function setLastJob($job); + public function setLastJob(IJob $job); /** * Remove the reservation for a job @@ -99,7 +99,7 @@ interface IJobList { * @param IJob $job * @since 9.1.0 */ - public function unlockJob($job); + public function unlockJob(IJob $job); /** * get the id of the last ran job @@ -115,8 +115,17 @@ interface IJobList { /** * set the lastRun of $job to now * - * @param \OCP\BackgroundJob\IJob $job + * @param IJob $job * @since 7.0.0 */ - public function setLastRun($job); + public function setLastRun(IJob $job); + + /** + * set the run duration of $job + * + * @param IJob $job + * @param $timeTaken + * @since 12.0.0 + */ + public function setExecutionTime(IJob $job, $timeTaken); } diff --git a/lib/public/Diagnostics/IEventLogger.php b/lib/public/Diagnostics/IEventLogger.php index 517a131d436..c76e96c5674 100644 --- a/lib/public/Diagnostics/IEventLogger.php +++ b/lib/public/Diagnostics/IEventLogger.php @@ -4,6 +4,7 @@ * * @author Morris Jobke <hey@morrisjobke.de> * @author Robin Appelman <robin@icewind.nl> + * @author Piotr Mrowczynski <piotr@owncloud.com> * * @license AGPL-3.0 * @@ -31,7 +32,7 @@ namespace OCP\Diagnostics; */ interface IEventLogger { /** - * Mark the start of an event + * Mark the start of an event setting its ID $id and providing event description $description. * * @param string $id * @param string $description @@ -40,7 +41,9 @@ interface IEventLogger { public function start($id, $description); /** - * Mark the end of an event + * Mark the end of an event with specific ID $id, marked by start() method. + * Ending event should store \OCP\Diagnostics\IEvent to + * be returned with getEvents() method. * * @param string $id * @since 8.0.0 @@ -48,6 +51,11 @@ interface IEventLogger { public function end($id); /** + * Mark the start and the end of an event with specific ID $id and description $description, + * explicitly marking start and end of the event, represented by $start and $end timestamps. + * Logging event should store \OCP\Diagnostics\IEvent to + * be returned with getEvents() method. + * * @param string $id * @param string $description * @param float $start @@ -57,8 +65,21 @@ interface IEventLogger { public function log($id, $description, $start, $end); /** + * This method should return all \OCP\Diagnostics\IEvent objects stored using + * start()/end() or log() methods + * * @return \OCP\Diagnostics\IEvent[] * @since 8.0.0 */ public function getEvents(); + + /** + * Activate the module for the duration of the request. Deactivated module + * does not create and store \OCP\Diagnostics\IEvent objects. + * Only activated module should create and store objects to be + * returned with getEvents() call. + * + * @since 12.0.0 + */ + public function activate(); } diff --git a/lib/public/Diagnostics/IQuery.php b/lib/public/Diagnostics/IQuery.php index 7f26bd7f1b8..ceaee191b39 100644 --- a/lib/public/Diagnostics/IQuery.php +++ b/lib/public/Diagnostics/IQuery.php @@ -59,4 +59,9 @@ interface IQuery { * @since 11.0.0 */ public function getStacktrace(); + /** + * @return array + * @since 12.0.0 + */ + public function getStart(); } diff --git a/lib/public/Diagnostics/IQueryLogger.php b/lib/public/Diagnostics/IQueryLogger.php index 58ea78795e2..32723a56cb9 100644 --- a/lib/public/Diagnostics/IQueryLogger.php +++ b/lib/public/Diagnostics/IQueryLogger.php @@ -4,6 +4,7 @@ * * @author Morris Jobke <hey@morrisjobke.de> * @author Robin Appelman <robin@icewind.nl> + * @author Piotr Mrowczynski <piotr@owncloud.com> * * @license AGPL-3.0 * @@ -33,6 +34,10 @@ use Doctrine\DBAL\Logging\SQLLogger; */ interface IQueryLogger extends SQLLogger { /** + * Mark the start of a query providing query SQL statement, its parameters and types. + * This method should be called as close to the DB as possible and after + * query is finished finalized with stopQuery() method. + * * @param string $sql * @param array $params * @param array $types @@ -41,14 +46,30 @@ interface IQueryLogger extends SQLLogger { public function startQuery($sql, array $params = null, array $types = null); /** + * Mark the end of the current active query. Ending query should store \OCP\Diagnostics\IQuery to + * be returned with getQueries() method. + * * @return mixed * @since 8.0.0 */ public function stopQuery(); /** + * This method should return all \OCP\Diagnostics\IQuery objects stored using + * startQuery()/stopQuery() methods. + * * @return \OCP\Diagnostics\IQuery[] * @since 8.0.0 */ public function getQueries(); + + /** + * Activate the module for the duration of the request. Deactivated module + * does not create and store \OCP\Diagnostics\IQuery objects. + * Only activated module should create and store objects to be + * returned with getQueries() call. + * + * @since 12.0.0 + */ + public function activate(); } diff --git a/lib/public/Files/Mount/IMountPoint.php b/lib/public/Files/Mount/IMountPoint.php index 0876d8b11d6..47830c68ffb 100644 --- a/lib/public/Files/Mount/IMountPoint.php +++ b/lib/public/Files/Mount/IMountPoint.php @@ -119,4 +119,13 @@ interface IMountPoint { * @since 9.1.0 */ public function getMountId(); + + /** + * Get the type of mount point, used to distinguish things like shares and external storages + * in the web interface + * + * @return string + * @since 12.0.0 + */ + public function getMountType(); } diff --git a/lib/public/IUserManager.php b/lib/public/IUserManager.php index 1f8c23dbedf..6c6724487de 100644 --- a/lib/public/IUserManager.php +++ b/lib/public/IUserManager.php @@ -123,13 +123,23 @@ interface IUserManager { /** * @param string $uid * @param string $password - * @throws \Exception + * @throws \InvalidArgumentException * @return bool|\OCP\IUser the created user of false * @since 8.0.0 */ public function createUser($uid, $password); /** + * @param string $uid + * @param string $password + * @param UserInterface $backend + * @return IUser|null + * @throws \InvalidArgumentException + * @since 12.0.0 + */ + public function createUserFromBackend($uid, $password, UserInterface $backend); + + /** * returns how many users per backend exist (if supported by backend) * * @return array an array of backend class as key and count number as value @@ -150,6 +160,14 @@ interface IUserManager { * @return int * @since 11.0.0 */ + public function countDisabledUsers(); + + /** + * returns how many users have logged in once + * + * @return int + * @since 11.0.0 + */ public function countSeenUsers(); /** diff --git a/settings/BackgroundJobs/VerifyUserData.php b/settings/BackgroundJobs/VerifyUserData.php new file mode 100644 index 00000000000..4a32398f6c4 --- /dev/null +++ b/settings/BackgroundJobs/VerifyUserData.php @@ -0,0 +1,273 @@ +<?php +/** + * @copyright Copyright (c) 2017 Bjoern Schiessle <bjoern@schiessle.org> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + + +namespace OC\Settings\BackgroundJobs; + + +use OC\Accounts\AccountManager; +use OC\BackgroundJob\Job; +use OC\BackgroundJob\JobList; +use OCP\AppFramework\Http; +use OCP\BackgroundJob\IJobList; +use OCP\Http\Client\IClientService; +use OCP\IConfig; +use OCP\ILogger; +use OCP\IUserManager; + +class VerifyUserData extends Job { + + /** @var bool */ + private $retainJob = true; + + /** @var int max number of attempts to send the request */ + private $maxTry = 24; + + /** @var int how much time should be between two tries (1 hour) */ + private $interval = 3600; + + /** @var AccountManager */ + private $accountManager; + + /** @var IUserManager */ + private $userManager; + + /** @var IClientService */ + private $httpClientService; + + /** @var ILogger */ + private $logger; + + /** @var string */ + private $lookupServerUrl; + + /** + * VerifyUserData constructor. + * + * @param AccountManager $accountManager + * @param IUserManager $userManager + * @param IClientService $clientService + * @param ILogger $logger + * @param IConfig $config + */ + public function __construct(AccountManager $accountManager, + IUserManager $userManager, + IClientService $clientService, + ILogger $logger, + IConfig $config + ) { + $this->accountManager = $accountManager; + $this->userManager = $userManager; + $this->httpClientService = $clientService; + $this->logger = $logger; + + $lookupServerUrl = $config->getSystemValue('lookup_server', 'https://lookup.nextcloud.com'); + $this->lookupServerUrl = rtrim($lookupServerUrl, '/'); + } + + /** + * run the job, then remove it from the jobList + * + * @param JobList $jobList + * @param ILogger $logger + */ + public function execute($jobList, ILogger $logger = null) { + + if ($this->shouldRun($this->argument)) { + parent::execute($jobList, $logger); + $jobList->remove($this, $this->argument); + if ($this->retainJob) { + $this->reAddJob($jobList, $this->argument); + } + } + + } + + protected function run($argument) { + + $try = (int)$argument['try'] + 1; + + switch($argument['type']) { + case AccountManager::PROPERTY_WEBSITE: + $result = $this->verifyWebsite($argument); + break; + case AccountManager::PROPERTY_TWITTER: + case AccountManager::PROPERTY_EMAIL: + $result = $this->verifyViaLookupServer($argument, $argument['type']); + break; + default: + // no valid type given, no need to retry + $this->logger->error($argument['type'] . ' is no valid type for user account data.'); + $result = true; + } + + if ($result === true || $try > $this->maxTry) { + $this->retainJob = false; + } + } + + /** + * verify web page + * + * @param array $argument + * @return bool true if we could check the verification code, otherwise false + */ + protected function verifyWebsite(array $argument) { + + $result = false; + + $url = rtrim($argument['data'], '/') . '/.well-known/' . 'CloudIdVerificationCode.txt'; + + $client = $this->httpClientService->newClient(); + try { + $response = $client->get($url); + } catch (\Exception $e) { + return false; + } + + if ($response->getStatusCode() === Http::STATUS_OK) { + $result = true; + $publishedCode = $response->getBody(); + // remove new lines and spaces + $publishedCodeSanitized = trim(preg_replace('/\s\s+/', ' ', $publishedCode)); + $user = $this->userManager->get($argument['uid']); + // we don't check a valid user -> give up + if ($user === null) { + $this->logger->error($argument['uid'] . ' doesn\'t exist, can\'t verify user data.'); + return $result; + } + $userData = $this->accountManager->getUser($user); + + if ($publishedCodeSanitized === $argument['verificationCode']) { + $userData[AccountManager::PROPERTY_WEBSITE]['verified'] = AccountManager::VERIFIED; + } else { + $userData[AccountManager::PROPERTY_WEBSITE]['verified'] = AccountManager::NOT_VERIFIED; + } + + $this->accountManager->updateUser($user, $userData); + } + + return $result; + } + + /** + * verify email address + * + * @param array $argument + * @param string $dataType + * @return bool true if we could check the verification code, otherwise false + */ + protected function verifyViaLookupServer(array $argument, $dataType) { + + $user = $this->userManager->get($argument['uid']); + + // we don't check a valid user -> give up + if ($user === null) { + $this->logger->error($argument['uid'] . ' doesn\'t exist, can\'t verify user data.'); + return true; + } + + $localUserData = $this->accountManager->getUser($user); + $cloudId = $user->getCloudId(); + + // ask lookup-server for user data + $lookupServerData = $this->queryLookupServer($cloudId); + + // for some reasons we couldn't read any data from the lookup server, try again later + if (empty($lookupServerData)) { + return false; + } + + // lookup server has verification data for wrong user data (e.g. email address), try again later + if ($lookupServerData[$dataType]['value'] !== $argument['data']) { + return false; + } + + // lookup server hasn't verified the email address so far, try again later + if ($lookupServerData[$dataType]['verified'] === AccountManager::NOT_VERIFIED) { + return false; + } + + $localUserData[$dataType]['verified'] = AccountManager::VERIFIED; + $this->accountManager->updateUser($user, $localUserData); + + return true; + } + + /** + * @param string $cloudId + * @return array + */ + protected function queryLookupServer($cloudId) { + try { + $client = $this->httpClientService->newClient(); + $response = $client->get( + $this->lookupServerUrl . '/users?search=' . urlencode($cloudId) . '&exactCloudId=1', + [ + 'timeout' => 10, + 'connect_timeout' => 3, + ] + ); + + $body = json_decode($response->getBody(), true); + + if ($body['federationId'] === $cloudId) { + return $body; + } + + } catch (\Exception $e) { + // do nothing, we will just re-try later + } + + return []; + } + + /** + * re-add background job with new arguments + * + * @param IJobList $jobList + * @param array $argument + */ + protected function reAddJob(IJobList $jobList, array $argument) { + $jobList->add('OC\Settings\BackgroundJobs\VerifyUserData', + [ + 'verificationCode' => $argument['verificationCode'], + 'data' => $argument['data'], + 'type' => $argument['type'], + 'uid' => $argument['uid'], + 'try' => (int)$argument['try'] + 1, + 'lastRun' => time() + ] + ); + } + + /** + * test if it is time for the next run + * + * @param array $argument + * @return bool + */ + protected function shouldRun(array $argument) { + $lastRun = (int)$argument['lastRun']; + return ((time() - $lastRun) > $this->interval); + } + +} diff --git a/settings/Controller/AppSettingsController.php b/settings/Controller/AppSettingsController.php index 7be6c2bf562..ac77b2e7dd6 100644 --- a/settings/Controller/AppSettingsController.php +++ b/settings/Controller/AppSettingsController.php @@ -27,6 +27,7 @@ namespace OC\Settings\Controller; +use OC\App\AppStore\Bundles\BundleFetcher; use OC\App\AppStore\Fetcher\AppFetcher; use OC\App\AppStore\Fetcher\CategoryFetcher; use OC\App\AppStore\Version\VersionParser; @@ -50,6 +51,7 @@ class AppSettingsController extends Controller { const CAT_ENABLED = 0; const CAT_DISABLED = 1; const CAT_ALL_INSTALLED = 2; + const CAT_APP_BUNDLES = 3; /** @var \OCP\IL10N */ private $l10n; @@ -65,6 +67,8 @@ class AppSettingsController extends Controller { private $appFetcher; /** @var IFactory */ private $l10nFactory; + /** @var BundleFetcher */ + private $bundleFetcher; /** * @param string $appName @@ -76,6 +80,7 @@ class AppSettingsController extends Controller { * @param CategoryFetcher $categoryFetcher * @param AppFetcher $appFetcher * @param IFactory $l10nFactory + * @param BundleFetcher $bundleFetcher */ public function __construct($appName, IRequest $request, @@ -85,7 +90,8 @@ class AppSettingsController extends Controller { IAppManager $appManager, CategoryFetcher $categoryFetcher, AppFetcher $appFetcher, - IFactory $l10nFactory) { + IFactory $l10nFactory, + BundleFetcher $bundleFetcher) { parent::__construct($appName, $request); $this->l10n = $l10n; $this->config = $config; @@ -94,6 +100,7 @@ class AppSettingsController extends Controller { $this->categoryFetcher = $categoryFetcher; $this->appFetcher = $appFetcher; $this->l10nFactory = $l10nFactory; + $this->bundleFetcher = $bundleFetcher; } /** @@ -120,18 +127,14 @@ class AppSettingsController extends Controller { return $templateResponse; } - /** - * Get all available categories - * - * @return JSONResponse - */ - public function listCategories() { + private function getAllCategories() { $currentLanguage = substr($this->l10nFactory->findLanguage(), 0, 2); $formattedCategories = [ ['id' => self::CAT_ALL_INSTALLED, 'ident' => 'installed', 'displayName' => (string)$this->l10n->t('Your apps')], ['id' => self::CAT_ENABLED, 'ident' => 'enabled', 'displayName' => (string)$this->l10n->t('Enabled apps')], ['id' => self::CAT_DISABLED, 'ident' => 'disabled', 'displayName' => (string)$this->l10n->t('Disabled apps')], + ['id' => self::CAT_APP_BUNDLES, 'ident' => 'app-bundles', 'displayName' => (string)$this->l10n->t('App bundles')], ]; $categories = $this->categoryFetcher->get(); foreach($categories as $category) { @@ -142,7 +145,16 @@ class AppSettingsController extends Controller { ]; } - return new JSONResponse($formattedCategories); + return $formattedCategories; + } + + /** + * Get all available categories + * + * @return JSONResponse + */ + public function listCategories() { + return new JSONResponse($this->getAllCategories()); } /** @@ -334,6 +346,41 @@ class AppSettingsController extends Controller { return ($a < $b) ? -1 : 1; }); break; + case 'app-bundles': + $bundles = $this->bundleFetcher->getBundles(); + $apps = []; + foreach($bundles as $bundle) { + $newCategory = true; + $allApps = $appClass->listAllApps(); + $categories = $this->getAllCategories(); + foreach($categories as $singleCategory) { + $newApps = $this->getAppsForCategory($singleCategory['id']); + foreach($allApps as $app) { + foreach($newApps as $key => $newApp) { + if($app['id'] === $newApp['id']) { + unset($newApps[$key]); + } + } + } + $allApps = array_merge($allApps, $newApps); + } + + foreach($bundle->getAppIdentifiers() as $identifier) { + foreach($allApps as $app) { + if($app['id'] === $identifier) { + if($newCategory) { + $app['newCategory'] = true; + $app['categoryName'] = $bundle->getName(); + } + $app['bundleId'] = $bundle->getIdentifier(); + $newCategory = false; + $apps[] = $app; + continue; + } + } + } + } + break; default: $apps = $this->getAppsForCategory($category); diff --git a/settings/Controller/MailSettingsController.php b/settings/Controller/MailSettingsController.php index df13b46b13c..de10c077ede 100644 --- a/settings/Controller/MailSettingsController.php +++ b/settings/Controller/MailSettingsController.php @@ -160,7 +160,7 @@ class MailSettingsController extends Controller { $message->setPlainBody($template->renderText()); $errors = $this->mailer->send($message); if (!empty($errors)) { - throw new \RuntimeException($this->l10n->t('Mail could not be sent. Check your mail server log')); + throw new \RuntimeException($this->l10n->t('Email could not be sent. Check your mail server log')); } return new DataResponse(); } catch (\Exception $e) { diff --git a/settings/Controller/UsersController.php b/settings/Controller/UsersController.php index b42d4faa569..4fed2655940 100644 --- a/settings/Controller/UsersController.php +++ b/settings/Controller/UsersController.php @@ -34,9 +34,12 @@ use OC\Accounts\AccountManager; use OC\AppFramework\Http; use OC\ForbiddenException; use OC\Settings\Mailer\NewUserMailHelper; +use OC\Security\IdentityProof\Manager; use OCP\App\IAppManager; use OCP\AppFramework\Controller; use OCP\AppFramework\Http\DataResponse; +use OCP\AppFramework\Utility\ITimeFactory; +use OCP\BackgroundJob\IJobList; use OCP\IConfig; use OCP\IGroupManager; use OCP\IL10N; @@ -48,6 +51,7 @@ use OCP\IUserManager; use OCP\IUserSession; use OCP\Mail\IMailer; use OCP\IAvatarManager; +use OCP\Security\ICrypto; use OCP\Security\ISecureRandom; /** @@ -82,6 +86,14 @@ class UsersController extends Controller { private $secureRandom; /** @var NewUserMailHelper */ private $newUserMailHelper; + /** @var ITimeFactory */ + private $timeFactory; + /** @var ICrypto */ + private $crypto; + /** @var Manager */ + private $keyManager; + /** @var IJobList */ + private $jobList; /** * @param string $appName @@ -100,6 +112,10 @@ class UsersController extends Controller { * @param AccountManager $accountManager * @param ISecureRandom $secureRandom * @param NewUserMailHelper $newUserMailHelper + * @param ITimeFactory $timeFactory + * @param ICrypto $crypto + * @param Manager $keyManager + * @param IJobList $jobList */ public function __construct($appName, IRequest $request, @@ -116,7 +132,11 @@ class UsersController extends Controller { IAvatarManager $avatarManager, AccountManager $accountManager, ISecureRandom $secureRandom, - NewUserMailHelper $newUserMailHelper) { + NewUserMailHelper $newUserMailHelper, + ITimeFactory $timeFactory, + ICrypto $crypto, + Manager $keyManager, + IJobList $jobList) { parent::__construct($appName, $request); $this->userManager = $userManager; $this->groupManager = $groupManager; @@ -130,6 +150,10 @@ class UsersController extends Controller { $this->accountManager = $accountManager; $this->secureRandom = $secureRandom; $this->newUserMailHelper = $newUserMailHelper; + $this->timeFactory = $timeFactory; + $this->crypto = $crypto; + $this->keyManager = $keyManager; + $this->jobList = $jobList; // check for encryption state - TODO see formatUserForIndex $this->isEncryptionAppEnabled = $appManager->isEnabledForUser('encryption'); @@ -201,6 +225,7 @@ class UsersController extends Controller { 'email' => $displayName, 'isRestoreDisabled' => !$restorePossible, 'isAvatarAvailable' => $avatarAvailable, + 'isEnabled' => $user->isEnabled(), ]; } @@ -229,11 +254,6 @@ class UsersController extends Controller { * TODO: Tidy up and write unit tests - code is mainly static method calls */ public function index($offset = 0, $limit = 10, $gid = '', $pattern = '', $backend = '') { - // FIXME: The JS sends the group '_everyone' instead of no GID for the "all users" group. - if($gid === '_everyone') { - $gid = ''; - } - // Remove backends if(!empty($backend)) { $activeBackends = $this->userManager->getBackends(); @@ -248,15 +268,18 @@ class UsersController extends Controller { $users = []; if ($this->isAdmin) { - - if($gid !== '') { + if($gid !== '' && $gid !== '_disabledUsers') { $batch = $this->getUsersForUID($this->groupManager->displayNamesInGroup($gid, $pattern, $limit, $offset)); } else { $batch = $this->userManager->search($pattern, $limit, $offset); } foreach ($batch as $user) { - $users[] = $this->formatUserForIndex($user); + if( ($gid !== '_disabledUsers' && $user->isEnabled()) || + ($gid === '_disabledUsers' && !$user->isEnabled()) + ) { + $users[] = $this->formatUserForIndex($user); + } } } else { @@ -269,7 +292,7 @@ class UsersController extends Controller { $subAdminOfGroups = $gids; // Set the $gid parameter to an empty value if the subadmin has no rights to access a specific group - if($gid !== '' && !in_array($gid, $subAdminOfGroups)) { + if($gid !== '' && $gid !== '_disabledUsers' && !in_array($gid, $subAdminOfGroups)) { $gid = ''; } @@ -294,7 +317,11 @@ class UsersController extends Controller { $this->groupManager->getUserGroupIds($user), $subAdminOfGroups )); - $users[] = $this->formatUserForIndex($user, $userGroups); + if( ($gid !== '_disabledUsers' && $user->isEnabled()) || + ($gid === '_disabledUsers' && !$user->isEnabled()) + ) { + $users[] = $this->formatUserForIndex($user, $userGroups); + } } } @@ -311,12 +338,12 @@ class UsersController extends Controller { * @param string $email * @return DataResponse */ - public function create($username, $password, array $groups=array(), $email='') { + public function create($username, $password, array $groups=[], $email='') { if($email !== '' && !$this->mailer->validateMailAddress($email)) { return new DataResponse( - array( + [ 'message' => (string)$this->l10n->t('Invalid mail address') - ), + ], Http::STATUS_UNPROCESSABLE_ENTITY ); } @@ -340,9 +367,9 @@ class UsersController extends Controller { if (empty($groups)) { return new DataResponse( - array( + [ 'message' => $this->l10n->t('No valid group selected'), - ), + ], Http::STATUS_FORBIDDEN ); } @@ -350,9 +377,9 @@ class UsersController extends Controller { if ($this->userManager->userExists($username)) { return new DataResponse( - array( + [ 'message' => (string)$this->l10n->t('A user with that name already exists.') - ), + ], Http::STATUS_CONFLICT ); } @@ -361,9 +388,9 @@ class UsersController extends Controller { 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 ); } @@ -380,9 +407,9 @@ class UsersController extends Controller { $message = $this->l10n->t('Unable to create user.'); } return new DataResponse( - array( + [ 'message' => (string) $message, - ), + ], Http::STATUS_FORBIDDEN ); } @@ -407,7 +434,7 @@ class UsersController extends Controller { $emailTemplate = $this->newUserMailHelper->generateTemplate($user, $generatePasswordResetToken); $this->newUserMailHelper->sendMail($user, $emailTemplate); } catch(\Exception $e) { - $this->log->error("Can't send new user mail to $email: " . $e->getMessage(), array('app' => 'settings')); + $this->log->error("Can't send new user mail to $email: " . $e->getMessage(), ['app' => 'settings']); } } // fetch users groups @@ -420,9 +447,9 @@ class UsersController extends Controller { } return new DataResponse( - array( - 'message' => (string)$this->l10n->t('Unable to create user.') - ), + [ + 'message' => (string) $this->l10n->t('Unable to create user.') + ], Http::STATUS_FORBIDDEN ); @@ -441,24 +468,24 @@ class UsersController extends Controller { if($userId === $id) { return new DataResponse( - array( + [ 'status' => 'error', - 'data' => array( - 'message' => (string)$this->l10n->t('Unable to delete user.') - ) - ), + 'data' => [ + 'message' => (string) $this->l10n->t('Unable to delete user.') + ] + ], Http::STATUS_FORBIDDEN ); } if(!$this->isAdmin && !$this->groupManager->getSubAdmin()->isUserAccessible($this->userSession->getUser(), $user)) { return new DataResponse( - array( + [ 'status' => 'error', - 'data' => array( + 'data' => [ 'message' => (string)$this->l10n->t('Authentication error') - ) - ), + ] + ], Http::STATUS_FORBIDDEN ); } @@ -466,30 +493,186 @@ class UsersController extends Controller { if($user) { if($user->delete()) { return new DataResponse( - array( + [ 'status' => 'success', - 'data' => array( + 'data' => [ 'username' => $id - ) - ), + ] + ], Http::STATUS_NO_CONTENT ); } } return new DataResponse( - array( + [ 'status' => 'error', - 'data' => array( + 'data' => [ 'message' => (string)$this->l10n->t('Unable to delete user.') - ) - ), + ] + ], Http::STATUS_FORBIDDEN ); } /** * @NoAdminRequired + * + * @param string $id + * @param int $enabled + * @return DataResponse + */ + public function setEnabled($id, $enabled) { + $enabled = (bool)$enabled; + if($enabled) { + $errorMsgGeneral = (string) $this->l10n->t('Error while enabling user.'); + } else { + $errorMsgGeneral = (string) $this->l10n->t('Error while disabling user.'); + } + + $userId = $this->userSession->getUser()->getUID(); + $user = $this->userManager->get($id); + + if ($userId === $id) { + return new DataResponse( + [ + 'status' => 'error', + 'data' => [ + 'message' => $errorMsgGeneral + ] + ], Http::STATUS_FORBIDDEN + ); + } + + if($user) { + if (!$this->isAdmin && !$this->groupManager->getSubAdmin()->isUserAccessible($this->userSession->getUser(), $user)) { + return new DataResponse( + [ + 'status' => 'error', + 'data' => [ + 'message' => (string) $this->l10n->t('Authentication error') + ] + ], + Http::STATUS_FORBIDDEN + ); + } + + $user->setEnabled($enabled); + return new DataResponse( + [ + 'status' => 'success', + 'data' => [ + 'username' => $id, + 'enabled' => $enabled + ] + ] + ); + } else { + return new DataResponse( + [ + 'status' => 'error', + 'data' => [ + 'message' => $errorMsgGeneral + ] + ], + Http::STATUS_FORBIDDEN + ); + } + + } + + /** + * Set the mail address of a user + * + * @NoAdminRequired + * @NoSubadminRequired + * @PasswordConfirmationRequired + * + * @param string $account + * @param bool $onlyVerificationCode only return verification code without updating the data + * @return DataResponse + */ + public function getVerificationCode($account, $onlyVerificationCode) { + + $user = $this->userSession->getUser(); + + if ($user === null) { + return new DataResponse([], Http::STATUS_BAD_REQUEST); + } + + $accountData = $this->accountManager->getUser($user); + $cloudId = $user->getCloudId(); + $message = "Use my Federated Cloud ID to share with me: " . $cloudId; + $signature = $this->signMessage($user, $message); + + $code = $message . ' ' . $signature; + $codeMd5 = $message . ' ' . md5($signature); + + switch ($account) { + case 'verify-twitter': + $accountData[AccountManager::PROPERTY_TWITTER]['verified'] = AccountManager::VERIFICATION_IN_PROGRESS; + $msg = $this->l10n->t('In order to verify your Twitter account post following tweet on Twitter (please make sure to post it without any line breaks):'); + $code = $codeMd5; + $type = AccountManager::PROPERTY_TWITTER; + $data = $accountData[AccountManager::PROPERTY_TWITTER]['value']; + $accountData[AccountManager::PROPERTY_TWITTER]['signature'] = $signature; + break; + case 'verify-website': + $accountData[AccountManager::PROPERTY_WEBSITE]['verified'] = AccountManager::VERIFICATION_IN_PROGRESS; + $msg = $this->l10n->t('In order to verify your Website store following content in your web-root at \'.well-known/CloudIdVerificationCode.txt\' (please make sure that the complete text is in one line):'); + $type = AccountManager::PROPERTY_WEBSITE; + $data = $accountData[AccountManager::PROPERTY_WEBSITE]['value']; + $accountData[AccountManager::PROPERTY_WEBSITE]['signature'] = $signature; + break; + default: + return new DataResponse([], Http::STATUS_BAD_REQUEST); + } + + if ($onlyVerificationCode === false) { + $this->accountManager->updateUser($user, $accountData); + + $this->jobList->add('OC\Settings\BackgroundJobs\VerifyUserData', + [ + 'verificationCode' => $code, + 'data' => $data, + 'type' => $type, + 'uid' => $user->getUID(), + 'try' => 0, + 'lastRun' => $this->getCurrentTime() + ] + ); + } + + return new DataResponse(['msg' => $msg, 'code' => $code]); + } + + /** + * get current timestamp + * + * @return int + */ + protected function getCurrentTime() { + return time(); + } + + /** + * sign message with users private key + * + * @param IUser $user + * @param string $message + * + * @return string base64 encoded signature + */ + protected function signMessage(IUser $user, $message) { + $privateKey = $this->keyManager->getKey($user)->getPrivate(); + openssl_sign(json_encode($message), $signature, $privateKey, OPENSSL_ALGO_SHA512); + $signatureBase64 = base64_encode($signature); + + return $signatureBase64; + } + + /** + * @NoAdminRequired * @NoSubadminRequired * @PasswordConfirmationRequired * @@ -523,14 +706,14 @@ class UsersController extends Controller { $twitterScope ) { - if(!empty($email) && !$this->mailer->validateMailAddress($email)) { + if (!empty($email) && !$this->mailer->validateMailAddress($email)) { return new DataResponse( - array( + [ 'status' => 'error', - 'data' => array( - 'message' => (string)$this->l10n->t('Invalid mail address') - ) - ), + 'data' => [ + 'message' => (string) $this->l10n->t('Invalid mail address') + ] + ], Http::STATUS_UNPROCESSABLE_ENTITY ); } @@ -550,9 +733,9 @@ class UsersController extends Controller { try { $this->saveUserSettings($user, $data); return new DataResponse( - array( + [ 'status' => 'success', - 'data' => array( + 'data' => [ 'userId' => $user->getUID(), 'avatarScope' => $avatarScope, 'displayname' => $displayname, @@ -563,9 +746,9 @@ class UsersController extends Controller { 'websiteScope' => $websiteScope, 'address' => $address, 'addressScope' => $addressScope, - 'message' => (string)$this->l10n->t('Settings saved') - ) - ), + 'message' => (string) $this->l10n->t('Settings saved') + ] + ], Http::STATUS_OK ); } catch (ForbiddenException $e) { @@ -731,36 +914,36 @@ class UsersController extends Controller { && !$this->groupManager->getSubAdmin()->isUserAccessible($this->userSession->getUser(), $user) ) { return new DataResponse( - array( + [ 'status' => 'error', - 'data' => array( - 'message' => (string)$this->l10n->t('Forbidden') - ) - ), + 'data' => [ + 'message' => (string) $this->l10n->t('Forbidden') + ] + ], Http::STATUS_FORBIDDEN ); } if($mailAddress !== '' && !$this->mailer->validateMailAddress($mailAddress)) { return new DataResponse( - array( + [ 'status' => 'error', - 'data' => array( - 'message' => (string)$this->l10n->t('Invalid mail address') - ) - ), + 'data' => [ + 'message' => (string) $this->l10n->t('Invalid mail address') + ] + ], Http::STATUS_UNPROCESSABLE_ENTITY ); } if (!$user) { return new DataResponse( - array( + [ 'status' => 'error', - 'data' => array( - 'message' => (string)$this->l10n->t('Invalid user') - ) - ), + 'data' => [ + 'message' => (string) $this->l10n->t('Invalid user') + ] + ], Http::STATUS_UNPROCESSABLE_ENTITY ); } @@ -768,12 +951,12 @@ class UsersController extends Controller { // for the permission of setting a email address if (!$user->canChangeDisplayName()) { return new DataResponse( - array( + [ 'status' => 'error', - 'data' => array( - 'message' => (string)$this->l10n->t('Unable to change mail address') - ) - ), + 'data' => [ + 'message' => (string) $this->l10n->t('Unable to change mail address') + ] + ], Http::STATUS_FORBIDDEN ); } @@ -784,14 +967,14 @@ class UsersController extends Controller { try { $this->saveUserSettings($user, $userData); return new DataResponse( - array( + [ 'status' => 'success', - 'data' => array( + 'data' => [ 'username' => $id, 'mailAddress' => $mailAddress, - 'message' => (string)$this->l10n->t('Email saved') - ) - ), + 'message' => (string) $this->l10n->t('Email saved') + ] + ], Http::STATUS_OK ); } catch (ForbiddenException $e) { diff --git a/settings/ajax/disableapp.php b/settings/ajax/disableapp.php index 8edd1c1453e..9b76236a15b 100644 --- a/settings/ajax/disableapp.php +++ b/settings/ajax/disableapp.php @@ -36,8 +36,9 @@ if (!array_key_exists('appid', $_POST)) { exit; } -$appId = (string)$_POST['appid']; -$appId = OC_App::cleanAppId($appId); - -OC_App::disable($appId); +$appIds = (array)$_POST['appid']; +foreach($appIds as $appId) { + $appId = OC_App::cleanAppId($appId); + OC_App::disable($appId); +} OC_JSON::success(); diff --git a/settings/ajax/enableapp.php b/settings/ajax/enableapp.php index b6d62671a63..4c4fa0be666 100644 --- a/settings/ajax/enableapp.php +++ b/settings/ajax/enableapp.php @@ -36,13 +36,20 @@ if ($lastConfirm < (time() - 30 * 60 + 15)) { // allow 15 seconds delay } $groups = isset($_POST['groups']) ? (array)$_POST['groups'] : null; +$appIds = isset($_POST['appIds']) ? (array)$_POST['appIds'] : []; try { - $app = new OC_App(); - $appId = (string)$_POST['appid']; - $appId = OC_App::cleanAppId($appId); - $app->enable($appId, $groups); - OC_JSON::success(['data' => ['update_required' => \OC_App::shouldUpgrade($appId)]]); + $updateRequired = false; + foreach($appIds as $appId) { + $app = new OC_App(); + $appId = OC_App::cleanAppId($appId); + $app->enable($appId, $groups); + if(\OC_App::shouldUpgrade($appId)) { + $updateRequired = true; + } + } + + OC_JSON::success(['data' => ['update_required' => $updateRequired]]); } catch (Exception $e) { \OCP\Util::writeLog('core', $e->getMessage(), \OCP\Util::ERROR); OC_JSON::error(array("data" => array("message" => $e->getMessage()) )); diff --git a/settings/ajax/updateapp.php b/settings/ajax/updateapp.php index 3020f828577..bcf8e149140 100644 --- a/settings/ajax/updateapp.php +++ b/settings/ajax/updateapp.php @@ -44,7 +44,8 @@ try { \OC::$server->getAppFetcher(), \OC::$server->getHTTPClientService(), \OC::$server->getTempManager(), - \OC::$server->getLogger() + \OC::$server->getLogger(), + \OC::$server->getConfig() ); $result = $installer->updateAppstoreApp($appId); $config->setSystemValue('maintenance', false); diff --git a/settings/css/settings.css b/settings/css/settings.css index 7e91877773e..0777f7e4cf4 100644 --- a/settings/css/settings.css +++ b/settings/css/settings.css @@ -26,6 +26,9 @@ input#openid, input#webdav { width:20em; } .nav-icon-second-factor-backup-codes { background-image: url('../img/password.svg?v=1'); } +.nav-icon-ssl-root-certificate { + background-image: url('../img/password.svg?v=1'); +} #avatarform { min-width: 145px; @@ -135,6 +138,35 @@ input#openid, input#webdav { width:20em; } top: 82px; pointer-events: none; } + +/* verify accounts */ +#personal-settings-container .verify { + position: absolute; + right: 14px; + top: 70px; +} +#personal-settings-container .verify img { + padding: 12px 7px 6px; +} +/* only show pointer cursor when popup will be there */ +#personal-settings-container .verify-action { + cursor: pointer; +} +.verification-dialog { + display: none; + right: -9px; + top: 40px; + width: 275px; +} +.verification-dialog p { + padding: 10px; +} +.verification-dialog .verificationCode { + font-family: monospace; + display: block; + overflow-wrap: break-word; +} + .federationScopeMenu { top: 44px; margin: -5px 0px 0; @@ -426,15 +458,16 @@ table.grid th, table.grid td { font-weight: normal; } td.name, td.password { padding-left:.8em; } -td.password>img,td.displayName>img, td.remove>a, td.quota>img { visibility:hidden; vertical-align: middle;} +td.password>img,td.displayName>img, td.quota>img { visibility:hidden; } td.password, td.quota, td.displayName { width:12em; cursor:pointer; } -td.password>span, td.quota>span, rd.displayName>span { margin-right: 1.2em; color: #C7C7C7; } +td.password>span, td.quota>span { margin-right: 1.2em; color: #C7C7C7; } span.usersLastLoginTooltip { white-space: nowrap; } /* dropdowns will be relative to this element */ #userlist { position: relative; } + #userlist .mailAddress, #userlist .storageLocation, #userlist .userBackend, @@ -469,13 +502,51 @@ span.usersLastLoginTooltip { white-space: nowrap; } display: none; } +.bubble { + z-index:1; + right: -6px; + top: auto; +} +.bubble:after { + right: 5px; +} + +.popovermenu a.menuitem { + height: 20px; + margin: 0; + padding: 0; + line-height: initial; +} + +#userlist .popovermenu { + margin-top: 4px; + border-top-right-radius: 3px; +} + +#userlist .popovermenu>ul.userActionsMenu { + right: 10px; +} + +#userlist .popovermenu>ul.userActionsMenu a span { + margin-left: 5px; +} + +#userlist .popovermenu { + display:none; +} + tr:hover>td.password>span, tr:hover>td.displayName>span { margin:0; cursor:pointer; } -tr:hover>td.remove>a, tr:hover>td.password>img,tr:hover>td.displayName>img, tr:hover>td.quota>img { visibility:visible; cursor:pointer; } -td.remove { +tr:hover>td.password>img,tr:hover>td.displayName>img, tr:hover>td.quota>img { visibility:visible; cursor:pointer; } +td.userActions { width: 25px; + text-align: center; } -tr:hover>td.remove>a { - float: left; +td.userActions .action { + position: relative; + top: 3px; +} +td.userActions .action:hover { + cursor: pointer; } div.recoveryPassword { left:50em; display:block; position:absolute; top:-1px; } @@ -519,13 +590,37 @@ input.userFilter {width: 200px;} /* APPS */ +/* Bundle header */ +#apps-list .apps-header { + display: table-row; + position: relative; +} +#apps-list .apps-header div { + display: table-cell; + height: 70px; +} +#apps-list .apps-header h2 { + display: table-cell; + position: absolute; + padding-left: 6px; + padding-top: 15px; +} +#apps-list .apps-header h2 .enable { + position: relative; + top: -1px; + margin-left: 12px; +} +#apps-list .apps-header h2 + .section { + margin-top: 50px; +} + #app-content > svg.app-filter { float: left; height: 0; width: 0; } -#app-category-disabled { +#app-category-app-bundles { margin-bottom: 20px; } @@ -558,6 +653,10 @@ span.version { border-radius: 3px; padding: 3px 6px; } +.app-level a { + padding: 10px; + white-space: nowrap; +} .app-level .official { border-color: #37ce02; background-position: left center; @@ -737,6 +836,7 @@ form.section { display: table; width: 100%; height: auto; + margin-bottom: 100px; } #apps-list.installed .section { diff --git a/settings/js/apps.js b/settings/js/apps.js index 3326886951f..6bad2cc842c 100644 --- a/settings/js/apps.js +++ b/settings/js/apps.js @@ -29,6 +29,7 @@ OC.Settings.Apps = OC.Settings.Apps || { State: { currentCategory: null, + currentCategoryElements: null, apps: null, $updateNotification: null, availableUpdates: 0 @@ -90,14 +91,15 @@ OC.Settings.Apps = OC.Settings.Apps || { }), { type:'GET', success: function (apps) { + OC.Settings.Apps.State.currentCategoryElements = apps.apps; var appListWithIndex = _.indexBy(apps.apps, 'id'); OC.Settings.Apps.State.apps = appListWithIndex; var appList = _.map(appListWithIndex, function(app) { // default values for missing fields return _.extend({level: 0}, app); }); - var source - if (categoryId === 'enabled' || categoryId === 'disabled' || categoryId === 'installed') { + var source; + if (categoryId === 'enabled' || categoryId === 'disabled' || categoryId === 'installed' || categoryId === 'app-bundles') { source = $("#app-template-installed").html(); $('#apps-list').addClass('installed'); } else { @@ -107,17 +109,19 @@ OC.Settings.Apps = OC.Settings.Apps || { var template = Handlebars.compile(source); if (appList.length) { - appList.sort(function(a,b) { - if (a.active !== b.active) { - return (a.active ? -1 : 1) - } else { - var levelDiff = b.level - a.level; - if (levelDiff === 0) { - return OC.Util.naturalSortCompare(a.name, b.name); + if(categoryId !== 'app-bundles') { + appList.sort(function (a, b) { + if (a.active !== b.active) { + return (a.active ? -1 : 1) + } else { + var levelDiff = b.level - a.level; + if (levelDiff === 0) { + return OC.Util.naturalSortCompare(a.name, b.name); + } + return levelDiff; } - return levelDiff; - } - }); + }); + } var firstExperimental = false; _.each(appList, function(app) { @@ -303,56 +307,126 @@ OC.Settings.Apps = OC.Settings.Apps || { return $.get(OC.generateUrl('apps/files')); }, - enableApp:function(appId, active, element, groups) { + enableAppBundle:function(bundleId, active, element, groups) { + if (OC.PasswordConfirmation.requiresPasswordConfirmation()) { + OC.PasswordConfirmation.requirePasswordConfirmation(_.bind(this.enableAppBundle, this, bundleId, active, element, groups)); + return; + } + + var apps = OC.Settings.Apps.State.currentCategoryElements; + var appsToEnable = []; + apps.forEach(function(app) { + if(app['bundleId'] === bundleId) { + if(app['active'] === false) { + appsToEnable.push(app['id']); + } + } + }); + + OC.Settings.Apps.enableApp(appsToEnable, false, groups); + }, + + /** + * @param {string[]} appId + * @param {boolean} active + * @param {array} groups + */ + enableApp:function(appId, active, groups) { if (OC.PasswordConfirmation.requiresPasswordConfirmation()) { - OC.PasswordConfirmation.requirePasswordConfirmation(_.bind(this.enableApp, this, appId, active, element, groups)); + OC.PasswordConfirmation.requirePasswordConfirmation(_.bind(this.enableApp, this, appId, active, groups)); return; } + var elements = []; + appId.forEach(function(appId) { + elements.push($('#app-'+appId+' .enable')); + }); + var self = this; - OC.Settings.Apps.hideErrorMessage(appId); + appId.forEach(function(appId) { + OC.Settings.Apps.hideErrorMessage(appId); + }); groups = groups || []; - var appItem = $('div#app-'+appId+''); + var appItems = []; + appId.forEach(function(appId) { + appItems.push($('div#app-'+appId+'')); + }); + if(active && !groups.length) { - element.val(t('settings','Disabling app …')); + elements.forEach(function(element) { + 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) { OC.Settings.Apps.showErrorMessage(appId, result.data.message); - appItem.data('errormsg', result.data.message); + appItems.forEach(function(appItem) { + appItem.data('errormsg', result.data.message); + }) } else { OC.Settings.Apps.showErrorMessage(appId, t('settings', 'Error while disabling app')); - appItem.data('errormsg', t('settings', 'Error while disabling app')); + appItems.forEach(function(appItem) { + appItem.data('errormsg', t('settings', 'Error while disabling app')); + }); } - element.val(t('settings','Disable')); - appItem.addClass('appwarning'); + elements.forEach(function(element) { + element.val(t('settings','Disable')); + }); + appItems.forEach(function(appItem) { + appItem.addClass('appwarning'); + }); } else { OC.Settings.Apps.rebuildNavigation(); - appItem.data('active',false); - appItem.data('groups', ''); - element.data('active',false); - appItem.removeClass('active'); - element.val(t('settings','Enable')); - element.parent().find(".groups-enable").hide(); - element.parent().find('#group_select').hide().val(null); + appItems.forEach(function(appItem) { + appItem.data('active', false); + appItem.data('groups', ''); + }); + elements.forEach(function(element) { + element.data('active', false); + }); + appItems.forEach(function(appItem) { + appItem.removeClass('active'); + }); + elements.forEach(function(element) { + element.val(t('settings', 'Enable')); + element.parent().find(".groups-enable").hide(); + element.parent().find('#group_select').hide().val(null); + }); OC.Settings.Apps.State.apps[appId].active = false; } },'json'); } 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) { + elements.forEach(function(element) { + element.val(t('settings', 'Enabling app …')); + }); + + var appIdArray = []; + if( typeof appId === 'string' ) { + appIdArray = [appId]; + } else { + appIdArray = appId; + } + $.post(OC.filePath('settings','ajax','enableapp.php'),{appIds: appIdArray, groups: groups},function(result) { if(!result || result.status !== 'success') { if (result.data && result.data.message) { OC.Settings.Apps.showErrorMessage(appId, result.data.message); - appItem.data('errormsg', result.data.message); + appItems.forEach(function(appItem) { + appItem.data('errormsg', result.data.message); + }); } else { OC.Settings.Apps.showErrorMessage(appId, t('settings', 'Error while enabling app')); - appItem.data('errormsg', t('settings', 'Error while disabling app')); + appItems.forEach(function(appItem) { + appItem.data('errormsg', t('settings', 'Error while disabling app')); + }); } - element.val(t('settings','Enable')); - appItem.addClass('appwarning'); + elements.forEach(function(element) { + element.val(t('settings', 'Enable')); + }); + appItems.forEach(function(appItem) { + appItem.addClass('appwarning'); + }); } else { self._checkServerHealth().done(function() { if (result.data.update_required) { @@ -364,24 +438,40 @@ OC.Settings.Apps = OC.Settings.Apps || { } OC.Settings.Apps.rebuildNavigation(); - appItem.data('active',true); - element.data('active',true); - appItem.addClass('active'); - element.val(t('settings','Disable')); + appItems.forEach(function(appItem) { + appItem.data('active', true); + }); + elements.forEach(function(element) { + element.data('active', true); + }); + appItems.forEach(function(appItem) { + appItem.addClass('active'); + }); + elements.forEach(function(element) { + element.val(t('settings', 'Disable')); + }); var app = OC.Settings.Apps.State.apps[appId]; app.active = true; if (OC.Settings.Apps.isType(app, 'filesystem') || OC.Settings.Apps.isType(app, 'prelogin') || OC.Settings.Apps.isType(app, 'authentication') || OC.Settings.Apps.isType(app, 'logging')) { - element.parent().find(".groups-enable").prop('checked', true); - element.parent().find(".groups-enable").hide(); - element.parent().find('#group_select').hide().val(null); + elements.forEach(function(element) { + element.parent().find(".groups-enable").prop('checked', true); + element.parent().find(".groups-enable").hide(); + element.parent().find('#group_select').hide().val(null); + }); } else { - element.parent().find("#groups-enable").show(); + elements.forEach(function(element) { + element.parent().find("#groups-enable").show(); + }); if (groups) { - appItem.data('groups', JSON.stringify(groups)); + appItems.forEach(function(appItem) { + appItem.data('groups', JSON.stringify(groups)); + }); } else { - appItem.data('groups', ''); + appItems.forEach(function(appItem) { + appItem.data('groups', ''); + }); } } }).fail(function() { @@ -391,26 +481,40 @@ OC.Settings.Apps = OC.Settings.Apps || { appId, t('settings', 'Error: this app cannot be enabled because it makes the server unstable') ); - appItem.data('errormsg', t('settings', 'Error while enabling app')); - element.val(t('settings','Enable')); - appItem.addClass('appwarning'); + appItems.forEach(function(appItem) { + appItem.data('errormsg', t('settings', 'Error while enabling app')); + }); + elements.forEach(function(element) { + element.val(t('settings', 'Enable')); + }); + appItems.forEach(function(appItem) { + appItem.addClass('appwarning'); + }); }).fail(function() { OC.Settings.Apps.showErrorMessage( appId, t('settings', 'Error: could not disable broken app') ); - appItem.data('errormsg', t('settings', 'Error while disabling broken app')); - element.val(t('settings','Enable')); + appItems.forEach(function(appItem) { + appItem.data('errormsg', t('settings', 'Error while disabling broken app')); + }); + elements.forEach(function(element) { + element.val(t('settings', 'Enable')); + }); }); }); } },'json') .fail(function() { OC.Settings.Apps.showErrorMessage(appId, t('settings', 'Error while enabling app')); - appItem.data('errormsg', t('settings', 'Error while enabling app')); - appItem.data('active',false); - appItem.addClass('appwarning'); - element.val(t('settings','Enable')); + appItems.forEach(function(appItem) { + appItem.data('errormsg', t('settings', 'Error while enabling app')); + appItem.data('active', false); + appItem.addClass('appwarning'); + }); + elements.forEach(function(element) { + element.val(t('settings', 'Enable')); + }); }); } }, @@ -774,10 +878,17 @@ OC.Settings.Apps = OC.Settings.Apps || { $(document).on('click', '#apps-list input.enable', function () { var appId = $(this).data('appid'); + var bundleId = $(this).data('bundleid'); var element = $(this); var active = $(this).data('active'); - OC.Settings.Apps.enableApp(appId, active, element); + var category = $('#app-navigation').attr('data-category'); + if(bundleId) { + OC.Settings.Apps.enableAppBundle(bundleId, active, element); + element.val(t('settings', 'Enable all')); + } else { + OC.Settings.Apps.enableApp([appId], active); + } }); $(document).on('click', '#apps-list input.uninstall', function () { @@ -805,7 +916,7 @@ OC.Settings.Apps = OC.Settings.Apps || { var appId = element.data('appid'); if (appId) { - OC.Settings.Apps.enableApp(appId, false, element, groups); + OC.Settings.Apps.enableApp([appId], false, groups); OC.Settings.Apps.State.apps[appId].groups = groups; } }); diff --git a/settings/js/federationsettingsview.js b/settings/js/federationsettingsview.js index 2715c1e1e08..1a0a3dcb4d1 100644 --- a/settings/js/federationsettingsview.js +++ b/settings/js/federationsettingsview.js @@ -130,14 +130,52 @@ // TODO: user loading/success feedback this._config.save(); this._setFieldScopeIcon(field, scope); + this._updateVerifyButton(field, scope); + }, + + _updateVerifyButton: function(field, scope) { + // show verification button if the value is set and the scope is 'public' + if (field === 'twitter' || field === 'website'|| field === 'email') { + var verify = this.$('#' + field + 'form > .verify'); + var scope = this.$('#' + field + 'scope').val(); + var value = this.$('#' + field).val(); + + if (scope === 'public' && value !== '') { + verify.removeClass('hidden'); + return true; + } else { + verify.addClass('hidden'); + } + } + + return false; }, _showInputChangeSuccess: function(field) { - var $icon = this.$('#' + field + 'form > span'); + var $icon = this.$('#' + field + 'form > .icon-checkmark'); $icon.fadeIn(200); setTimeout(function() { $icon.fadeOut(300); }, 2000); + + var scope = this.$('#' + field + 'scope').val(); + var verifyAvailable = this._updateVerifyButton(field, scope); + + // change verification buttons from 'verify' to 'verifying...' on value change + if (verifyAvailable) { + if (field === 'twitter' || field === 'website') { + var verifyStatus = this.$('#' + field + 'form > .verify > #verify-' + field); + verifyStatus.attr('data-origin-title', t('core', 'Verify')); + verifyStatus.attr('src', OC.imagePath('core', 'actions/verify.svg')); + verifyStatus.data('status', '0'); + verifyStatus.addClass('verify-action'); + } else if (field === 'email') { + var verifyStatus = this.$('#' + field + 'form > .verify > #verify-' + field); + verifyStatus.attr('data-origin-title', t('core', 'Verifying …')); + verifyStatus.data('status', '1'); + verifyStatus.attr('src', OC.imagePath('core', 'actions/verifying.svg')); + } + } }, _setFieldScopeIcon: function(field, scope) { diff --git a/settings/js/personal.js b/settings/js/personal.js index 52ab2f23f87..254ee8f415b 100644 --- a/settings/js/personal.js +++ b/settings/js/personal.js @@ -201,6 +201,58 @@ $(document).ready(function () { } }); + var showVerifyDialog = function(dialog, howToVerify, verificationCode) { + var dialogContent = dialog.children('.verification-dialog-content'); + dialogContent.children(".explainVerification").text(howToVerify); + dialogContent.children(".verificationCode").text(verificationCode); + dialog.css('display', 'block'); + }; + + $(".verify").click(function (event) { + + event.stopPropagation(); + + var verify = $(this); + var indicator = $(this).children('img'); + var accountId = indicator.attr('id'); + var status = indicator.data('status'); + + var onlyVerificationCode = false; + if (parseInt(status) === 1) { + onlyVerificationCode = true; + } + + if (indicator.hasClass('verify-action')) { + $.ajax( + OC.generateUrl('/settings/users/{account}/verify', {account: accountId}), + { + method: 'GET', + data: {onlyVerificationCode: onlyVerificationCode} + } + ).done(function (data) { + var dialog = verify.children('.verification-dialog'); + showVerifyDialog($(dialog), data.msg, data.code); + indicator.attr('data-origin-title', t('core', 'Verifying …')); + indicator.attr('src', OC.imagePath('core', 'actions/verifying.svg')); + indicator.data('status', '1'); + }); + } + + }); + + // When the user clicks anywhere outside of the verification dialog we close it + $(document).click(function(event){ + var element = event.target; + var isDialog = $(element).hasClass('verificationCode') + || $(element).hasClass('explainVerification') + || $(element).hasClass('verification-dialog-content') + || $(element).hasClass('verification-dialog'); + if (!isDialog) { + $(document).find('.verification-dialog').css('display', 'none'); + } + }); + + var federationSettingsView = new OC.Settings.FederationSettingsView({ el: '#personal-settings' }); @@ -334,7 +386,7 @@ $(document).ready(function () { $('#removeavatar').removeClass('hidden').addClass('inlineblock'); } }); - + // Show token views var collection = new OC.Settings.AuthTokenCollection(); diff --git a/settings/js/users/groups.js b/settings/js/users/groups.js index aac1609bce7..16621441a64 100644 --- a/settings/js/users/groups.js +++ b/settings/js/users/groups.js @@ -48,7 +48,8 @@ GroupList = { }, getUserCount: function ($groupLiElement) { - return parseInt($groupLiElement.data('usercount'), 10); + var count = parseInt($groupLiElement.data('usercount'), 10); + return isNaN(count) ? 0 : count; }, modGroupCount: function(gid, diff) { @@ -208,10 +209,17 @@ GroupList = { }, + showDisabledUsers: function () { + UserList.empty(); + UserList.update('_disabledUsers'); + $userGroupList.find('li').removeClass('active'); + GroupList.getGroupLI('_disabledUsers').addClass('active'); + }, + showGroup: function (gid) { GroupList.activeGID = gid; UserList.empty(); - UserList.update(gid); + UserList.update(gid === '_everyone' ? '' : gid); $userGroupList.find('li').removeClass('active'); if (gid !== undefined) { //TODO: treat Everyone properly @@ -364,6 +372,11 @@ $(document).ready( function () { GroupList.showGroup(GroupList.getElementGID(this)); }); + // show disabled users + $userGroupList.on('click', '.disabledusers', function () { + GroupList.showDisabledUsers(); + }); + $('#newgroupname').on('input', function(){ GroupList.handleAddGroupInput(this.value); }); diff --git a/settings/js/users/users.js b/settings/js/users/users.js index 46f4e5977be..387709cd64c 100644 --- a/settings/js/users/users.js +++ b/settings/js/users/users.js @@ -48,11 +48,12 @@ var UserList = { * 'backend': 'LDAP', * 'email': 'username@example.org' * 'isRestoreDisabled':false + * 'isEnabled': true * } */ add: function (user) { - if (this.currentGid && this.currentGid !== '_everyone' && _.indexOf(user.groups, this.currentGid) < 0) { - return; + if (this.currentGid && this.currentGid !== '_everyone' && this.currentGid !== '_disabledUsers' && _.indexOf(user.groups, this.currentGid) < 0) { + return false; } var $tr = $userListBody.find('tr:first-child').clone(); @@ -77,6 +78,7 @@ var UserList = { $tr.data('displayname', user.displayname); $tr.data('mailAddress', user.email); $tr.data('restoreDisabled', user.isRestoreDisabled); + $tr.data('userEnabled', user.isEnabled); $tr.find('.name').text(user.name); $tr.find('td.displayName > span').text(user.displayname); $tr.find('td.mailAddress > span').text(user.email); @@ -97,18 +99,17 @@ var UserList = { $tdSubadmins.find('.action').tooltip({placement: 'top'}); /** - * remove action + * user actions menu */ - if ($tr.find('td.remove img').length === 0 && OC.currentUser !== user.name) { - var deleteImage = $('<img class="action">').attr({ - src: OC.imagePath('core', 'actions/delete') + if ($tr.find('td.userActions > span > img').length === 0 && OC.currentUser !== user.name) { + var menuImage = $('<img class="svg action">').attr({ + src: OC.imagePath('core', 'actions/more') }); - var deleteLink = $('<a class="action delete">') - .attr({ href: '#', 'original-title': t('settings', 'Delete')}) - .append(deleteImage); - $tr.find('td.remove').append(deleteLink); + var menuLink = $('<span class="toggleUserActions"></span>') + .append(menuImage); + $tr.find('td.userActions > span').replaceWith(menuLink); } else if (OC.currentUser === user.name) { - $tr.find('td.remove a').remove(); + $tr.find('td.userActions').empty(); } /** @@ -160,14 +161,6 @@ var UserList = { * append generated row to user list */ $tr.appendTo($userList); - if(UserList.isEmpty === true) { - //when the list was emptied, one row was left, necessary to keep - //add working and the layout unbroken. We need to remove this item - $tr.show(); - $userListBody.find('tr:first').remove(); - UserList.isEmpty = false; - UserList.checkUsersToLoad(); - } $quotaSelect.on('change', UserList.onQuotaSelect); @@ -338,6 +331,9 @@ var UserList = { getRestoreDisabled: function(element) { return ($(element).closest('tr').data('restoreDisabled') || ''); }, + getUserEnabled: function(element) { + return ($(element).closest('tr').data('userEnabled') || ''); + }, initDeleteHandling: function() { //set up handler UserDeleteHandler = new DeleteHandler('/settings/users/users', 'username', @@ -351,7 +347,7 @@ var UserList = { UserList.undoRemove); //when to mark user for delete - $userListBody.on('click', '.delete', function () { + $userListBody.on('click', '.action-remove', function () { // Call function for handling delete/undo var uid = UserList.getUID(this); @@ -908,6 +904,62 @@ $(document).ready(function () { UserList._triggerGroupEdit($td, isSubadminSelect); }); + $userListBody.on('click', '.toggleUserActions', function (event) { + event.stopPropagation(); + var $td = $(this).closest('td'); + var $tr = $($td).closest('tr'); + var menudiv = $td.find('.popovermenu'); + + if(menudiv.is(':visible')) { + menudiv.fadeOut(100); + return; + } + menudiv.find('.action-togglestate').empty(); + if($tr.data('userEnabled')) { + $('.action-togglestate', $td).html('<span class="icon icon-close"></span><span>'+t('settings', 'Disable')+'</span>'); + } else { + $('.action-togglestate', $td).html('<span class="icon icon-add"></span><span>'+t('settings', 'Enable')+'</span>'); + } + menudiv.click(function() { menudiv.fadeOut(100); }); + menudiv.hover('', function() { menudiv.fadeOut(100); }); + menudiv.fadeIn(100); + }); + + $userListBody.on('click', '.action-togglestate', function (event) { + event.stopPropagation(); + var $td = $(this).closest('td'); + var $tr = $td.closest('tr'); + var uid = UserList.getUID($td); + var setEnabled = UserList.getUserEnabled($td) ? 0 : 1; + $.post( + OC.generateUrl('/settings/users/{id}/setEnabled', {id: uid}), + {username: uid, enabled: setEnabled}, + function (result) { + if (result && result.status==='success'){ + var count = GroupList.getUserCount(GroupList.getGroupLI('_disabledUsers')); + $tr.remove(); + if(result.data.enabled == 1) { + $tr.data('userEnabled', true); + GroupList.setUserCount(GroupList.getGroupLI('_disabledUsers'), count-1); + } else { + $tr.data('userEnabled', false); + GroupList.setUserCount(GroupList.getGroupLI('_disabledUsers'), count+1); + } + } else { + OC.dialogs.alert(result.data.message, t('settings', 'Error while changing status of {user}', {user: uid})); + } + } + ).fail(function(result){ + var message = 'Unknown error'; + if( result.responseJSON && + result.responseJSON.data && + result.responseJSON.data.message) { + message = result.responseJSON.data.message; + } + OC.dialogs.alert(message, t('settings', 'Error while changing status of {user}', {user: uid})); + }); + }); + // init the quota field select box after it is shown the first time $('#app-settings').one('show', function() { $(this).find('#default_quota').singleSelect().on('change', UserList.onQuotaSelect); diff --git a/settings/l10n/ast.js b/settings/l10n/ast.js index 679e8ac2db0..86469d170d4 100644 --- a/settings/l10n/ast.js +++ b/settings/l10n/ast.js @@ -47,7 +47,6 @@ OC.L10N.register( "Login" : "Entamar sesión", "Plain" : "Planu", "NT LAN Manager" : "Xestor de NT LAN", - "This is used for sending out notifications." : "Esto úsase pa unviar notificaciones.", "Send mode" : "Mou d'unviu", "Encryption" : "Cifráu", "From address" : "Dende la direición", @@ -128,6 +127,7 @@ OC.L10N.register( "Uninstalling ...." : "Desinstalando ...", "Error while uninstalling app" : "Fallu mientres se desinstalaba l'aplicación", "Uninstall" : "Desinstalar", + "This is used for sending out notifications." : "Esto úsase pa unviar notificaciones.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Nun s'atopó'l módulu PHP 'fileinfo'. Encamentámoste qu'habilites esti módulu pa obtener meyores resultaos cola deteición de tribes MIME.", "Cheers!" : "¡Salú!" }, diff --git a/settings/l10n/ast.json b/settings/l10n/ast.json index 2d6640693de..f8571865ac6 100644 --- a/settings/l10n/ast.json +++ b/settings/l10n/ast.json @@ -45,7 +45,6 @@ "Login" : "Entamar sesión", "Plain" : "Planu", "NT LAN Manager" : "Xestor de NT LAN", - "This is used for sending out notifications." : "Esto úsase pa unviar notificaciones.", "Send mode" : "Mou d'unviu", "Encryption" : "Cifráu", "From address" : "Dende la direición", @@ -126,6 +125,7 @@ "Uninstalling ...." : "Desinstalando ...", "Error while uninstalling app" : "Fallu mientres se desinstalaba l'aplicación", "Uninstall" : "Desinstalar", + "This is used for sending out notifications." : "Esto úsase pa unviar notificaciones.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Nun s'atopó'l módulu PHP 'fileinfo'. Encamentámoste qu'habilites esti módulu pa obtener meyores resultaos cola deteición de tribes MIME.", "Cheers!" : "¡Salú!" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/settings/l10n/az.js b/settings/l10n/az.js index ea4b4070952..8b1925f0d86 100644 --- a/settings/l10n/az.js +++ b/settings/l10n/az.js @@ -67,7 +67,6 @@ OC.L10N.register( "Plain" : "Adi", "NT LAN Manager" : "NT LAN Manager", "Open documentation" : "Sənədləri aç", - "This is used for sending out notifications." : "Kənara xəbərdarlıqları ötürmək üçün bu istifadə edilir.", "Send mode" : "Göndərmə rejimi", "Encryption" : "Şifrələnmə", "From address" : "Ünvandan", @@ -179,6 +178,7 @@ OC.L10N.register( "Uninstalling ...." : "Silinir...", "Error while uninstalling app" : "Proqram təminatını sildikdə səhv baş verdi", "Uninstall" : "Sil", + "This is used for sending out notifications." : "Kənara xəbərdarlıqları ötürmək üçün bu istifadə edilir.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-nin modulu 'fileinfo' mövcud deyil. Mime-type təyin edilməsi üçün, modulun aktivləşdirilməsini təkidlə məsləhət görürük.", "Cheers!" : "Şərəfə!", "Show last log in" : "Son girişi göstər" diff --git a/settings/l10n/az.json b/settings/l10n/az.json index 88cd459d9d2..2d7b80a42af 100644 --- a/settings/l10n/az.json +++ b/settings/l10n/az.json @@ -65,7 +65,6 @@ "Plain" : "Adi", "NT LAN Manager" : "NT LAN Manager", "Open documentation" : "Sənədləri aç", - "This is used for sending out notifications." : "Kənara xəbərdarlıqları ötürmək üçün bu istifadə edilir.", "Send mode" : "Göndərmə rejimi", "Encryption" : "Şifrələnmə", "From address" : "Ünvandan", @@ -177,6 +176,7 @@ "Uninstalling ...." : "Silinir...", "Error while uninstalling app" : "Proqram təminatını sildikdə səhv baş verdi", "Uninstall" : "Sil", + "This is used for sending out notifications." : "Kənara xəbərdarlıqları ötürmək üçün bu istifadə edilir.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-nin modulu 'fileinfo' mövcud deyil. Mime-type təyin edilməsi üçün, modulun aktivləşdirilməsini təkidlə məsləhət görürük.", "Cheers!" : "Şərəfə!", "Show last log in" : "Son girişi göstər" diff --git a/settings/l10n/bg.js b/settings/l10n/bg.js index 709fca90345..c8a41184739 100644 --- a/settings/l10n/bg.js +++ b/settings/l10n/bg.js @@ -94,7 +94,6 @@ OC.L10N.register( "SSL/TLS" : "SSL/TLS", "STARTTLS" : "STARTTLS", "Open documentation" : "Отвори документацията", - "This is used for sending out notifications." : "Това се използва за изпращане на уведомления.", "Send mode" : "Режим на изпращане", "Encryption" : "Криптиране", "From address" : "От адрес", @@ -181,7 +180,6 @@ OC.L10N.register( "Address" : "Адрес", "Your postal address" : "Вашия пощенски код", "Website" : "Уеб страница", - "Your website" : "Вашата уеб страница", "Twitter" : "Twitter", "You are member of the following groups:" : "Член сте на следните групи:", "Password" : "Парола", @@ -236,9 +234,11 @@ OC.L10N.register( "Uninstalling ...." : "Премахване ...", "Error while uninstalling app" : "Грешка при премахването на приложението", "Uninstall" : "Премахване", + "This is used for sending out notifications." : "Това се използва за изпращане на уведомления.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP модулът 'fileinfo' липсва. Силно препоръчваме този модъл да бъде добавен, за да бъдат постигнати най-добри резултати при mime-type откриването.", "Uninstall app" : "Премахване на приложението", "Cheers!" : "Поздрави!", + "Your website" : "Вашата уеб страница", "Show last log in" : "Покажи последно вписване" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/bg.json b/settings/l10n/bg.json index 8c4064e5e86..e438d8f8377 100644 --- a/settings/l10n/bg.json +++ b/settings/l10n/bg.json @@ -92,7 +92,6 @@ "SSL/TLS" : "SSL/TLS", "STARTTLS" : "STARTTLS", "Open documentation" : "Отвори документацията", - "This is used for sending out notifications." : "Това се използва за изпращане на уведомления.", "Send mode" : "Режим на изпращане", "Encryption" : "Криптиране", "From address" : "От адрес", @@ -179,7 +178,6 @@ "Address" : "Адрес", "Your postal address" : "Вашия пощенски код", "Website" : "Уеб страница", - "Your website" : "Вашата уеб страница", "Twitter" : "Twitter", "You are member of the following groups:" : "Член сте на следните групи:", "Password" : "Парола", @@ -234,9 +232,11 @@ "Uninstalling ...." : "Премахване ...", "Error while uninstalling app" : "Грешка при премахването на приложението", "Uninstall" : "Премахване", + "This is used for sending out notifications." : "Това се използва за изпращане на уведомления.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP модулът 'fileinfo' липсва. Силно препоръчваме този модъл да бъде добавен, за да бъдат постигнати най-добри резултати при mime-type откриването.", "Uninstall app" : "Премахване на приложението", "Cheers!" : "Поздрави!", + "Your website" : "Вашата уеб страница", "Show last log in" : "Покажи последно вписване" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/settings/l10n/bs.js b/settings/l10n/bs.js index a38c64c8b12..e0682c0da48 100644 --- a/settings/l10n/bs.js +++ b/settings/l10n/bs.js @@ -59,7 +59,6 @@ OC.L10N.register( "Login" : "Prijava", "Plain" : "Čisti tekst", "NT LAN Manager" : "NT LAN menedžer", - "This is used for sending out notifications." : "Ovo se koristi za slanje notifikacija.", "Send mode" : "Način rada za slanje", "Encryption" : "Šifriranje", "From address" : "S adrese", @@ -154,6 +153,7 @@ OC.L10N.register( "Uninstalling ...." : "Deinstaliranje....", "Error while uninstalling app" : "Greška pri deinstaliranju aplikacije", "Uninstall" : "Deinstaliraj", + "This is used for sending out notifications." : "Ovo se koristi za slanje notifikacija.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modul 'fileinfo' nedostaje. Strogo vam preporučjem da taj modul omogućite kako biste dobili najbolje rezultate u detekciji mime vrste.", "Cheers!" : "Cheers!", "Show last log in" : "Prikaži zadnju prijavu" diff --git a/settings/l10n/bs.json b/settings/l10n/bs.json index 5cd76e3505c..300ae2727f9 100644 --- a/settings/l10n/bs.json +++ b/settings/l10n/bs.json @@ -57,7 +57,6 @@ "Login" : "Prijava", "Plain" : "Čisti tekst", "NT LAN Manager" : "NT LAN menedžer", - "This is used for sending out notifications." : "Ovo se koristi za slanje notifikacija.", "Send mode" : "Način rada za slanje", "Encryption" : "Šifriranje", "From address" : "S adrese", @@ -152,6 +151,7 @@ "Uninstalling ...." : "Deinstaliranje....", "Error while uninstalling app" : "Greška pri deinstaliranju aplikacije", "Uninstall" : "Deinstaliraj", + "This is used for sending out notifications." : "Ovo se koristi za slanje notifikacija.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modul 'fileinfo' nedostaje. Strogo vam preporučjem da taj modul omogućite kako biste dobili najbolje rezultate u detekciji mime vrste.", "Cheers!" : "Cheers!", "Show last log in" : "Prikaži zadnju prijavu" diff --git a/settings/l10n/ca.js b/settings/l10n/ca.js index d747586b314..aabd227bb64 100644 --- a/settings/l10n/ca.js +++ b/settings/l10n/ca.js @@ -108,7 +108,6 @@ OC.L10N.register( "NT LAN Manager" : "Gestor NT LAN", "Email server" : "Servidor de correu electrònic", "Open documentation" : "Obre la documentació", - "This is used for sending out notifications." : "S'usa per enviar notificacions.", "Send mode" : "Mode d'enviament", "Encryption" : "Xifrat", "From address" : "Des de l'adreça", @@ -201,7 +200,6 @@ OC.L10N.register( "Address" : "Adreça", "Your postal address" : "La teva adreça postal", "Website" : "Lloc web", - "Your website" : "El teu lloc web", "Twitter" : "Twitter", "You are member of the following groups:" : "Vostè és membre dels següents grups:", "Password" : "Contrasenya", @@ -254,9 +252,11 @@ OC.L10N.register( "Uninstalling ...." : "Desintal·lant ...", "Error while uninstalling app" : "Error en desinstal·lar l'aplicació", "Uninstall" : "Desinstal·la", + "This is used for sending out notifications." : "S'usa per enviar notificacions.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "El mòdul de PHP 'fileinfo' no s'ha trobat. Us recomanem que habiliteu aquest mòdul per obtenir millors resultats amb la detecció mime-type.", "Uninstall app" : "Desinstala la app", "Cheers!" : "Salut!", + "Your website" : "El teu lloc web", "Show last log in" : "Mostrar l'últim accés" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/ca.json b/settings/l10n/ca.json index 5e91d8be636..ef1d3c37822 100644 --- a/settings/l10n/ca.json +++ b/settings/l10n/ca.json @@ -106,7 +106,6 @@ "NT LAN Manager" : "Gestor NT LAN", "Email server" : "Servidor de correu electrònic", "Open documentation" : "Obre la documentació", - "This is used for sending out notifications." : "S'usa per enviar notificacions.", "Send mode" : "Mode d'enviament", "Encryption" : "Xifrat", "From address" : "Des de l'adreça", @@ -199,7 +198,6 @@ "Address" : "Adreça", "Your postal address" : "La teva adreça postal", "Website" : "Lloc web", - "Your website" : "El teu lloc web", "Twitter" : "Twitter", "You are member of the following groups:" : "Vostè és membre dels següents grups:", "Password" : "Contrasenya", @@ -252,9 +250,11 @@ "Uninstalling ...." : "Desintal·lant ...", "Error while uninstalling app" : "Error en desinstal·lar l'aplicació", "Uninstall" : "Desinstal·la", + "This is used for sending out notifications." : "S'usa per enviar notificacions.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "El mòdul de PHP 'fileinfo' no s'ha trobat. Us recomanem que habiliteu aquest mòdul per obtenir millors resultats amb la detecció mime-type.", "Uninstall app" : "Desinstala la app", "Cheers!" : "Salut!", + "Your website" : "El teu lloc web", "Show last log in" : "Mostrar l'últim accés" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/settings/l10n/cs.js b/settings/l10n/cs.js index b7f717f53d9..229d1095255 100644 --- a/settings/l10n/cs.js +++ b/settings/l10n/cs.js @@ -1,6 +1,9 @@ OC.L10N.register( "settings", { + "Your apps" : "Vaše aplikace", + "Enabled apps" : "Povolené aplikace", + "App bundles" : "Balíčky aplikací", "Wrong password" : "Nesprávné heslo", "Saved" : "Uloženo", "No user supplied" : "Nebyl uveden uživatel", @@ -16,7 +19,8 @@ OC.L10N.register( "Group already exists." : "Skupina již existuje.", "Unable to add group." : "Nelze přidat skupinu.", "Unable to delete group." : "Nelze smazat skupinu.", - "Mail could not be sent. Check your mail server log" : "E-mail se nepodařilo odeslat. Zkontrolujte protokol e-mailového serveru", + "Well done, %s!" : "Dobře, %s.", + "If you received this email, the email configuration seems to be correct." : "Pokud jste obdržel(a) tento e-mail, nastavení e-mailů bude asi správné.", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Při odesílání emailu nastala chyba. Překontrolujte prosím svá nastavení. (Error: %s)", "You need to set your user email before being able to send test emails." : "Pro možnost odeslání zkušebních emailů musíte nejprve nastavit svou emailovou adresu.", "Invalid request" : "Neplatný požadavek", @@ -34,6 +38,8 @@ OC.L10N.register( "Invalid user" : "Neplatný uživatel", "Unable to change mail address" : "Nelze změnit emailovou adresu", "Email saved" : "Email uložen", + "Welcome aboard %s" : "Vítej na palubě, %s", + "Set your password" : "Nastavte vaše heslo", "Your %s account was created" : "Účet %s byl vytvořen", "Password confirmation is required" : "Je vyžadováno potvrzení hesla", "Couldn't remove app." : "Nepodařilo se odebrat aplikaci.", @@ -65,6 +71,8 @@ OC.L10N.register( "Updating...." : "Aktualizuji...", "Error while updating app" : "Chyba při aktualizaci aplikace", "Updated" : "Aktualizováno", + "Removing …" : "Odstraňování …", + "Error while removing app" : "Chyba při odstraňování aplikace", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Aplikace byla povolena ale je třeba ji aktualizovat. Za 5 sekund budete přesměrování na stránku pro aktualizaci.", "App update" : "Aktualizace aplikace", "Approved" : "Potvrzeno", @@ -145,7 +153,6 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "Email server" : "Emailový server", "Open documentation" : "Otevřít dokumentaci", - "This is used for sending out notifications." : "Toto se používá pro odesílání upozornění.", "Send mode" : "Mód odesílání", "Encryption" : "Šifrování", "From address" : "Adresa odesílatele", @@ -204,6 +211,7 @@ OC.L10N.register( "Allow apps to use the Share API" : "Povolit aplikacím používat API sdílení", "Allow users to share via link" : "Povolit uživatelům sdílení pomocí odkazů", "Allow public uploads" : "Povolit veřejné nahrávání souborů", + "Always ask for a password" : "Vždy se zeptat na heslo", "Enforce password protection" : "Vynutit ochranu heslem", "Set default expiration date" : "Nastavit výchozí datum vypršení platnosti", "Expire after " : "Vyprší po", @@ -275,9 +283,7 @@ OC.L10N.register( "Address" : "Adresa", "Your postal address" : "Vlastní poštovní adresa", "Website" : "Webová stránka", - "Your website" : "Vlastní webová stránka", "Twitter" : "Twitter", - "Your Twitter handle" : "Twitter účet", "You are member of the following groups:" : "Patříte do následujících skupin:", "Password" : "Heslo", "Current password" : "Současné heslo", @@ -294,7 +300,6 @@ OC.L10N.register( "Web, desktop and mobile clients currently logged in to your account." : "Weboví, desktopoví a mobilní klienti aktuálně přihlášeni k vašemu účtu.", "Device" : "Přístroj", "Last activity" : "Poslední aktivita", - "Passcodes that give an app or device permissions to access your account." : "Přihlašovací údaj poskytující aplikaci nebo přístroji oprávnění pro přístup k tomuto účtu.", "Name" : "Název", "App name" : "Jméno aplikace", "Create new app password" : "Vytvořit nové heslo aplikace", @@ -303,10 +308,9 @@ OC.L10N.register( "Username" : "Uživatelské jméno", "Done" : "Dokončeno", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Vyvíjeno {communityopen}Nextcloud komunitou{linkclose}, {githubopen}zdrojový kód{linkclose} je licencován pod {licenseopen}AGPL{linkclose}.", - "Follow us on Google Plus!" : "Sledujte nás na Google Plus!", "Like our facebook page!" : "Označte naši facebookovou stránku jako \"To se mi líbí\"!", - "Subscribe to our twitter channel!" : "Odebírejte náš twitter kanál!", - "Subscribe to our news feed!" : "Odebírejte náš kanál s novinkami!", + "Follow us on Twitter!" : "Sledujte nás na Twitteru!", + "Check out our blog!" : "Podívejte se na náš blog!", "Subscribe to our newsletter!" : "Odebírejte náš newsletter!", "Show storage location" : "Cesta k datům", "Show user backend" : "Zobrazit vedení uživatelů", @@ -343,12 +347,19 @@ OC.L10N.register( "Uninstalling ...." : "Probíhá odinstalace ...", "Error while uninstalling app" : "Chyba při odinstalaci aplikace", "Uninstall" : "Odinstalovat", + "This is used for sending out notifications." : "Toto se používá pro odesílání upozornění.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Schází PHP modul 'fileinfo'. Doporučujeme jej povolit pro nejlepší výsledky detekce typů MIME.", "Uninstall app" : "Odinstalovat aplikaci", "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>" : "Vítej,<br><br>jen ti dáváme vědět, že nyní máš %s účet.<br><br>Tvé uživatelské jméno: <strong>%s</strong><br>Přístup: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "Ať slouží!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Vítej,\n\njen ti dáváme vědět, že nyní máš %s účet.\n\nTvé uživatelské jméno: %s\nPřístup: %s\n\n", "For password recovery and notifications" : "Pro obnovení hesla a upozornění", + "Your website" : "Vlastní webová stránka", + "Your Twitter handle" : "Twitter účet", + "Passcodes that give an app or device permissions to access your account." : "Přihlašovací údaj poskytující aplikaci nebo přístroji oprávnění pro přístup k tomuto účtu.", + "Follow us on Google Plus!" : "Sledujte nás na Google Plus!", + "Subscribe to our twitter channel!" : "Odebírejte náš twitter kanál!", + "Subscribe to our news feed!" : "Odebírejte náš kanál s novinkami!", "Show last log in" : "Poslední přihlášení" }, "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/settings/l10n/cs.json b/settings/l10n/cs.json index 5facbc6484f..0b290e325ec 100644 --- a/settings/l10n/cs.json +++ b/settings/l10n/cs.json @@ -1,4 +1,7 @@ { "translations": { + "Your apps" : "Vaše aplikace", + "Enabled apps" : "Povolené aplikace", + "App bundles" : "Balíčky aplikací", "Wrong password" : "Nesprávné heslo", "Saved" : "Uloženo", "No user supplied" : "Nebyl uveden uživatel", @@ -14,7 +17,8 @@ "Group already exists." : "Skupina již existuje.", "Unable to add group." : "Nelze přidat skupinu.", "Unable to delete group." : "Nelze smazat skupinu.", - "Mail could not be sent. Check your mail server log" : "E-mail se nepodařilo odeslat. Zkontrolujte protokol e-mailového serveru", + "Well done, %s!" : "Dobře, %s.", + "If you received this email, the email configuration seems to be correct." : "Pokud jste obdržel(a) tento e-mail, nastavení e-mailů bude asi správné.", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Při odesílání emailu nastala chyba. Překontrolujte prosím svá nastavení. (Error: %s)", "You need to set your user email before being able to send test emails." : "Pro možnost odeslání zkušebních emailů musíte nejprve nastavit svou emailovou adresu.", "Invalid request" : "Neplatný požadavek", @@ -32,6 +36,8 @@ "Invalid user" : "Neplatný uživatel", "Unable to change mail address" : "Nelze změnit emailovou adresu", "Email saved" : "Email uložen", + "Welcome aboard %s" : "Vítej na palubě, %s", + "Set your password" : "Nastavte vaše heslo", "Your %s account was created" : "Účet %s byl vytvořen", "Password confirmation is required" : "Je vyžadováno potvrzení hesla", "Couldn't remove app." : "Nepodařilo se odebrat aplikaci.", @@ -63,6 +69,8 @@ "Updating...." : "Aktualizuji...", "Error while updating app" : "Chyba při aktualizaci aplikace", "Updated" : "Aktualizováno", + "Removing …" : "Odstraňování …", + "Error while removing app" : "Chyba při odstraňování aplikace", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Aplikace byla povolena ale je třeba ji aktualizovat. Za 5 sekund budete přesměrování na stránku pro aktualizaci.", "App update" : "Aktualizace aplikace", "Approved" : "Potvrzeno", @@ -143,7 +151,6 @@ "STARTTLS" : "STARTTLS", "Email server" : "Emailový server", "Open documentation" : "Otevřít dokumentaci", - "This is used for sending out notifications." : "Toto se používá pro odesílání upozornění.", "Send mode" : "Mód odesílání", "Encryption" : "Šifrování", "From address" : "Adresa odesílatele", @@ -202,6 +209,7 @@ "Allow apps to use the Share API" : "Povolit aplikacím používat API sdílení", "Allow users to share via link" : "Povolit uživatelům sdílení pomocí odkazů", "Allow public uploads" : "Povolit veřejné nahrávání souborů", + "Always ask for a password" : "Vždy se zeptat na heslo", "Enforce password protection" : "Vynutit ochranu heslem", "Set default expiration date" : "Nastavit výchozí datum vypršení platnosti", "Expire after " : "Vyprší po", @@ -273,9 +281,7 @@ "Address" : "Adresa", "Your postal address" : "Vlastní poštovní adresa", "Website" : "Webová stránka", - "Your website" : "Vlastní webová stránka", "Twitter" : "Twitter", - "Your Twitter handle" : "Twitter účet", "You are member of the following groups:" : "Patříte do následujících skupin:", "Password" : "Heslo", "Current password" : "Současné heslo", @@ -292,7 +298,6 @@ "Web, desktop and mobile clients currently logged in to your account." : "Weboví, desktopoví a mobilní klienti aktuálně přihlášeni k vašemu účtu.", "Device" : "Přístroj", "Last activity" : "Poslední aktivita", - "Passcodes that give an app or device permissions to access your account." : "Přihlašovací údaj poskytující aplikaci nebo přístroji oprávnění pro přístup k tomuto účtu.", "Name" : "Název", "App name" : "Jméno aplikace", "Create new app password" : "Vytvořit nové heslo aplikace", @@ -301,10 +306,9 @@ "Username" : "Uživatelské jméno", "Done" : "Dokončeno", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Vyvíjeno {communityopen}Nextcloud komunitou{linkclose}, {githubopen}zdrojový kód{linkclose} je licencován pod {licenseopen}AGPL{linkclose}.", - "Follow us on Google Plus!" : "Sledujte nás na Google Plus!", "Like our facebook page!" : "Označte naši facebookovou stránku jako \"To se mi líbí\"!", - "Subscribe to our twitter channel!" : "Odebírejte náš twitter kanál!", - "Subscribe to our news feed!" : "Odebírejte náš kanál s novinkami!", + "Follow us on Twitter!" : "Sledujte nás na Twitteru!", + "Check out our blog!" : "Podívejte se na náš blog!", "Subscribe to our newsletter!" : "Odebírejte náš newsletter!", "Show storage location" : "Cesta k datům", "Show user backend" : "Zobrazit vedení uživatelů", @@ -341,12 +345,19 @@ "Uninstalling ...." : "Probíhá odinstalace ...", "Error while uninstalling app" : "Chyba při odinstalaci aplikace", "Uninstall" : "Odinstalovat", + "This is used for sending out notifications." : "Toto se používá pro odesílání upozornění.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Schází PHP modul 'fileinfo'. Doporučujeme jej povolit pro nejlepší výsledky detekce typů MIME.", "Uninstall app" : "Odinstalovat aplikaci", "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>" : "Vítej,<br><br>jen ti dáváme vědět, že nyní máš %s účet.<br><br>Tvé uživatelské jméno: <strong>%s</strong><br>Přístup: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "Ať slouží!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Vítej,\n\njen ti dáváme vědět, že nyní máš %s účet.\n\nTvé uživatelské jméno: %s\nPřístup: %s\n\n", "For password recovery and notifications" : "Pro obnovení hesla a upozornění", + "Your website" : "Vlastní webová stránka", + "Your Twitter handle" : "Twitter účet", + "Passcodes that give an app or device permissions to access your account." : "Přihlašovací údaj poskytující aplikaci nebo přístroji oprávnění pro přístup k tomuto účtu.", + "Follow us on Google Plus!" : "Sledujte nás na Google Plus!", + "Subscribe to our twitter channel!" : "Odebírejte náš twitter kanál!", + "Subscribe to our news feed!" : "Odebírejte náš kanál s novinkami!", "Show last log in" : "Poslední přihlášení" },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" }
\ No newline at end of file diff --git a/settings/l10n/da.js b/settings/l10n/da.js index f96443f4264..4667705ba61 100644 --- a/settings/l10n/da.js +++ b/settings/l10n/da.js @@ -80,7 +80,6 @@ OC.L10N.register( "NT LAN Manager" : "NT LAN Manager", "Email server" : "E-mailserver", "Open documentation" : "Åben dokumentation", - "This is used for sending out notifications." : "Dette anvendes til udsendelse af notifikationer.", "Send mode" : "Tilstand for afsendelse", "Encryption" : "Kryptering", "From address" : "Fra adresse", @@ -218,6 +217,7 @@ OC.L10N.register( "Uninstalling ...." : "Afinstallerer...", "Error while uninstalling app" : "Fejl under afinstallering af app", "Uninstall" : "Afinstallér", + "This is used for sending out notifications." : "Dette anvendes til udsendelse af notifikationer.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modulet 'fileinfo' mangler. Vi anbefaler stærkt at aktivere dette modul til at få de bedste resultater med mime-type detektion.", "Cheers!" : "Hej!", "For password recovery and notifications" : "Angiv en e-mailadresse for at aktivere gendannelse af adgangskode og modtage notifikationer", diff --git a/settings/l10n/da.json b/settings/l10n/da.json index 046570443e5..c2d34a921b4 100644 --- a/settings/l10n/da.json +++ b/settings/l10n/da.json @@ -78,7 +78,6 @@ "NT LAN Manager" : "NT LAN Manager", "Email server" : "E-mailserver", "Open documentation" : "Åben dokumentation", - "This is used for sending out notifications." : "Dette anvendes til udsendelse af notifikationer.", "Send mode" : "Tilstand for afsendelse", "Encryption" : "Kryptering", "From address" : "Fra adresse", @@ -216,6 +215,7 @@ "Uninstalling ...." : "Afinstallerer...", "Error while uninstalling app" : "Fejl under afinstallering af app", "Uninstall" : "Afinstallér", + "This is used for sending out notifications." : "Dette anvendes til udsendelse af notifikationer.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modulet 'fileinfo' mangler. Vi anbefaler stærkt at aktivere dette modul til at få de bedste resultater med mime-type detektion.", "Cheers!" : "Hej!", "For password recovery and notifications" : "Angiv en e-mailadresse for at aktivere gendannelse af adgangskode og modtage notifikationer", diff --git a/settings/l10n/de.js b/settings/l10n/de.js index 63b9c046b4f..32b255a4343 100644 --- a/settings/l10n/de.js +++ b/settings/l10n/de.js @@ -8,6 +8,10 @@ OC.L10N.register( "You changed your email address" : "Du hst erfolgreich deine E-Mail-Adresse geändert", "Your email address was changed by an administrator" : "Deine E-Mail-Adresse wurde von einen Administrator geändert", "Your <strong>password</strong> or <strong>email</strong> was modified" : "Dein <strong>Passwort</strong> oder Deine <strong>E.Mail-Adresse</strong> wurde geändert", + "Your apps" : "Deine Apps", + "Enabled apps" : "Aktivierte Apps", + "Disabled apps" : "Deaktivierte Apps", + "App bundles" : "App-Pakete", "Wrong password" : "Falsches Passwort", "Saved" : "Gespeichert", "No user supplied" : "Kein Benutzer übermittelt", @@ -28,7 +32,7 @@ OC.L10N.register( "Well done, %s!" : "Gut gemacht, %s!", "If you received this email, the email configuration seems to be correct." : "Wenn du diese E-Mail empfangen hast, sind die E-Mail-Einstellungen richtig", "Email setting test" : "E-Mail-Einstellungen testen", - "Mail could not be sent. Check your mail server log" : "E-Mail konnte nicht versendet werden. Bitte die Logs des Mail-Servers prüfen.", + "Email could not be sent. Check your mail server log" : "E-Mail konnte nicht versandt werden. Prüfe Dein E-Mail-Server-Protokoll", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Beim Senden der E-Mail ist ein Problem aufgetreten. Bitte überprüfe Deine Einstellungen. (Fehler: %s)", "You need to set your user email before being able to send test emails." : "Zunächst muss die Benutzer-E-Mail-Adresse angegeben werden, bevor Test-E-Mails verschickt werden können.", "Invalid request" : "Fehlerhafte Anfrage", @@ -38,6 +42,10 @@ OC.L10N.register( "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.", "Unable to delete user." : "Benutzer konnte nicht gelöscht werden.", + "Error while enabling user." : "Fehler beim aktivieren des Nutzers.", + "Error while disabling user." : "Fehler beim deaktivieren des Nutzers.", + "In order to verify your Twitter account post following tweet on Twitter (please make sure to post it without any line breaks):" : "Zum Bestätigen deines Twitter-Accounts poste bitte den folgenden Tweet auf Twitter (Bitter sicherstellen, dass dies ohne Zeilenumbrüche gepostet wird):", + "In order to verify your Website store following content in your web-root at '.well-known/CloudIdVerificationCode.txt' (please make sure that the complete text is in one line):" : "Zum Bestätigen des Speicherplatzes auf deiner Webseite, speichere den folgenden Inhalt im Web-Root unter '.well-known/CloudIdVerificationCode.txt' (bitte stelle sicher, dass der komplette Text in einer Zeile ist):", "Settings saved" : "Einstellungen gespeichert", "Unable to change full name" : "Der vollständige Name konnte nicht geändert werden", "Unable to change email address" : "E-Mail-Adresse konnte nicht geändert werden", @@ -97,11 +105,15 @@ OC.L10N.register( "Updating...." : "Aktualisiere…", "Error while updating app" : "Fehler beim Aktualisieren der App", "Updated" : "Aktualisiert", + "Removing …" : "Entferne ...", + "Error while removing app" : "Fehler beim Entfernen der App", + "Remove" : "Entferne", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Die App wurde aktiviert, muss aber aktualisiert werden. Du wirst in 5 Sekunden zu Aktualisierungsseite weitergeleitet", "App update" : "App Aktualisierung", "Approved" : "Geprüft", "Experimental" : "Experimentell", "No apps found for {query}" : "Keine Applikationen für {query} gefunden", + "Enable all" : "Alle aktivieren", "Allow filesystem access" : "Erlaube Dateisystem-Zugriff", "Disconnect" : "Trennen", "Revoke" : "Widerrufen", @@ -136,6 +148,8 @@ OC.L10N.register( "Visible to local users and to trusted servers" : "Sichtbar für lokale Nutzer und vertauenswürdige Server", "Public" : "Öffentlich", "Will be synced to a global and public address book" : "Wird mit einem globalen und einem öffentlichen Adressbuch synchronisiert", + "Verify" : "Überprüfen", + "Verifying …" : "Überprüfe ...", "Select a profile picture" : "Wähle ein Profilbild", "Very weak password" : "Sehr schwaches Passwort", "Weak password" : "Schwaches Passwort", @@ -159,12 +173,14 @@ OC.L10N.register( "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", + "Error while changing status of {user}" : "Fehler beim Ändern des Statusses des Nutzers {user}", "A valid username must be provided" : "Es muss ein gültiger Benutzername angegeben werden", "Error creating user: {message}" : "Fehler beim Anlegen des Benutzers: {message}", "A valid password must be provided" : "Es muss ein gültiges Passwort angegeben werden", "A valid email must be provided" : "Es muss eine gültige E-Mail-Adresse angegeben werden", "__language_name__" : "Deutsch (Persönlich)", "Unlimited" : "Unbegrenzt", + "Verifying" : "Überprüfe", "Personal info" : "Persönliche Informationen", "Sessions" : "Sitzungen", "App passwords" : "App-PINs", @@ -177,7 +193,7 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "Email server" : "E-Mail-Server", "Open documentation" : "Dokumentation öffnen", - "This is used for sending out notifications." : "Dies wird zum Senden von Benachrichtigungen verwendet.", + "It is important to set up this server to be able to send emails, like for password reset and notifications." : "Es ist wichtig diesen Server so zu konfigurieren, dass E-Mails versandt werden können, z.B. für den Passwort-Reset und Benachrichtigungen.", "Send mode" : "Sendemodus", "Encryption" : "Verschlüsselung", "From address" : "Absenderadresse", @@ -193,6 +209,7 @@ OC.L10N.register( "Test email settings" : "E-Mail-Einstellungen testen", "Send email" : "E-Mail senden", "Server-side encryption" : "Serverseitige Verschlüsselung", + "Server-side encryption makes it possible to encrypt files which are uploaded to this server. This comes with limitations like a performance penalty, so enable this only if needed." : "Serverseitige Verschlüsselung ermöglicht es die auf diesen Server hochgeladenen Dateien zu verschlüsseln. Dies führt allerdings auch zu Nachteilen, wie z.B. einem Geschwindigkeitsverlust. Sie sollte deshalb nur eingeschaltet werden, wenn sie wirklich benötigt wird.", "Enable server-side encryption" : "Serverseitige Verschlüsselung aktivieren", "Please read carefully before activating server-side encryption: " : "Bitte sorgfältig lesen, bevor die serverseitige Verschlüsselung aktiviert wird:", "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." : "Wird die Verschlüsselung einmal aktiviert, so werden alle ab diesem Zeitpunkt hochgeladene Dateien verschlüsselt. Sie kann nur wieder deaktiviert werden, wenn das Verschlüsselungsmodul dies unterstützt und alle Voraussetzungen (wie das Setzen eines Wiederherstellungsschlüssels) im Vorhinein erfüllt wurden.", @@ -207,6 +224,7 @@ OC.L10N.register( "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Kodierungsschlüssel der alten Verschlüsselung migrieren (ownCloud <= 8.0).", "Start migration" : "Migration beginnen", "Security & setup warnings" : "Sicherheits- & Einrichtungswarnungen", + "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the Tips & Ticks section and the documentation for more information." : "Für die Sicherheit und Geschwindigkeit Deiner Installation ist es von großer Bedeutung, dass sie richtig konfiguriert ist. Um Dir hierbei zu helfen werden einige automatische Tests durchgeführt. Weitere Informationen findest Du im Tipps & Tricks- Abschnitt und in der Dokumentation.", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP scheint zur Abfrage von Systemumgebungsvariablen nicht richtig eingerichtet zu sein. Der Test mit getenv (\"PATH\") liefert nur eine leere Antwort zurück.", "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Bitte die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Installationsdokumentation ↗</a>auf Hinweise zur PHP-Konfiguration durchlesen, sowie die PHP-Konfiguration Ihres Servers überprüfen, insbesondere dann, wenn PHP-FPM eingesetzt wird.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Die schreibgeschützte Konfiguration wurde aktiviert. Dies verhindert das Setzen einiger Einstellungen über die Web-Schnittstelle. Weiterhin muss bei jedem Update der Schreibzugriff auf die Datei händisch aktiviert werden.", @@ -227,6 +245,7 @@ OC.L10N.register( "Last cron job execution: %s." : "Letzte Cron-Job-Ausführung: %s.", "Last cron job execution: %s. Something seems wrong." : "Letzte Cron-Job-Ausführung: %s. Möglicherweise liegt ein Fehler vor.", "Cron was not executed yet!" : "Cron wurde bis jetzt noch nicht ausgeführt!", + "For optimal performance it's important to configure background jobs correctly. For bigger instances 'Cron' is the recommended setting. Please see the documentation for more information." : "Um die optimale Geschwindigkeit zu erreichen ist es wichtig, dass die Hintergrund-Aktivitäten richtig konfiguriert sind. Für größere Installationen ist 'Cron' die empfohlene Einstellung. Weitere Informationen findest Du in der Dokumentation.", "Execute one task with each page loaded" : "Führe eine Aufgabe mit jeder geladenen Seite aus", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php ist als Webcron-Dienst registriert, der die cron.php alle 15 Minuten per HTTP aufruft.", "Use system's cron service to call the cron.php file every 15 minutes." : "Benutze den systemeigenen Cron-Dienst, um die cron.php alle 15 Minuten aufzurufen.", @@ -234,6 +253,7 @@ OC.L10N.register( "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Um dies auszuführen, wird die PHP-Posix Erweiterung benötigt. Weitere Informationen in der {linkstart}PHP-Dokumentation{linkend}.", "Version" : "Version", "Sharing" : "Teilen", + "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Als Administrator kannst Du das Teilen-Verhalten feinabstimmen. Weitere Informationen findest Du in der Dokumentation.", "Allow apps to use the Share API" : "Apps die Benutzung der Share-API erlauben", "Allow users to share via link" : "Benutzern erlauben, Inhalte über Links zu teilen", "Allow public uploads" : "Öffentliches Hochladen erlauben", @@ -252,6 +272,7 @@ OC.L10N.register( "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Zeige Haftungsausschluss auf der öffentlichen Upload-Seite. (Wird nur gezeigt wenn die Dateiliste nicht angezeigt wird.) ", "This text will be shown on the public link upload page when the file list is hidden." : "Dieser Text wird auf der öffentlichen Upload-Seite angezeigt wenn die Dateiliste nicht angezeigt wird.", "Tips & tricks" : "Tipps & Tricks", + "There are a lot of features and config switches available to optimally customize and use this instance. Here are some pointers for more information." : "Es gibt ein Menge von Eigenschaften und Konfigurationsschaltern die es ermöglichen, die Installation optimal zu nutzen und anzupassen. Hier einige Verweise auf weitere Informationen.", "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "SQLite wird als Datenbank verwendet. Bei größeren Installationen wird empfohlen, auf ein anderes Datenbank-Backend zu wechseln.", "This is particularly recommended when using the desktop client for file synchronisation." : "Dies empfiehlt sich besonders, wenn Sie den Desktop-Client für die Dateisynchronisation verwenden.", "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>." : "Um zu einer anderen Datenbank zu migrieren, benutze bitte die Kommandozeile: 'occ db:convert-type', oder in die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation ↗</a> schauen.", @@ -263,6 +284,8 @@ OC.L10N.register( "Check the security of your Nextcloud over our security scan" : "Überprüfen Sie die Sicherheit Ihrer Nextcloud mit unserem Sicherheits-Scan", "Hardening and security guidance" : "Systemhärtung und Sicherheitsempfehlungen", "Developer documentation" : "Dokumentation für Entwickler", + "View in store" : "Im Store anzeigen", + "Limit to groups" : "Auf Gruppen beschränken", "This app has an update available." : "Es ist eine Aktualisierung verfügbar.", "by %s" : "von %s", "%s-licensed" : "%s-lizensiert", @@ -309,9 +332,10 @@ OC.L10N.register( "Address" : "Adresse", "Your postal address" : "Deine Postadresse", "Website" : "Webseite", - "Your website" : "Deine Webseite", + "It can take up to 24 hours before the account is displayed as verified." : "Es kann bis zu 24 Stunden dauern, bis das Konto als überprüt angezeigt wird.", + "Link https://…" : "Link https://", "Twitter" : "Twitter", - "Your Twitter handle" : "Dein twitter-handle", + "Twitter handle @…" : "Twitter-handle @ ...", "You are member of the following groups:" : "Du bist Mitglied folgender Gruppen:", "Password" : "Passwort", "Current password" : "Aktuelles Passwort", @@ -328,7 +352,7 @@ OC.L10N.register( "Web, desktop and mobile clients currently logged in to your account." : "Aktuell in Deinem Konto eingeloggte Web-, Desktop- und Mobil-Clients.", "Device" : "Gerät", "Last activity" : "Letzte Aktivität", - "Passcodes that give an app or device permissions to access your account." : "PINs mit denen Apps oder Geräte auf Dein Konto zugreifen können.", + "Here you can generate individual passwords for apps so you don’t have to give out your password. You can revoke them individually too." : "Hier können individuelle Passwörter for Apps erzeugt werden. So must Du nicht Dein Passwort verteilen. Jedes Passwort kann individuell widerrufen werden.", "Name" : "Name", "App name" : "App-Name", "Create new app password" : "Neues App-Passwort erstellen", @@ -337,10 +361,10 @@ OC.L10N.register( "Username" : "Benutzername", "Done" : "Erledigt", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Entwickelt von der {communityopen}Nextcloud Community{linkclose}, der {githubopen}Quellcode{linkclose} ist lizensiert unter {licenseopen}AGPL{linkclose}-Lizenz.", - "Follow us on Google Plus!" : "Folgen Sie uns auf Google Plus!", + "Follow us on Google+!" : "Folge uns auf Google+!", "Like our facebook page!" : "Like uns auf unserer Facebook-Seite!", - "Subscribe to our twitter channel!" : "Abonniere unseren Twitter-Kanal!", - "Subscribe to our news feed!" : "Abonniere unseren RSS-Feed!", + "Follow us on Twitter!" : "Folge uns auf Twitter!", + "Check out our blog!" : "Sieh Dir unseren Blog an!", "Subscribe to our newsletter!" : "Abonniere unseren Newsletter!", "Settings" : "Einstellungen", "Show storage location" : "Speicherort anzeigen", @@ -356,6 +380,7 @@ OC.L10N.register( "Group name" : "Gruppenname", "Everyone" : "Jeder", "Admins" : "Administratoren", + "Disabled" : "Deaktiviert", "Default quota" : "Standard Speicherplatzgröße", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Bitte Speicherkontingent eingeben (z. B.: „512 MB“ oder „12 GB“)", "Other" : "Andere", @@ -380,12 +405,19 @@ OC.L10N.register( "Uninstalling ...." : "Deinstalliere…", "Error while uninstalling app" : "Fehler beim Deinstallieren der App", "Uninstall" : "Deinstallieren", + "This is used for sending out notifications." : "Dies wird zum Senden von Benachrichtigungen verwendet.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Das PHP-Modul 'fileinfo' fehlt. Wir empfehlen dieses Modul zu aktivieren um die besten Resultate bei der Erkennung der Dateitypen zu erreichen.", "Uninstall app" : "App deinstallieren", "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", "For password recovery and notifications" : "Für Passwort-Wiederherstellung und Benachrichtigungen", + "Your website" : "Deine Webseite", + "Your Twitter handle" : "Dein twitter-handle", + "Passcodes that give an app or device permissions to access your account." : "PINs mit denen Apps oder Geräte auf Dein Konto zugreifen können.", + "Follow us on Google Plus!" : "Folgen Sie uns auf Google Plus!", + "Subscribe to our twitter channel!" : "Abonniere unseren Twitter-Kanal!", + "Subscribe to our news feed!" : "Abonniere unseren RSS-Feed!", "Show last log in" : "Letzte Anmeldung anzeigen" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/de.json b/settings/l10n/de.json index 3a4f455cb4a..bbb16334700 100644 --- a/settings/l10n/de.json +++ b/settings/l10n/de.json @@ -6,6 +6,10 @@ "You changed your email address" : "Du hst erfolgreich deine E-Mail-Adresse geändert", "Your email address was changed by an administrator" : "Deine E-Mail-Adresse wurde von einen Administrator geändert", "Your <strong>password</strong> or <strong>email</strong> was modified" : "Dein <strong>Passwort</strong> oder Deine <strong>E.Mail-Adresse</strong> wurde geändert", + "Your apps" : "Deine Apps", + "Enabled apps" : "Aktivierte Apps", + "Disabled apps" : "Deaktivierte Apps", + "App bundles" : "App-Pakete", "Wrong password" : "Falsches Passwort", "Saved" : "Gespeichert", "No user supplied" : "Kein Benutzer übermittelt", @@ -26,7 +30,7 @@ "Well done, %s!" : "Gut gemacht, %s!", "If you received this email, the email configuration seems to be correct." : "Wenn du diese E-Mail empfangen hast, sind die E-Mail-Einstellungen richtig", "Email setting test" : "E-Mail-Einstellungen testen", - "Mail could not be sent. Check your mail server log" : "E-Mail konnte nicht versendet werden. Bitte die Logs des Mail-Servers prüfen.", + "Email could not be sent. Check your mail server log" : "E-Mail konnte nicht versandt werden. Prüfe Dein E-Mail-Server-Protokoll", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Beim Senden der E-Mail ist ein Problem aufgetreten. Bitte überprüfe Deine Einstellungen. (Fehler: %s)", "You need to set your user email before being able to send test emails." : "Zunächst muss die Benutzer-E-Mail-Adresse angegeben werden, bevor Test-E-Mails verschickt werden können.", "Invalid request" : "Fehlerhafte Anfrage", @@ -36,6 +40,10 @@ "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.", "Unable to delete user." : "Benutzer konnte nicht gelöscht werden.", + "Error while enabling user." : "Fehler beim aktivieren des Nutzers.", + "Error while disabling user." : "Fehler beim deaktivieren des Nutzers.", + "In order to verify your Twitter account post following tweet on Twitter (please make sure to post it without any line breaks):" : "Zum Bestätigen deines Twitter-Accounts poste bitte den folgenden Tweet auf Twitter (Bitter sicherstellen, dass dies ohne Zeilenumbrüche gepostet wird):", + "In order to verify your Website store following content in your web-root at '.well-known/CloudIdVerificationCode.txt' (please make sure that the complete text is in one line):" : "Zum Bestätigen des Speicherplatzes auf deiner Webseite, speichere den folgenden Inhalt im Web-Root unter '.well-known/CloudIdVerificationCode.txt' (bitte stelle sicher, dass der komplette Text in einer Zeile ist):", "Settings saved" : "Einstellungen gespeichert", "Unable to change full name" : "Der vollständige Name konnte nicht geändert werden", "Unable to change email address" : "E-Mail-Adresse konnte nicht geändert werden", @@ -95,11 +103,15 @@ "Updating...." : "Aktualisiere…", "Error while updating app" : "Fehler beim Aktualisieren der App", "Updated" : "Aktualisiert", + "Removing …" : "Entferne ...", + "Error while removing app" : "Fehler beim Entfernen der App", + "Remove" : "Entferne", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Die App wurde aktiviert, muss aber aktualisiert werden. Du wirst in 5 Sekunden zu Aktualisierungsseite weitergeleitet", "App update" : "App Aktualisierung", "Approved" : "Geprüft", "Experimental" : "Experimentell", "No apps found for {query}" : "Keine Applikationen für {query} gefunden", + "Enable all" : "Alle aktivieren", "Allow filesystem access" : "Erlaube Dateisystem-Zugriff", "Disconnect" : "Trennen", "Revoke" : "Widerrufen", @@ -134,6 +146,8 @@ "Visible to local users and to trusted servers" : "Sichtbar für lokale Nutzer und vertauenswürdige Server", "Public" : "Öffentlich", "Will be synced to a global and public address book" : "Wird mit einem globalen und einem öffentlichen Adressbuch synchronisiert", + "Verify" : "Überprüfen", + "Verifying …" : "Überprüfe ...", "Select a profile picture" : "Wähle ein Profilbild", "Very weak password" : "Sehr schwaches Passwort", "Weak password" : "Schwaches Passwort", @@ -157,12 +171,14 @@ "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", + "Error while changing status of {user}" : "Fehler beim Ändern des Statusses des Nutzers {user}", "A valid username must be provided" : "Es muss ein gültiger Benutzername angegeben werden", "Error creating user: {message}" : "Fehler beim Anlegen des Benutzers: {message}", "A valid password must be provided" : "Es muss ein gültiges Passwort angegeben werden", "A valid email must be provided" : "Es muss eine gültige E-Mail-Adresse angegeben werden", "__language_name__" : "Deutsch (Persönlich)", "Unlimited" : "Unbegrenzt", + "Verifying" : "Überprüfe", "Personal info" : "Persönliche Informationen", "Sessions" : "Sitzungen", "App passwords" : "App-PINs", @@ -175,7 +191,7 @@ "STARTTLS" : "STARTTLS", "Email server" : "E-Mail-Server", "Open documentation" : "Dokumentation öffnen", - "This is used for sending out notifications." : "Dies wird zum Senden von Benachrichtigungen verwendet.", + "It is important to set up this server to be able to send emails, like for password reset and notifications." : "Es ist wichtig diesen Server so zu konfigurieren, dass E-Mails versandt werden können, z.B. für den Passwort-Reset und Benachrichtigungen.", "Send mode" : "Sendemodus", "Encryption" : "Verschlüsselung", "From address" : "Absenderadresse", @@ -191,6 +207,7 @@ "Test email settings" : "E-Mail-Einstellungen testen", "Send email" : "E-Mail senden", "Server-side encryption" : "Serverseitige Verschlüsselung", + "Server-side encryption makes it possible to encrypt files which are uploaded to this server. This comes with limitations like a performance penalty, so enable this only if needed." : "Serverseitige Verschlüsselung ermöglicht es die auf diesen Server hochgeladenen Dateien zu verschlüsseln. Dies führt allerdings auch zu Nachteilen, wie z.B. einem Geschwindigkeitsverlust. Sie sollte deshalb nur eingeschaltet werden, wenn sie wirklich benötigt wird.", "Enable server-side encryption" : "Serverseitige Verschlüsselung aktivieren", "Please read carefully before activating server-side encryption: " : "Bitte sorgfältig lesen, bevor die serverseitige Verschlüsselung aktiviert wird:", "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." : "Wird die Verschlüsselung einmal aktiviert, so werden alle ab diesem Zeitpunkt hochgeladene Dateien verschlüsselt. Sie kann nur wieder deaktiviert werden, wenn das Verschlüsselungsmodul dies unterstützt und alle Voraussetzungen (wie das Setzen eines Wiederherstellungsschlüssels) im Vorhinein erfüllt wurden.", @@ -205,6 +222,7 @@ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Kodierungsschlüssel der alten Verschlüsselung migrieren (ownCloud <= 8.0).", "Start migration" : "Migration beginnen", "Security & setup warnings" : "Sicherheits- & Einrichtungswarnungen", + "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the Tips & Ticks section and the documentation for more information." : "Für die Sicherheit und Geschwindigkeit Deiner Installation ist es von großer Bedeutung, dass sie richtig konfiguriert ist. Um Dir hierbei zu helfen werden einige automatische Tests durchgeführt. Weitere Informationen findest Du im Tipps & Tricks- Abschnitt und in der Dokumentation.", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP scheint zur Abfrage von Systemumgebungsvariablen nicht richtig eingerichtet zu sein. Der Test mit getenv (\"PATH\") liefert nur eine leere Antwort zurück.", "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Bitte die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Installationsdokumentation ↗</a>auf Hinweise zur PHP-Konfiguration durchlesen, sowie die PHP-Konfiguration Ihres Servers überprüfen, insbesondere dann, wenn PHP-FPM eingesetzt wird.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Die schreibgeschützte Konfiguration wurde aktiviert. Dies verhindert das Setzen einiger Einstellungen über die Web-Schnittstelle. Weiterhin muss bei jedem Update der Schreibzugriff auf die Datei händisch aktiviert werden.", @@ -225,6 +243,7 @@ "Last cron job execution: %s." : "Letzte Cron-Job-Ausführung: %s.", "Last cron job execution: %s. Something seems wrong." : "Letzte Cron-Job-Ausführung: %s. Möglicherweise liegt ein Fehler vor.", "Cron was not executed yet!" : "Cron wurde bis jetzt noch nicht ausgeführt!", + "For optimal performance it's important to configure background jobs correctly. For bigger instances 'Cron' is the recommended setting. Please see the documentation for more information." : "Um die optimale Geschwindigkeit zu erreichen ist es wichtig, dass die Hintergrund-Aktivitäten richtig konfiguriert sind. Für größere Installationen ist 'Cron' die empfohlene Einstellung. Weitere Informationen findest Du in der Dokumentation.", "Execute one task with each page loaded" : "Führe eine Aufgabe mit jeder geladenen Seite aus", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php ist als Webcron-Dienst registriert, der die cron.php alle 15 Minuten per HTTP aufruft.", "Use system's cron service to call the cron.php file every 15 minutes." : "Benutze den systemeigenen Cron-Dienst, um die cron.php alle 15 Minuten aufzurufen.", @@ -232,6 +251,7 @@ "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Um dies auszuführen, wird die PHP-Posix Erweiterung benötigt. Weitere Informationen in der {linkstart}PHP-Dokumentation{linkend}.", "Version" : "Version", "Sharing" : "Teilen", + "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Als Administrator kannst Du das Teilen-Verhalten feinabstimmen. Weitere Informationen findest Du in der Dokumentation.", "Allow apps to use the Share API" : "Apps die Benutzung der Share-API erlauben", "Allow users to share via link" : "Benutzern erlauben, Inhalte über Links zu teilen", "Allow public uploads" : "Öffentliches Hochladen erlauben", @@ -250,6 +270,7 @@ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Zeige Haftungsausschluss auf der öffentlichen Upload-Seite. (Wird nur gezeigt wenn die Dateiliste nicht angezeigt wird.) ", "This text will be shown on the public link upload page when the file list is hidden." : "Dieser Text wird auf der öffentlichen Upload-Seite angezeigt wenn die Dateiliste nicht angezeigt wird.", "Tips & tricks" : "Tipps & Tricks", + "There are a lot of features and config switches available to optimally customize and use this instance. Here are some pointers for more information." : "Es gibt ein Menge von Eigenschaften und Konfigurationsschaltern die es ermöglichen, die Installation optimal zu nutzen und anzupassen. Hier einige Verweise auf weitere Informationen.", "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "SQLite wird als Datenbank verwendet. Bei größeren Installationen wird empfohlen, auf ein anderes Datenbank-Backend zu wechseln.", "This is particularly recommended when using the desktop client for file synchronisation." : "Dies empfiehlt sich besonders, wenn Sie den Desktop-Client für die Dateisynchronisation verwenden.", "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>." : "Um zu einer anderen Datenbank zu migrieren, benutze bitte die Kommandozeile: 'occ db:convert-type', oder in die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation ↗</a> schauen.", @@ -261,6 +282,8 @@ "Check the security of your Nextcloud over our security scan" : "Überprüfen Sie die Sicherheit Ihrer Nextcloud mit unserem Sicherheits-Scan", "Hardening and security guidance" : "Systemhärtung und Sicherheitsempfehlungen", "Developer documentation" : "Dokumentation für Entwickler", + "View in store" : "Im Store anzeigen", + "Limit to groups" : "Auf Gruppen beschränken", "This app has an update available." : "Es ist eine Aktualisierung verfügbar.", "by %s" : "von %s", "%s-licensed" : "%s-lizensiert", @@ -307,9 +330,10 @@ "Address" : "Adresse", "Your postal address" : "Deine Postadresse", "Website" : "Webseite", - "Your website" : "Deine Webseite", + "It can take up to 24 hours before the account is displayed as verified." : "Es kann bis zu 24 Stunden dauern, bis das Konto als überprüt angezeigt wird.", + "Link https://…" : "Link https://", "Twitter" : "Twitter", - "Your Twitter handle" : "Dein twitter-handle", + "Twitter handle @…" : "Twitter-handle @ ...", "You are member of the following groups:" : "Du bist Mitglied folgender Gruppen:", "Password" : "Passwort", "Current password" : "Aktuelles Passwort", @@ -326,7 +350,7 @@ "Web, desktop and mobile clients currently logged in to your account." : "Aktuell in Deinem Konto eingeloggte Web-, Desktop- und Mobil-Clients.", "Device" : "Gerät", "Last activity" : "Letzte Aktivität", - "Passcodes that give an app or device permissions to access your account." : "PINs mit denen Apps oder Geräte auf Dein Konto zugreifen können.", + "Here you can generate individual passwords for apps so you don’t have to give out your password. You can revoke them individually too." : "Hier können individuelle Passwörter for Apps erzeugt werden. So must Du nicht Dein Passwort verteilen. Jedes Passwort kann individuell widerrufen werden.", "Name" : "Name", "App name" : "App-Name", "Create new app password" : "Neues App-Passwort erstellen", @@ -335,10 +359,10 @@ "Username" : "Benutzername", "Done" : "Erledigt", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Entwickelt von der {communityopen}Nextcloud Community{linkclose}, der {githubopen}Quellcode{linkclose} ist lizensiert unter {licenseopen}AGPL{linkclose}-Lizenz.", - "Follow us on Google Plus!" : "Folgen Sie uns auf Google Plus!", + "Follow us on Google+!" : "Folge uns auf Google+!", "Like our facebook page!" : "Like uns auf unserer Facebook-Seite!", - "Subscribe to our twitter channel!" : "Abonniere unseren Twitter-Kanal!", - "Subscribe to our news feed!" : "Abonniere unseren RSS-Feed!", + "Follow us on Twitter!" : "Folge uns auf Twitter!", + "Check out our blog!" : "Sieh Dir unseren Blog an!", "Subscribe to our newsletter!" : "Abonniere unseren Newsletter!", "Settings" : "Einstellungen", "Show storage location" : "Speicherort anzeigen", @@ -354,6 +378,7 @@ "Group name" : "Gruppenname", "Everyone" : "Jeder", "Admins" : "Administratoren", + "Disabled" : "Deaktiviert", "Default quota" : "Standard Speicherplatzgröße", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Bitte Speicherkontingent eingeben (z. B.: „512 MB“ oder „12 GB“)", "Other" : "Andere", @@ -378,12 +403,19 @@ "Uninstalling ...." : "Deinstalliere…", "Error while uninstalling app" : "Fehler beim Deinstallieren der App", "Uninstall" : "Deinstallieren", + "This is used for sending out notifications." : "Dies wird zum Senden von Benachrichtigungen verwendet.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Das PHP-Modul 'fileinfo' fehlt. Wir empfehlen dieses Modul zu aktivieren um die besten Resultate bei der Erkennung der Dateitypen zu erreichen.", "Uninstall app" : "App deinstallieren", "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", "For password recovery and notifications" : "Für Passwort-Wiederherstellung und Benachrichtigungen", + "Your website" : "Deine Webseite", + "Your Twitter handle" : "Dein twitter-handle", + "Passcodes that give an app or device permissions to access your account." : "PINs mit denen Apps oder Geräte auf Dein Konto zugreifen können.", + "Follow us on Google Plus!" : "Folgen Sie uns auf Google Plus!", + "Subscribe to our twitter channel!" : "Abonniere unseren Twitter-Kanal!", + "Subscribe to our news feed!" : "Abonniere unseren RSS-Feed!", "Show last log in" : "Letzte Anmeldung anzeigen" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/settings/l10n/de_DE.js b/settings/l10n/de_DE.js index cde93fd9046..857bd334340 100644 --- a/settings/l10n/de_DE.js +++ b/settings/l10n/de_DE.js @@ -8,6 +8,10 @@ OC.L10N.register( "You changed your email address" : "Du hast deine EMail Adresse geändert", "Your email address was changed by an administrator" : "Deine EMail Adresse wurde durch den Administrator geändert", "Your <strong>password</strong> or <strong>email</strong> was modified" : "Ihr <strong>Passwort</strong> oder Ihre <strong>E.Mail-Adresse</strong> wurde geändert", + "Your apps" : "Ihre Apps", + "Enabled apps" : "Aktivierte Apps", + "Disabled apps" : "Deaktivierte Apps", + "App bundles" : "App-Pakete", "Wrong password" : "Falsches Passwort", "Saved" : "Gespeichert", "No user supplied" : "Kein Benutzer angegeben", @@ -28,7 +32,7 @@ OC.L10N.register( "Well done, %s!" : "Gut gemacht, 1 %s!", "If you received this email, the email configuration seems to be correct." : "Wenn du diese EMail empfangen hast, scheint die EMail Konfiguration korrekt zu sein.", "Email setting test" : "EMail Einstellung Test", - "Mail could not be sent. Check your mail server log" : "E-Mail konnte nicht versendet werden. Bitte die Logs des Mail-Servers prüfen.", + "Email could not be sent. Check your mail server log" : "E-Mail konnte nicht versandt werden. Prüfen Sie Ihr E-Mail-Server-Protokoll", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Beim Senden der E-Mail ist ein Problem aufgetreten. Bitte überprüfen Sie Ihre Einstellungen. (Fehler: %s)", "You need to set your user email before being able to send test emails." : "Sie müssen Ihre Benutzer-E-Mail-Adresse einstellen, bevor Sie Test-E-Mails versenden können.", "Invalid request" : "Ungültige Anforderung", @@ -38,6 +42,10 @@ OC.L10N.register( "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.", "Unable to delete user." : "Benutzer konnte nicht gelöscht werden.", + "Error while enabling user." : "Fehler beim aktivieren des Nutzers.", + "Error while disabling user." : "Fehler beim deaktivieren des Nutzers.", + "In order to verify your Twitter account post following tweet on Twitter (please make sure to post it without any line breaks):" : "Zum Bestätigen Ihres Twitter-Accounts posten Sie bitte den folgenden Tweet auf Twitter (Bitter sicherstellen, dass dies ohne Zeilenumbrüche gepostet wird):", + "In order to verify your Website store following content in your web-root at '.well-known/CloudIdVerificationCode.txt' (please make sure that the complete text is in one line):" : "Zum Bestätigen des Speicherplatzes auf Ihrer Webseite, speichern Sie den folgenden Inhalt im Web-Root unter '.well-known/CloudIdVerificationCode.txt' (bitte stellen Sie sicher, dass der komplette Text in einer Zeile ist):", "Settings saved" : "Einstellungen gespeichert", "Unable to change full name" : "Der vollständige Name konnte nicht geändert werden", "Unable to change email address" : "E-Mail-Adresse konnte nicht geändert werden", @@ -97,11 +105,15 @@ OC.L10N.register( "Updating...." : "Aktualisiere…", "Error while updating app" : "Es ist ein Fehler während der Aktualisierung aufgetreten", "Updated" : "Aktualisiert", + "Removing …" : "Entferne ...", + "Error while removing app" : "Fehler beim Entfernen der App", + "Remove" : "Entferne", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Die App wurde aktiviert, aber sie benötigt ein Update. Sie werden zur Update Seite in 5 Sekunden weitergeleitet.", "App update" : "App aktualisieren", "Approved" : "Geprüft", "Experimental" : "Experimentell", "No apps found for {query}" : "Keine Applikationen für {query} gefunden", + "Enable all" : "Alle aktivieren", "Allow filesystem access" : "Erlaube Dateisystem-Zugriff", "Disconnect" : "Trennen", "Revoke" : "Widerrufen", @@ -136,6 +148,8 @@ OC.L10N.register( "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", + "Verify" : "Überprüfen", + "Verifying …" : "Überprüfe ...", "Select a profile picture" : "Wählen Sie ein Profilbild", "Very weak password" : "Sehr schwaches Passwort", "Weak password" : "Schwaches Passwort", @@ -159,12 +173,14 @@ OC.L10N.register( "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", + "Error while changing status of {user}" : "Fehler beim Ändern des Statusses des Nutzers {user}", "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", "A valid email must be provided" : "Es muss eine gültige E-Mail-Adresse angegeben werden", "__language_name__" : "Deutsch (Förmlich: Sie)", "Unlimited" : "Unbegrenzt", + "Verifying" : "Überprüfe", "Personal info" : "Persönliche Informationen", "Sessions" : "Sitzungen", "App passwords" : "App-PINs", @@ -177,7 +193,7 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "Email server" : "E-Mail-Server", "Open documentation" : "Dokumentation öffnen", - "This is used for sending out notifications." : "Dies wird für das Senden von Benachrichtigungen verwendet.", + "It is important to set up this server to be able to send emails, like for password reset and notifications." : "Es ist wichtig diesen Server so zu konfigurieren, dass E-Mails versandt werden können, z.B. für den Passwort-Reset und Benachrichtigungen.", "Send mode" : "Sendemodus", "Encryption" : "Verschlüsselung", "From address" : "Absenderadresse", @@ -193,6 +209,7 @@ OC.L10N.register( "Test email settings" : "E-Mail-Einstellungen testen", "Send email" : "E-Mail senden", "Server-side encryption" : "Serverseitige Verschlüsselung", + "Server-side encryption makes it possible to encrypt files which are uploaded to this server. This comes with limitations like a performance penalty, so enable this only if needed." : "Serverseitige Verschlüsselung ermöglicht es die auf diesen Server hochgeladenen Dateien zu verschlüsseln. Dies führt allerdings auch zu Nachteilen, wie z.B. einem Geschwindigkeitsverlust. Sie sollte deshalb nur eingeschaltet werden, wenn sie wirklich benötigt wird.", "Enable server-side encryption" : "Serverseitige Verschlüsselung aktivieren", "Please read carefully before activating server-side encryption: " : "Bitte lesen Sie ganz genau, bevor Sie die serverseitige Verschlüsselung aktivieren:", "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." : "Wird die Verschlüsselung einmal aktiviert, so werden alle ab diesem Zeitpunkt hochgeladene Dateien verschlüsselt. Sie kann nur wieder deaktiviert werden, wenn das Verschlüsselungsmodul dies unterstützt und alle Voraussetzungen (wie das Setzen eines Wiederherstellungsschlüssels) im Vorhinein erfüllt wurden.", @@ -207,6 +224,7 @@ OC.L10N.register( "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Sie müssen Ihre Verschlüsselungsschlüssel von der alten Verschlüsselung (ownCloud <= 8.0) zur Neuen migrieren.", "Start migration" : "Migration beginnen", "Security & setup warnings" : "Sicherheits- & Einrichtungswarnungen", + "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the Tips & Ticks section and the documentation for more information." : "Für die Sicherheit und Geschwindigkeit Deiner Installation ist es von großer Bedeutung, dass sie richtig konfiguriert ist. Um Ihnen hierbei zu helfen werden einige automatische Tests durchgeführt. Weitere Informationen finden Sie im Tipps & Tricks- Abschnitt und in der Dokumentation.", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP scheint zur Abfrage von Systemumgebungsvariablen nicht richtig eingerichtet zu sein. Der Test mit getenv (\"PATH\") liefert nur eine leere Antwort zurück.", "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Bitte schauen Sie in der <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Installationsdokumentation ↗</a>auf Hinweise zur PHP-Konfiguration, sowie die PHP-Konfiguration ihres Servers, insbesondere dann, wenn Sie PHP-FPM einsetzten.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Die schreibgeschützte Konfiguration wurde aktiviert. Dies verhindert das Setzen einiger Einstellungen über die Web-Schnittstelle. Weiterhin muss bei jedem Update der Schreibzugriff auf die Datei händisch aktiviert werden.", @@ -227,6 +245,7 @@ OC.L10N.register( "Last cron job execution: %s." : "Letzte Cron-Job-Ausführung: %s.", "Last cron job execution: %s. Something seems wrong." : "Letzte Cron-Job-Ausführung: %s. Möglicherweise liegt ein Fehler vor.", "Cron was not executed yet!" : "Cron wurde bislang noch nicht ausgeführt!", + "For optimal performance it's important to configure background jobs correctly. For bigger instances 'Cron' is the recommended setting. Please see the documentation for more information." : "Um die optimale Geschwindigkeit zu erreichen ist es wichtig, dass die Hintergrund-Aktivitäten richtig konfiguriert sind. Für größere Installationen ist 'Cron' die empfohlene Einstellung. Weitere Informationen finden Sie in der Dokumentation.", "Execute one task with each page loaded" : "Eine Aufgabe bei jedem Laden einer Seite ausführen", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php ist als Webcron-Dienst registriert, der die cron.php alle 15 Minuten per HTTP aufruft.", "Use system's cron service to call the cron.php file every 15 minutes." : "Benutzen Sie den systemeigenen Cron-Dienst, um die cron.php alle 15 Minuten aufzurufen.", @@ -234,6 +253,7 @@ OC.L10N.register( "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Um dies auszuführen, benötigen Sie die PHP-Posix Erweiterung. Weitere Informationen in der {linkstart}PHP-Dokumentation{linkend}.", "Version" : "Version", "Sharing" : "Teilen", + "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Als Administrator können sie das Teilen-Verhalten feinabstimmen. Weitere Informationen finden Sie in der Dokumentation.", "Allow apps to use the Share API" : "Apps die Benutzung der Share-API erlauben", "Allow users to share via link" : "Benutzern erlauben, Inhalte über Links zu teilen", "Allow public uploads" : "Öffentliches Hochladen erlauben", @@ -252,6 +272,7 @@ OC.L10N.register( "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Zeige Haftungsausschluss auf der öffentlichen Upload-Seite. (Wird nur gezeigt wenn die Dateiliste nicht angezeigt wird.) ", "This text will be shown on the public link upload page when the file list is hidden." : "Dieser Text wird auf der öffentlichen Upload-Seite angezeigt wenn die Dateiliste nicht angezeigt wird.", "Tips & tricks" : "Tipps & Tricks", + "There are a lot of features and config switches available to optimally customize and use this instance. Here are some pointers for more information." : "Es gibt ein Menge von Eigenschaften und Konfigurationsschaltern die es ermöglichen, die Installation optimal zu nutzen und anzupassen. Hier einige Verweise auf weitere Informationen.", "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "SQLite wird als Datenbank verwendet. Bei größeren Installationen empfehlen wir, auf ein anderes Datenbank-Backend zu wechseln.", "This is particularly recommended when using the desktop client for file synchronisation." : "Dies wird insbesondere bei der Benutzung des Dektop-Clients zur Synchronisierung empfohlen.", "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>." : "Um zu einer anderen Datenbank zu migrieren, benutzen Sie bitte die Kommandozeile: 'occ db:convert-type', oder in die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation ↗</a> schauen.", @@ -263,6 +284,8 @@ OC.L10N.register( "Check the security of your Nextcloud over our security scan" : "Überprüfen Sie die Sicherheit Ihrer Nextcloud mit unserem Sicherheits-Scan", "Hardening and security guidance" : "Systemhärtung und Sicherheitsempfehlungen", "Developer documentation" : "Dokumentation für Entwickler", + "View in store" : "Im Store anzeigen", + "Limit to groups" : "Auf Gruppen beschränken", "This app has an update available." : "Für diese Anwendung ist eine Aktualisierung verfügbar.", "by %s" : "von %s", "%s-licensed" : "%s-Lizensiert", @@ -309,9 +332,10 @@ OC.L10N.register( "Address" : "Adresse", "Your postal address" : "Ihre Postadresse", "Website" : "Webseite", - "Your website" : "Ihre Internetseite", + "It can take up to 24 hours before the account is displayed as verified." : "Es kann bis zu 24 Stunden dauern, bis das Konto als überprüt angezeigt wird.", + "Link https://…" : "Link https://…", "Twitter" : "Twitter", - "Your Twitter handle" : "Ihr Twitter-Handle", + "Twitter handle @…" : "Twitter-Handle @ ...", "You are member of the following groups:" : "Sie sind Mitglied folgender Gruppen:", "Password" : "Passwort", "Current password" : "Aktuelles Passwort", @@ -328,7 +352,7 @@ OC.L10N.register( "Web, desktop and mobile clients currently logged in to your account." : "Aktuell in Ihrem Konto eingeloggte Web-, Desktop- und Mobil-Clients.", "Device" : "Gerät", "Last activity" : "Letzte Aktivität", - "Passcodes that give an app or device permissions to access your account." : "PINs mit denen Apps oder Geräte auf Ihr Konto zugreifen können.", + "Here you can generate individual passwords for apps so you don’t have to give out your password. You can revoke them individually too." : "Hier können individuelle Passwörter for Apps erzeugt werden. So müssen Sie nicht Ihr Passwort verteilen. Jedes Passwort kann individuell widerrufen werden.", "Name" : "Name", "App name" : "App-Name", "Create new app password" : "Neues App-Passwort erstellen", @@ -337,10 +361,10 @@ OC.L10N.register( "Username" : "Benutzername", "Done" : "Erledigt", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Entwickelt von der {communityopen}Nextcloud Community{linkclose}, der {githubopen}Quellcode{linkclose} ist lizensiert unter {licenseopen}AGPL{linkclose}-Lizenz.", - "Follow us on Google Plus!" : "Folgen Sie uns bei Google Plus!", + "Follow us on Google+!" : "Folgen Sie uns auf Google+!", "Like our facebook page!" : "Liken Sie uns auf unserer Facebook-Seite!", - "Subscribe to our twitter channel!" : "Abonnieren Sie unseren Twitter-Kanal!", - "Subscribe to our news feed!" : "Abonnieren Sie unseren RSS-Feed!", + "Follow us on Twitter!" : "Folgen Sie uns auf Twitter!", + "Check out our blog!" : "Sehen Sie sich unseren Blog an!", "Subscribe to our newsletter!" : "Abonnieren Sie unseren Newsletter!", "Settings" : "Einstellungen", "Show storage location" : "Speicherort anzeigen", @@ -356,6 +380,7 @@ OC.L10N.register( "Group name" : "Gruppenname", "Everyone" : "Jeder", "Admins" : "Administratoren", + "Disabled" : "Deaktiviert", "Default quota" : "Standard-Kontingent", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Bitte Speicherkontingent eingeben (z.B.: „512 MB“ oder „12 GB“)", "Other" : "Andere", @@ -380,12 +405,19 @@ OC.L10N.register( "Uninstalling ...." : "Wird deinstalliert…", "Error while uninstalling app" : "Fehler beim Deinstallieren der App", "Uninstall" : "Deinstallieren", + "This is used for sending out notifications." : "Dies wird für das Senden von Benachrichtigungen verwendet.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Das PHP-Modul 'fileinfo' fehlt. Wir empfehlen Ihnen dieses Modul zu aktivieren, um die besten Resultate bei der Bestimmung der Dateitypen zu erzielen.", "Uninstall app" : "App deinstallieren", "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 Sie jetzt ein %s-Konto haben.<br><br>Ihr Benutzername: <strong>%s</strong><br>Greifen Sie 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 Sie jetzt ein %s-Konto haben.\n\nIhr Benutzername: %s\nZugriff: %s\n\n", "For password recovery and notifications" : "Für Passwort-Wiederherstellung und Benachrichtigungen", + "Your website" : "Ihre Internetseite", + "Your Twitter handle" : "Ihr Twitter-Handle", + "Passcodes that give an app or device permissions to access your account." : "PINs mit denen Apps oder Geräte auf Ihr Konto zugreifen können.", + "Follow us on Google Plus!" : "Folgen Sie uns bei Google Plus!", + "Subscribe to our twitter channel!" : "Abonnieren Sie unseren Twitter-Kanal!", + "Subscribe to our news feed!" : "Abonnieren Sie unseren RSS-Feed!", "Show last log in" : "Letzte Anmeldung anzeigen" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/de_DE.json b/settings/l10n/de_DE.json index 369f434e128..a59cc07be6d 100644 --- a/settings/l10n/de_DE.json +++ b/settings/l10n/de_DE.json @@ -6,6 +6,10 @@ "You changed your email address" : "Du hast deine EMail Adresse geändert", "Your email address was changed by an administrator" : "Deine EMail Adresse wurde durch den Administrator geändert", "Your <strong>password</strong> or <strong>email</strong> was modified" : "Ihr <strong>Passwort</strong> oder Ihre <strong>E.Mail-Adresse</strong> wurde geändert", + "Your apps" : "Ihre Apps", + "Enabled apps" : "Aktivierte Apps", + "Disabled apps" : "Deaktivierte Apps", + "App bundles" : "App-Pakete", "Wrong password" : "Falsches Passwort", "Saved" : "Gespeichert", "No user supplied" : "Kein Benutzer angegeben", @@ -26,7 +30,7 @@ "Well done, %s!" : "Gut gemacht, 1 %s!", "If you received this email, the email configuration seems to be correct." : "Wenn du diese EMail empfangen hast, scheint die EMail Konfiguration korrekt zu sein.", "Email setting test" : "EMail Einstellung Test", - "Mail could not be sent. Check your mail server log" : "E-Mail konnte nicht versendet werden. Bitte die Logs des Mail-Servers prüfen.", + "Email could not be sent. Check your mail server log" : "E-Mail konnte nicht versandt werden. Prüfen Sie Ihr E-Mail-Server-Protokoll", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Beim Senden der E-Mail ist ein Problem aufgetreten. Bitte überprüfen Sie Ihre Einstellungen. (Fehler: %s)", "You need to set your user email before being able to send test emails." : "Sie müssen Ihre Benutzer-E-Mail-Adresse einstellen, bevor Sie Test-E-Mails versenden können.", "Invalid request" : "Ungültige Anforderung", @@ -36,6 +40,10 @@ "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.", "Unable to delete user." : "Benutzer konnte nicht gelöscht werden.", + "Error while enabling user." : "Fehler beim aktivieren des Nutzers.", + "Error while disabling user." : "Fehler beim deaktivieren des Nutzers.", + "In order to verify your Twitter account post following tweet on Twitter (please make sure to post it without any line breaks):" : "Zum Bestätigen Ihres Twitter-Accounts posten Sie bitte den folgenden Tweet auf Twitter (Bitter sicherstellen, dass dies ohne Zeilenumbrüche gepostet wird):", + "In order to verify your Website store following content in your web-root at '.well-known/CloudIdVerificationCode.txt' (please make sure that the complete text is in one line):" : "Zum Bestätigen des Speicherplatzes auf Ihrer Webseite, speichern Sie den folgenden Inhalt im Web-Root unter '.well-known/CloudIdVerificationCode.txt' (bitte stellen Sie sicher, dass der komplette Text in einer Zeile ist):", "Settings saved" : "Einstellungen gespeichert", "Unable to change full name" : "Der vollständige Name konnte nicht geändert werden", "Unable to change email address" : "E-Mail-Adresse konnte nicht geändert werden", @@ -95,11 +103,15 @@ "Updating...." : "Aktualisiere…", "Error while updating app" : "Es ist ein Fehler während der Aktualisierung aufgetreten", "Updated" : "Aktualisiert", + "Removing …" : "Entferne ...", + "Error while removing app" : "Fehler beim Entfernen der App", + "Remove" : "Entferne", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Die App wurde aktiviert, aber sie benötigt ein Update. Sie werden zur Update Seite in 5 Sekunden weitergeleitet.", "App update" : "App aktualisieren", "Approved" : "Geprüft", "Experimental" : "Experimentell", "No apps found for {query}" : "Keine Applikationen für {query} gefunden", + "Enable all" : "Alle aktivieren", "Allow filesystem access" : "Erlaube Dateisystem-Zugriff", "Disconnect" : "Trennen", "Revoke" : "Widerrufen", @@ -134,6 +146,8 @@ "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", + "Verify" : "Überprüfen", + "Verifying …" : "Überprüfe ...", "Select a profile picture" : "Wählen Sie ein Profilbild", "Very weak password" : "Sehr schwaches Passwort", "Weak password" : "Schwaches Passwort", @@ -157,12 +171,14 @@ "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", + "Error while changing status of {user}" : "Fehler beim Ändern des Statusses des Nutzers {user}", "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", "A valid email must be provided" : "Es muss eine gültige E-Mail-Adresse angegeben werden", "__language_name__" : "Deutsch (Förmlich: Sie)", "Unlimited" : "Unbegrenzt", + "Verifying" : "Überprüfe", "Personal info" : "Persönliche Informationen", "Sessions" : "Sitzungen", "App passwords" : "App-PINs", @@ -175,7 +191,7 @@ "STARTTLS" : "STARTTLS", "Email server" : "E-Mail-Server", "Open documentation" : "Dokumentation öffnen", - "This is used for sending out notifications." : "Dies wird für das Senden von Benachrichtigungen verwendet.", + "It is important to set up this server to be able to send emails, like for password reset and notifications." : "Es ist wichtig diesen Server so zu konfigurieren, dass E-Mails versandt werden können, z.B. für den Passwort-Reset und Benachrichtigungen.", "Send mode" : "Sendemodus", "Encryption" : "Verschlüsselung", "From address" : "Absenderadresse", @@ -191,6 +207,7 @@ "Test email settings" : "E-Mail-Einstellungen testen", "Send email" : "E-Mail senden", "Server-side encryption" : "Serverseitige Verschlüsselung", + "Server-side encryption makes it possible to encrypt files which are uploaded to this server. This comes with limitations like a performance penalty, so enable this only if needed." : "Serverseitige Verschlüsselung ermöglicht es die auf diesen Server hochgeladenen Dateien zu verschlüsseln. Dies führt allerdings auch zu Nachteilen, wie z.B. einem Geschwindigkeitsverlust. Sie sollte deshalb nur eingeschaltet werden, wenn sie wirklich benötigt wird.", "Enable server-side encryption" : "Serverseitige Verschlüsselung aktivieren", "Please read carefully before activating server-side encryption: " : "Bitte lesen Sie ganz genau, bevor Sie die serverseitige Verschlüsselung aktivieren:", "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." : "Wird die Verschlüsselung einmal aktiviert, so werden alle ab diesem Zeitpunkt hochgeladene Dateien verschlüsselt. Sie kann nur wieder deaktiviert werden, wenn das Verschlüsselungsmodul dies unterstützt und alle Voraussetzungen (wie das Setzen eines Wiederherstellungsschlüssels) im Vorhinein erfüllt wurden.", @@ -205,6 +222,7 @@ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Sie müssen Ihre Verschlüsselungsschlüssel von der alten Verschlüsselung (ownCloud <= 8.0) zur Neuen migrieren.", "Start migration" : "Migration beginnen", "Security & setup warnings" : "Sicherheits- & Einrichtungswarnungen", + "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the Tips & Ticks section and the documentation for more information." : "Für die Sicherheit und Geschwindigkeit Deiner Installation ist es von großer Bedeutung, dass sie richtig konfiguriert ist. Um Ihnen hierbei zu helfen werden einige automatische Tests durchgeführt. Weitere Informationen finden Sie im Tipps & Tricks- Abschnitt und in der Dokumentation.", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP scheint zur Abfrage von Systemumgebungsvariablen nicht richtig eingerichtet zu sein. Der Test mit getenv (\"PATH\") liefert nur eine leere Antwort zurück.", "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Bitte schauen Sie in der <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Installationsdokumentation ↗</a>auf Hinweise zur PHP-Konfiguration, sowie die PHP-Konfiguration ihres Servers, insbesondere dann, wenn Sie PHP-FPM einsetzten.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Die schreibgeschützte Konfiguration wurde aktiviert. Dies verhindert das Setzen einiger Einstellungen über die Web-Schnittstelle. Weiterhin muss bei jedem Update der Schreibzugriff auf die Datei händisch aktiviert werden.", @@ -225,6 +243,7 @@ "Last cron job execution: %s." : "Letzte Cron-Job-Ausführung: %s.", "Last cron job execution: %s. Something seems wrong." : "Letzte Cron-Job-Ausführung: %s. Möglicherweise liegt ein Fehler vor.", "Cron was not executed yet!" : "Cron wurde bislang noch nicht ausgeführt!", + "For optimal performance it's important to configure background jobs correctly. For bigger instances 'Cron' is the recommended setting. Please see the documentation for more information." : "Um die optimale Geschwindigkeit zu erreichen ist es wichtig, dass die Hintergrund-Aktivitäten richtig konfiguriert sind. Für größere Installationen ist 'Cron' die empfohlene Einstellung. Weitere Informationen finden Sie in der Dokumentation.", "Execute one task with each page loaded" : "Eine Aufgabe bei jedem Laden einer Seite ausführen", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php ist als Webcron-Dienst registriert, der die cron.php alle 15 Minuten per HTTP aufruft.", "Use system's cron service to call the cron.php file every 15 minutes." : "Benutzen Sie den systemeigenen Cron-Dienst, um die cron.php alle 15 Minuten aufzurufen.", @@ -232,6 +251,7 @@ "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Um dies auszuführen, benötigen Sie die PHP-Posix Erweiterung. Weitere Informationen in der {linkstart}PHP-Dokumentation{linkend}.", "Version" : "Version", "Sharing" : "Teilen", + "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Als Administrator können sie das Teilen-Verhalten feinabstimmen. Weitere Informationen finden Sie in der Dokumentation.", "Allow apps to use the Share API" : "Apps die Benutzung der Share-API erlauben", "Allow users to share via link" : "Benutzern erlauben, Inhalte über Links zu teilen", "Allow public uploads" : "Öffentliches Hochladen erlauben", @@ -250,6 +270,7 @@ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Zeige Haftungsausschluss auf der öffentlichen Upload-Seite. (Wird nur gezeigt wenn die Dateiliste nicht angezeigt wird.) ", "This text will be shown on the public link upload page when the file list is hidden." : "Dieser Text wird auf der öffentlichen Upload-Seite angezeigt wenn die Dateiliste nicht angezeigt wird.", "Tips & tricks" : "Tipps & Tricks", + "There are a lot of features and config switches available to optimally customize and use this instance. Here are some pointers for more information." : "Es gibt ein Menge von Eigenschaften und Konfigurationsschaltern die es ermöglichen, die Installation optimal zu nutzen und anzupassen. Hier einige Verweise auf weitere Informationen.", "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "SQLite wird als Datenbank verwendet. Bei größeren Installationen empfehlen wir, auf ein anderes Datenbank-Backend zu wechseln.", "This is particularly recommended when using the desktop client for file synchronisation." : "Dies wird insbesondere bei der Benutzung des Dektop-Clients zur Synchronisierung empfohlen.", "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>." : "Um zu einer anderen Datenbank zu migrieren, benutzen Sie bitte die Kommandozeile: 'occ db:convert-type', oder in die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation ↗</a> schauen.", @@ -261,6 +282,8 @@ "Check the security of your Nextcloud over our security scan" : "Überprüfen Sie die Sicherheit Ihrer Nextcloud mit unserem Sicherheits-Scan", "Hardening and security guidance" : "Systemhärtung und Sicherheitsempfehlungen", "Developer documentation" : "Dokumentation für Entwickler", + "View in store" : "Im Store anzeigen", + "Limit to groups" : "Auf Gruppen beschränken", "This app has an update available." : "Für diese Anwendung ist eine Aktualisierung verfügbar.", "by %s" : "von %s", "%s-licensed" : "%s-Lizensiert", @@ -307,9 +330,10 @@ "Address" : "Adresse", "Your postal address" : "Ihre Postadresse", "Website" : "Webseite", - "Your website" : "Ihre Internetseite", + "It can take up to 24 hours before the account is displayed as verified." : "Es kann bis zu 24 Stunden dauern, bis das Konto als überprüt angezeigt wird.", + "Link https://…" : "Link https://…", "Twitter" : "Twitter", - "Your Twitter handle" : "Ihr Twitter-Handle", + "Twitter handle @…" : "Twitter-Handle @ ...", "You are member of the following groups:" : "Sie sind Mitglied folgender Gruppen:", "Password" : "Passwort", "Current password" : "Aktuelles Passwort", @@ -326,7 +350,7 @@ "Web, desktop and mobile clients currently logged in to your account." : "Aktuell in Ihrem Konto eingeloggte Web-, Desktop- und Mobil-Clients.", "Device" : "Gerät", "Last activity" : "Letzte Aktivität", - "Passcodes that give an app or device permissions to access your account." : "PINs mit denen Apps oder Geräte auf Ihr Konto zugreifen können.", + "Here you can generate individual passwords for apps so you don’t have to give out your password. You can revoke them individually too." : "Hier können individuelle Passwörter for Apps erzeugt werden. So müssen Sie nicht Ihr Passwort verteilen. Jedes Passwort kann individuell widerrufen werden.", "Name" : "Name", "App name" : "App-Name", "Create new app password" : "Neues App-Passwort erstellen", @@ -335,10 +359,10 @@ "Username" : "Benutzername", "Done" : "Erledigt", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Entwickelt von der {communityopen}Nextcloud Community{linkclose}, der {githubopen}Quellcode{linkclose} ist lizensiert unter {licenseopen}AGPL{linkclose}-Lizenz.", - "Follow us on Google Plus!" : "Folgen Sie uns bei Google Plus!", + "Follow us on Google+!" : "Folgen Sie uns auf Google+!", "Like our facebook page!" : "Liken Sie uns auf unserer Facebook-Seite!", - "Subscribe to our twitter channel!" : "Abonnieren Sie unseren Twitter-Kanal!", - "Subscribe to our news feed!" : "Abonnieren Sie unseren RSS-Feed!", + "Follow us on Twitter!" : "Folgen Sie uns auf Twitter!", + "Check out our blog!" : "Sehen Sie sich unseren Blog an!", "Subscribe to our newsletter!" : "Abonnieren Sie unseren Newsletter!", "Settings" : "Einstellungen", "Show storage location" : "Speicherort anzeigen", @@ -354,6 +378,7 @@ "Group name" : "Gruppenname", "Everyone" : "Jeder", "Admins" : "Administratoren", + "Disabled" : "Deaktiviert", "Default quota" : "Standard-Kontingent", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Bitte Speicherkontingent eingeben (z.B.: „512 MB“ oder „12 GB“)", "Other" : "Andere", @@ -378,12 +403,19 @@ "Uninstalling ...." : "Wird deinstalliert…", "Error while uninstalling app" : "Fehler beim Deinstallieren der App", "Uninstall" : "Deinstallieren", + "This is used for sending out notifications." : "Dies wird für das Senden von Benachrichtigungen verwendet.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Das PHP-Modul 'fileinfo' fehlt. Wir empfehlen Ihnen dieses Modul zu aktivieren, um die besten Resultate bei der Bestimmung der Dateitypen zu erzielen.", "Uninstall app" : "App deinstallieren", "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 Sie jetzt ein %s-Konto haben.<br><br>Ihr Benutzername: <strong>%s</strong><br>Greifen Sie 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 Sie jetzt ein %s-Konto haben.\n\nIhr Benutzername: %s\nZugriff: %s\n\n", "For password recovery and notifications" : "Für Passwort-Wiederherstellung und Benachrichtigungen", + "Your website" : "Ihre Internetseite", + "Your Twitter handle" : "Ihr Twitter-Handle", + "Passcodes that give an app or device permissions to access your account." : "PINs mit denen Apps oder Geräte auf Ihr Konto zugreifen können.", + "Follow us on Google Plus!" : "Folgen Sie uns bei Google Plus!", + "Subscribe to our twitter channel!" : "Abonnieren Sie unseren Twitter-Kanal!", + "Subscribe to our news feed!" : "Abonnieren Sie unseren RSS-Feed!", "Show last log in" : "Letzte Anmeldung anzeigen" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/settings/l10n/el.js b/settings/l10n/el.js index ef4d075a601..a705059df6f 100644 --- a/settings/l10n/el.js +++ b/settings/l10n/el.js @@ -3,6 +3,8 @@ OC.L10N.register( { "You changed your password" : "Αλλάξατε το συνθηματικό σας", "Your password was reset by an administrator" : "Έχει γίνει επαναφορά του συνθηματικού σας από τον διαχειριστή", + "Your apps" : "Οι εφαρμογές σας", + "Enabled apps" : "Ενεργοποιημένες εφαρμογές", "Wrong password" : "Εσφαλμένο συνθηματικό", "Saved" : "Αποθηκεύτηκαν", "No user supplied" : "Δεν εισήχθη χρήστης", @@ -89,9 +91,13 @@ OC.L10N.register( "Valid until {date}" : "Έγκυρο έως {date}", "Delete" : "Διαγραφή", "Local" : "Τοπικά", + "Private" : "Ιδιωτικά", + "Only visible to local users" : "Εμφανές μόνο σε τοπικούς χρήστες", "Only visible to you" : "Εμφανές μόνο σε εσάς", "Contacts" : "Επαφές", "Public" : "Δημόσιο", + "Verify" : "Επαλήθευση", + "Verifying …" : "Γίνεται επαλήθευση ...", "Select a profile picture" : "Επιλογή εικόνας προφίλ", "Very weak password" : "Πολύ αδύναμο συνθηματικό", "Weak password" : "Αδύναμο συνθηματικό", @@ -116,6 +122,7 @@ OC.L10N.register( "A valid email must be provided" : "Πρέπει να εισαχθεί ένα έγκυρο email", "__language_name__" : "Ελληνικά", "Unlimited" : "Απεριόριστο", + "Verifying" : "Γίνεται επαλήθευση", "Personal info" : "Προσωπικές Πληροφορίες", "Sessions" : "Συνεδρίες", "App passwords" : "Συνθηματικά εφαρμογής", @@ -128,7 +135,6 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "Email server" : "Διακομιστής Email", "Open documentation" : "Άνοιγμα τεκμηρίωσης.", - "This is used for sending out notifications." : "Χρησιμοποιείται για αποστολή ειδοποιήσεων.", "Send mode" : "Κατάσταση αποστολής", "Encryption" : "Κρυπτογράφηση", "From address" : "Από τη διεύθυνση", @@ -239,9 +245,7 @@ OC.L10N.register( "Address" : "Διεύθυνση", "Your postal address" : "Ο ταχυδρομικός σας κώδικας", "Website" : "Ιστοσελίδα", - "Your website" : "Η ιστοσελίδα σας", "Twitter" : "Twitter", - "Your Twitter handle" : "Το Twitter σας", "You are member of the following groups:" : "Είστε μέλος των ακόλουθων ομάδων:", "Password" : "Συνθηματικό", "Current password" : "Τρέχων συνθηματικό", @@ -262,10 +266,7 @@ OC.L10N.register( "For security reasons this password will only be shown once." : "Για λόγους ασφαλείας αυτό το συνθηματικό θα εμφανιστεί μόνο μια φορά.", "Username" : "Όνομα χρήστη", "Done" : "Ολοκληρώθηκε", - "Follow us on Google Plus!" : "Ακολουθήστε μας στο Google Plus!", "Like our facebook page!" : "Ακολουθήστε μας στην σελίδα μας στο facebook!", - "Subscribe to our twitter channel!" : "Εγγραφείτε στο κανάλι μας στο twitter!", - "Subscribe to our news feed!" : "Εγγραφείτε στην ροή των νέων μας!", "Settings" : "Ρυθμίσεις", "Show storage location" : "Εμφάνιση τοποθεσίας αποθήκευσης", "Show user backend" : "Εμφάνιση χρήστη συστήματος υποστήριξης", @@ -302,10 +303,16 @@ OC.L10N.register( "Uninstalling ...." : "Απεγκατάσταση ....", "Error while uninstalling app" : "Σφάλμα κατά την απεγκατάσταση της εφαρμογής", "Uninstall" : "Απεγκατάσταση", + "This is used for sending out notifications." : "Χρησιμοποιείται για αποστολή ειδοποιήσεων.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Η PHP ενοτητα 'fileinfo' λειπει. Σας συνιστούμε να ενεργοποιήσετε αυτή την ενότητα για να έχετε καλύτερα αποτελέσματα με τον εντοπισμό τύπου MIME. ", "Uninstall app" : "Απεγκατάσταση εφαρμογης", "Cheers!" : "Χαιρετισμούς!", "For password recovery and notifications" : "Η ανάκτηση του συνθηματικού και οι ειδοποιήσεις", + "Your website" : "Η ιστοσελίδα σας", + "Your Twitter handle" : "Το Twitter σας", + "Follow us on Google Plus!" : "Ακολουθήστε μας στο Google Plus!", + "Subscribe to our twitter channel!" : "Εγγραφείτε στο κανάλι μας στο twitter!", + "Subscribe to our news feed!" : "Εγγραφείτε στην ροή των νέων μας!", "Show last log in" : "Εμφάνιση τελευταίας εισόδου" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/el.json b/settings/l10n/el.json index f41084aabb9..b21a5e90682 100644 --- a/settings/l10n/el.json +++ b/settings/l10n/el.json @@ -1,6 +1,8 @@ { "translations": { "You changed your password" : "Αλλάξατε το συνθηματικό σας", "Your password was reset by an administrator" : "Έχει γίνει επαναφορά του συνθηματικού σας από τον διαχειριστή", + "Your apps" : "Οι εφαρμογές σας", + "Enabled apps" : "Ενεργοποιημένες εφαρμογές", "Wrong password" : "Εσφαλμένο συνθηματικό", "Saved" : "Αποθηκεύτηκαν", "No user supplied" : "Δεν εισήχθη χρήστης", @@ -87,9 +89,13 @@ "Valid until {date}" : "Έγκυρο έως {date}", "Delete" : "Διαγραφή", "Local" : "Τοπικά", + "Private" : "Ιδιωτικά", + "Only visible to local users" : "Εμφανές μόνο σε τοπικούς χρήστες", "Only visible to you" : "Εμφανές μόνο σε εσάς", "Contacts" : "Επαφές", "Public" : "Δημόσιο", + "Verify" : "Επαλήθευση", + "Verifying …" : "Γίνεται επαλήθευση ...", "Select a profile picture" : "Επιλογή εικόνας προφίλ", "Very weak password" : "Πολύ αδύναμο συνθηματικό", "Weak password" : "Αδύναμο συνθηματικό", @@ -114,6 +120,7 @@ "A valid email must be provided" : "Πρέπει να εισαχθεί ένα έγκυρο email", "__language_name__" : "Ελληνικά", "Unlimited" : "Απεριόριστο", + "Verifying" : "Γίνεται επαλήθευση", "Personal info" : "Προσωπικές Πληροφορίες", "Sessions" : "Συνεδρίες", "App passwords" : "Συνθηματικά εφαρμογής", @@ -126,7 +133,6 @@ "STARTTLS" : "STARTTLS", "Email server" : "Διακομιστής Email", "Open documentation" : "Άνοιγμα τεκμηρίωσης.", - "This is used for sending out notifications." : "Χρησιμοποιείται για αποστολή ειδοποιήσεων.", "Send mode" : "Κατάσταση αποστολής", "Encryption" : "Κρυπτογράφηση", "From address" : "Από τη διεύθυνση", @@ -237,9 +243,7 @@ "Address" : "Διεύθυνση", "Your postal address" : "Ο ταχυδρομικός σας κώδικας", "Website" : "Ιστοσελίδα", - "Your website" : "Η ιστοσελίδα σας", "Twitter" : "Twitter", - "Your Twitter handle" : "Το Twitter σας", "You are member of the following groups:" : "Είστε μέλος των ακόλουθων ομάδων:", "Password" : "Συνθηματικό", "Current password" : "Τρέχων συνθηματικό", @@ -260,10 +264,7 @@ "For security reasons this password will only be shown once." : "Για λόγους ασφαλείας αυτό το συνθηματικό θα εμφανιστεί μόνο μια φορά.", "Username" : "Όνομα χρήστη", "Done" : "Ολοκληρώθηκε", - "Follow us on Google Plus!" : "Ακολουθήστε μας στο Google Plus!", "Like our facebook page!" : "Ακολουθήστε μας στην σελίδα μας στο facebook!", - "Subscribe to our twitter channel!" : "Εγγραφείτε στο κανάλι μας στο twitter!", - "Subscribe to our news feed!" : "Εγγραφείτε στην ροή των νέων μας!", "Settings" : "Ρυθμίσεις", "Show storage location" : "Εμφάνιση τοποθεσίας αποθήκευσης", "Show user backend" : "Εμφάνιση χρήστη συστήματος υποστήριξης", @@ -300,10 +301,16 @@ "Uninstalling ...." : "Απεγκατάσταση ....", "Error while uninstalling app" : "Σφάλμα κατά την απεγκατάσταση της εφαρμογής", "Uninstall" : "Απεγκατάσταση", + "This is used for sending out notifications." : "Χρησιμοποιείται για αποστολή ειδοποιήσεων.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Η PHP ενοτητα 'fileinfo' λειπει. Σας συνιστούμε να ενεργοποιήσετε αυτή την ενότητα για να έχετε καλύτερα αποτελέσματα με τον εντοπισμό τύπου MIME. ", "Uninstall app" : "Απεγκατάσταση εφαρμογης", "Cheers!" : "Χαιρετισμούς!", "For password recovery and notifications" : "Η ανάκτηση του συνθηματικού και οι ειδοποιήσεις", + "Your website" : "Η ιστοσελίδα σας", + "Your Twitter handle" : "Το Twitter σας", + "Follow us on Google Plus!" : "Ακολουθήστε μας στο Google Plus!", + "Subscribe to our twitter channel!" : "Εγγραφείτε στο κανάλι μας στο twitter!", + "Subscribe to our news feed!" : "Εγγραφείτε στην ροή των νέων μας!", "Show last log in" : "Εμφάνιση τελευταίας εισόδου" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/settings/l10n/en_GB.js b/settings/l10n/en_GB.js index 4ce841b77e1..e24eece47cb 100644 --- a/settings/l10n/en_GB.js +++ b/settings/l10n/en_GB.js @@ -98,7 +98,6 @@ OC.L10N.register( "NT LAN Manager" : "NT LAN Manager", "Email server" : "Email server", "Open documentation" : "Open documentation", - "This is used for sending out notifications." : "This is used for sending out notifications.", "Send mode" : "Send mode", "Encryption" : "Encryption", "From address" : "From address", @@ -258,6 +257,7 @@ OC.L10N.register( "Uninstalling ...." : "Uninstalling...", "Error while uninstalling app" : "Error whilst uninstalling app", "Uninstall" : "Uninstall", + "This is used for sending out notifications." : "This is used for sending out notifications.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "The PHP module 'fileinfo' is missing. We strongly recommend enabling this module to get best results with mime-type detection.", "Cheers!" : "Cheers!", "For password recovery and notifications" : "For password recovery and notifications", diff --git a/settings/l10n/en_GB.json b/settings/l10n/en_GB.json index 3d59075a440..48bf9665c70 100644 --- a/settings/l10n/en_GB.json +++ b/settings/l10n/en_GB.json @@ -96,7 +96,6 @@ "NT LAN Manager" : "NT LAN Manager", "Email server" : "Email server", "Open documentation" : "Open documentation", - "This is used for sending out notifications." : "This is used for sending out notifications.", "Send mode" : "Send mode", "Encryption" : "Encryption", "From address" : "From address", @@ -256,6 +255,7 @@ "Uninstalling ...." : "Uninstalling...", "Error while uninstalling app" : "Error whilst uninstalling app", "Uninstall" : "Uninstall", + "This is used for sending out notifications." : "This is used for sending out notifications.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "The PHP module 'fileinfo' is missing. We strongly recommend enabling this module to get best results with mime-type detection.", "Cheers!" : "Cheers!", "For password recovery and notifications" : "For password recovery and notifications", diff --git a/settings/l10n/es.js b/settings/l10n/es.js index 6ee3146fea2..681f41bc5b4 100644 --- a/settings/l10n/es.js +++ b/settings/l10n/es.js @@ -27,7 +27,6 @@ OC.L10N.register( "Well done, %s!" : "Bien hecho, %s!", "If you received this email, the email configuration seems to be correct." : "Si recibe este correo, la configuración de correo parece ser correcta.", "Email setting test" : "Prueba de configuración de correo", - "Mail could not be sent. Check your mail server log" : "El correo no pudo ser enviado. Revise el registro de su servidor de correo", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Ocurrió un problema al enviar el mensaje de correo electrónico. Revise su configuración. (Error: %s)", "You need to set your user email before being able to send test emails." : "Tiene que configurar su dirección de correo electrónico antes de poder enviar mensajes de prueba.", "Invalid request" : "Petición no válida", @@ -176,7 +175,6 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "Email server" : "Servidor de correo electrónico", "Open documentation" : "Abrir Documentación", - "This is used for sending out notifications." : "Esto se usa para enviar notificaciones.", "Send mode" : "Modo de envío", "Encryption" : "Cifrado", "From address" : "Desde la dirección", @@ -307,9 +305,7 @@ OC.L10N.register( "Address" : "Dirección", "Your postal address" : "Su dirección física", "Website" : "Sitio web", - "Your website" : "La dirección de su sitio web", "Twitter" : "Twitter", - "Your Twitter handle" : "Su usuario de Twitter", "You are member of the following groups:" : "Es miembro de los siguientes grupos:", "Password" : "Contraseña", "Current password" : "Contraseña actual", @@ -326,7 +322,6 @@ OC.L10N.register( "Web, desktop and mobile clients currently logged in to your account." : "Clientes web, móviles y de escritorio actualmente conectados a tu cuenta.", "Device" : "Dispositivo", "Last activity" : "Última actividad", - "Passcodes that give an app or device permissions to access your account." : "Código de paso que da permisos a una app o dispositivo para acceder a tu cuenta.", "Name" : "Nombre", "App name" : "Nombre de la app", "Create new app password" : "Crear nueva contraseña de app", @@ -335,10 +330,7 @@ OC.L10N.register( "Username" : "Nombre de usuario", "Done" : "Hecho", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Desarrollado por la {communityopen}comunidad Nextcloud{linkclose}, el {githubopen}código fuente{linkclose} está licenciado bajo la {licenseopen}AGPL{linkclose}.", - "Follow us on Google Plus!" : "¡Síganos en Google+!", "Like our facebook page!" : "¡Da a Me gusta en nuestra página de Facebook!", - "Subscribe to our twitter channel!" : "Suscríbete a nuestro canal de Twitter!", - "Subscribe to our news feed!" : "¡Suscríbete a nuestro feed de noticias!", "Subscribe to our newsletter!" : "¡Suscríbete a nuestro boletín!", "Settings" : "Configuración", "Show storage location" : "Mostrar la ubicación del almacenamiento", @@ -378,12 +370,19 @@ OC.L10N.register( "Uninstalling ...." : "Desinstalando...", "Error while uninstalling app" : "Error al desinstalar la aplicación", "Uninstall" : "Desinstalar", + "This is used for sending out notifications." : "Esto se usa para enviar notificaciones.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "No se ha encontrado el modulo PHP 'fileinfo'. Le recomendamos encarecidamente que habilite este módulo para obtener mejores resultados con la detección de tipos MIME.", "Uninstall app" : "Desinstalar aplicación", "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>" : "Hola:<br><br>Solo queremos hacerle saber que ahora dispone de una cuenta de %s.<br><br>Su usuario: <strong>%s</strong><br>Acceda: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "¡Saludos!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hola:,\n\nSolo queremos hacerle saber que ahora dispone de una cuenta en %s.\n\nSu usuario: %s\nAcceda: %s\n\n", "For password recovery and notifications" : "Para la recuperación de contraseña y notificaciones", + "Your website" : "La dirección de su sitio web", + "Your Twitter handle" : "Su usuario de Twitter", + "Passcodes that give an app or device permissions to access your account." : "Código de paso que da permisos a una app o dispositivo para acceder a tu cuenta.", + "Follow us on Google Plus!" : "¡Síganos en Google+!", + "Subscribe to our twitter channel!" : "Suscríbete a nuestro canal de Twitter!", + "Subscribe to our news feed!" : "¡Suscríbete a nuestro feed de noticias!", "Show last log in" : "Mostrar el último inicio de sesión" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/es.json b/settings/l10n/es.json index 308b666b69c..a974b91b0a4 100644 --- a/settings/l10n/es.json +++ b/settings/l10n/es.json @@ -25,7 +25,6 @@ "Well done, %s!" : "Bien hecho, %s!", "If you received this email, the email configuration seems to be correct." : "Si recibe este correo, la configuración de correo parece ser correcta.", "Email setting test" : "Prueba de configuración de correo", - "Mail could not be sent. Check your mail server log" : "El correo no pudo ser enviado. Revise el registro de su servidor de correo", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Ocurrió un problema al enviar el mensaje de correo electrónico. Revise su configuración. (Error: %s)", "You need to set your user email before being able to send test emails." : "Tiene que configurar su dirección de correo electrónico antes de poder enviar mensajes de prueba.", "Invalid request" : "Petición no válida", @@ -174,7 +173,6 @@ "STARTTLS" : "STARTTLS", "Email server" : "Servidor de correo electrónico", "Open documentation" : "Abrir Documentación", - "This is used for sending out notifications." : "Esto se usa para enviar notificaciones.", "Send mode" : "Modo de envío", "Encryption" : "Cifrado", "From address" : "Desde la dirección", @@ -305,9 +303,7 @@ "Address" : "Dirección", "Your postal address" : "Su dirección física", "Website" : "Sitio web", - "Your website" : "La dirección de su sitio web", "Twitter" : "Twitter", - "Your Twitter handle" : "Su usuario de Twitter", "You are member of the following groups:" : "Es miembro de los siguientes grupos:", "Password" : "Contraseña", "Current password" : "Contraseña actual", @@ -324,7 +320,6 @@ "Web, desktop and mobile clients currently logged in to your account." : "Clientes web, móviles y de escritorio actualmente conectados a tu cuenta.", "Device" : "Dispositivo", "Last activity" : "Última actividad", - "Passcodes that give an app or device permissions to access your account." : "Código de paso que da permisos a una app o dispositivo para acceder a tu cuenta.", "Name" : "Nombre", "App name" : "Nombre de la app", "Create new app password" : "Crear nueva contraseña de app", @@ -333,10 +328,7 @@ "Username" : "Nombre de usuario", "Done" : "Hecho", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Desarrollado por la {communityopen}comunidad Nextcloud{linkclose}, el {githubopen}código fuente{linkclose} está licenciado bajo la {licenseopen}AGPL{linkclose}.", - "Follow us on Google Plus!" : "¡Síganos en Google+!", "Like our facebook page!" : "¡Da a Me gusta en nuestra página de Facebook!", - "Subscribe to our twitter channel!" : "Suscríbete a nuestro canal de Twitter!", - "Subscribe to our news feed!" : "¡Suscríbete a nuestro feed de noticias!", "Subscribe to our newsletter!" : "¡Suscríbete a nuestro boletín!", "Settings" : "Configuración", "Show storage location" : "Mostrar la ubicación del almacenamiento", @@ -376,12 +368,19 @@ "Uninstalling ...." : "Desinstalando...", "Error while uninstalling app" : "Error al desinstalar la aplicación", "Uninstall" : "Desinstalar", + "This is used for sending out notifications." : "Esto se usa para enviar notificaciones.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "No se ha encontrado el modulo PHP 'fileinfo'. Le recomendamos encarecidamente que habilite este módulo para obtener mejores resultados con la detección de tipos MIME.", "Uninstall app" : "Desinstalar aplicación", "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>" : "Hola:<br><br>Solo queremos hacerle saber que ahora dispone de una cuenta de %s.<br><br>Su usuario: <strong>%s</strong><br>Acceda: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "¡Saludos!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hola:,\n\nSolo queremos hacerle saber que ahora dispone de una cuenta en %s.\n\nSu usuario: %s\nAcceda: %s\n\n", "For password recovery and notifications" : "Para la recuperación de contraseña y notificaciones", + "Your website" : "La dirección de su sitio web", + "Your Twitter handle" : "Su usuario de Twitter", + "Passcodes that give an app or device permissions to access your account." : "Código de paso que da permisos a una app o dispositivo para acceder a tu cuenta.", + "Follow us on Google Plus!" : "¡Síganos en Google+!", + "Subscribe to our twitter channel!" : "Suscríbete a nuestro canal de Twitter!", + "Subscribe to our news feed!" : "¡Suscríbete a nuestro feed de noticias!", "Show last log in" : "Mostrar el último inicio de sesión" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/settings/l10n/es_AR.js b/settings/l10n/es_AR.js index 7f6e226ae38..08ce0dafa85 100644 --- a/settings/l10n/es_AR.js +++ b/settings/l10n/es_AR.js @@ -40,7 +40,6 @@ OC.L10N.register( "Login" : "Ingresar", "Plain" : "Plano", "NT LAN Manager" : "Administrador NT LAN", - "This is used for sending out notifications." : "Esto es usado para enviar notificaciones.", "Send mode" : "Modo de envio", "Encryption" : "Encriptación", "From address" : "Dirección remitente", @@ -100,6 +99,7 @@ OC.L10N.register( "Unable to add user to group %s" : "No fue posible agregar el usuario al grupo %s", "Unable to remove user from group %s" : "No es posible borrar al usuario del grupo %s", "Sending..." : "Enviando...", + "This is used for sending out notifications." : "Esto es usado para enviar notificaciones.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "El módulo PHP 'fileinfo' no existe. Es recomendable que actives este módulo para obtener mejores resultados con la detección mime-type", "Cheers!" : "¡Saludos!" }, diff --git a/settings/l10n/es_AR.json b/settings/l10n/es_AR.json index cb541f170be..698b3f3c54c 100644 --- a/settings/l10n/es_AR.json +++ b/settings/l10n/es_AR.json @@ -38,7 +38,6 @@ "Login" : "Ingresar", "Plain" : "Plano", "NT LAN Manager" : "Administrador NT LAN", - "This is used for sending out notifications." : "Esto es usado para enviar notificaciones.", "Send mode" : "Modo de envio", "Encryption" : "Encriptación", "From address" : "Dirección remitente", @@ -98,6 +97,7 @@ "Unable to add user to group %s" : "No fue posible agregar el usuario al grupo %s", "Unable to remove user from group %s" : "No es posible borrar al usuario del grupo %s", "Sending..." : "Enviando...", + "This is used for sending out notifications." : "Esto es usado para enviar notificaciones.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "El módulo PHP 'fileinfo' no existe. Es recomendable que actives este módulo para obtener mejores resultados con la detección mime-type", "Cheers!" : "¡Saludos!" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/settings/l10n/es_MX.js b/settings/l10n/es_MX.js index c5d7298c627..bb000a6fd03 100644 --- a/settings/l10n/es_MX.js +++ b/settings/l10n/es_MX.js @@ -8,6 +8,10 @@ OC.L10N.register( "You changed your email address" : "Usted ha cambiado su dirección de correo electrónico", "Your email address was changed by an administrator" : "Su dirección de correo electrónico ha sido cambiada por un administrador", "Your <strong>password</strong> or <strong>email</strong> was modified" : "Su <strong>contraseña</strong> o <strong>correo electrónico</strong> ha sido modificado", + "Your apps" : "Sus aplicaciones", + "Enabled apps" : "Aplicaciones habilitadas", + "Disabled apps" : "Aplicaciones deshabilitadas", + "App bundles" : "Paquetes de aplicacion", "Wrong password" : "Contraseña incorrecta", "Saved" : "Guardado", "No user supplied" : "No se proporcionó un usuario", @@ -28,7 +32,7 @@ OC.L10N.register( "Well done, %s!" : "¡Bien hecho, %s!", "If you received this email, the email configuration seems to be correct." : "Si usted ha recibido este correo electrónico, la configuración del correo electrónico parece estar correcta. ", "Email setting test" : "Prueba de ajustes de correo", - "Mail could not be sent. Check your mail server log" : "El correo no pudo ser enviado. Verifique la bitáctora del servidor de correo", + "Email could not be sent. Check your mail server log" : "No fue posible enviar el correo electrónico. Favor de verficiar la bitácora de su servidor de correo", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Se presentó un problema al enviar el correo electrónico. Favor de revisar sus ajustes (Error: %s)", "You need to set your user email before being able to send test emails." : "Requiere establecer su correo electrónico andes de poder enviar correos electrónicos de prueba. ", "Invalid request" : "Solicitud inválida", @@ -97,11 +101,15 @@ OC.L10N.register( "Updating...." : "Actualizando....", "Error while updating app" : "Se presentó un error al actualizar la aplicación", "Updated" : "Actualizado", + "Removing …" : "Eliminando ...", + "Error while removing app" : "Se presentó un error al eliminar la aplicación", + "Remove" : "Eliminar", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "La aplicación está habilitada pero necesita ser actualizada. Usted será redireccionado a la página de actualización en 5 segundos. ", "App update" : "Actualización de la aplicación", "Approved" : "Aprovado", "Experimental" : "Experimental", "No apps found for {query}" : "No se encontraron aplicación para {query}", + "Enable all" : "Habilitar todo", "Allow filesystem access" : "Permitir acceso al sistema de archivos", "Disconnect" : "Desconectar", "Revoke" : "Revocar", @@ -163,7 +171,7 @@ OC.L10N.register( "Error creating user: {message}" : "Se presentó un error al crear el usuario: {message}", "A valid password must be provided" : "Se debe proporcionar una contraseña válida", "A valid email must be provided" : "Se debe proporcionar un correo electrónico válido", - "__language_name__" : "__language_name__", + "__language_name__" : "Español (México)", "Unlimited" : "Ilimitado", "Personal info" : "Información personal", "Sessions" : "Sesiones", @@ -177,7 +185,7 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "Email server" : "Servidor de correo electrónico", "Open documentation" : "Abrir documentación", - "This is used for sending out notifications." : "Esto se usa para enviar notificaciones", + "It is important to set up this server to be able to send emails, like for password reset and notifications." : "Es importante preparar este servidor para poder enviar correos electrónicos, como para restablecer contraseñas y notificaciones. ", "Send mode" : "Modo de envío", "Encryption" : "Encripción", "From address" : "De la dirección", @@ -193,6 +201,7 @@ OC.L10N.register( "Test email settings" : "Probar ajsutes de correo electrónico", "Send email" : "Enviar correo electrónico", "Server-side encryption" : "Encripción del lado del servidor", + "Server-side encryption makes it possible to encrypt files which are uploaded to this server. This comes with limitations like a performance penalty, so enable this only if needed." : "La encripción del lado del servidor hace posible encriptar archivos que serán cargados a este servidor. Esto trae consigo algunas limitaciónes como penalizaciones en el desemeño, asi que sólo habilítelo si es necesario. ", "Enable server-side encryption" : "Habilitar encripción del lado del servidor", "Please read carefully before activating server-side encryption: " : "Favor de leer detenidamente antes de activar la encripción del lado de servidor:", "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." : "Una vez que la encripción se encuentre habilitada, todos lo archivos cargados al servidor desde ese momento en tiempo, se encriptarán en el servidor. Sólo será posible deshabilitar la encripción en una fecha posterior si el modulo de encripción activo soporta esa funcionalidad y si todas las preciondiciones están satisfechas (ejem. establecer una llave de recuperación).", @@ -207,6 +216,7 @@ OC.L10N.register( "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Usted necesita migar sus llaves de encripción de la encripción anterior (ownCloud <=8.0) a la actual. ", "Start migration" : "Comenzar migración", "Security & setup warnings" : "Advertencias de seguridad y configuración", + "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the Tips & Ticks section and the documentation for more information." : "Es importante para la seguridad y desempeño de su instancia que todo esté configurado correctamente. Para ayudarlo con esto, estamos haciendo algunas verficaciones automáticas. Favor de consultar la sección de Consejos & Trucos de la documentación para más información. ", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Al parecer php no está correctamente configurado para consultar las variables de ambiente. La prueba con getenv(\"PATH\") solo está regresando una respuesta vacía. ", "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Favor de consultar la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentación de instalación ↗</a> para las notas de configuración de php en su servidor, específicamente al usar php-fpm. ", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "La configuración de Sólo Lectura ha sido habilitada. Esto previene establecer algunas configuraciones mediante la interface web. Adicionalmente, el archivo necesita que se le establezcan tener permisos de escritura manualemente en cada actualización. ", @@ -227,6 +237,7 @@ OC.L10N.register( "Last cron job execution: %s." : "Última ejecución de tareas de cron: %s.", "Last cron job execution: %s. Something seems wrong." : "Última ejecución de tareas de cron: %s. Algo parece estar mal. ", "Cron was not executed yet!" : "¡Aún no han sido ejecutas las tareas programadas!", + "For optimal performance it's important to configure background jobs correctly. For bigger instances 'Cron' is the recommended setting. Please see the documentation for more information." : "Para un desempeño ideal, es importante configurar los trabajos de fondo correctametne. Para instancias más grandes 'Cron' es el ajuste recomendado. Favor de consultar la documentación para más información. ", "Execute one task with each page loaded" : "Ejecutar una tarea con cada página cargada", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php está registrado en el servicio webcron para llamar a cron.php cada 15 minutos a través de HTTP.", "Use system's cron service to call the cron.php file every 15 minutes." : "Usar el servicio de cron del sistema para llamar el archivo cron.php cada 15 minutos.", @@ -234,6 +245,7 @@ OC.L10N.register( "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Para correr esto usted necesita la extensión posix de PHP. Favor de consultar la {linkstart}documentación de PHP{linkend} para más detalles. ", "Version" : "Versión", "Sharing" : "Compartiendo", + "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Como administrador, usted puede hacer ajustes finos al comportamiento de compartir. Favor de consultar la documentación para más información. ", "Allow apps to use the Share API" : "Permitir que las aplicaciones usen el API para Compartir", "Allow users to share via link" : "Permitir a los usuarios compartir mediante ligas", "Allow public uploads" : "Permitir cargas públicas", @@ -252,6 +264,7 @@ OC.L10N.register( "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Mostrar el texto de exención de responsabilidad legal en la página de carga de ligas públicas. (Sólo se muestra cuando la lista de archivos está oculta.)", "This text will be shown on the public link upload page when the file list is hidden." : "Este texto se mostrará en la página de carga de la liga pública cuando la lista de archivos esté oculta. ", "Tips & tricks" : "Consejos & trucos", + "There are a lot of features and config switches available to optimally customize and use this instance. Here are some pointers for more information." : "Existen muchas funcionalidades y configuraciones disponibles para personalizar y usar de manera optima esta instancia. Aqui hay algunos consejos para más información. ", "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "Actualmente está usando SQLite como el backend de base de datos. Para instalaciones más grandes le recomendamos cambiar a un backend de base de datos diferente.", "This is particularly recommended when using the desktop client for file synchronisation." : "Esto es particularmente recomendado cuando se usa el cliente de escritorio para sincronización de archivos. ", "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>." : "Para migrar a otra base de datos, use la herramienta de la línea de comando 'occ db:convert-type', o consulte la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentación ↗</a>.", @@ -263,6 +276,8 @@ OC.L10N.register( "Check the security of your Nextcloud over our security scan" : "Verifique la seguridad de su Nextcloud con nuestro escaneo de seguridad", "Hardening and security guidance" : "Consejos de reforzamiento y seguridad", "Developer documentation" : "Documentación del desarrollador", + "View in store" : "Ver en la tienda", + "Limit to groups" : "Limitar a grupos", "This app has an update available." : "Esta aplicación tiene una actualización disponible.", "by %s" : "por %s", "%s-licensed" : "%s-licensed", @@ -309,9 +324,7 @@ OC.L10N.register( "Address" : "Dirección", "Your postal address" : "Su dirección postal", "Website" : "Sitio web", - "Your website" : "Su sitio web", "Twitter" : "Twitter", - "Your Twitter handle" : "Su cuenta de Twitter", "You are member of the following groups:" : "Usted es un miembro de los siguientes grupos:", "Password" : "Contraseña", "Current password" : "Contraseña actual", @@ -328,7 +341,7 @@ OC.L10N.register( "Web, desktop and mobile clients currently logged in to your account." : "Clientes web, de escritorio y móviles han iniciado sesión en su cuenta. ", "Device" : "Dispositivo", "Last activity" : "Última actividad", - "Passcodes that give an app or device permissions to access your account." : "Los códigos de seguridad que le dan permisos a la aplicación o dispositivo para accesar a su cuenta. ", + "Here you can generate individual passwords for apps so you don’t have to give out your password. You can revoke them individually too." : "Aquí usted puede generar contraseñas individuales para las aplicaciones para que usted no tenga que dar su contraseña. También puede revocalras individualmente. ", "Name" : "Nombre", "App name" : "Nombre de la aplicación", "Create new app password" : "Crear una nueva contraseña de aplicación", @@ -337,10 +350,10 @@ OC.L10N.register( "Username" : "Nombre de usuario", "Done" : "Terminado", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Desarrollado por la {communityopen}comunidad Nextcloud {linkclose}, el {githubopen}código fuente {linkclose} está licenciado bajo {licenseopen}AGPL{linkclose}.", - "Follow us on Google Plus!" : "¡Síganos en Google Plus!", + "Follow us on Google+!" : "¡Síganos en Google+!", "Like our facebook page!" : "¡Dele un me gusta a nuestra página de facebook!", - "Subscribe to our twitter channel!" : "¡Suscríbase a nuestro canal de twitter!", - "Subscribe to our news feed!" : "¡Suscribase a nuestra fuente de noticias!", + "Follow us on Twitter!" : "¡Síganos en Twitter!", + "Check out our blog!" : "¡Visite nuestro blog!", "Subscribe to our newsletter!" : "¡Suscribase a nuestro boletín!", "Settings" : "Ajustes", "Show storage location" : "Mostrar la ubicación del almacenamiento", @@ -380,12 +393,19 @@ OC.L10N.register( "Uninstalling ...." : "Desinstalando ...", "Error while uninstalling app" : "Se presentó un error al desinstalar la aplicación", "Uninstall" : "Desinstalar", + "This is used for sending out notifications." : "Esto se usa para enviar notificaciones", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "El modulo PHP 'fileinfo' no ha sido encontrado. Le recomendamos ámpliamente que habilite este módulo para obtener los mejores resultados en la detección de tipos MIME.", "Uninstall app" : "Desinstalar la aplicación", "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>" : "Hola,<br><br> sólo queremos informarle que ahora usted tiene una cuenta %s.<br><br> Su nombre de usuario es: <strong>%s</strong> <br>Ingrese a ella: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "¡Saludos!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hola,\n\nsólo queremos informarle que ahora usted tiene una cuenta %s.\n\nSu nombre de usuario es: %s\n\nIngrese a ella: %s\n", "For password recovery and notifications" : "Para recuperación de contraseña y notificaciones", + "Your website" : "Su sitio web", + "Your Twitter handle" : "Su cuenta de Twitter", + "Passcodes that give an app or device permissions to access your account." : "Los códigos de seguridad que le dan permisos a la aplicación o dispositivo para accesar a su cuenta. ", + "Follow us on Google Plus!" : "¡Síganos en Google Plus!", + "Subscribe to our twitter channel!" : "¡Suscríbase a nuestro canal de twitter!", + "Subscribe to our news feed!" : "¡Suscribase a nuestra fuente de noticias!", "Show last log in" : "Mostrar el último inicio de sesión" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/es_MX.json b/settings/l10n/es_MX.json index f3b3d7c01cd..805ad39a579 100644 --- a/settings/l10n/es_MX.json +++ b/settings/l10n/es_MX.json @@ -6,6 +6,10 @@ "You changed your email address" : "Usted ha cambiado su dirección de correo electrónico", "Your email address was changed by an administrator" : "Su dirección de correo electrónico ha sido cambiada por un administrador", "Your <strong>password</strong> or <strong>email</strong> was modified" : "Su <strong>contraseña</strong> o <strong>correo electrónico</strong> ha sido modificado", + "Your apps" : "Sus aplicaciones", + "Enabled apps" : "Aplicaciones habilitadas", + "Disabled apps" : "Aplicaciones deshabilitadas", + "App bundles" : "Paquetes de aplicacion", "Wrong password" : "Contraseña incorrecta", "Saved" : "Guardado", "No user supplied" : "No se proporcionó un usuario", @@ -26,7 +30,7 @@ "Well done, %s!" : "¡Bien hecho, %s!", "If you received this email, the email configuration seems to be correct." : "Si usted ha recibido este correo electrónico, la configuración del correo electrónico parece estar correcta. ", "Email setting test" : "Prueba de ajustes de correo", - "Mail could not be sent. Check your mail server log" : "El correo no pudo ser enviado. Verifique la bitáctora del servidor de correo", + "Email could not be sent. Check your mail server log" : "No fue posible enviar el correo electrónico. Favor de verficiar la bitácora de su servidor de correo", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Se presentó un problema al enviar el correo electrónico. Favor de revisar sus ajustes (Error: %s)", "You need to set your user email before being able to send test emails." : "Requiere establecer su correo electrónico andes de poder enviar correos electrónicos de prueba. ", "Invalid request" : "Solicitud inválida", @@ -95,11 +99,15 @@ "Updating...." : "Actualizando....", "Error while updating app" : "Se presentó un error al actualizar la aplicación", "Updated" : "Actualizado", + "Removing …" : "Eliminando ...", + "Error while removing app" : "Se presentó un error al eliminar la aplicación", + "Remove" : "Eliminar", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "La aplicación está habilitada pero necesita ser actualizada. Usted será redireccionado a la página de actualización en 5 segundos. ", "App update" : "Actualización de la aplicación", "Approved" : "Aprovado", "Experimental" : "Experimental", "No apps found for {query}" : "No se encontraron aplicación para {query}", + "Enable all" : "Habilitar todo", "Allow filesystem access" : "Permitir acceso al sistema de archivos", "Disconnect" : "Desconectar", "Revoke" : "Revocar", @@ -161,7 +169,7 @@ "Error creating user: {message}" : "Se presentó un error al crear el usuario: {message}", "A valid password must be provided" : "Se debe proporcionar una contraseña válida", "A valid email must be provided" : "Se debe proporcionar un correo electrónico válido", - "__language_name__" : "__language_name__", + "__language_name__" : "Español (México)", "Unlimited" : "Ilimitado", "Personal info" : "Información personal", "Sessions" : "Sesiones", @@ -175,7 +183,7 @@ "STARTTLS" : "STARTTLS", "Email server" : "Servidor de correo electrónico", "Open documentation" : "Abrir documentación", - "This is used for sending out notifications." : "Esto se usa para enviar notificaciones", + "It is important to set up this server to be able to send emails, like for password reset and notifications." : "Es importante preparar este servidor para poder enviar correos electrónicos, como para restablecer contraseñas y notificaciones. ", "Send mode" : "Modo de envío", "Encryption" : "Encripción", "From address" : "De la dirección", @@ -191,6 +199,7 @@ "Test email settings" : "Probar ajsutes de correo electrónico", "Send email" : "Enviar correo electrónico", "Server-side encryption" : "Encripción del lado del servidor", + "Server-side encryption makes it possible to encrypt files which are uploaded to this server. This comes with limitations like a performance penalty, so enable this only if needed." : "La encripción del lado del servidor hace posible encriptar archivos que serán cargados a este servidor. Esto trae consigo algunas limitaciónes como penalizaciones en el desemeño, asi que sólo habilítelo si es necesario. ", "Enable server-side encryption" : "Habilitar encripción del lado del servidor", "Please read carefully before activating server-side encryption: " : "Favor de leer detenidamente antes de activar la encripción del lado de servidor:", "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." : "Una vez que la encripción se encuentre habilitada, todos lo archivos cargados al servidor desde ese momento en tiempo, se encriptarán en el servidor. Sólo será posible deshabilitar la encripción en una fecha posterior si el modulo de encripción activo soporta esa funcionalidad y si todas las preciondiciones están satisfechas (ejem. establecer una llave de recuperación).", @@ -205,6 +214,7 @@ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Usted necesita migar sus llaves de encripción de la encripción anterior (ownCloud <=8.0) a la actual. ", "Start migration" : "Comenzar migración", "Security & setup warnings" : "Advertencias de seguridad y configuración", + "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the Tips & Ticks section and the documentation for more information." : "Es importante para la seguridad y desempeño de su instancia que todo esté configurado correctamente. Para ayudarlo con esto, estamos haciendo algunas verficaciones automáticas. Favor de consultar la sección de Consejos & Trucos de la documentación para más información. ", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Al parecer php no está correctamente configurado para consultar las variables de ambiente. La prueba con getenv(\"PATH\") solo está regresando una respuesta vacía. ", "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Favor de consultar la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentación de instalación ↗</a> para las notas de configuración de php en su servidor, específicamente al usar php-fpm. ", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "La configuración de Sólo Lectura ha sido habilitada. Esto previene establecer algunas configuraciones mediante la interface web. Adicionalmente, el archivo necesita que se le establezcan tener permisos de escritura manualemente en cada actualización. ", @@ -225,6 +235,7 @@ "Last cron job execution: %s." : "Última ejecución de tareas de cron: %s.", "Last cron job execution: %s. Something seems wrong." : "Última ejecución de tareas de cron: %s. Algo parece estar mal. ", "Cron was not executed yet!" : "¡Aún no han sido ejecutas las tareas programadas!", + "For optimal performance it's important to configure background jobs correctly. For bigger instances 'Cron' is the recommended setting. Please see the documentation for more information." : "Para un desempeño ideal, es importante configurar los trabajos de fondo correctametne. Para instancias más grandes 'Cron' es el ajuste recomendado. Favor de consultar la documentación para más información. ", "Execute one task with each page loaded" : "Ejecutar una tarea con cada página cargada", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php está registrado en el servicio webcron para llamar a cron.php cada 15 minutos a través de HTTP.", "Use system's cron service to call the cron.php file every 15 minutes." : "Usar el servicio de cron del sistema para llamar el archivo cron.php cada 15 minutos.", @@ -232,6 +243,7 @@ "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Para correr esto usted necesita la extensión posix de PHP. Favor de consultar la {linkstart}documentación de PHP{linkend} para más detalles. ", "Version" : "Versión", "Sharing" : "Compartiendo", + "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Como administrador, usted puede hacer ajustes finos al comportamiento de compartir. Favor de consultar la documentación para más información. ", "Allow apps to use the Share API" : "Permitir que las aplicaciones usen el API para Compartir", "Allow users to share via link" : "Permitir a los usuarios compartir mediante ligas", "Allow public uploads" : "Permitir cargas públicas", @@ -250,6 +262,7 @@ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Mostrar el texto de exención de responsabilidad legal en la página de carga de ligas públicas. (Sólo se muestra cuando la lista de archivos está oculta.)", "This text will be shown on the public link upload page when the file list is hidden." : "Este texto se mostrará en la página de carga de la liga pública cuando la lista de archivos esté oculta. ", "Tips & tricks" : "Consejos & trucos", + "There are a lot of features and config switches available to optimally customize and use this instance. Here are some pointers for more information." : "Existen muchas funcionalidades y configuraciones disponibles para personalizar y usar de manera optima esta instancia. Aqui hay algunos consejos para más información. ", "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "Actualmente está usando SQLite como el backend de base de datos. Para instalaciones más grandes le recomendamos cambiar a un backend de base de datos diferente.", "This is particularly recommended when using the desktop client for file synchronisation." : "Esto es particularmente recomendado cuando se usa el cliente de escritorio para sincronización de archivos. ", "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>." : "Para migrar a otra base de datos, use la herramienta de la línea de comando 'occ db:convert-type', o consulte la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentación ↗</a>.", @@ -261,6 +274,8 @@ "Check the security of your Nextcloud over our security scan" : "Verifique la seguridad de su Nextcloud con nuestro escaneo de seguridad", "Hardening and security guidance" : "Consejos de reforzamiento y seguridad", "Developer documentation" : "Documentación del desarrollador", + "View in store" : "Ver en la tienda", + "Limit to groups" : "Limitar a grupos", "This app has an update available." : "Esta aplicación tiene una actualización disponible.", "by %s" : "por %s", "%s-licensed" : "%s-licensed", @@ -307,9 +322,7 @@ "Address" : "Dirección", "Your postal address" : "Su dirección postal", "Website" : "Sitio web", - "Your website" : "Su sitio web", "Twitter" : "Twitter", - "Your Twitter handle" : "Su cuenta de Twitter", "You are member of the following groups:" : "Usted es un miembro de los siguientes grupos:", "Password" : "Contraseña", "Current password" : "Contraseña actual", @@ -326,7 +339,7 @@ "Web, desktop and mobile clients currently logged in to your account." : "Clientes web, de escritorio y móviles han iniciado sesión en su cuenta. ", "Device" : "Dispositivo", "Last activity" : "Última actividad", - "Passcodes that give an app or device permissions to access your account." : "Los códigos de seguridad que le dan permisos a la aplicación o dispositivo para accesar a su cuenta. ", + "Here you can generate individual passwords for apps so you don’t have to give out your password. You can revoke them individually too." : "Aquí usted puede generar contraseñas individuales para las aplicaciones para que usted no tenga que dar su contraseña. También puede revocalras individualmente. ", "Name" : "Nombre", "App name" : "Nombre de la aplicación", "Create new app password" : "Crear una nueva contraseña de aplicación", @@ -335,10 +348,10 @@ "Username" : "Nombre de usuario", "Done" : "Terminado", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Desarrollado por la {communityopen}comunidad Nextcloud {linkclose}, el {githubopen}código fuente {linkclose} está licenciado bajo {licenseopen}AGPL{linkclose}.", - "Follow us on Google Plus!" : "¡Síganos en Google Plus!", + "Follow us on Google+!" : "¡Síganos en Google+!", "Like our facebook page!" : "¡Dele un me gusta a nuestra página de facebook!", - "Subscribe to our twitter channel!" : "¡Suscríbase a nuestro canal de twitter!", - "Subscribe to our news feed!" : "¡Suscribase a nuestra fuente de noticias!", + "Follow us on Twitter!" : "¡Síganos en Twitter!", + "Check out our blog!" : "¡Visite nuestro blog!", "Subscribe to our newsletter!" : "¡Suscribase a nuestro boletín!", "Settings" : "Ajustes", "Show storage location" : "Mostrar la ubicación del almacenamiento", @@ -378,12 +391,19 @@ "Uninstalling ...." : "Desinstalando ...", "Error while uninstalling app" : "Se presentó un error al desinstalar la aplicación", "Uninstall" : "Desinstalar", + "This is used for sending out notifications." : "Esto se usa para enviar notificaciones", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "El modulo PHP 'fileinfo' no ha sido encontrado. Le recomendamos ámpliamente que habilite este módulo para obtener los mejores resultados en la detección de tipos MIME.", "Uninstall app" : "Desinstalar la aplicación", "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>" : "Hola,<br><br> sólo queremos informarle que ahora usted tiene una cuenta %s.<br><br> Su nombre de usuario es: <strong>%s</strong> <br>Ingrese a ella: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "¡Saludos!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hola,\n\nsólo queremos informarle que ahora usted tiene una cuenta %s.\n\nSu nombre de usuario es: %s\n\nIngrese a ella: %s\n", "For password recovery and notifications" : "Para recuperación de contraseña y notificaciones", + "Your website" : "Su sitio web", + "Your Twitter handle" : "Su cuenta de Twitter", + "Passcodes that give an app or device permissions to access your account." : "Los códigos de seguridad que le dan permisos a la aplicación o dispositivo para accesar a su cuenta. ", + "Follow us on Google Plus!" : "¡Síganos en Google Plus!", + "Subscribe to our twitter channel!" : "¡Suscríbase a nuestro canal de twitter!", + "Subscribe to our news feed!" : "¡Suscribase a nuestra fuente de noticias!", "Show last log in" : "Mostrar el último inicio de sesión" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/settings/l10n/et_EE.js b/settings/l10n/et_EE.js index 41c1e285c4d..c047e958c69 100644 --- a/settings/l10n/et_EE.js +++ b/settings/l10n/et_EE.js @@ -72,7 +72,6 @@ OC.L10N.register( "NT LAN Manager" : "NT LAN Manager", "Email server" : "E-kirjade server", "Open documentation" : "Ava dokumentatsioon", - "This is used for sending out notifications." : "Seda kasutatakse teadete välja saatmiseks.", "Send mode" : "Saatmise viis", "Encryption" : "Krüpteerimine", "From address" : "Saatja aadress", @@ -193,6 +192,7 @@ OC.L10N.register( "Uninstalling ...." : "Eemaldan...", "Error while uninstalling app" : "Viga rakendi eemaldamisel", "Uninstall" : "Eemalda", + "This is used for sending out notifications." : "Seda kasutatakse teadete välja saatmiseks.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP moodul 'fileinfo' puudub. Soovitame tungivalt see lisada saavutamaks parimaid tulemusi failitüüpide tuvastamisel.", "Cheers!" : "Terekest!", "Show last log in" : "Viimane sisselogimine" diff --git a/settings/l10n/et_EE.json b/settings/l10n/et_EE.json index 8e78cf0e863..9e1a9d46594 100644 --- a/settings/l10n/et_EE.json +++ b/settings/l10n/et_EE.json @@ -70,7 +70,6 @@ "NT LAN Manager" : "NT LAN Manager", "Email server" : "E-kirjade server", "Open documentation" : "Ava dokumentatsioon", - "This is used for sending out notifications." : "Seda kasutatakse teadete välja saatmiseks.", "Send mode" : "Saatmise viis", "Encryption" : "Krüpteerimine", "From address" : "Saatja aadress", @@ -191,6 +190,7 @@ "Uninstalling ...." : "Eemaldan...", "Error while uninstalling app" : "Viga rakendi eemaldamisel", "Uninstall" : "Eemalda", + "This is used for sending out notifications." : "Seda kasutatakse teadete välja saatmiseks.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP moodul 'fileinfo' puudub. Soovitame tungivalt see lisada saavutamaks parimaid tulemusi failitüüpide tuvastamisel.", "Cheers!" : "Terekest!", "Show last log in" : "Viimane sisselogimine" diff --git a/settings/l10n/eu.js b/settings/l10n/eu.js index 93762ccebc9..4076f1b6311 100644 --- a/settings/l10n/eu.js +++ b/settings/l10n/eu.js @@ -143,7 +143,6 @@ OC.L10N.register( "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", "From address" : "Helbidetik", @@ -253,9 +252,7 @@ OC.L10N.register( "Address" : "Helbidea", "Your postal address" : "Zure helbidea", "Website" : "Web orria", - "Your website" : "Zure web orria", "Twitter" : "Twitter", - "Your Twitter handle" : "Zure Twitter erabiltzailea", "You are member of the following groups:" : "Zuk honako talde kide zara:", "Password" : "Pasahitza", "Current password" : "Uneko pasahitza", @@ -271,7 +268,6 @@ OC.L10N.register( "Web, desktop and mobile clients currently logged in to your account." : "Web-gune, mahaigain eta mugikorrean zure kontuan saioa hasita dago.", "Device" : "Gailu", "Last activity" : "Azken jarduera", - "Passcodes that give an app or device permissions to access your account." : "Zure kontuan sartzeko aplikazio edo gailuei baimena ematen dien pasahitzak.", "Name" : "Izena", "App name" : "Aplikazioaren izena", "Create new app password" : "Sortu app pasahitza berria", @@ -314,10 +310,14 @@ OC.L10N.register( "Uninstalling ...." : "Desinstalatzen ...", "Error while uninstalling app" : "Erroea izan da aplikazioa desinstalatzerakoan", "Uninstall" : "Desinstalatu", + "This is used for sending out notifications." : "Hau jakinarazpenak bidaltzeko erabiltzen da.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP 'fileinfo' modulua falta da. Modulu hau gaitzea aholkatzen dizugu mime-type ezberdinak hobe detektatzeko.", "Uninstall app" : "Desinstalatu aplikazioa", "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", + "Your website" : "Zure web orria", + "Your Twitter handle" : "Zure Twitter erabiltzailea", + "Passcodes that give an app or device permissions to access your account." : "Zure kontuan sartzeko aplikazio edo gailuei baimena ematen dien pasahitzak.", "Show last log in" : "Erakutsi azkeneko saio hasiera" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/eu.json b/settings/l10n/eu.json index d56ae463127..a7717f0e31c 100644 --- a/settings/l10n/eu.json +++ b/settings/l10n/eu.json @@ -141,7 +141,6 @@ "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", "From address" : "Helbidetik", @@ -251,9 +250,7 @@ "Address" : "Helbidea", "Your postal address" : "Zure helbidea", "Website" : "Web orria", - "Your website" : "Zure web orria", "Twitter" : "Twitter", - "Your Twitter handle" : "Zure Twitter erabiltzailea", "You are member of the following groups:" : "Zuk honako talde kide zara:", "Password" : "Pasahitza", "Current password" : "Uneko pasahitza", @@ -269,7 +266,6 @@ "Web, desktop and mobile clients currently logged in to your account." : "Web-gune, mahaigain eta mugikorrean zure kontuan saioa hasita dago.", "Device" : "Gailu", "Last activity" : "Azken jarduera", - "Passcodes that give an app or device permissions to access your account." : "Zure kontuan sartzeko aplikazio edo gailuei baimena ematen dien pasahitzak.", "Name" : "Izena", "App name" : "Aplikazioaren izena", "Create new app password" : "Sortu app pasahitza berria", @@ -312,10 +308,14 @@ "Uninstalling ...." : "Desinstalatzen ...", "Error while uninstalling app" : "Erroea izan da aplikazioa desinstalatzerakoan", "Uninstall" : "Desinstalatu", + "This is used for sending out notifications." : "Hau jakinarazpenak bidaltzeko erabiltzen da.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP 'fileinfo' modulua falta da. Modulu hau gaitzea aholkatzen dizugu mime-type ezberdinak hobe detektatzeko.", "Uninstall app" : "Desinstalatu aplikazioa", "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", + "Your website" : "Zure web orria", + "Your Twitter handle" : "Zure Twitter erabiltzailea", + "Passcodes that give an app or device permissions to access your account." : "Zure kontuan sartzeko aplikazio edo gailuei baimena ematen dien pasahitzak.", "Show last log in" : "Erakutsi azkeneko saio hasiera" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/settings/l10n/fa.js b/settings/l10n/fa.js index 53231bbc378..e54a5d24f6d 100644 --- a/settings/l10n/fa.js +++ b/settings/l10n/fa.js @@ -71,7 +71,6 @@ OC.L10N.register( "NT LAN Manager" : "مدیر NT LAN", "Email server" : "سرور ایمیل", "Open documentation" : "بازکردن مستند", - "This is used for sending out notifications." : "این برای ارسال هشدار ها استفاده می شود", "Send mode" : "حالت ارسال", "Encryption" : "رمزگذاری", "From address" : "آدرس فرستنده", @@ -185,6 +184,7 @@ OC.L10N.register( "Uninstalling ...." : "در حال حذف...", "Error while uninstalling app" : "خطا در هنگام حذف برنامه....", "Uninstall" : "حذف", + "This is used for sending out notifications." : "این برای ارسال هشدار ها استفاده می شود", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "ماژول 'fileinfo' PHP از کار افتاده است.ما اکیدا توصیه می کنیم که این ماژول را فعال کنید تا نتایج بهتری به وسیله ی mime-type detection دریافت کنید.", "Cheers!" : "سلامتی!", "Show last log in" : "نمایش اخرین ورود" diff --git a/settings/l10n/fa.json b/settings/l10n/fa.json index 090680c074c..62c296f969f 100644 --- a/settings/l10n/fa.json +++ b/settings/l10n/fa.json @@ -69,7 +69,6 @@ "NT LAN Manager" : "مدیر NT LAN", "Email server" : "سرور ایمیل", "Open documentation" : "بازکردن مستند", - "This is used for sending out notifications." : "این برای ارسال هشدار ها استفاده می شود", "Send mode" : "حالت ارسال", "Encryption" : "رمزگذاری", "From address" : "آدرس فرستنده", @@ -183,6 +182,7 @@ "Uninstalling ...." : "در حال حذف...", "Error while uninstalling app" : "خطا در هنگام حذف برنامه....", "Uninstall" : "حذف", + "This is used for sending out notifications." : "این برای ارسال هشدار ها استفاده می شود", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "ماژول 'fileinfo' PHP از کار افتاده است.ما اکیدا توصیه می کنیم که این ماژول را فعال کنید تا نتایج بهتری به وسیله ی mime-type detection دریافت کنید.", "Cheers!" : "سلامتی!", "Show last log in" : "نمایش اخرین ورود" diff --git a/settings/l10n/fi.js b/settings/l10n/fi.js index 9cb111c3b39..e6580ac5885 100644 --- a/settings/l10n/fi.js +++ b/settings/l10n/fi.js @@ -8,6 +8,9 @@ OC.L10N.register( "You changed your email address" : "Muutit sähköpostiosoitteesi", "Your email address was changed by an administrator" : "Ylläpitäjä muutti sähköpostiosoitteesi", "Your <strong>password</strong> or <strong>email</strong> was modified" : "<strong>Salasanaasi</strong> tai <strong>sähköpostiosoitettasi</strong> muokattiin", + "Your apps" : "Sovelluksesi", + "Enabled apps" : "Käytössä olevat sovellukset", + "Disabled apps" : "Käytöstä poistetut sovellukset", "Wrong password" : "Väärä salasana", "Saved" : "Tallennettu", "No user supplied" : "Käyttäjää ei määritetty", @@ -26,7 +29,8 @@ OC.L10N.register( "Invalid SMTP password." : "Virheellinen SMTP-salasana.", "Well done, %s!" : "Hyvin tehty, %s!", "If you received this email, the email configuration seems to be correct." : "Jos vastaanotit tämän viestin, sähköpostimääritykset vaikuttavat olevan kunnossa.", - "Mail could not be sent. Check your mail server log" : "Sähköpostia ei voitu lähettää. Tarkista sähköpostipalvelimen lokitiedosto", + "Email setting test" : "Sähköpostiasetusten testaus", + "Email could not be sent. Check your mail server log" : "Sähköpostia ei voitu lähettää. Tarkista sähköpostipalvelimen lokitiedosto", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Sähköpostia lähettäessä tapahtui virhe. Tarkista asetukset. (Virhe: %s)", "You need to set your user email before being able to send test emails." : "Aseta sähköpostiosoite, jotta voit testata sähköpostin toimivuutta.", "Invalid request" : "Virheellinen pyyntö", @@ -44,6 +48,8 @@ OC.L10N.register( "Invalid user" : "Virheellinen käyttäjä", "Unable to change mail address" : "Sähköpostiosoitteen vaihtaminen ei onnistunut", "Email saved" : "Sähköposti tallennettu", + "If you did not request this, please contact an administrator." : "Jos et pyytänyt tätä, ota yhteyttä ylläpitäjään.", + "The new email address is %s" : "Uusi sähköpostiosoite on %s", "Welcome aboard" : "Tervetuloa mukaan", "Welcome aboard %s" : "Tervetuloa mukaan %s", "You have now an %s account, you can add, protect, and share your data." : "Sinulla on nyt %s-tili. Voit lisätä, suojata ja jakaa tiedostojasi.", @@ -83,11 +89,15 @@ OC.L10N.register( "Updating...." : "Päivitetään...", "Error while updating app" : "Virhe sovellusta päivittäessä", "Updated" : "Päivitetty", + "Removing …" : "Poistetaan…", + "Error while removing app" : "Virhe sovellusta poistaessa", + "Remove" : "Poista", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Tämä sovellus on otettu käyttöön, mutta se vaatii päivityksen. Sinut ohjataan päivityssivulle viiden sekunnin kuluttua.", "App update" : "Sovelluspäivitys", "Approved" : "Hyväksytty", "Experimental" : "Kokeellinen", "No apps found for {query}" : "Haulla {query} ei löytynyt sovelluksia", + "Enable all" : "Ota kaikki käyttöön", "Allow filesystem access" : "Salli pääsy tiedostojärjestelmään", "Disconnect" : "Katkaise yhteys", "Revoke" : "Peru oikeus", @@ -159,7 +169,7 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "Email server" : "Sähköpostipalvelin", "Open documentation" : "Avaa dokumentaatio", - "This is used for sending out notifications." : "Tätä käytetään ilmoitusten lähettämiseen.", + "It is important to set up this server to be able to send emails, like for password reset and notifications." : "On tärkeää määritää sähköpostipalvelin asetukset, jotta voidaan lähettää muun muassa salasanan palautus- ja ilmoitussähköpostiviestejä.", "Send mode" : "Lähetystila", "Encryption" : "Salaus", "From address" : "Lähettäjän osoite", @@ -220,14 +230,19 @@ OC.L10N.register( "Exclude groups from sharing" : "Kiellä ryhmiä jakamasta", "These groups will still be able to receive shares, but not to initiate them." : "Nämä ryhmät kykenevät vastaanottamaan jakoja, mutta eivät kuitenkaan itse pysty luoda jakoja.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Salli käyttäjätunnuksen automaattinen täydentäminen jakamisikkunnassa. Jos tämä asetus on pois käytöstä, tulee käyttäjätunnus kirjoittaa kokonaan itse.", + "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Näytä vastuuvapauslauseke julkisen linkin lähetyssivulla. (Näytetään vain, kun tiedostolista on piilotettu.)", + "This text will be shown on the public link upload page when the file list is hidden." : "Tämä teksti näytetään julkisen linkin lähetyssivulla, kun tiedostolista on piilotettu.", "Tips & tricks" : "Vinkit", "How to do backups" : "Kuinka tehdä varmuuskopioita", "Advanced monitoring" : "Edistynyt valvonta", "Performance tuning" : "Suorituskyvyn hienosäätö", "Improving the config.php" : "Config.php-tiedoston parantaminen", "Theming" : "Teemojen käyttö", + "Check the security of your Nextcloud over our security scan" : "Tarkista Nextcloudisi tietoturva käyttäen tietoturvatarkistustamme", "Hardening and security guidance" : "Turvaamis- ja tietoturvaopas", "Developer documentation" : "Kehittäjädokumentaatio", + "View in store" : "Näytä kaupassa", + "Limit to groups" : "Rajoita ryhmiin", "This app has an update available." : "Tähän sovellukseen on päivitys saatavilla.", "by %s" : "tekijä %s", "%s-licensed" : "%s-lisensoitu", @@ -238,6 +253,8 @@ OC.L10N.register( "Report a bug" : "Ilmoita viasta", "Show description …" : "Näytä kuvaus…", "Hide description …" : "Piilota kuvaus…", + "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Tämä sovellus ei ole määritellyt minimi Nextcloud-versiota. Tämä tulee olemaan ongelma tulevaisuudessa.", + "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Tämä sovellus ei ole määritellyt maksimi Nextcloud-versiota. Tämä tulee olemaan ongelma tulevaisuudessa.", "This app cannot be installed because the following dependencies are not fulfilled:" : "Tätä sovellusta ei voi asentaa, koska seuraavat riippuvuudet eivät täyty:", "Enable only for specific groups" : "Salli vain tietyille ryhmille", "SSL Root Certificates" : "SSL-juurivarmenteet", @@ -272,9 +289,7 @@ OC.L10N.register( "Address" : "Osoite", "Your postal address" : "Postiosoitteesi", "Website" : "Verkkosivusto", - "Your website" : "Verkkosivustosi", "Twitter" : "Twitter", - "Your Twitter handle" : "Twitter-tunnuksesi", "You are member of the following groups:" : "Olet jäsenenä seuraavissa ryhmissä:", "Password" : "Salasana", "Current password" : "Nykyinen salasana", @@ -291,7 +306,7 @@ OC.L10N.register( "Web, desktop and mobile clients currently logged in to your account." : "Verkko-, työpöytä- ja mobiililaitteet, jotka ovat parhaillaan kirjautuneet tilillesi.", "Device" : "Laite", "Last activity" : "Viimeksi käytetty", - "Passcodes that give an app or device permissions to access your account." : "Sovellussalasana antaa sovellukselle tai laitteelle käyttöoikeuden tiliisi.", + "Here you can generate individual passwords for apps so you don’t have to give out your password. You can revoke them individually too." : "Tässä voit luoda yksilöityjä salasanoja sovelluksille, jotta sinun ei tarvitse antaa salasanaasi niille. Voit myös poistaa niitä tarvittaessa.", "Name" : "Nimi", "App name" : "Sovelluksen nimi", "Create new app password" : "Luo uusi sovellussalasana", @@ -300,10 +315,10 @@ OC.L10N.register( "Username" : "Käyttäjätunnus", "Done" : "Valmis", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Kehityksestä on vastannut {communityopen}Nextcloud-yhteisö{linkclose}, {githubopen}lähdekoodi{linkclose} on {licenseopen}AGPL-lisensoitu{linkclose}.", - "Follow us on Google Plus!" : "Seuraa meitä Google Plussassa!", + "Follow us on Google+!" : "Seuraa meitä Google+:ssa!", "Like our facebook page!" : "Tykkää Facebook-sivustamme!", - "Subscribe to our twitter channel!" : "Seuraa Twitter-tiliämme!", - "Subscribe to our news feed!" : "Tilaa uutissyötteemme!", + "Follow us on Twitter!" : "Seuraa meitä Twitterissä!", + "Check out our blog!" : "Tutustu blogiimme!", "Subscribe to our newsletter!" : "Tilaa uutiskirjeemme!", "Settings" : "Asetukset", "Show storage location" : "Näytä tallennustilan sijainti", @@ -343,12 +358,19 @@ OC.L10N.register( "Uninstalling ...." : "Poistetaan asennusta...", "Error while uninstalling app" : "Virhe sovellusta poistaessa", "Uninstall" : "Poista asennus", + "This is used for sending out notifications." : "Tätä käytetään ilmoitusten lähettämiseen.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-moduuli \"fileinfo\" puuttuu. Sen käyttö on erittäin suositeltavaa, jotta MIME-tyypin havaitseminen onnistuu parhaalla mahdollisella tavalla.", "Uninstall app" : "Poista sovelluksen asennus", "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>" : "Hei,<br><br>tässä sinulle tiedoksi, että sinulla on nyt %s-tili.<br><br>Käyttäjänimesi: <strong>%s</strong><br>Käytä sitä: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "Kiitos!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hei,\n\ntässä sinulle tiedoksi, että sinulla on nyt %s-tili.\n\nKäyttäjänimesi: %s\nKäytä sitä: %s\n\n", "For password recovery and notifications" : "Salasanan nollausta ja ilmoituksia varten", + "Your website" : "Verkkosivustosi", + "Your Twitter handle" : "Twitter-tunnuksesi", + "Passcodes that give an app or device permissions to access your account." : "Sovellussalasana antaa sovellukselle tai laitteelle käyttöoikeuden tiliisi.", + "Follow us on Google Plus!" : "Seuraa meitä Google Plussassa!", + "Subscribe to our twitter channel!" : "Seuraa Twitter-tiliämme!", + "Subscribe to our news feed!" : "Tilaa uutissyötteemme!", "Show last log in" : "Näytä viimeisin sisäänkirjautuminen" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/fi.json b/settings/l10n/fi.json index b4f897afa82..1f955657f8a 100644 --- a/settings/l10n/fi.json +++ b/settings/l10n/fi.json @@ -6,6 +6,9 @@ "You changed your email address" : "Muutit sähköpostiosoitteesi", "Your email address was changed by an administrator" : "Ylläpitäjä muutti sähköpostiosoitteesi", "Your <strong>password</strong> or <strong>email</strong> was modified" : "<strong>Salasanaasi</strong> tai <strong>sähköpostiosoitettasi</strong> muokattiin", + "Your apps" : "Sovelluksesi", + "Enabled apps" : "Käytössä olevat sovellukset", + "Disabled apps" : "Käytöstä poistetut sovellukset", "Wrong password" : "Väärä salasana", "Saved" : "Tallennettu", "No user supplied" : "Käyttäjää ei määritetty", @@ -24,7 +27,8 @@ "Invalid SMTP password." : "Virheellinen SMTP-salasana.", "Well done, %s!" : "Hyvin tehty, %s!", "If you received this email, the email configuration seems to be correct." : "Jos vastaanotit tämän viestin, sähköpostimääritykset vaikuttavat olevan kunnossa.", - "Mail could not be sent. Check your mail server log" : "Sähköpostia ei voitu lähettää. Tarkista sähköpostipalvelimen lokitiedosto", + "Email setting test" : "Sähköpostiasetusten testaus", + "Email could not be sent. Check your mail server log" : "Sähköpostia ei voitu lähettää. Tarkista sähköpostipalvelimen lokitiedosto", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Sähköpostia lähettäessä tapahtui virhe. Tarkista asetukset. (Virhe: %s)", "You need to set your user email before being able to send test emails." : "Aseta sähköpostiosoite, jotta voit testata sähköpostin toimivuutta.", "Invalid request" : "Virheellinen pyyntö", @@ -42,6 +46,8 @@ "Invalid user" : "Virheellinen käyttäjä", "Unable to change mail address" : "Sähköpostiosoitteen vaihtaminen ei onnistunut", "Email saved" : "Sähköposti tallennettu", + "If you did not request this, please contact an administrator." : "Jos et pyytänyt tätä, ota yhteyttä ylläpitäjään.", + "The new email address is %s" : "Uusi sähköpostiosoite on %s", "Welcome aboard" : "Tervetuloa mukaan", "Welcome aboard %s" : "Tervetuloa mukaan %s", "You have now an %s account, you can add, protect, and share your data." : "Sinulla on nyt %s-tili. Voit lisätä, suojata ja jakaa tiedostojasi.", @@ -81,11 +87,15 @@ "Updating...." : "Päivitetään...", "Error while updating app" : "Virhe sovellusta päivittäessä", "Updated" : "Päivitetty", + "Removing …" : "Poistetaan…", + "Error while removing app" : "Virhe sovellusta poistaessa", + "Remove" : "Poista", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Tämä sovellus on otettu käyttöön, mutta se vaatii päivityksen. Sinut ohjataan päivityssivulle viiden sekunnin kuluttua.", "App update" : "Sovelluspäivitys", "Approved" : "Hyväksytty", "Experimental" : "Kokeellinen", "No apps found for {query}" : "Haulla {query} ei löytynyt sovelluksia", + "Enable all" : "Ota kaikki käyttöön", "Allow filesystem access" : "Salli pääsy tiedostojärjestelmään", "Disconnect" : "Katkaise yhteys", "Revoke" : "Peru oikeus", @@ -157,7 +167,7 @@ "STARTTLS" : "STARTTLS", "Email server" : "Sähköpostipalvelin", "Open documentation" : "Avaa dokumentaatio", - "This is used for sending out notifications." : "Tätä käytetään ilmoitusten lähettämiseen.", + "It is important to set up this server to be able to send emails, like for password reset and notifications." : "On tärkeää määritää sähköpostipalvelin asetukset, jotta voidaan lähettää muun muassa salasanan palautus- ja ilmoitussähköpostiviestejä.", "Send mode" : "Lähetystila", "Encryption" : "Salaus", "From address" : "Lähettäjän osoite", @@ -218,14 +228,19 @@ "Exclude groups from sharing" : "Kiellä ryhmiä jakamasta", "These groups will still be able to receive shares, but not to initiate them." : "Nämä ryhmät kykenevät vastaanottamaan jakoja, mutta eivät kuitenkaan itse pysty luoda jakoja.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Salli käyttäjätunnuksen automaattinen täydentäminen jakamisikkunnassa. Jos tämä asetus on pois käytöstä, tulee käyttäjätunnus kirjoittaa kokonaan itse.", + "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Näytä vastuuvapauslauseke julkisen linkin lähetyssivulla. (Näytetään vain, kun tiedostolista on piilotettu.)", + "This text will be shown on the public link upload page when the file list is hidden." : "Tämä teksti näytetään julkisen linkin lähetyssivulla, kun tiedostolista on piilotettu.", "Tips & tricks" : "Vinkit", "How to do backups" : "Kuinka tehdä varmuuskopioita", "Advanced monitoring" : "Edistynyt valvonta", "Performance tuning" : "Suorituskyvyn hienosäätö", "Improving the config.php" : "Config.php-tiedoston parantaminen", "Theming" : "Teemojen käyttö", + "Check the security of your Nextcloud over our security scan" : "Tarkista Nextcloudisi tietoturva käyttäen tietoturvatarkistustamme", "Hardening and security guidance" : "Turvaamis- ja tietoturvaopas", "Developer documentation" : "Kehittäjädokumentaatio", + "View in store" : "Näytä kaupassa", + "Limit to groups" : "Rajoita ryhmiin", "This app has an update available." : "Tähän sovellukseen on päivitys saatavilla.", "by %s" : "tekijä %s", "%s-licensed" : "%s-lisensoitu", @@ -236,6 +251,8 @@ "Report a bug" : "Ilmoita viasta", "Show description …" : "Näytä kuvaus…", "Hide description …" : "Piilota kuvaus…", + "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Tämä sovellus ei ole määritellyt minimi Nextcloud-versiota. Tämä tulee olemaan ongelma tulevaisuudessa.", + "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Tämä sovellus ei ole määritellyt maksimi Nextcloud-versiota. Tämä tulee olemaan ongelma tulevaisuudessa.", "This app cannot be installed because the following dependencies are not fulfilled:" : "Tätä sovellusta ei voi asentaa, koska seuraavat riippuvuudet eivät täyty:", "Enable only for specific groups" : "Salli vain tietyille ryhmille", "SSL Root Certificates" : "SSL-juurivarmenteet", @@ -270,9 +287,7 @@ "Address" : "Osoite", "Your postal address" : "Postiosoitteesi", "Website" : "Verkkosivusto", - "Your website" : "Verkkosivustosi", "Twitter" : "Twitter", - "Your Twitter handle" : "Twitter-tunnuksesi", "You are member of the following groups:" : "Olet jäsenenä seuraavissa ryhmissä:", "Password" : "Salasana", "Current password" : "Nykyinen salasana", @@ -289,7 +304,7 @@ "Web, desktop and mobile clients currently logged in to your account." : "Verkko-, työpöytä- ja mobiililaitteet, jotka ovat parhaillaan kirjautuneet tilillesi.", "Device" : "Laite", "Last activity" : "Viimeksi käytetty", - "Passcodes that give an app or device permissions to access your account." : "Sovellussalasana antaa sovellukselle tai laitteelle käyttöoikeuden tiliisi.", + "Here you can generate individual passwords for apps so you don’t have to give out your password. You can revoke them individually too." : "Tässä voit luoda yksilöityjä salasanoja sovelluksille, jotta sinun ei tarvitse antaa salasanaasi niille. Voit myös poistaa niitä tarvittaessa.", "Name" : "Nimi", "App name" : "Sovelluksen nimi", "Create new app password" : "Luo uusi sovellussalasana", @@ -298,10 +313,10 @@ "Username" : "Käyttäjätunnus", "Done" : "Valmis", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Kehityksestä on vastannut {communityopen}Nextcloud-yhteisö{linkclose}, {githubopen}lähdekoodi{linkclose} on {licenseopen}AGPL-lisensoitu{linkclose}.", - "Follow us on Google Plus!" : "Seuraa meitä Google Plussassa!", + "Follow us on Google+!" : "Seuraa meitä Google+:ssa!", "Like our facebook page!" : "Tykkää Facebook-sivustamme!", - "Subscribe to our twitter channel!" : "Seuraa Twitter-tiliämme!", - "Subscribe to our news feed!" : "Tilaa uutissyötteemme!", + "Follow us on Twitter!" : "Seuraa meitä Twitterissä!", + "Check out our blog!" : "Tutustu blogiimme!", "Subscribe to our newsletter!" : "Tilaa uutiskirjeemme!", "Settings" : "Asetukset", "Show storage location" : "Näytä tallennustilan sijainti", @@ -341,12 +356,19 @@ "Uninstalling ...." : "Poistetaan asennusta...", "Error while uninstalling app" : "Virhe sovellusta poistaessa", "Uninstall" : "Poista asennus", + "This is used for sending out notifications." : "Tätä käytetään ilmoitusten lähettämiseen.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-moduuli \"fileinfo\" puuttuu. Sen käyttö on erittäin suositeltavaa, jotta MIME-tyypin havaitseminen onnistuu parhaalla mahdollisella tavalla.", "Uninstall app" : "Poista sovelluksen asennus", "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>" : "Hei,<br><br>tässä sinulle tiedoksi, että sinulla on nyt %s-tili.<br><br>Käyttäjänimesi: <strong>%s</strong><br>Käytä sitä: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "Kiitos!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hei,\n\ntässä sinulle tiedoksi, että sinulla on nyt %s-tili.\n\nKäyttäjänimesi: %s\nKäytä sitä: %s\n\n", "For password recovery and notifications" : "Salasanan nollausta ja ilmoituksia varten", + "Your website" : "Verkkosivustosi", + "Your Twitter handle" : "Twitter-tunnuksesi", + "Passcodes that give an app or device permissions to access your account." : "Sovellussalasana antaa sovellukselle tai laitteelle käyttöoikeuden tiliisi.", + "Follow us on Google Plus!" : "Seuraa meitä Google Plussassa!", + "Subscribe to our twitter channel!" : "Seuraa Twitter-tiliämme!", + "Subscribe to our news feed!" : "Tilaa uutissyötteemme!", "Show last log in" : "Näytä viimeisin sisäänkirjautuminen" },"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 f78eeb9ae93..dae56ce5f49 100644 --- a/settings/l10n/fr.js +++ b/settings/l10n/fr.js @@ -8,6 +8,9 @@ OC.L10N.register( "You changed your email address" : "Vous avez modifié votre adresse e-mail", "Your email address was changed by an administrator" : "Votre adresse e-mail a été modifiée par un administrateur", "Your <strong>password</strong> or <strong>email</strong> was modified" : "Votre <strong>mot de passe</strong> ou <strong>adresse e-mail</strong> a été modifié", + "Your apps" : "Vos applications", + "Enabled apps" : "Applications activées", + "Disabled apps" : "Applications désactivées", "Wrong password" : "Mot de passe incorrect", "Saved" : "Sauvegardé", "No user supplied" : "Aucun utilisateur fourni", @@ -28,7 +31,7 @@ OC.L10N.register( "Well done, %s!" : "Bien joué, %s !", "If you received this email, the email configuration seems to be correct." : "Si vous avez reçu cet e-mail, la configuration de l'adresse e-mail semble être correcte.", "Email setting test" : "Test des paramètres e-mail", - "Mail could not be sent. Check your mail server log" : "L'email n'a pu être envoyé. Vérifiez le journal du serveur de messagerie", + "Email could not be sent. Check your mail server log" : "L'email n'a pu être envoyé. Vérifiez le journal du serveur de messagerie", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Une erreur est survenue lors de l'envoi de l'e-mail. Veuillez vérifier vos paramètres. (Erreur: %s)", "You need to set your user email before being able to send test emails." : "Vous devez définir une adresse e-mail dans vos paramètres personnels avant de pouvoir envoyer des e-mails de test.", "Invalid request" : "Requête non valide", @@ -38,6 +41,8 @@ OC.L10N.register( "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.", "Unable to delete user." : "Impossible de supprimer l'utilisateur.", + "Error while enabling user." : "Erreur lors de l'activation de l'utilisateur.", + "Error while disabling user." : "Erreur lors de la désactivation de l'utilisateur.", "Settings saved" : "Paramètres sauvegardés", "Unable to change full name" : "Impossible de modifier le nom complet", "Unable to change email address" : "Impossible de modifier l'adresse e-mail", @@ -97,11 +102,15 @@ OC.L10N.register( "Updating...." : "Mise à jour...", "Error while updating app" : "Erreur lors de la mise à jour de l'application", "Updated" : "Mise à jour terminée", + "Removing …" : "Suppression...", + "Error while removing app" : "Erreur lors de la suppression de l'application", + "Remove" : "Supprimer", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "L'application a été activée mais doit être mise à jour. Vous allez être redirigé vers la page des mises à jour dans 5 secondes.", "App update" : "Mise à jour", "Approved" : "Approuvée", "Experimental" : "Expérimentale", "No apps found for {query}" : "Aucune application trouvée pour {query}", + "Enable all" : "Tout activer", "Allow filesystem access" : "Autoriser l'accès au gestionnaire de fichiers", "Disconnect" : "Déconnexion", "Revoke" : "Révoquer", @@ -136,6 +145,7 @@ OC.L10N.register( "Visible to local users and to trusted servers" : "Visible par les utilisateurs locaux et les serveurs de confiance", "Public" : "Publique", "Will be synced to a global and public address book" : "Va être synchronisé dans un carnet d'adresse global et public", + "Verify" : "Vérifier", "Select a profile picture" : "Selectionnez une photo de profil ", "Very weak password" : "Mot de passe de très faible sécurité", "Weak password" : "Mot de passe de faible sécurité", @@ -177,7 +187,7 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "Email server" : "Serveur e-mail", "Open documentation" : "Voir la documentation", - "This is used for sending out notifications." : "Ceci est utilisé pour l'envoi des notifications.", + "It is important to set up this server to be able to send emails, like for password reset and notifications." : "Il est important d'indiquer un serveur afin de pouvoir envoyer des mails en cas de perte de mot de passe et pour d'autres notifications.", "Send mode" : "Mode d'envoi", "Encryption" : "Chiffrement", "From address" : "Adresse source", @@ -263,6 +273,8 @@ OC.L10N.register( "Check the security of your Nextcloud over our security scan" : "Vérifier la sécurité de votre Nextcloud grâce à notre scan de sécurité", "Hardening and security guidance" : "Guide pour le renforcement et la sécurité", "Developer documentation" : "Documentation pour développeurs", + "View in store" : "Afficher dans le magasin d'application", + "Limit to groups" : "Limiter aux groupes", "This app has an update available." : "Cette application a une mise à jour disponible.", "by %s" : "par %s", "%s-licensed" : "Sous licence %s", @@ -309,9 +321,8 @@ OC.L10N.register( "Address" : "Adresse", "Your postal address" : "Votre adresse postale", "Website" : "Site web", - "Your website" : "Votre site web", + "Link https://…" : "Lien https://…", "Twitter" : "Twitter", - "Your Twitter handle" : "Votre pseudo Twitter", "You are member of the following groups:" : "Vous êtes membre des groupes suivants :", "Password" : "Mot de passe", "Current password" : "Mot de passe actuel", @@ -328,7 +339,6 @@ OC.L10N.register( "Web, desktop and mobile clients currently logged in to your account." : "Clients web, desktop et mobiles actuellement connectés sur votre compte.", "Device" : "Appareil", "Last activity" : "Dernière activité", - "Passcodes that give an app or device permissions to access your account." : "Codes de sécurité autorisant une application ou un appareil à accéder à votre compte.", "Name" : "Nom", "App name" : "Nom de l'application", "Create new app password" : "Créer un nouveau mot de passe d'application", @@ -337,10 +347,10 @@ OC.L10N.register( "Username" : "Nom d'utilisateur", "Done" : "Terminé", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Développé par la {communityopen}communauté Nextcloud{linkclose}, le {githubopen}code source{linkclose} est sous licence {licenseopen}AGPL{linkclose}.", - "Follow us on Google Plus!" : "Suiviez-nous sur Google Plus!", + "Follow us on Google+!" : "Suivez-nous sur Google+ !", "Like our facebook page!" : "Aimez notre page facebook!", - "Subscribe to our twitter channel!" : "Enregistrez notre page twitter!", - "Subscribe to our news feed!" : "Abonnez-vous à notre flux d'actualités!", + "Follow us on Twitter!" : "Suivez-nous sur Twitter !", + "Check out our blog!" : "Découvrez notre blog !", "Subscribe to our newsletter!" : "Abonnez-vous à notre newsletter!", "Settings" : "Paramètres", "Show storage location" : "Afficher l'emplacement du stockage", @@ -356,6 +366,7 @@ OC.L10N.register( "Group name" : "Nom de groupe", "Everyone" : "Tout le monde", "Admins" : "Administrateurs", + "Disabled" : "Désactivé", "Default quota" : "Quota par défaut", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Veuillez entrer le quota de stockage (ex. \"512 MB\" ou \"12 GB\")", "Other" : "Autre", @@ -380,12 +391,19 @@ OC.L10N.register( "Uninstalling ...." : "Désinstallation...", "Error while uninstalling app" : "Erreur lors de la désinstallation de l'application", "Uninstall" : "Désinstaller", + "This is used for sending out notifications." : "Ceci est utilisé pour l'envoi des notifications.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Le module PHP 'fileinfo' est manquant. Il est vivement recommandé de l'activer afin d'obtenir de meilleurs résultats de détection mime-type.", "Uninstall app" : "Désinstaller l'application", "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>" : "Bonjour,<br><br>Un compte %s a été créé pour vous.<br><br>Votre nom d'utilisateur est : <strong>%s</strong><br>Visitez votre compte : <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "À bientôt !", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Bonjour,\n\nUn compte %s a été créé pour vous.\n\nVotre nom d'utilisateur : %s\nVisitez votre compte : %s\n\n", "For password recovery and notifications" : "Pour la récupération de mot de passe et les notifications", + "Your website" : "Votre site web", + "Your Twitter handle" : "Votre pseudo Twitter", + "Passcodes that give an app or device permissions to access your account." : "Codes de sécurité autorisant une application ou un appareil à accéder à votre compte.", + "Follow us on Google Plus!" : "Suiviez-nous sur Google Plus!", + "Subscribe to our twitter channel!" : "Enregistrez notre page twitter!", + "Subscribe to our news feed!" : "Abonnez-vous à notre flux d'actualités!", "Show last log in" : "Montrer la dernière connexion" }, "nplurals=2; plural=(n > 1);"); diff --git a/settings/l10n/fr.json b/settings/l10n/fr.json index 8b0444ac0ef..67455d44d77 100644 --- a/settings/l10n/fr.json +++ b/settings/l10n/fr.json @@ -6,6 +6,9 @@ "You changed your email address" : "Vous avez modifié votre adresse e-mail", "Your email address was changed by an administrator" : "Votre adresse e-mail a été modifiée par un administrateur", "Your <strong>password</strong> or <strong>email</strong> was modified" : "Votre <strong>mot de passe</strong> ou <strong>adresse e-mail</strong> a été modifié", + "Your apps" : "Vos applications", + "Enabled apps" : "Applications activées", + "Disabled apps" : "Applications désactivées", "Wrong password" : "Mot de passe incorrect", "Saved" : "Sauvegardé", "No user supplied" : "Aucun utilisateur fourni", @@ -26,7 +29,7 @@ "Well done, %s!" : "Bien joué, %s !", "If you received this email, the email configuration seems to be correct." : "Si vous avez reçu cet e-mail, la configuration de l'adresse e-mail semble être correcte.", "Email setting test" : "Test des paramètres e-mail", - "Mail could not be sent. Check your mail server log" : "L'email n'a pu être envoyé. Vérifiez le journal du serveur de messagerie", + "Email could not be sent. Check your mail server log" : "L'email n'a pu être envoyé. Vérifiez le journal du serveur de messagerie", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Une erreur est survenue lors de l'envoi de l'e-mail. Veuillez vérifier vos paramètres. (Erreur: %s)", "You need to set your user email before being able to send test emails." : "Vous devez définir une adresse e-mail dans vos paramètres personnels avant de pouvoir envoyer des e-mails de test.", "Invalid request" : "Requête non valide", @@ -36,6 +39,8 @@ "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.", "Unable to delete user." : "Impossible de supprimer l'utilisateur.", + "Error while enabling user." : "Erreur lors de l'activation de l'utilisateur.", + "Error while disabling user." : "Erreur lors de la désactivation de l'utilisateur.", "Settings saved" : "Paramètres sauvegardés", "Unable to change full name" : "Impossible de modifier le nom complet", "Unable to change email address" : "Impossible de modifier l'adresse e-mail", @@ -95,11 +100,15 @@ "Updating...." : "Mise à jour...", "Error while updating app" : "Erreur lors de la mise à jour de l'application", "Updated" : "Mise à jour terminée", + "Removing …" : "Suppression...", + "Error while removing app" : "Erreur lors de la suppression de l'application", + "Remove" : "Supprimer", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "L'application a été activée mais doit être mise à jour. Vous allez être redirigé vers la page des mises à jour dans 5 secondes.", "App update" : "Mise à jour", "Approved" : "Approuvée", "Experimental" : "Expérimentale", "No apps found for {query}" : "Aucune application trouvée pour {query}", + "Enable all" : "Tout activer", "Allow filesystem access" : "Autoriser l'accès au gestionnaire de fichiers", "Disconnect" : "Déconnexion", "Revoke" : "Révoquer", @@ -134,6 +143,7 @@ "Visible to local users and to trusted servers" : "Visible par les utilisateurs locaux et les serveurs de confiance", "Public" : "Publique", "Will be synced to a global and public address book" : "Va être synchronisé dans un carnet d'adresse global et public", + "Verify" : "Vérifier", "Select a profile picture" : "Selectionnez une photo de profil ", "Very weak password" : "Mot de passe de très faible sécurité", "Weak password" : "Mot de passe de faible sécurité", @@ -175,7 +185,7 @@ "STARTTLS" : "STARTTLS", "Email server" : "Serveur e-mail", "Open documentation" : "Voir la documentation", - "This is used for sending out notifications." : "Ceci est utilisé pour l'envoi des notifications.", + "It is important to set up this server to be able to send emails, like for password reset and notifications." : "Il est important d'indiquer un serveur afin de pouvoir envoyer des mails en cas de perte de mot de passe et pour d'autres notifications.", "Send mode" : "Mode d'envoi", "Encryption" : "Chiffrement", "From address" : "Adresse source", @@ -261,6 +271,8 @@ "Check the security of your Nextcloud over our security scan" : "Vérifier la sécurité de votre Nextcloud grâce à notre scan de sécurité", "Hardening and security guidance" : "Guide pour le renforcement et la sécurité", "Developer documentation" : "Documentation pour développeurs", + "View in store" : "Afficher dans le magasin d'application", + "Limit to groups" : "Limiter aux groupes", "This app has an update available." : "Cette application a une mise à jour disponible.", "by %s" : "par %s", "%s-licensed" : "Sous licence %s", @@ -307,9 +319,8 @@ "Address" : "Adresse", "Your postal address" : "Votre adresse postale", "Website" : "Site web", - "Your website" : "Votre site web", + "Link https://…" : "Lien https://…", "Twitter" : "Twitter", - "Your Twitter handle" : "Votre pseudo Twitter", "You are member of the following groups:" : "Vous êtes membre des groupes suivants :", "Password" : "Mot de passe", "Current password" : "Mot de passe actuel", @@ -326,7 +337,6 @@ "Web, desktop and mobile clients currently logged in to your account." : "Clients web, desktop et mobiles actuellement connectés sur votre compte.", "Device" : "Appareil", "Last activity" : "Dernière activité", - "Passcodes that give an app or device permissions to access your account." : "Codes de sécurité autorisant une application ou un appareil à accéder à votre compte.", "Name" : "Nom", "App name" : "Nom de l'application", "Create new app password" : "Créer un nouveau mot de passe d'application", @@ -335,10 +345,10 @@ "Username" : "Nom d'utilisateur", "Done" : "Terminé", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Développé par la {communityopen}communauté Nextcloud{linkclose}, le {githubopen}code source{linkclose} est sous licence {licenseopen}AGPL{linkclose}.", - "Follow us on Google Plus!" : "Suiviez-nous sur Google Plus!", + "Follow us on Google+!" : "Suivez-nous sur Google+ !", "Like our facebook page!" : "Aimez notre page facebook!", - "Subscribe to our twitter channel!" : "Enregistrez notre page twitter!", - "Subscribe to our news feed!" : "Abonnez-vous à notre flux d'actualités!", + "Follow us on Twitter!" : "Suivez-nous sur Twitter !", + "Check out our blog!" : "Découvrez notre blog !", "Subscribe to our newsletter!" : "Abonnez-vous à notre newsletter!", "Settings" : "Paramètres", "Show storage location" : "Afficher l'emplacement du stockage", @@ -354,6 +364,7 @@ "Group name" : "Nom de groupe", "Everyone" : "Tout le monde", "Admins" : "Administrateurs", + "Disabled" : "Désactivé", "Default quota" : "Quota par défaut", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Veuillez entrer le quota de stockage (ex. \"512 MB\" ou \"12 GB\")", "Other" : "Autre", @@ -378,12 +389,19 @@ "Uninstalling ...." : "Désinstallation...", "Error while uninstalling app" : "Erreur lors de la désinstallation de l'application", "Uninstall" : "Désinstaller", + "This is used for sending out notifications." : "Ceci est utilisé pour l'envoi des notifications.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Le module PHP 'fileinfo' est manquant. Il est vivement recommandé de l'activer afin d'obtenir de meilleurs résultats de détection mime-type.", "Uninstall app" : "Désinstaller l'application", "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>" : "Bonjour,<br><br>Un compte %s a été créé pour vous.<br><br>Votre nom d'utilisateur est : <strong>%s</strong><br>Visitez votre compte : <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "À bientôt !", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Bonjour,\n\nUn compte %s a été créé pour vous.\n\nVotre nom d'utilisateur : %s\nVisitez votre compte : %s\n\n", "For password recovery and notifications" : "Pour la récupération de mot de passe et les notifications", + "Your website" : "Votre site web", + "Your Twitter handle" : "Votre pseudo Twitter", + "Passcodes that give an app or device permissions to access your account." : "Codes de sécurité autorisant une application ou un appareil à accéder à votre compte.", + "Follow us on Google Plus!" : "Suiviez-nous sur Google Plus!", + "Subscribe to our twitter channel!" : "Enregistrez notre page twitter!", + "Subscribe to our news feed!" : "Abonnez-vous à notre flux d'actualités!", "Show last log in" : "Montrer la dernière connexion" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/settings/l10n/gl.js b/settings/l10n/gl.js index 83035a18edb..d381e4df35c 100644 --- a/settings/l10n/gl.js +++ b/settings/l10n/gl.js @@ -80,7 +80,6 @@ OC.L10N.register( "NT LAN Manager" : "Xestor NT LAN", "Email server" : "Servidor de correo", "Open documentation" : "Abrir a documentación", - "This is used for sending out notifications." : "Isto utilizase para o envío de notificacións.", "Send mode" : "Modo de envío", "Encryption" : "Cifrado", "From address" : "Desde o enderezo", @@ -211,6 +210,7 @@ OC.L10N.register( "Uninstalling ...." : "Desinstalando ...", "Error while uninstalling app" : "Produciuse un erro ao desinstalar o aplicatvo", "Uninstall" : "Desinstalar", + "This is used for sending out notifications." : "Isto utilizase para o envío de notificacións.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Non se atopou o módulo de PHP «fileinfo». É recomendábel activar este módulo para obter os mellores resultados coa detección do tipo MIME.", "Cheers!" : "Saúdos!", "Show last log in" : "Amosar a última conexión" diff --git a/settings/l10n/gl.json b/settings/l10n/gl.json index 94d3a237422..77a709ac0c8 100644 --- a/settings/l10n/gl.json +++ b/settings/l10n/gl.json @@ -78,7 +78,6 @@ "NT LAN Manager" : "Xestor NT LAN", "Email server" : "Servidor de correo", "Open documentation" : "Abrir a documentación", - "This is used for sending out notifications." : "Isto utilizase para o envío de notificacións.", "Send mode" : "Modo de envío", "Encryption" : "Cifrado", "From address" : "Desde o enderezo", @@ -209,6 +208,7 @@ "Uninstalling ...." : "Desinstalando ...", "Error while uninstalling app" : "Produciuse un erro ao desinstalar o aplicatvo", "Uninstall" : "Desinstalar", + "This is used for sending out notifications." : "Isto utilizase para o envío de notificacións.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Non se atopou o módulo de PHP «fileinfo». É recomendábel activar este módulo para obter os mellores resultados coa detección do tipo MIME.", "Cheers!" : "Saúdos!", "Show last log in" : "Amosar a última conexión" diff --git a/settings/l10n/he.js b/settings/l10n/he.js index 11fbe18090a..471d3e691bb 100644 --- a/settings/l10n/he.js +++ b/settings/l10n/he.js @@ -96,7 +96,6 @@ OC.L10N.register( "NT LAN Manager" : "מנהל רשת NT", "Email server" : "שרת דואר אלקטרוני", "Open documentation" : "תיעוד פתוח", - "This is used for sending out notifications." : "משתמשים בזה כדי לשלוח הודעות.", "Send mode" : "מצב שליחה", "Encryption" : "הצפנה", "From address" : "מכתובת", @@ -252,6 +251,7 @@ OC.L10N.register( "Uninstalling ...." : "מסיר התקנה...", "Error while uninstalling app" : "אירעה שגיאה בעת הסרת היישום", "Uninstall" : "הסרת התקנה", + "This is used for sending out notifications." : "משתמשים בזה כדי לשלוח הודעות.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "מודול ה- PHP מסוג 'fileinfo' חסר. אנו ממליצים בחום לאפשר מודול זה כדי לקבל תוצאות מיטביות עם גילוי mime-type.", "Cheers!" : "לחיים!", "For password recovery and notifications" : "לשחזור סיסמא והודעות", diff --git a/settings/l10n/he.json b/settings/l10n/he.json index 6f80d80680a..78624f922c9 100644 --- a/settings/l10n/he.json +++ b/settings/l10n/he.json @@ -94,7 +94,6 @@ "NT LAN Manager" : "מנהל רשת NT", "Email server" : "שרת דואר אלקטרוני", "Open documentation" : "תיעוד פתוח", - "This is used for sending out notifications." : "משתמשים בזה כדי לשלוח הודעות.", "Send mode" : "מצב שליחה", "Encryption" : "הצפנה", "From address" : "מכתובת", @@ -250,6 +249,7 @@ "Uninstalling ...." : "מסיר התקנה...", "Error while uninstalling app" : "אירעה שגיאה בעת הסרת היישום", "Uninstall" : "הסרת התקנה", + "This is used for sending out notifications." : "משתמשים בזה כדי לשלוח הודעות.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "מודול ה- PHP מסוג 'fileinfo' חסר. אנו ממליצים בחום לאפשר מודול זה כדי לקבל תוצאות מיטביות עם גילוי mime-type.", "Cheers!" : "לחיים!", "For password recovery and notifications" : "לשחזור סיסמא והודעות", diff --git a/settings/l10n/hr.js b/settings/l10n/hr.js index 38981c1280a..345d4e346e7 100644 --- a/settings/l10n/hr.js +++ b/settings/l10n/hr.js @@ -47,7 +47,6 @@ OC.L10N.register( "Login" : "Prijava", "Plain" : "Čisti tekst", "NT LAN Manager" : "NT LAN Manager", - "This is used for sending out notifications." : "Ovo se koristi za slanje notifikacija.", "Send mode" : "Način rada za slanje", "Encryption" : "Šifriranje", "From address" : "S adrese", @@ -129,6 +128,7 @@ OC.L10N.register( "Uninstalling ...." : "Deinstaliranje....", "Error while uninstalling app" : "Pogreška pri deinstaliranju app", "Uninstall" : "Deinstalirajte", + "This is used for sending out notifications." : "Ovo se koristi za slanje notifikacija.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modul 'fileinfo' nedostaje. Tolo vam preporučjemo da taj modul omogućitekako biste dobili najbolje rezultate u detekciji mime vrste.", "Cheers!" : "Cheers!", "Show last log in" : "Prikaži zadnje spajanje" diff --git a/settings/l10n/hr.json b/settings/l10n/hr.json index 31a5cd0300a..9c53f2b1b1c 100644 --- a/settings/l10n/hr.json +++ b/settings/l10n/hr.json @@ -45,7 +45,6 @@ "Login" : "Prijava", "Plain" : "Čisti tekst", "NT LAN Manager" : "NT LAN Manager", - "This is used for sending out notifications." : "Ovo se koristi za slanje notifikacija.", "Send mode" : "Način rada za slanje", "Encryption" : "Šifriranje", "From address" : "S adrese", @@ -127,6 +126,7 @@ "Uninstalling ...." : "Deinstaliranje....", "Error while uninstalling app" : "Pogreška pri deinstaliranju app", "Uninstall" : "Deinstalirajte", + "This is used for sending out notifications." : "Ovo se koristi za slanje notifikacija.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modul 'fileinfo' nedostaje. Tolo vam preporučjemo da taj modul omogućitekako biste dobili najbolje rezultate u detekciji mime vrste.", "Cheers!" : "Cheers!", "Show last log in" : "Prikaži zadnje spajanje" diff --git a/settings/l10n/hu.js b/settings/l10n/hu.js index 67db21dabe3..bec9ff22d3e 100644 --- a/settings/l10n/hu.js +++ b/settings/l10n/hu.js @@ -19,7 +19,6 @@ OC.L10N.register( "Group already exists." : "A csoport már létezik.", "Unable to add group." : "Nem lehet létrehozni a csoportot.", "Unable to delete group." : "Nem lehet törölni a csoportot.", - "Mail could not be sent. Check your mail server log" : "A levél nem küldhető el. Kérjük, ellenőrizze a levelezőrendszer naplóit!", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Hiba történt az e-mail küldésekor. Kérlek ellenőrizd a beállításokat! (Hiba: %s)", "You need to set your user email before being able to send test emails." : "Előbb meg kell adnia az e-mail címét, mielőtt tesztelni tudná az e-mail küldést.", "Invalid request" : "Érvénytelen kérés", @@ -155,7 +154,6 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "Email server" : "E-mail szerver", "Open documentation" : "Dokumentáció megnyitása", - "This is used for sending out notifications." : "Ezt használjuk a jelentések kiküldésére.", "Send mode" : "Küldési mód", "Encryption" : "Titkosítás", "From address" : "A feladó címe", @@ -286,9 +284,7 @@ OC.L10N.register( "Address" : "Cím", "Your postal address" : "A postai címed", "Website" : "Weboldal", - "Your website" : "A weboldalad", "Twitter" : "Twitter", - "Your Twitter handle" : "A Twitter azonosítód", "You are member of the following groups:" : "Tagja vagy a következő csoport(ok)nak:", "Password" : "Jelszó", "Current password" : "A jelenlegi jelszó", @@ -305,7 +301,6 @@ OC.L10N.register( "Web, desktop and mobile clients currently logged in to your account." : "A fiókodba jelenleg bejelentkezett web, asztali és mobil kliensek.", "Device" : "Eszköz", "Last activity" : "Utolsó tevékenység", - "Passcodes that give an app or device permissions to access your account." : "A számkódok jogosultságot adnak egy alkalmazás vagy eszköz részére a fiókod hozzáféréséhez.", "Name" : "Név", "App name" : "Alkalmazás név", "Create new app password" : "Új alkalmazás jelszó létrehozása", @@ -314,10 +309,7 @@ OC.L10N.register( "Username" : "Felhasználónév", "Done" : "Kész", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Fejleszti a {communityopen}Nextcloud közösség{linkclose}, a {githubopen}forráskódra{linkclose} az {licenseopen}AGPL{linkclose} licenc vonatkozik.", - "Follow us on Google Plus!" : "Kövess minket a Googe Plus-szon!", "Like our facebook page!" : "Kedveld a Facebook oldalunkat!", - "Subscribe to our twitter channel!" : "Iratkozz fel a Twitter csatornánkra!", - "Subscribe to our news feed!" : "Iratkozz fel a hírfolyamunkra!", "Subscribe to our newsletter!" : "Iratkozz fel a hírlevelünkre!", "Settings" : "Beállítások", "Show storage location" : "Háttértároló helyének mutatása", @@ -357,12 +349,19 @@ OC.L10N.register( "Uninstalling ...." : "Eltávolítás ...", "Error while uninstalling app" : "Hiba történt az alkalmazás eltávolítása közben", "Uninstall" : "Eltávolítás", + "This is used for sending out notifications." : "Ezt használjuk a jelentések kiküldésére.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "A 'fileinfo' PHP modul hiányzik. Erősen javasolt ennek a modulnak a telepítése, mert ezzel lényegesen jobb a MIME-típusok felismerése.", "Uninstall app" : "Alkalmazás eltávolítása", "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>" : "Szia!<br><br>Szeretnénk tudatni, hogy elkészült a fiókod: %s.<br><br>A felhasználóneved: <strong>%s</strong><br>Hozzáférés itt: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "Üdv.", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Szia!\n\nSzeretnénk tudatni, hogy elkészült a fiókod: %s.\n\nA felhasználóneved: %s\nHozzáférés itt: %s\n", "For password recovery and notifications" : "Jelszó helyreállításhoz és értesítésekhez", + "Your website" : "A weboldalad", + "Your Twitter handle" : "A Twitter azonosítód", + "Passcodes that give an app or device permissions to access your account." : "A számkódok jogosultságot adnak egy alkalmazás vagy eszköz részére a fiókod hozzáféréséhez.", + "Follow us on Google Plus!" : "Kövess minket a Googe Plus-szon!", + "Subscribe to our twitter channel!" : "Iratkozz fel a Twitter csatornánkra!", + "Subscribe to our news feed!" : "Iratkozz fel a hírfolyamunkra!", "Show last log in" : "Utolsó bejelentkezés megjelenítése" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/hu.json b/settings/l10n/hu.json index 47d73d827e9..3f13764ce43 100644 --- a/settings/l10n/hu.json +++ b/settings/l10n/hu.json @@ -17,7 +17,6 @@ "Group already exists." : "A csoport már létezik.", "Unable to add group." : "Nem lehet létrehozni a csoportot.", "Unable to delete group." : "Nem lehet törölni a csoportot.", - "Mail could not be sent. Check your mail server log" : "A levél nem küldhető el. Kérjük, ellenőrizze a levelezőrendszer naplóit!", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Hiba történt az e-mail küldésekor. Kérlek ellenőrizd a beállításokat! (Hiba: %s)", "You need to set your user email before being able to send test emails." : "Előbb meg kell adnia az e-mail címét, mielőtt tesztelni tudná az e-mail küldést.", "Invalid request" : "Érvénytelen kérés", @@ -153,7 +152,6 @@ "STARTTLS" : "STARTTLS", "Email server" : "E-mail szerver", "Open documentation" : "Dokumentáció megnyitása", - "This is used for sending out notifications." : "Ezt használjuk a jelentések kiküldésére.", "Send mode" : "Küldési mód", "Encryption" : "Titkosítás", "From address" : "A feladó címe", @@ -284,9 +282,7 @@ "Address" : "Cím", "Your postal address" : "A postai címed", "Website" : "Weboldal", - "Your website" : "A weboldalad", "Twitter" : "Twitter", - "Your Twitter handle" : "A Twitter azonosítód", "You are member of the following groups:" : "Tagja vagy a következő csoport(ok)nak:", "Password" : "Jelszó", "Current password" : "A jelenlegi jelszó", @@ -303,7 +299,6 @@ "Web, desktop and mobile clients currently logged in to your account." : "A fiókodba jelenleg bejelentkezett web, asztali és mobil kliensek.", "Device" : "Eszköz", "Last activity" : "Utolsó tevékenység", - "Passcodes that give an app or device permissions to access your account." : "A számkódok jogosultságot adnak egy alkalmazás vagy eszköz részére a fiókod hozzáféréséhez.", "Name" : "Név", "App name" : "Alkalmazás név", "Create new app password" : "Új alkalmazás jelszó létrehozása", @@ -312,10 +307,7 @@ "Username" : "Felhasználónév", "Done" : "Kész", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Fejleszti a {communityopen}Nextcloud közösség{linkclose}, a {githubopen}forráskódra{linkclose} az {licenseopen}AGPL{linkclose} licenc vonatkozik.", - "Follow us on Google Plus!" : "Kövess minket a Googe Plus-szon!", "Like our facebook page!" : "Kedveld a Facebook oldalunkat!", - "Subscribe to our twitter channel!" : "Iratkozz fel a Twitter csatornánkra!", - "Subscribe to our news feed!" : "Iratkozz fel a hírfolyamunkra!", "Subscribe to our newsletter!" : "Iratkozz fel a hírlevelünkre!", "Settings" : "Beállítások", "Show storage location" : "Háttértároló helyének mutatása", @@ -355,12 +347,19 @@ "Uninstalling ...." : "Eltávolítás ...", "Error while uninstalling app" : "Hiba történt az alkalmazás eltávolítása közben", "Uninstall" : "Eltávolítás", + "This is used for sending out notifications." : "Ezt használjuk a jelentések kiküldésére.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "A 'fileinfo' PHP modul hiányzik. Erősen javasolt ennek a modulnak a telepítése, mert ezzel lényegesen jobb a MIME-típusok felismerése.", "Uninstall app" : "Alkalmazás eltávolítása", "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>" : "Szia!<br><br>Szeretnénk tudatni, hogy elkészült a fiókod: %s.<br><br>A felhasználóneved: <strong>%s</strong><br>Hozzáférés itt: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "Üdv.", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Szia!\n\nSzeretnénk tudatni, hogy elkészült a fiókod: %s.\n\nA felhasználóneved: %s\nHozzáférés itt: %s\n", "For password recovery and notifications" : "Jelszó helyreállításhoz és értesítésekhez", + "Your website" : "A weboldalad", + "Your Twitter handle" : "A Twitter azonosítód", + "Passcodes that give an app or device permissions to access your account." : "A számkódok jogosultságot adnak egy alkalmazás vagy eszköz részére a fiókod hozzáféréséhez.", + "Follow us on Google Plus!" : "Kövess minket a Googe Plus-szon!", + "Subscribe to our twitter channel!" : "Iratkozz fel a Twitter csatornánkra!", + "Subscribe to our news feed!" : "Iratkozz fel a hírfolyamunkra!", "Show last log in" : "Utolsó bejelentkezés megjelenítése" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/settings/l10n/ia.js b/settings/l10n/ia.js index 249615745d3..dc9176b83ea 100644 --- a/settings/l10n/ia.js +++ b/settings/l10n/ia.js @@ -126,7 +126,6 @@ OC.L10N.register( "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", @@ -199,7 +198,6 @@ OC.L10N.register( "Address" : "Adresse", "Your postal address" : "Tu adresse postal", "Website" : "Sito web", - "Your website" : "Tu sito web", "Twitter" : "Twitter", "You are member of the following groups:" : "Tu es membro del sequente gruppos:", "Password" : "Contrasigno", @@ -214,16 +212,12 @@ OC.L10N.register( "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", "Create new app password" : "Crear un nove contrasigno pro application", "Use the credentials below to configure your app or device." : "Usa le datos de authentication infra pro configurar tu application o dispositivo.", "Username" : "Nomine de usator", "Done" : "Preste", - "Follow us on Google Plus!" : "Seque nos in Google Plus!", - "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", "Show email address" : "Monstrar adresse de e-posta", "Send email to new user" : "Inviar message de e-posta a nove usator", @@ -246,7 +240,13 @@ OC.L10N.register( "Uninstalling ...." : "De-installante...", "Error while uninstalling app" : "Error durante de-installation del application", "Uninstall" : "De-installar", + "This is used for sending out notifications." : "Isto es usate pro inviar notificationes.", "Uninstall app" : "De-installar application", - "Cheers!" : "Congratulationes!" + "Cheers!" : "Congratulationes!", + "Your website" : "Tu sito web", + "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.", + "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!" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/ia.json b/settings/l10n/ia.json index 965720637a7..81e21ffd6cf 100644 --- a/settings/l10n/ia.json +++ b/settings/l10n/ia.json @@ -124,7 +124,6 @@ "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", @@ -197,7 +196,6 @@ "Address" : "Adresse", "Your postal address" : "Tu adresse postal", "Website" : "Sito web", - "Your website" : "Tu sito web", "Twitter" : "Twitter", "You are member of the following groups:" : "Tu es membro del sequente gruppos:", "Password" : "Contrasigno", @@ -212,16 +210,12 @@ "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", "Create new app password" : "Crear un nove contrasigno pro application", "Use the credentials below to configure your app or device." : "Usa le datos de authentication infra pro configurar tu application o dispositivo.", "Username" : "Nomine de usator", "Done" : "Preste", - "Follow us on Google Plus!" : "Seque nos in Google Plus!", - "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", "Show email address" : "Monstrar adresse de e-posta", "Send email to new user" : "Inviar message de e-posta a nove usator", @@ -244,7 +238,13 @@ "Uninstalling ...." : "De-installante...", "Error while uninstalling app" : "Error durante de-installation del application", "Uninstall" : "De-installar", + "This is used for sending out notifications." : "Isto es usate pro inviar notificationes.", "Uninstall app" : "De-installar application", - "Cheers!" : "Congratulationes!" + "Cheers!" : "Congratulationes!", + "Your website" : "Tu sito web", + "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.", + "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!" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/settings/l10n/id.js b/settings/l10n/id.js index 51fe56dbe21..4ec6c7eb7d8 100644 --- a/settings/l10n/id.js +++ b/settings/l10n/id.js @@ -114,7 +114,6 @@ OC.L10N.register( "NT LAN Manager" : "Manajer NT LAN", "Email server" : "Server email", "Open documentation" : "Buka dokumentasi", - "This is used for sending out notifications." : "Ini digunakan untuk mengirim notifikasi keluar.", "Send mode" : "Modus kirim", "Encryption" : "Enkripsi", "From address" : "Dari alamat", @@ -243,7 +242,6 @@ OC.L10N.register( "Web, desktop and mobile clients currently logged in to your account." : "Klien web, desktop dan mobile yang sedang login di akun Anda.", "Device" : "Perangkat", "Last activity" : "Aktivitas terakhir", - "Passcodes that give an app or device permissions to access your account." : "Kode kunci yang memberikan aplikasi atau perangkat izin untuk mengakses akun Anda.", "Name" : "Nama", "App name" : "Nama aplikasi", "Create new app password" : "Buat sandi aplikasi baru", @@ -286,9 +284,11 @@ OC.L10N.register( "Uninstalling ...." : "Mencopot ...", "Error while uninstalling app" : "Terjadi kesalahan saat mencopot aplikasi", "Uninstall" : "Copot", + "This is used for sending out notifications." : "Ini digunakan untuk mengirim notifikasi keluar.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Module 'fileinfo' pada PHP tidak ada. Kami sangat menyarankan untuk mengaktifkan modul ini untuk mendapatkan hasil terbaik pada proses pendeteksian mime-type.", "Cheers!" : "Horee!", "For password recovery and notifications" : "Untuk pemulihan sandi dan pemberitahuan", + "Passcodes that give an app or device permissions to access your account." : "Kode kunci yang memberikan aplikasi atau perangkat izin untuk mengakses akun Anda.", "Show last log in" : "Tampilkan masuk terakhir" }, "nplurals=1; plural=0;"); diff --git a/settings/l10n/id.json b/settings/l10n/id.json index 4ea228ae744..7ae7c8cc66d 100644 --- a/settings/l10n/id.json +++ b/settings/l10n/id.json @@ -112,7 +112,6 @@ "NT LAN Manager" : "Manajer NT LAN", "Email server" : "Server email", "Open documentation" : "Buka dokumentasi", - "This is used for sending out notifications." : "Ini digunakan untuk mengirim notifikasi keluar.", "Send mode" : "Modus kirim", "Encryption" : "Enkripsi", "From address" : "Dari alamat", @@ -241,7 +240,6 @@ "Web, desktop and mobile clients currently logged in to your account." : "Klien web, desktop dan mobile yang sedang login di akun Anda.", "Device" : "Perangkat", "Last activity" : "Aktivitas terakhir", - "Passcodes that give an app or device permissions to access your account." : "Kode kunci yang memberikan aplikasi atau perangkat izin untuk mengakses akun Anda.", "Name" : "Nama", "App name" : "Nama aplikasi", "Create new app password" : "Buat sandi aplikasi baru", @@ -284,9 +282,11 @@ "Uninstalling ...." : "Mencopot ...", "Error while uninstalling app" : "Terjadi kesalahan saat mencopot aplikasi", "Uninstall" : "Copot", + "This is used for sending out notifications." : "Ini digunakan untuk mengirim notifikasi keluar.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Module 'fileinfo' pada PHP tidak ada. Kami sangat menyarankan untuk mengaktifkan modul ini untuk mendapatkan hasil terbaik pada proses pendeteksian mime-type.", "Cheers!" : "Horee!", "For password recovery and notifications" : "Untuk pemulihan sandi dan pemberitahuan", + "Passcodes that give an app or device permissions to access your account." : "Kode kunci yang memberikan aplikasi atau perangkat izin untuk mengakses akun Anda.", "Show last log in" : "Tampilkan masuk terakhir" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/settings/l10n/is.js b/settings/l10n/is.js index 0407d80f603..6627d202af0 100644 --- a/settings/l10n/is.js +++ b/settings/l10n/is.js @@ -1,6 +1,17 @@ OC.L10N.register( "settings", { + "{actor} changed your password" : "{actor} breytti lykilorðinu þínu", + "You changed your password" : "Þú breyttir lykilorðinu þínu", + "Your password was reset by an administrator" : "Kerfisstjóri breytti lykilorðinu þínu", + "{actor} changed your email address" : "{actor} breytti tölvupóstfanginu þínu", + "You changed your email address" : "Þú breyttir tölvupóstfanginu þínu", + "Your email address was changed by an administrator" : "Kerfisstjóri breytti tölvupóstfanginu þínu", + "Your <strong>password</strong> or <strong>email</strong> was modified" : "Breyting hefur orðið á <strong>lykilorði</strong> eða <strong>tölvupóstfangi</strong> þínu", + "Your apps" : "Forritin þín", + "Enabled apps" : "Virk forrit", + "Disabled apps" : "Óvirk forrit", + "App bundles" : "Forritavöndlar", "Wrong password" : "Rangt lykilorð", "Saved" : "Vistað", "No user supplied" : "Enginn notandi gefinn", @@ -16,7 +27,8 @@ OC.L10N.register( "Group already exists." : "Hópur er þegar til.", "Unable to add group." : "Ekki tókst að bæta hóp við.", "Unable to delete group." : "Get ekki eytt hópi.", - "Mail could not be sent. Check your mail server log" : "Ekki var hægt að senda póst. Skoðaðu annál póstþjónsins", + "Invalid SMTP password." : "Ógilt SMTP-lykilorð", + "Well done, %s!" : "Vel gert, %s!", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Vandamál kom upp við að senda tölvupóst. Farðu yfir stillingarnar þínar. (Villa: %s)", "You need to set your user email before being able to send test emails." : "Þú verður að gefa upp netfangið þitt svo að þú getir sent prófunarpósta.", "Invalid request" : "Ógild fyrirspurn", @@ -34,6 +46,11 @@ OC.L10N.register( "Invalid user" : "Ógildur notandi", "Unable to change mail address" : "Get ekki breytt tölvupóstfangi", "Email saved" : "Tölvupóstfang vistað", + "Welcome aboard" : "Velkomin um borð", + "Welcome aboard %s" : "Velkomin um borð %s", + "Your username is: %s" : "Notandanafnið þitt er: %s", + "Set your password" : "Stilltu lykilorðið þitt", + "Go to %s" : "Farðu í %s", "Your %s account was created" : "%s notandaaðgangurinn þinn var búinn til", "Password confirmation is required" : "Þörf á staðfestingu lykilorðs", "Couldn't remove app." : "Gat ekki fjarlægt forrit.", @@ -43,6 +60,7 @@ OC.L10N.register( "Migration in progress. Please wait until the migration is finished" : "Yfirfærsla er í gangi. Dokaðu við þar til henni er lokið", "Migration started …" : "Yfirfærsla hafin...", "Not saved" : "Ekki vistað", + "Sending…" : "Sendi...", "Email sent" : "Tölvupóstur sendur", "Official" : "Opinbert", "All" : "Allt", @@ -65,11 +83,15 @@ OC.L10N.register( "Updating...." : "Uppfæri...", "Error while updating app" : "Villa við að uppfæra forrit", "Updated" : "Uppfært", + "Removing …" : "Fjarlægi ...", + "Error while removing app" : "Villa við að fjarlægja forrit", + "Remove" : "Fjarlægja", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Forritið hefur verið virkjað, en það þarf að uppfæra það. Þú verður áframsendur á uppfærslusíðuna eftir 5 sekúndur.", "App update" : "Uppfærsla forrits", "Approved" : "Samþykkt", "Experimental" : "Á tilraunastigi", "No apps found for {query}" : "Engin forrit fundust fyrir \"{query}", + "Enable all" : "Virkja allt", "Allow filesystem access" : "Leyfa aðgang að skráakerfi", "Disconnect" : "Aftengjast", "Revoke" : "Afturkalla", @@ -145,7 +167,6 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "Email server" : "Póstþjónn", "Open documentation" : "Opna hjálparskjöl", - "This is used for sending out notifications." : "Þetta er notað til að senda út tilkynningar.", "Send mode" : "Sendihamur", "Encryption" : "Dulritun", "From address" : "Frá vistfangi", @@ -230,6 +251,7 @@ OC.L10N.register( "Check the security of your Nextcloud over our security scan" : "Athugaðu öryggi Nextcloud-skýsins með öryggisskönnun okkar", "Hardening and security guidance" : "Brynjun og öryggisleiðbeiningar", "Developer documentation" : "Skjölun fyrir þróunaraðila", + "Limit to groups" : "Takmarka við hópa", "This app has an update available." : "Uppfærsla er tiltæk fyrir þetta forrit.", "by %s" : "frá %s", "%s-licensed" : "%s-notkunarleyfi", @@ -276,9 +298,7 @@ OC.L10N.register( "Address" : "Heimilisfang", "Your postal address" : "Heimilisfangið þitt", "Website" : "Vefsvæði", - "Your website" : "Vefsvæðið þitt", "Twitter" : "Twitter", - "Your Twitter handle" : "Twitter notandanafnið þitt", "You are member of the following groups:" : "Þú ert meðlimur eftirfarandi hópa:", "Password" : "Lykilorð", "Current password" : "Núverandi lykilorð", @@ -295,7 +315,6 @@ OC.L10N.register( "Web, desktop and mobile clients currently logged in to your account." : "Veftól, tölvur og símar sem núna eru skráð inn á aðganginn þinn.", "Device" : "Tæki", "Last activity" : "Síðasta virkni", - "Passcodes that give an app or device permissions to access your account." : "Aðgangskóði sem gefur forriti eða tæki heimild til að nota notandaaðganginn þinn.", "Name" : "Heiti", "App name" : "Heiti forrits", "Create new app password" : "Búa til nýtt lykilorð forrits", @@ -304,10 +323,10 @@ OC.L10N.register( "Username" : "Notandanafn", "Done" : "Lokið", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Þróað af {communityopen}Nextcloud samfélaginu{linkclose}, {githubopen}grunnkóðinn{linkclose} er gefinn út með {licenseopen}AGPL{linkclose} notkunarleyfinu.", - "Follow us on Google Plus!" : "Fylgstu með okkur á Google Plus!", + "Follow us on Google+!" : "Fylgstu með okkur á Google+!", "Like our facebook page!" : "Líkaðu við Facebook-síðuna okkar!", - "Subscribe to our twitter channel!" : "Gerstu áskrifandi að twitter-rásinni okkar!", - "Subscribe to our news feed!" : "Gerstu áskrifandi að fréttastraumi okkar!", + "Follow us on Twitter!" : "Fylgstu með okkur á Twitter!", + "Check out our blog!" : "Kíktu á bloggið okkar!", "Subscribe to our newsletter!" : "Gerstu áskrifandi að fréttabréfinu okkar!", "Settings" : "Stillingar", "Show storage location" : "Birta staðsetningu gagnageymslu", @@ -347,12 +366,19 @@ OC.L10N.register( "Uninstalling ...." : "Tek út uppsetningu ....", "Error while uninstalling app" : "Villa við að fjarlægja forrit", "Uninstall" : "Henda út", + "This is used for sending out notifications." : "Þetta er notað til að senda út tilkynningar.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-eininguna 'fileinfo' vantar. Við mælum eindregið með notkun þessarar einingar til að fá bestu útkomu við greiningu á MIME-skráagerðum.", "Uninstall app" : "Henda út forriti", "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>" : "Hæ þú,<br><br>bara að láta þig vita að þú átt núna s aðgang.<br><br>Notandanafnið þitt: <strong>%s</strong><br>Tengstu honum: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "Til hamingju!", "Hey there,\n\njust letting you know that you now have a %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", + "Your website" : "Vefsvæðið þitt", + "Your Twitter handle" : "Twitter notandanafnið þitt", + "Passcodes that give an app or device permissions to access your account." : "Aðgangskóði sem gefur forriti eða tæki heimild til að nota notandaaðganginn þinn.", + "Follow us on Google Plus!" : "Fylgstu með okkur á Google Plus!", + "Subscribe to our twitter channel!" : "Gerstu áskrifandi að twitter-rásinni okkar!", + "Subscribe to our news feed!" : "Gerstu áskrifandi að fréttastraumi okkar!", "Show last log in" : "Birta síðustu innskráningu" }, "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/settings/l10n/is.json b/settings/l10n/is.json index 66a85a53477..f1215f2e091 100644 --- a/settings/l10n/is.json +++ b/settings/l10n/is.json @@ -1,4 +1,15 @@ { "translations": { + "{actor} changed your password" : "{actor} breytti lykilorðinu þínu", + "You changed your password" : "Þú breyttir lykilorðinu þínu", + "Your password was reset by an administrator" : "Kerfisstjóri breytti lykilorðinu þínu", + "{actor} changed your email address" : "{actor} breytti tölvupóstfanginu þínu", + "You changed your email address" : "Þú breyttir tölvupóstfanginu þínu", + "Your email address was changed by an administrator" : "Kerfisstjóri breytti tölvupóstfanginu þínu", + "Your <strong>password</strong> or <strong>email</strong> was modified" : "Breyting hefur orðið á <strong>lykilorði</strong> eða <strong>tölvupóstfangi</strong> þínu", + "Your apps" : "Forritin þín", + "Enabled apps" : "Virk forrit", + "Disabled apps" : "Óvirk forrit", + "App bundles" : "Forritavöndlar", "Wrong password" : "Rangt lykilorð", "Saved" : "Vistað", "No user supplied" : "Enginn notandi gefinn", @@ -14,7 +25,8 @@ "Group already exists." : "Hópur er þegar til.", "Unable to add group." : "Ekki tókst að bæta hóp við.", "Unable to delete group." : "Get ekki eytt hópi.", - "Mail could not be sent. Check your mail server log" : "Ekki var hægt að senda póst. Skoðaðu annál póstþjónsins", + "Invalid SMTP password." : "Ógilt SMTP-lykilorð", + "Well done, %s!" : "Vel gert, %s!", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Vandamál kom upp við að senda tölvupóst. Farðu yfir stillingarnar þínar. (Villa: %s)", "You need to set your user email before being able to send test emails." : "Þú verður að gefa upp netfangið þitt svo að þú getir sent prófunarpósta.", "Invalid request" : "Ógild fyrirspurn", @@ -32,6 +44,11 @@ "Invalid user" : "Ógildur notandi", "Unable to change mail address" : "Get ekki breytt tölvupóstfangi", "Email saved" : "Tölvupóstfang vistað", + "Welcome aboard" : "Velkomin um borð", + "Welcome aboard %s" : "Velkomin um borð %s", + "Your username is: %s" : "Notandanafnið þitt er: %s", + "Set your password" : "Stilltu lykilorðið þitt", + "Go to %s" : "Farðu í %s", "Your %s account was created" : "%s notandaaðgangurinn þinn var búinn til", "Password confirmation is required" : "Þörf á staðfestingu lykilorðs", "Couldn't remove app." : "Gat ekki fjarlægt forrit.", @@ -41,6 +58,7 @@ "Migration in progress. Please wait until the migration is finished" : "Yfirfærsla er í gangi. Dokaðu við þar til henni er lokið", "Migration started …" : "Yfirfærsla hafin...", "Not saved" : "Ekki vistað", + "Sending…" : "Sendi...", "Email sent" : "Tölvupóstur sendur", "Official" : "Opinbert", "All" : "Allt", @@ -63,11 +81,15 @@ "Updating...." : "Uppfæri...", "Error while updating app" : "Villa við að uppfæra forrit", "Updated" : "Uppfært", + "Removing …" : "Fjarlægi ...", + "Error while removing app" : "Villa við að fjarlægja forrit", + "Remove" : "Fjarlægja", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Forritið hefur verið virkjað, en það þarf að uppfæra það. Þú verður áframsendur á uppfærslusíðuna eftir 5 sekúndur.", "App update" : "Uppfærsla forrits", "Approved" : "Samþykkt", "Experimental" : "Á tilraunastigi", "No apps found for {query}" : "Engin forrit fundust fyrir \"{query}", + "Enable all" : "Virkja allt", "Allow filesystem access" : "Leyfa aðgang að skráakerfi", "Disconnect" : "Aftengjast", "Revoke" : "Afturkalla", @@ -143,7 +165,6 @@ "STARTTLS" : "STARTTLS", "Email server" : "Póstþjónn", "Open documentation" : "Opna hjálparskjöl", - "This is used for sending out notifications." : "Þetta er notað til að senda út tilkynningar.", "Send mode" : "Sendihamur", "Encryption" : "Dulritun", "From address" : "Frá vistfangi", @@ -228,6 +249,7 @@ "Check the security of your Nextcloud over our security scan" : "Athugaðu öryggi Nextcloud-skýsins með öryggisskönnun okkar", "Hardening and security guidance" : "Brynjun og öryggisleiðbeiningar", "Developer documentation" : "Skjölun fyrir þróunaraðila", + "Limit to groups" : "Takmarka við hópa", "This app has an update available." : "Uppfærsla er tiltæk fyrir þetta forrit.", "by %s" : "frá %s", "%s-licensed" : "%s-notkunarleyfi", @@ -274,9 +296,7 @@ "Address" : "Heimilisfang", "Your postal address" : "Heimilisfangið þitt", "Website" : "Vefsvæði", - "Your website" : "Vefsvæðið þitt", "Twitter" : "Twitter", - "Your Twitter handle" : "Twitter notandanafnið þitt", "You are member of the following groups:" : "Þú ert meðlimur eftirfarandi hópa:", "Password" : "Lykilorð", "Current password" : "Núverandi lykilorð", @@ -293,7 +313,6 @@ "Web, desktop and mobile clients currently logged in to your account." : "Veftól, tölvur og símar sem núna eru skráð inn á aðganginn þinn.", "Device" : "Tæki", "Last activity" : "Síðasta virkni", - "Passcodes that give an app or device permissions to access your account." : "Aðgangskóði sem gefur forriti eða tæki heimild til að nota notandaaðganginn þinn.", "Name" : "Heiti", "App name" : "Heiti forrits", "Create new app password" : "Búa til nýtt lykilorð forrits", @@ -302,10 +321,10 @@ "Username" : "Notandanafn", "Done" : "Lokið", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Þróað af {communityopen}Nextcloud samfélaginu{linkclose}, {githubopen}grunnkóðinn{linkclose} er gefinn út með {licenseopen}AGPL{linkclose} notkunarleyfinu.", - "Follow us on Google Plus!" : "Fylgstu með okkur á Google Plus!", + "Follow us on Google+!" : "Fylgstu með okkur á Google+!", "Like our facebook page!" : "Líkaðu við Facebook-síðuna okkar!", - "Subscribe to our twitter channel!" : "Gerstu áskrifandi að twitter-rásinni okkar!", - "Subscribe to our news feed!" : "Gerstu áskrifandi að fréttastraumi okkar!", + "Follow us on Twitter!" : "Fylgstu með okkur á Twitter!", + "Check out our blog!" : "Kíktu á bloggið okkar!", "Subscribe to our newsletter!" : "Gerstu áskrifandi að fréttabréfinu okkar!", "Settings" : "Stillingar", "Show storage location" : "Birta staðsetningu gagnageymslu", @@ -345,12 +364,19 @@ "Uninstalling ...." : "Tek út uppsetningu ....", "Error while uninstalling app" : "Villa við að fjarlægja forrit", "Uninstall" : "Henda út", + "This is used for sending out notifications." : "Þetta er notað til að senda út tilkynningar.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-eininguna 'fileinfo' vantar. Við mælum eindregið með notkun þessarar einingar til að fá bestu útkomu við greiningu á MIME-skráagerðum.", "Uninstall app" : "Henda út forriti", "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>" : "Hæ þú,<br><br>bara að láta þig vita að þú átt núna s aðgang.<br><br>Notandanafnið þitt: <strong>%s</strong><br>Tengstu honum: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "Til hamingju!", "Hey there,\n\njust letting you know that you now have a %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", + "Your website" : "Vefsvæðið þitt", + "Your Twitter handle" : "Twitter notandanafnið þitt", + "Passcodes that give an app or device permissions to access your account." : "Aðgangskóði sem gefur forriti eða tæki heimild til að nota notandaaðganginn þinn.", + "Follow us on Google Plus!" : "Fylgstu með okkur á Google Plus!", + "Subscribe to our twitter channel!" : "Gerstu áskrifandi að twitter-rásinni okkar!", + "Subscribe to our news feed!" : "Gerstu áskrifandi að fréttastraumi okkar!", "Show last log in" : "Birta síðustu innskráningu" },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" }
\ No newline at end of file diff --git a/settings/l10n/it.js b/settings/l10n/it.js index 69dd0117710..051761aa137 100644 --- a/settings/l10n/it.js +++ b/settings/l10n/it.js @@ -1,6 +1,15 @@ OC.L10N.register( "settings", { + "{actor} changed your password" : "{actor} ha cambiato la tua password", + "You changed your password" : "Hai cambiato la tua password", + "Your password was reset by an administrator" : "La tua password è stata reimpostata da un amministratore", + "{actor} changed your email address" : "{actor} ha cambiato il tuo indirizzo email", + "You changed your email address" : "Hai cambiato il tuo indirizzo email", + "Your email address was changed by an administrator" : "Il tuo indirizzo email è stato cambiato da un amministratore", + "Your apps" : "Le tue applicazioni", + "Enabled apps" : "Applicazioni abilitate", + "Disabled apps" : "Applicazioni disabilitate", "Wrong password" : "Password errata", "Saved" : "Salvato", "No user supplied" : "Non è stato fornito alcun utente", @@ -16,8 +25,8 @@ OC.L10N.register( "Group already exists." : "Il gruppo esiste già.", "Unable to add group." : "Impossibile aggiungere il gruppo.", "Unable to delete group." : "Impossibile eliminare il gruppo.", + "Invalid SMTP password." : "Password SMTP non valida.", "Well done, %s!" : "Ben fatto, %s!", - "Mail could not be sent. Check your mail server log" : "Il messaggio non può essere inviato controlla il log del tuo server di posta", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Si è verificato un problema durante l'invio dell'email. Controlla le tue impostazioni. (Errore: %s)", "You need to set your user email before being able to send test emails." : "Devi impostare l'indirizzo del tuo utente prima di poter provare l'invio delle email.", "Invalid request" : "Richiesta non valida", @@ -35,6 +44,8 @@ OC.L10N.register( "Invalid user" : "Utente non valido", "Unable to change mail address" : "Impossibile cambiare l'indirizzo di posta", "Email saved" : "Email salvata", + "Your password on %s was changed." : "La tua password su %s è stata modificata.", + "Password changed for %s" : "Password modificata per %s", "Set your password" : "Imposta la tua password", "Go to %s" : "Vai a %s", "Install Client" : "Installa client", @@ -150,7 +161,6 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "Email server" : "Server di posta", "Open documentation" : "Apri la documentazione", - "This is used for sending out notifications." : "Viene utilizzato per inviare le notifiche.", "Send mode" : "Modalità di invio", "Encryption" : "Cifratura", "From address" : "Indirizzo mittente", @@ -280,9 +290,7 @@ OC.L10N.register( "Address" : "Indirizzo", "Your postal address" : "Il tuo indirizzo postale", "Website" : "Sito web", - "Your website" : "Il tuo sito web", "Twitter" : "Twitter", - "Your Twitter handle" : "Il tuo nome utente su Twitter", "You are member of the following groups:" : "Sei membro dei seguenti gruppi:", "Password" : "Password", "Current password" : "Password attuale", @@ -299,7 +307,6 @@ OC.L10N.register( "Web, desktop and mobile clients currently logged in to your account." : "Client web, desktop e mobile attualmente connessi al tuo account.", "Device" : "Dispositivo", "Last activity" : "Ultima attività", - "Passcodes that give an app or device permissions to access your account." : "Codici di accesso per fornire alle applicazioni o ai dispositivi il permesso di accedere al tuo account.", "Name" : "Nome", "App name" : "Nome applicazione", "Create new app password" : "Crea nuova password di applicazione", @@ -308,10 +315,7 @@ OC.L10N.register( "Username" : "Nome utente", "Done" : "Completato", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Sviluppato dalla {communityopen}comunità di Nextcloud{linkclose}, il {githubopen}codice sorgente{linkclose} è rilasciato nei termini della licenza {licenseopen}AGPL{linkclose}.", - "Follow us on Google Plus!" : "Seguici su Google Plus!", "Like our facebook page!" : "Mi piace sulla nostra pagina di Facebook!", - "Subscribe to our twitter channel!" : "Iscriviti al nostro canale twitter!", - "Subscribe to our news feed!" : "Iscriviti alla nostra fonte di notizie!", "Subscribe to our newsletter!" : "Iscriviti alla nostra newsletter!", "Settings" : "Impostazioni", "Show storage location" : "Mostra posizione di archiviazione", @@ -349,12 +353,19 @@ OC.L10N.register( "Uninstalling ...." : "Disinstallazione...", "Error while uninstalling app" : "Errore durante la disinstallazione dell'applicazione", "Uninstall" : "Disinstalla", + "This is used for sending out notifications." : "Viene utilizzato per inviare le notifiche.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Il modulo PHP 'fileinfo' non è presente. Consigliamo vivamente di abilitare questo modulo per ottenere risultati migliori con il rilevamento dei tipi MIME.", "Uninstall app" : "Disinstalla applicazione", "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>" : "Ciao,<br><br>volevamo informarti che ora hai un account %s.<br><br>Il tuo nome utente: <strong>%s</strong><br>Accedi: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "Saluti!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Ciao,\n\nvolevamo 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", + "Your website" : "Il tuo sito web", + "Your Twitter handle" : "Il tuo nome utente su Twitter", + "Passcodes that give an app or device permissions to access your account." : "Codici di accesso per fornire alle applicazioni o ai dispositivi il permesso di accedere al tuo account.", + "Follow us on Google Plus!" : "Seguici su Google Plus!", + "Subscribe to our twitter channel!" : "Iscriviti al nostro canale twitter!", + "Subscribe to our news feed!" : "Iscriviti alla nostra fonte di notizie!", "Show last log in" : "Mostra ultimo accesso" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/it.json b/settings/l10n/it.json index 8569bede181..69535c308c4 100644 --- a/settings/l10n/it.json +++ b/settings/l10n/it.json @@ -1,4 +1,13 @@ { "translations": { + "{actor} changed your password" : "{actor} ha cambiato la tua password", + "You changed your password" : "Hai cambiato la tua password", + "Your password was reset by an administrator" : "La tua password è stata reimpostata da un amministratore", + "{actor} changed your email address" : "{actor} ha cambiato il tuo indirizzo email", + "You changed your email address" : "Hai cambiato il tuo indirizzo email", + "Your email address was changed by an administrator" : "Il tuo indirizzo email è stato cambiato da un amministratore", + "Your apps" : "Le tue applicazioni", + "Enabled apps" : "Applicazioni abilitate", + "Disabled apps" : "Applicazioni disabilitate", "Wrong password" : "Password errata", "Saved" : "Salvato", "No user supplied" : "Non è stato fornito alcun utente", @@ -14,8 +23,8 @@ "Group already exists." : "Il gruppo esiste già.", "Unable to add group." : "Impossibile aggiungere il gruppo.", "Unable to delete group." : "Impossibile eliminare il gruppo.", + "Invalid SMTP password." : "Password SMTP non valida.", "Well done, %s!" : "Ben fatto, %s!", - "Mail could not be sent. Check your mail server log" : "Il messaggio non può essere inviato controlla il log del tuo server di posta", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Si è verificato un problema durante l'invio dell'email. Controlla le tue impostazioni. (Errore: %s)", "You need to set your user email before being able to send test emails." : "Devi impostare l'indirizzo del tuo utente prima di poter provare l'invio delle email.", "Invalid request" : "Richiesta non valida", @@ -33,6 +42,8 @@ "Invalid user" : "Utente non valido", "Unable to change mail address" : "Impossibile cambiare l'indirizzo di posta", "Email saved" : "Email salvata", + "Your password on %s was changed." : "La tua password su %s è stata modificata.", + "Password changed for %s" : "Password modificata per %s", "Set your password" : "Imposta la tua password", "Go to %s" : "Vai a %s", "Install Client" : "Installa client", @@ -148,7 +159,6 @@ "STARTTLS" : "STARTTLS", "Email server" : "Server di posta", "Open documentation" : "Apri la documentazione", - "This is used for sending out notifications." : "Viene utilizzato per inviare le notifiche.", "Send mode" : "Modalità di invio", "Encryption" : "Cifratura", "From address" : "Indirizzo mittente", @@ -278,9 +288,7 @@ "Address" : "Indirizzo", "Your postal address" : "Il tuo indirizzo postale", "Website" : "Sito web", - "Your website" : "Il tuo sito web", "Twitter" : "Twitter", - "Your Twitter handle" : "Il tuo nome utente su Twitter", "You are member of the following groups:" : "Sei membro dei seguenti gruppi:", "Password" : "Password", "Current password" : "Password attuale", @@ -297,7 +305,6 @@ "Web, desktop and mobile clients currently logged in to your account." : "Client web, desktop e mobile attualmente connessi al tuo account.", "Device" : "Dispositivo", "Last activity" : "Ultima attività", - "Passcodes that give an app or device permissions to access your account." : "Codici di accesso per fornire alle applicazioni o ai dispositivi il permesso di accedere al tuo account.", "Name" : "Nome", "App name" : "Nome applicazione", "Create new app password" : "Crea nuova password di applicazione", @@ -306,10 +313,7 @@ "Username" : "Nome utente", "Done" : "Completato", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Sviluppato dalla {communityopen}comunità di Nextcloud{linkclose}, il {githubopen}codice sorgente{linkclose} è rilasciato nei termini della licenza {licenseopen}AGPL{linkclose}.", - "Follow us on Google Plus!" : "Seguici su Google Plus!", "Like our facebook page!" : "Mi piace sulla nostra pagina di Facebook!", - "Subscribe to our twitter channel!" : "Iscriviti al nostro canale twitter!", - "Subscribe to our news feed!" : "Iscriviti alla nostra fonte di notizie!", "Subscribe to our newsletter!" : "Iscriviti alla nostra newsletter!", "Settings" : "Impostazioni", "Show storage location" : "Mostra posizione di archiviazione", @@ -347,12 +351,19 @@ "Uninstalling ...." : "Disinstallazione...", "Error while uninstalling app" : "Errore durante la disinstallazione dell'applicazione", "Uninstall" : "Disinstalla", + "This is used for sending out notifications." : "Viene utilizzato per inviare le notifiche.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Il modulo PHP 'fileinfo' non è presente. Consigliamo vivamente di abilitare questo modulo per ottenere risultati migliori con il rilevamento dei tipi MIME.", "Uninstall app" : "Disinstalla applicazione", "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>" : "Ciao,<br><br>volevamo informarti che ora hai un account %s.<br><br>Il tuo nome utente: <strong>%s</strong><br>Accedi: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "Saluti!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Ciao,\n\nvolevamo 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", + "Your website" : "Il tuo sito web", + "Your Twitter handle" : "Il tuo nome utente su Twitter", + "Passcodes that give an app or device permissions to access your account." : "Codici di accesso per fornire alle applicazioni o ai dispositivi il permesso di accedere al tuo account.", + "Follow us on Google Plus!" : "Seguici su Google Plus!", + "Subscribe to our twitter channel!" : "Iscriviti al nostro canale twitter!", + "Subscribe to our news feed!" : "Iscriviti alla nostra fonte di notizie!", "Show last log in" : "Mostra ultimo accesso" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/settings/l10n/ja.js b/settings/l10n/ja.js index 70c2a15e87c..600ca96b104 100644 --- a/settings/l10n/ja.js +++ b/settings/l10n/ja.js @@ -16,7 +16,6 @@ OC.L10N.register( "Group already exists." : "グループはすでに存在しています", "Unable to add group." : "グループを追加できません", "Unable to delete group." : "グループを削除できません", - "Mail could not be sent. Check your mail server log" : "メールが送信できませんでした。メールサーバーのログを確認してください", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "メールの送信中に問題が発生しました。設定を確認してください。 (Error: %s)", "You need to set your user email before being able to send test emails." : "ユーザーメールを設定して初めて、テストメールを送信することができるようになります。", "Invalid request" : "不正なリクエスト", @@ -145,7 +144,6 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "Email server" : "メールサーバー", "Open documentation" : "ドキュメントを開く", - "This is used for sending out notifications." : "通知を送信する際に使用します。", "Send mode" : "送信モード", "Encryption" : "暗号化", "From address" : "送信元アドレス", @@ -276,9 +274,7 @@ OC.L10N.register( "Address" : "住所", "Your postal address" : "あなたの住所", "Website" : "ウェブサイト", - "Your website" : "あなたの個人ウェブサイト", "Twitter" : "Twitter", - "Your Twitter handle" : "あなたのTwitterのID", "You are member of the following groups:" : "以下のグループのメンバーです:", "Password" : "パスワード", "Current password" : "現在のパスワード", @@ -295,7 +291,6 @@ OC.L10N.register( "Web, desktop and mobile clients currently logged in to your account." : "現在、Web、デスクトップ、モバイルアプリで ownCloud にログインしている端末一覧です。", "Device" : "デバイス", "Last activity" : "最後の活動", - "Passcodes that give an app or device permissions to access your account." : "パスコードで、アプリやデバイスにアカウントにアクセスするための権限を与えます。", "Name" : "名前", "App name" : "アプリ名", "Create new app password" : "新規アプリパスワードを作成", @@ -304,10 +299,7 @@ OC.L10N.register( "Username" : "ユーザーID", "Done" : "完了", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "{communityopen} Nextcloudコミュニティ{linkclose}によって開発された{githubopen}ソースコード{linkclose}は、{licenseopen} AGPL {linkclose}でライセンスされています。", - "Follow us on Google Plus!" : "Google Plusでフォロー!", "Like our facebook page!" : "私たちのFacebookのページをイイネ!", - "Subscribe to our twitter channel!" : "twitterチャンネルを購読する!", - "Subscribe to our news feed!" : "私たちのニュースフィードを購読!", "Subscribe to our newsletter!" : "ニュースレターを購読する!", "Settings" : "設定", "Show storage location" : "データの保存場所を表示", @@ -345,12 +337,19 @@ OC.L10N.register( "Uninstalling ...." : "アンインストール中 ....", "Error while uninstalling app" : "アプリをアンインストール中にエラーが発生", "Uninstall" : "アンインストール", + "This is used for sending out notifications." : "通知を送信する際に使用します。", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP のモジュール 'fileinfo' が見つかりません。mimeタイプの検出を精度良く行うために、このモジュールを有効にすることを強くお勧めします。", "Uninstall app" : "アプリをアンインストール", "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "こんにちは、<br><br>あなたのアカウント %s が利用できるようになりました。<br><br>ユーザー名: %s<br>接続URL: <a href=\"%s\">%s</a><br><br>", "Cheers!" : "それでは!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "こんにちは、\n\nあなたのアカウント %s が利用できるようになりました。\n\nユーザー名: %s\n接続URL: %s\n\n", "For password recovery and notifications" : "パスワード回復と通知用", + "Your website" : "あなたの個人ウェブサイト", + "Your Twitter handle" : "あなたのTwitterのID", + "Passcodes that give an app or device permissions to access your account." : "パスコードで、アプリやデバイスにアカウントにアクセスするための権限を与えます。", + "Follow us on Google Plus!" : "Google Plusでフォロー!", + "Subscribe to our twitter channel!" : "twitterチャンネルを購読する!", + "Subscribe to our news feed!" : "私たちのニュースフィードを購読!", "Show last log in" : "最終ログインを表示" }, "nplurals=1; plural=0;"); diff --git a/settings/l10n/ja.json b/settings/l10n/ja.json index 0cb057c8f40..d5665b07278 100644 --- a/settings/l10n/ja.json +++ b/settings/l10n/ja.json @@ -14,7 +14,6 @@ "Group already exists." : "グループはすでに存在しています", "Unable to add group." : "グループを追加できません", "Unable to delete group." : "グループを削除できません", - "Mail could not be sent. Check your mail server log" : "メールが送信できませんでした。メールサーバーのログを確認してください", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "メールの送信中に問題が発生しました。設定を確認してください。 (Error: %s)", "You need to set your user email before being able to send test emails." : "ユーザーメールを設定して初めて、テストメールを送信することができるようになります。", "Invalid request" : "不正なリクエスト", @@ -143,7 +142,6 @@ "STARTTLS" : "STARTTLS", "Email server" : "メールサーバー", "Open documentation" : "ドキュメントを開く", - "This is used for sending out notifications." : "通知を送信する際に使用します。", "Send mode" : "送信モード", "Encryption" : "暗号化", "From address" : "送信元アドレス", @@ -274,9 +272,7 @@ "Address" : "住所", "Your postal address" : "あなたの住所", "Website" : "ウェブサイト", - "Your website" : "あなたの個人ウェブサイト", "Twitter" : "Twitter", - "Your Twitter handle" : "あなたのTwitterのID", "You are member of the following groups:" : "以下のグループのメンバーです:", "Password" : "パスワード", "Current password" : "現在のパスワード", @@ -293,7 +289,6 @@ "Web, desktop and mobile clients currently logged in to your account." : "現在、Web、デスクトップ、モバイルアプリで ownCloud にログインしている端末一覧です。", "Device" : "デバイス", "Last activity" : "最後の活動", - "Passcodes that give an app or device permissions to access your account." : "パスコードで、アプリやデバイスにアカウントにアクセスするための権限を与えます。", "Name" : "名前", "App name" : "アプリ名", "Create new app password" : "新規アプリパスワードを作成", @@ -302,10 +297,7 @@ "Username" : "ユーザーID", "Done" : "完了", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "{communityopen} Nextcloudコミュニティ{linkclose}によって開発された{githubopen}ソースコード{linkclose}は、{licenseopen} AGPL {linkclose}でライセンスされています。", - "Follow us on Google Plus!" : "Google Plusでフォロー!", "Like our facebook page!" : "私たちのFacebookのページをイイネ!", - "Subscribe to our twitter channel!" : "twitterチャンネルを購読する!", - "Subscribe to our news feed!" : "私たちのニュースフィードを購読!", "Subscribe to our newsletter!" : "ニュースレターを購読する!", "Settings" : "設定", "Show storage location" : "データの保存場所を表示", @@ -343,12 +335,19 @@ "Uninstalling ...." : "アンインストール中 ....", "Error while uninstalling app" : "アプリをアンインストール中にエラーが発生", "Uninstall" : "アンインストール", + "This is used for sending out notifications." : "通知を送信する際に使用します。", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP のモジュール 'fileinfo' が見つかりません。mimeタイプの検出を精度良く行うために、このモジュールを有効にすることを強くお勧めします。", "Uninstall app" : "アプリをアンインストール", "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "こんにちは、<br><br>あなたのアカウント %s が利用できるようになりました。<br><br>ユーザー名: %s<br>接続URL: <a href=\"%s\">%s</a><br><br>", "Cheers!" : "それでは!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "こんにちは、\n\nあなたのアカウント %s が利用できるようになりました。\n\nユーザー名: %s\n接続URL: %s\n\n", "For password recovery and notifications" : "パスワード回復と通知用", + "Your website" : "あなたの個人ウェブサイト", + "Your Twitter handle" : "あなたのTwitterのID", + "Passcodes that give an app or device permissions to access your account." : "パスコードで、アプリやデバイスにアカウントにアクセスするための権限を与えます。", + "Follow us on Google Plus!" : "Google Plusでフォロー!", + "Subscribe to our twitter channel!" : "twitterチャンネルを購読する!", + "Subscribe to our news feed!" : "私たちのニュースフィードを購読!", "Show last log in" : "最終ログインを表示" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/settings/l10n/ko.js b/settings/l10n/ko.js index 26c83f7782c..c4d6c6ba727 100644 --- a/settings/l10n/ko.js +++ b/settings/l10n/ko.js @@ -135,7 +135,6 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "Email server" : "이메일 서버", "Open documentation" : "문서 열기", - "This is used for sending out notifications." : "알림을 보낼 때 사용됩니다.", "Send mode" : "보내기 모드", "Encryption" : "암호화", "From address" : "보낸 사람 주소", @@ -261,9 +260,7 @@ OC.L10N.register( "Address" : "주소", "Your postal address" : "내 우편 번호", "Website" : "웹 사이트", - "Your website" : "내 웹 사이트", "Twitter" : "트위터", - "Your Twitter handle" : "내 트위터", "You are member of the following groups:" : "다음 그룹의 구성원입니다:", "Password" : "암호", "Current password" : "현재 암호", @@ -280,7 +277,6 @@ OC.L10N.register( "Web, desktop and mobile clients currently logged in to your account." : "사용자 계정으로 로그인된 웹, 데스크톱, 모바일 클라이언트 목록입니다.", "Device" : "장치", "Last activity" : "최근 활동", - "Passcodes that give an app or device permissions to access your account." : "앱 암호는 앱이나 장치가 사용자 계정에 접근할 수 있도록 해줍니다.", "Name" : "이름", "App name" : "앱 이름", "Create new app password" : "새로운 앱 암호 만들기", @@ -289,10 +285,7 @@ OC.L10N.register( "Username" : "사용자 이름", "Done" : "완료", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "{communityopen}Nextcloud 커뮤니티{linkclose}에서 개발, {githubopen}소스 코드{linkclose}는 {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} 라이선스를 따릅니다.", - "Follow us on Google Plus!" : "Google Plus를 팔로우하세요!", "Like our facebook page!" : "Facebook 페이지에서 좋아요를 눌러주세요!", - "Subscribe to our twitter channel!" : "Twitter 채널을 구독하세요!", - "Subscribe to our news feed!" : "뉴스 피드를 구독하세요!", "Subscribe to our newsletter!" : "뉴스 레터를 구독하세요!", "Show storage location" : "저장소 위치 보이기", "Show user backend" : "사용자 백엔드 보이기", @@ -329,11 +322,18 @@ OC.L10N.register( "Uninstalling ...." : "제거 하는 중 ....", "Error while uninstalling app" : "앱을 제거하는 중 오류 발생", "Uninstall" : "제거", + "This is used for sending out notifications." : "알림을 보낼 때 사용됩니다.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP 모듈 'fileinfo'가 존재하지 않습니다. MIME 형식 감지 결과를 향상시키기 위하여 이 모듈을 활성화하는 것을 추천합니다.", "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "안녕하세요.<br><br>%s 계정을 사용할 수 있음을 알려 드립니다.<br><br>사용자 이름: <strong>%s</strong><br>접근 링크: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "감사합니다!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "안녕하세요.\n\n%s 계정을 사용할 수 있음을 알려 드립니다.\n\n사용자 이름: %s\n접근 링크: %s\n\n", "For password recovery and notifications" : "암호 복구와 알림에 사용", + "Your website" : "내 웹 사이트", + "Your Twitter handle" : "내 트위터", + "Passcodes that give an app or device permissions to access your account." : "앱 암호는 앱이나 장치가 사용자 계정에 접근할 수 있도록 해줍니다.", + "Follow us on Google Plus!" : "Google Plus를 팔로우하세요!", + "Subscribe to our twitter channel!" : "Twitter 채널을 구독하세요!", + "Subscribe to our news feed!" : "뉴스 피드를 구독하세요!", "Show last log in" : "마지막 로그인 시간 보이기" }, "nplurals=1; plural=0;"); diff --git a/settings/l10n/ko.json b/settings/l10n/ko.json index d1d7e640c70..1f3c39c8c50 100644 --- a/settings/l10n/ko.json +++ b/settings/l10n/ko.json @@ -133,7 +133,6 @@ "STARTTLS" : "STARTTLS", "Email server" : "이메일 서버", "Open documentation" : "문서 열기", - "This is used for sending out notifications." : "알림을 보낼 때 사용됩니다.", "Send mode" : "보내기 모드", "Encryption" : "암호화", "From address" : "보낸 사람 주소", @@ -259,9 +258,7 @@ "Address" : "주소", "Your postal address" : "내 우편 번호", "Website" : "웹 사이트", - "Your website" : "내 웹 사이트", "Twitter" : "트위터", - "Your Twitter handle" : "내 트위터", "You are member of the following groups:" : "다음 그룹의 구성원입니다:", "Password" : "암호", "Current password" : "현재 암호", @@ -278,7 +275,6 @@ "Web, desktop and mobile clients currently logged in to your account." : "사용자 계정으로 로그인된 웹, 데스크톱, 모바일 클라이언트 목록입니다.", "Device" : "장치", "Last activity" : "최근 활동", - "Passcodes that give an app or device permissions to access your account." : "앱 암호는 앱이나 장치가 사용자 계정에 접근할 수 있도록 해줍니다.", "Name" : "이름", "App name" : "앱 이름", "Create new app password" : "새로운 앱 암호 만들기", @@ -287,10 +283,7 @@ "Username" : "사용자 이름", "Done" : "완료", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "{communityopen}Nextcloud 커뮤니티{linkclose}에서 개발, {githubopen}소스 코드{linkclose}는 {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} 라이선스를 따릅니다.", - "Follow us on Google Plus!" : "Google Plus를 팔로우하세요!", "Like our facebook page!" : "Facebook 페이지에서 좋아요를 눌러주세요!", - "Subscribe to our twitter channel!" : "Twitter 채널을 구독하세요!", - "Subscribe to our news feed!" : "뉴스 피드를 구독하세요!", "Subscribe to our newsletter!" : "뉴스 레터를 구독하세요!", "Show storage location" : "저장소 위치 보이기", "Show user backend" : "사용자 백엔드 보이기", @@ -327,11 +320,18 @@ "Uninstalling ...." : "제거 하는 중 ....", "Error while uninstalling app" : "앱을 제거하는 중 오류 발생", "Uninstall" : "제거", + "This is used for sending out notifications." : "알림을 보낼 때 사용됩니다.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP 모듈 'fileinfo'가 존재하지 않습니다. MIME 형식 감지 결과를 향상시키기 위하여 이 모듈을 활성화하는 것을 추천합니다.", "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "안녕하세요.<br><br>%s 계정을 사용할 수 있음을 알려 드립니다.<br><br>사용자 이름: <strong>%s</strong><br>접근 링크: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "감사합니다!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "안녕하세요.\n\n%s 계정을 사용할 수 있음을 알려 드립니다.\n\n사용자 이름: %s\n접근 링크: %s\n\n", "For password recovery and notifications" : "암호 복구와 알림에 사용", + "Your website" : "내 웹 사이트", + "Your Twitter handle" : "내 트위터", + "Passcodes that give an app or device permissions to access your account." : "앱 암호는 앱이나 장치가 사용자 계정에 접근할 수 있도록 해줍니다.", + "Follow us on Google Plus!" : "Google Plus를 팔로우하세요!", + "Subscribe to our twitter channel!" : "Twitter 채널을 구독하세요!", + "Subscribe to our news feed!" : "뉴스 피드를 구독하세요!", "Show last log in" : "마지막 로그인 시간 보이기" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/settings/l10n/lt_LT.js b/settings/l10n/lt_LT.js index 09f555f4080..156a21ecbb3 100644 --- a/settings/l10n/lt_LT.js +++ b/settings/l10n/lt_LT.js @@ -133,7 +133,6 @@ OC.L10N.register( "Your phone number" : "Jūsų telefono numeris", "Address" : "Adresas", "Website" : "Svetainė", - "Your website" : "Jūsų svetainė", "Twitter" : "Twitter", "You are member of the following groups:" : "Jūs esate šių grupių narys:", "Password" : "Slaptažodis", @@ -177,6 +176,7 @@ OC.L10N.register( "Uninstall" : "Šalinti", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Trūksta PHP modulio „fileinfo“. Labai rekomenduojame įjungti šį modulį, kad gauti geriausius rezultatus nustatant mime-tipą.", "Cheers!" : "Sveikinimai!", - "For password recovery and notifications" : "Skirtas slaptažodžio atkūrimui ir pranešimams" + "For password recovery and notifications" : "Skirtas slaptažodžio atkūrimui ir pranešimams", + "Your website" : "Jūsų svetainė" }, "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/lt_LT.json b/settings/l10n/lt_LT.json index 0b990104e4a..a86c37ba8ad 100644 --- a/settings/l10n/lt_LT.json +++ b/settings/l10n/lt_LT.json @@ -131,7 +131,6 @@ "Your phone number" : "Jūsų telefono numeris", "Address" : "Adresas", "Website" : "Svetainė", - "Your website" : "Jūsų svetainė", "Twitter" : "Twitter", "You are member of the following groups:" : "Jūs esate šių grupių narys:", "Password" : "Slaptažodis", @@ -175,6 +174,7 @@ "Uninstall" : "Šalinti", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Trūksta PHP modulio „fileinfo“. Labai rekomenduojame įjungti šį modulį, kad gauti geriausius rezultatus nustatant mime-tipą.", "Cheers!" : "Sveikinimai!", - "For password recovery and notifications" : "Skirtas slaptažodžio atkūrimui ir pranešimams" + "For password recovery and notifications" : "Skirtas slaptažodžio atkūrimui ir pranešimams", + "Your website" : "Jūsų svetainė" },"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/settings/l10n/lv.js b/settings/l10n/lv.js index 525ab632d76..0cf7ed8cb07 100644 --- a/settings/l10n/lv.js +++ b/settings/l10n/lv.js @@ -124,7 +124,6 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "Email server" : "E-pasta serveris", "Open documentation" : "Atvērt dokumentāciju", - "This is used for sending out notifications." : "Tas tiek izmantots, izsūtot paziņojumus.", "Send mode" : "Sūtīšanas metode", "Encryption" : "Šifrēšana", "From address" : "No adreses", @@ -215,7 +214,6 @@ OC.L10N.register( "Address" : "Adrese", "Your postal address" : "Jūsu pasta adrese", "Website" : "Mājaslapa", - "Your website" : "Jūsu mājaslapa", "Twitter" : "Twitter", "You are member of the following groups:" : "Jūs esat šādu grupu biedrs:", "Password" : "Parole", @@ -239,7 +237,6 @@ OC.L10N.register( "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", "Show email address" : "Rādīt e-pasta adreses", @@ -274,11 +271,14 @@ OC.L10N.register( "Uninstalling ...." : "Atinstalē ....", "Error while uninstalling app" : "Kļūda, atinstalējot programmu", "Uninstall" : "Atinstalēt", + "This is used for sending out notifications." : "Tas tiek izmantots, izsūtot paziņojumus.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Trūkst PHP modulis “fileinfo”. Mēs iesakām to aktivēt, lai pēc iespējas labāk noteiktu mime tipus.", "Uninstall app" : "Atinstalēt programmu", "Cheers!" : "Priekā!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hei,\n\nvienkārši Jūsu zināšanai, ka Jums tagad ir %s konts.\n\nJūsu lietotājvārds: %s\nPiekļuve: %s\n\n", "For password recovery and notifications" : "Paroles atjaunošanai un paziņojumiem", + "Your website" : "Jūsu mājaslapa", + "Follow us on Google Plus!" : "Seko mums Google Plus!", "Show last log in" : "Rādīt pēdējo autorizāciju" }, "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"); diff --git a/settings/l10n/lv.json b/settings/l10n/lv.json index 7245aa6ec31..2178cc86829 100644 --- a/settings/l10n/lv.json +++ b/settings/l10n/lv.json @@ -122,7 +122,6 @@ "STARTTLS" : "STARTTLS", "Email server" : "E-pasta serveris", "Open documentation" : "Atvērt dokumentāciju", - "This is used for sending out notifications." : "Tas tiek izmantots, izsūtot paziņojumus.", "Send mode" : "Sūtīšanas metode", "Encryption" : "Šifrēšana", "From address" : "No adreses", @@ -213,7 +212,6 @@ "Address" : "Adrese", "Your postal address" : "Jūsu pasta adrese", "Website" : "Mājaslapa", - "Your website" : "Jūsu mājaslapa", "Twitter" : "Twitter", "You are member of the following groups:" : "Jūs esat šādu grupu biedrs:", "Password" : "Parole", @@ -237,7 +235,6 @@ "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", "Show email address" : "Rādīt e-pasta adreses", @@ -272,11 +269,14 @@ "Uninstalling ...." : "Atinstalē ....", "Error while uninstalling app" : "Kļūda, atinstalējot programmu", "Uninstall" : "Atinstalēt", + "This is used for sending out notifications." : "Tas tiek izmantots, izsūtot paziņojumus.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Trūkst PHP modulis “fileinfo”. Mēs iesakām to aktivēt, lai pēc iespējas labāk noteiktu mime tipus.", "Uninstall app" : "Atinstalēt programmu", "Cheers!" : "Priekā!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hei,\n\nvienkārši Jūsu zināšanai, ka Jums tagad ir %s konts.\n\nJūsu lietotājvārds: %s\nPiekļuve: %s\n\n", "For password recovery and notifications" : "Paroles atjaunošanai un paziņojumiem", + "Your website" : "Jūsu mājaslapa", + "Follow us on Google Plus!" : "Seko mums Google Plus!", "Show last log in" : "Rādīt pēdējo autorizāciju" },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);" }
\ No newline at end of file diff --git a/settings/l10n/mk.js b/settings/l10n/mk.js index 9c1b309e5d5..a037e51f5c9 100644 --- a/settings/l10n/mk.js +++ b/settings/l10n/mk.js @@ -75,7 +75,6 @@ OC.L10N.register( "NT LAN Manager" : "NT LAN Менаџер", "Email server" : "Сервер за е-пошта", "Open documentation" : "Отвори ја документацијата", - "This is used for sending out notifications." : "Ова се користи за испраќање на известувања.", "Send mode" : "Мод на испраќање", "Encryption" : "Енкрипција", "From address" : "Од адреса", @@ -160,6 +159,7 @@ OC.L10N.register( "Uninstalling ...." : "Деинсталирам ...", "Error while uninstalling app" : "Грешка при деинсталација на апликацијата", "Uninstall" : "Деинсталирај", + "This is used for sending out notifications." : "Ова се користи за испраќање на известувања.", "Cheers!" : "Поздрав!" }, "nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"); diff --git a/settings/l10n/mk.json b/settings/l10n/mk.json index d0cf772d1d2..90290797230 100644 --- a/settings/l10n/mk.json +++ b/settings/l10n/mk.json @@ -73,7 +73,6 @@ "NT LAN Manager" : "NT LAN Менаџер", "Email server" : "Сервер за е-пошта", "Open documentation" : "Отвори ја документацијата", - "This is used for sending out notifications." : "Ова се користи за испраќање на известувања.", "Send mode" : "Мод на испраќање", "Encryption" : "Енкрипција", "From address" : "Од адреса", @@ -158,6 +157,7 @@ "Uninstalling ...." : "Деинсталирам ...", "Error while uninstalling app" : "Грешка при деинсталација на апликацијата", "Uninstall" : "Деинсталирај", + "This is used for sending out notifications." : "Ова се користи за испраќање на известувања.", "Cheers!" : "Поздрав!" },"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;" }
\ No newline at end of file diff --git a/settings/l10n/nb.js b/settings/l10n/nb.js index 0516640f77d..9952f42b043 100644 --- a/settings/l10n/nb.js +++ b/settings/l10n/nb.js @@ -8,6 +8,10 @@ OC.L10N.register( "You changed your email address" : "Du endret din e-postadresse", "Your email address was changed by an administrator" : "Din e-postadresse ble endret av en administrator", "Your <strong>password</strong> or <strong>email</strong> was modified" : "Ditt <strong>passord</strong> eller din <strong>e-postadresse</strong> ble endret", + "Your apps" : "Dine programmer", + "Enabled apps" : "Påskrudde programmer", + "Disabled apps" : "Avskrudde programmer", + "App bundles" : "Programpakker", "Wrong password" : "Feil passord", "Saved" : "Lagret", "No user supplied" : "Ingen bruker angitt", @@ -28,7 +32,7 @@ OC.L10N.register( "Well done, %s!" : "Bra gjort, %s!", "If you received this email, the email configuration seems to be correct." : "Hvis du mottar denne e-posten, er e-postoppsettet rett.", "Email setting test" : "E-postinnstillingstest", - "Mail could not be sent. Check your mail server log" : "E-post kunne ikke sendes. Sjekk tjenerloggen på din e-posttjener", + "Email could not be sent. Check your mail server log" : "E-post kunne ikke sendes. Sjekk tjenerloggen på din e-posttjener", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Et problem oppstod med sending av e-post. Sjekk innstillingene. (Feil: %s)", "You need to set your user email before being able to send test emails." : "Du må sette e-postadressen for brukeren din før du kan teste sending av e-post.", "Invalid request" : "Ugyldig forespørsel", @@ -97,11 +101,15 @@ OC.L10N.register( "Updating...." : "Oppdaterer…", "Error while updating app" : "Feil ved oppdatering av app", "Updated" : "Oppdatert", + "Removing …" : "Fjerner…", + "Error while removing app" : "Feil under fjerning av program", + "Remove" : "Fjern", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Programmet er aktivert men må oppdateres. Du vil bli omdirigert til oppdateringssiden om 5 sekunder.", "App update" : "Programoppdatering", "Approved" : "Godkjent", "Experimental" : "Eksperimentell", "No apps found for {query}" : "Ingen programmet funnet for \"{query}\"", + "Enable all" : "Skru på alle", "Allow filesystem access" : "Tillatt filsystem tilgang", "Disconnect" : "Koble fra", "Revoke" : "Avslå", @@ -177,7 +185,7 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "Email server" : "E-posttjener", "Open documentation" : "Åpne dokumentasjonen", - "This is used for sending out notifications." : "Dette brukes for utsending av varsler.", + "It is important to set up this server to be able to send emails, like for password reset and notifications." : "Det er viktig å sette opp denne tjeneren for å kunne sende e-poster, som tilbakestilling av e-poster og merknader.", "Send mode" : "Forsendelsesmåte", "Encryption" : "Kryptering", "From address" : "Fra adresse", @@ -193,6 +201,7 @@ OC.L10N.register( "Test email settings" : "Test innstillinger for e-post", "Send email" : "Send e-post", "Server-side encryption" : "Tjenerkryptering", + "Server-side encryption makes it possible to encrypt files which are uploaded to this server. This comes with limitations like a performance penalty, so enable this only if needed." : "Kryptering på tjenersiden gjør det mulig å kryptere files som er lastet opp til denne tjeneren. Dette har begrensninger som ytelsesforverring, så bare skru på dette hvis det trengs.", "Enable server-side encryption" : "Aktiver tjenerkryptering", "Please read carefully before activating server-side encryption: " : "Vennligst les dette nøye før du aktiverer tjenerkrykptering:", "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." : "Når kryptering er blitt aktivert, vil alle filer som lastes opp til tjeneren fra det tidspunktet av bli lagret kryptert på tjeneren. Det vil kun være mulig å deaktivere kryptering senere dersom den aktive krypteringsmodulen støtter det og alle forutsetninger (f.eks. å sette en gjenopprettingsnøkkel) er til stede.", @@ -207,6 +216,7 @@ OC.L10N.register( "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Du må migrere krypteringsnøklene din fra den gamle krypteringen (ownCloud <= 8.0) til den nye.", "Start migration" : "Start migrering", "Security & setup warnings" : "Advarsler om sikkerhet og oppsett", + "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the Tips & Ticks section and the documentation for more information." : "Det er viktig for sikkerheten og ytelsen på din installasjon at alt er satt opp rett. For å hjelpe deg er det satt i verk noen automatiske sjekker. Se \"Tips og triks\"-delen og i dokumentasjonen for mer informasjon", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP ser ikke ut til å være satt opp riktig for å lese systemets miljøvariabler. Testen med getenv(\"PATH\") returnerer bare et tomt svar.", "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Vennligst sjekk <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installasjonsdokumentasjonen ↗</a> etter php konfigurasjonsnotater og konfigurering av php på tjeneren din, særlig om du bruker php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Det skrivebeskyttede oppsettet er blitt aktivert. Dette forhindrer setting av visse oppsett via vev-grensesnittet. Videre må config-filen gjøres skrivbar manuelt for hver oppdatering.", @@ -227,6 +237,7 @@ OC.L10N.register( "Last cron job execution: %s." : "Siste kjøring av Cron-jobb: %s.", "Last cron job execution: %s. Something seems wrong." : "Siste kjøring av Cron-jobb: %s. Noe ser ut til å være galt.", "Cron was not executed yet!" : "Cron har ikke blitt kjørt enda!", + "For optimal performance it's important to configure background jobs correctly. For bigger instances 'Cron' is the recommended setting. Please see the documentation for more information." : "For optimal ytelse er det viktig å sette opp bakgrunnsjobber rett. For kjøring på større installasjoner er 'Cron' anbefalt innstilling. Se dokumentasjonen for mer informasjon.", "Execute one task with each page loaded" : "Utfør en oppgave med hver side som blir lastet", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php er registrert i en webcron-tjeneste for å kalle cron.php hvert 15. minutt over http.", "Use system's cron service to call the cron.php file every 15 minutes." : "Bruk systemets cron-tjeneste til å kalle cron.php hvert kvarter.", @@ -234,6 +245,7 @@ OC.L10N.register( "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "For å kjøre denne trenger du «PHP posix extension». Se {linkstart}PHP dokumentasjonen{linkend} for flere detaljer.", "Version" : "Versjon", "Sharing" : "Deling", + "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Som administrator kan du fininnstille delingsoppførselen. Se dokumentasjonen for mer informasjon.", "Allow apps to use the Share API" : "Tillat programmer å bruke API for deling", "Allow users to share via link" : "Tillat brukere å dele via lenke", "Allow public uploads" : "Tillat offentlig opplasting", @@ -252,6 +264,7 @@ OC.L10N.register( "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Vis ansvarsfraskrivelse på den offentlige opplastingssiden. (Vises kun nå fillisten er tom.)", "This text will be shown on the public link upload page when the file list is hidden." : "Denne teksten vises på den offentlig opplastingssiden når fillisten er tom.", "Tips & tricks" : "Tips og triks", + "There are a lot of features and config switches available to optimally customize and use this instance. Here are some pointers for more information." : "Det er mange funksjoner og oppsettsbrytere tilgjengelig for optimal tilpasning og bruk av denne installasjonen. Her har du noen punkter med ytterligere informasjon.", "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "SQLite er for øyeblikket brukt som database. For større installasjoner vil vi anbefale deg å benytte en annen databasetype.", "This is particularly recommended when using the desktop client for file synchronisation." : "Dette er spesielt anbefalt når skrivebordsklient brukes for filsynkronisering.", "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>." : "For å migrere til en annen database, bruk kommandolinjeverktøyet: 'occ db:convert-type', eller les i <a target=\"_blank\" href=\"%s\">dokumentasjonen ↗</a>.", @@ -263,6 +276,8 @@ OC.L10N.register( "Check the security of your Nextcloud over our security scan" : "Sjekk sikkerheten på din Nextcloud over vår sikkerhetsskanning", "Hardening and security guidance" : "Herding og sikkerhetsveiledning", "Developer documentation" : "Utviklerdokumentasjon", + "View in store" : "Vis i butikk", + "Limit to groups" : "Begrens til grupper", "This app has an update available." : "En oppdatering er tilgjengelig for denne appen.", "by %s" : "av %s", "%s-licensed" : "%s-lisensiert", @@ -309,9 +324,7 @@ OC.L10N.register( "Address" : "Adresse", "Your postal address" : "Din postadresse", "Website" : "Nettside", - "Your website" : "Din nettside", "Twitter" : "Twitter", - "Your Twitter handle" : "Din Twitter nøkkel", "You are member of the following groups:" : "Du er medlem av følgende grupper:", "Password" : "Passord", "Current password" : "Nåværende passord", @@ -328,7 +341,7 @@ OC.L10N.register( "Web, desktop and mobile clients currently logged in to your account." : "Følgende nett, skrivebord og mobile klienter er for øyeblikket logget på din konto.", "Device" : "Enhet", "Last activity" : "Seneste aktivitet", - "Passcodes that give an app or device permissions to access your account." : "Passordet som gi en app eller enhet tilgang til din konto.", + "Here you can generate individual passwords for apps so you don’t have to give out your password. You can revoke them individually too." : "Her kan du opprette egne passord for programmer slik at du ikke trenger å gi dem ditt passord. Du kan tilbakekalle dem individuelt også.", "Name" : "Navn", "App name" : "App navn", "Create new app password" : "Lag nytt app passord", @@ -337,10 +350,10 @@ OC.L10N.register( "Username" : "Brukernavn", "Done" : "Ferdig", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Utviklet av {communityopen}Nextcloud mijøet{linkclose}, {githubopen}kildekoden{linkclose} er lisensiert under {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", - "Follow us on Google Plus!" : "Følg oss på Google Plus!", + "Follow us on Google+!" : "Følg oss på Google+", "Like our facebook page!" : "Lik vår facebook side!", - "Subscribe to our twitter channel!" : "Abonner på vår twitter kanal!", - "Subscribe to our news feed!" : "Abonner på vår nyhetsstrøm!", + "Follow us on Twitter!" : "Følg oss på Twitter", + "Check out our blog!" : "Sjekk ut bloggen vår", "Subscribe to our newsletter!" : "Abonner på vårt nyhetsbrev!", "Settings" : "Innstillinger", "Show storage location" : "Vis lagringssted", @@ -380,12 +393,19 @@ OC.L10N.register( "Uninstalling ...." : "Avinstallerer…", "Error while uninstalling app" : "Feil ved avinstallering av app", "Uninstall" : "Avinstaller", + "This is used for sending out notifications." : "Dette brukes for utsending av varsler.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modulen 'fileinfo' mangler. Vi anbefaler at du aktiverer denne modulen for å kunne detektere MIME-typen korrekt.", "Uninstall app" : "Avinstaller app", "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>" : "Hei,<br><br>vil bare opplyse deg om at du har en %s konto.<br><br>Ditt brukernavn: <strong>%s</strong><br>Gå dit: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "Hadet!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hei,\n\nvil bare opplyse deg omat du har en %s konto.\n\nDitt brukernavn: %s\nGå dit: %s\n\n", "For password recovery and notifications" : "For passord-gjenoppretting og varsler", + "Your website" : "Din nettside", + "Your Twitter handle" : "Din Twitter nøkkel", + "Passcodes that give an app or device permissions to access your account." : "Passordet som gi en app eller enhet tilgang til din konto.", + "Follow us on Google Plus!" : "Følg oss på Google Plus!", + "Subscribe to our twitter channel!" : "Abonner på vår twitter kanal!", + "Subscribe to our news feed!" : "Abonner på vår nyhetsstrøm!", "Show last log in" : "Vis siste innlogging" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/nb.json b/settings/l10n/nb.json index 66c7a530de6..4e27eba8ff3 100644 --- a/settings/l10n/nb.json +++ b/settings/l10n/nb.json @@ -6,6 +6,10 @@ "You changed your email address" : "Du endret din e-postadresse", "Your email address was changed by an administrator" : "Din e-postadresse ble endret av en administrator", "Your <strong>password</strong> or <strong>email</strong> was modified" : "Ditt <strong>passord</strong> eller din <strong>e-postadresse</strong> ble endret", + "Your apps" : "Dine programmer", + "Enabled apps" : "Påskrudde programmer", + "Disabled apps" : "Avskrudde programmer", + "App bundles" : "Programpakker", "Wrong password" : "Feil passord", "Saved" : "Lagret", "No user supplied" : "Ingen bruker angitt", @@ -26,7 +30,7 @@ "Well done, %s!" : "Bra gjort, %s!", "If you received this email, the email configuration seems to be correct." : "Hvis du mottar denne e-posten, er e-postoppsettet rett.", "Email setting test" : "E-postinnstillingstest", - "Mail could not be sent. Check your mail server log" : "E-post kunne ikke sendes. Sjekk tjenerloggen på din e-posttjener", + "Email could not be sent. Check your mail server log" : "E-post kunne ikke sendes. Sjekk tjenerloggen på din e-posttjener", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Et problem oppstod med sending av e-post. Sjekk innstillingene. (Feil: %s)", "You need to set your user email before being able to send test emails." : "Du må sette e-postadressen for brukeren din før du kan teste sending av e-post.", "Invalid request" : "Ugyldig forespørsel", @@ -95,11 +99,15 @@ "Updating...." : "Oppdaterer…", "Error while updating app" : "Feil ved oppdatering av app", "Updated" : "Oppdatert", + "Removing …" : "Fjerner…", + "Error while removing app" : "Feil under fjerning av program", + "Remove" : "Fjern", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Programmet er aktivert men må oppdateres. Du vil bli omdirigert til oppdateringssiden om 5 sekunder.", "App update" : "Programoppdatering", "Approved" : "Godkjent", "Experimental" : "Eksperimentell", "No apps found for {query}" : "Ingen programmet funnet for \"{query}\"", + "Enable all" : "Skru på alle", "Allow filesystem access" : "Tillatt filsystem tilgang", "Disconnect" : "Koble fra", "Revoke" : "Avslå", @@ -175,7 +183,7 @@ "STARTTLS" : "STARTTLS", "Email server" : "E-posttjener", "Open documentation" : "Åpne dokumentasjonen", - "This is used for sending out notifications." : "Dette brukes for utsending av varsler.", + "It is important to set up this server to be able to send emails, like for password reset and notifications." : "Det er viktig å sette opp denne tjeneren for å kunne sende e-poster, som tilbakestilling av e-poster og merknader.", "Send mode" : "Forsendelsesmåte", "Encryption" : "Kryptering", "From address" : "Fra adresse", @@ -191,6 +199,7 @@ "Test email settings" : "Test innstillinger for e-post", "Send email" : "Send e-post", "Server-side encryption" : "Tjenerkryptering", + "Server-side encryption makes it possible to encrypt files which are uploaded to this server. This comes with limitations like a performance penalty, so enable this only if needed." : "Kryptering på tjenersiden gjør det mulig å kryptere files som er lastet opp til denne tjeneren. Dette har begrensninger som ytelsesforverring, så bare skru på dette hvis det trengs.", "Enable server-side encryption" : "Aktiver tjenerkryptering", "Please read carefully before activating server-side encryption: " : "Vennligst les dette nøye før du aktiverer tjenerkrykptering:", "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." : "Når kryptering er blitt aktivert, vil alle filer som lastes opp til tjeneren fra det tidspunktet av bli lagret kryptert på tjeneren. Det vil kun være mulig å deaktivere kryptering senere dersom den aktive krypteringsmodulen støtter det og alle forutsetninger (f.eks. å sette en gjenopprettingsnøkkel) er til stede.", @@ -205,6 +214,7 @@ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Du må migrere krypteringsnøklene din fra den gamle krypteringen (ownCloud <= 8.0) til den nye.", "Start migration" : "Start migrering", "Security & setup warnings" : "Advarsler om sikkerhet og oppsett", + "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the Tips & Ticks section and the documentation for more information." : "Det er viktig for sikkerheten og ytelsen på din installasjon at alt er satt opp rett. For å hjelpe deg er det satt i verk noen automatiske sjekker. Se \"Tips og triks\"-delen og i dokumentasjonen for mer informasjon", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP ser ikke ut til å være satt opp riktig for å lese systemets miljøvariabler. Testen med getenv(\"PATH\") returnerer bare et tomt svar.", "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Vennligst sjekk <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installasjonsdokumentasjonen ↗</a> etter php konfigurasjonsnotater og konfigurering av php på tjeneren din, særlig om du bruker php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Det skrivebeskyttede oppsettet er blitt aktivert. Dette forhindrer setting av visse oppsett via vev-grensesnittet. Videre må config-filen gjøres skrivbar manuelt for hver oppdatering.", @@ -225,6 +235,7 @@ "Last cron job execution: %s." : "Siste kjøring av Cron-jobb: %s.", "Last cron job execution: %s. Something seems wrong." : "Siste kjøring av Cron-jobb: %s. Noe ser ut til å være galt.", "Cron was not executed yet!" : "Cron har ikke blitt kjørt enda!", + "For optimal performance it's important to configure background jobs correctly. For bigger instances 'Cron' is the recommended setting. Please see the documentation for more information." : "For optimal ytelse er det viktig å sette opp bakgrunnsjobber rett. For kjøring på større installasjoner er 'Cron' anbefalt innstilling. Se dokumentasjonen for mer informasjon.", "Execute one task with each page loaded" : "Utfør en oppgave med hver side som blir lastet", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php er registrert i en webcron-tjeneste for å kalle cron.php hvert 15. minutt over http.", "Use system's cron service to call the cron.php file every 15 minutes." : "Bruk systemets cron-tjeneste til å kalle cron.php hvert kvarter.", @@ -232,6 +243,7 @@ "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "For å kjøre denne trenger du «PHP posix extension». Se {linkstart}PHP dokumentasjonen{linkend} for flere detaljer.", "Version" : "Versjon", "Sharing" : "Deling", + "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Som administrator kan du fininnstille delingsoppførselen. Se dokumentasjonen for mer informasjon.", "Allow apps to use the Share API" : "Tillat programmer å bruke API for deling", "Allow users to share via link" : "Tillat brukere å dele via lenke", "Allow public uploads" : "Tillat offentlig opplasting", @@ -250,6 +262,7 @@ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Vis ansvarsfraskrivelse på den offentlige opplastingssiden. (Vises kun nå fillisten er tom.)", "This text will be shown on the public link upload page when the file list is hidden." : "Denne teksten vises på den offentlig opplastingssiden når fillisten er tom.", "Tips & tricks" : "Tips og triks", + "There are a lot of features and config switches available to optimally customize and use this instance. Here are some pointers for more information." : "Det er mange funksjoner og oppsettsbrytere tilgjengelig for optimal tilpasning og bruk av denne installasjonen. Her har du noen punkter med ytterligere informasjon.", "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "SQLite er for øyeblikket brukt som database. For større installasjoner vil vi anbefale deg å benytte en annen databasetype.", "This is particularly recommended when using the desktop client for file synchronisation." : "Dette er spesielt anbefalt når skrivebordsklient brukes for filsynkronisering.", "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>." : "For å migrere til en annen database, bruk kommandolinjeverktøyet: 'occ db:convert-type', eller les i <a target=\"_blank\" href=\"%s\">dokumentasjonen ↗</a>.", @@ -261,6 +274,8 @@ "Check the security of your Nextcloud over our security scan" : "Sjekk sikkerheten på din Nextcloud over vår sikkerhetsskanning", "Hardening and security guidance" : "Herding og sikkerhetsveiledning", "Developer documentation" : "Utviklerdokumentasjon", + "View in store" : "Vis i butikk", + "Limit to groups" : "Begrens til grupper", "This app has an update available." : "En oppdatering er tilgjengelig for denne appen.", "by %s" : "av %s", "%s-licensed" : "%s-lisensiert", @@ -307,9 +322,7 @@ "Address" : "Adresse", "Your postal address" : "Din postadresse", "Website" : "Nettside", - "Your website" : "Din nettside", "Twitter" : "Twitter", - "Your Twitter handle" : "Din Twitter nøkkel", "You are member of the following groups:" : "Du er medlem av følgende grupper:", "Password" : "Passord", "Current password" : "Nåværende passord", @@ -326,7 +339,7 @@ "Web, desktop and mobile clients currently logged in to your account." : "Følgende nett, skrivebord og mobile klienter er for øyeblikket logget på din konto.", "Device" : "Enhet", "Last activity" : "Seneste aktivitet", - "Passcodes that give an app or device permissions to access your account." : "Passordet som gi en app eller enhet tilgang til din konto.", + "Here you can generate individual passwords for apps so you don’t have to give out your password. You can revoke them individually too." : "Her kan du opprette egne passord for programmer slik at du ikke trenger å gi dem ditt passord. Du kan tilbakekalle dem individuelt også.", "Name" : "Navn", "App name" : "App navn", "Create new app password" : "Lag nytt app passord", @@ -335,10 +348,10 @@ "Username" : "Brukernavn", "Done" : "Ferdig", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Utviklet av {communityopen}Nextcloud mijøet{linkclose}, {githubopen}kildekoden{linkclose} er lisensiert under {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", - "Follow us on Google Plus!" : "Følg oss på Google Plus!", + "Follow us on Google+!" : "Følg oss på Google+", "Like our facebook page!" : "Lik vår facebook side!", - "Subscribe to our twitter channel!" : "Abonner på vår twitter kanal!", - "Subscribe to our news feed!" : "Abonner på vår nyhetsstrøm!", + "Follow us on Twitter!" : "Følg oss på Twitter", + "Check out our blog!" : "Sjekk ut bloggen vår", "Subscribe to our newsletter!" : "Abonner på vårt nyhetsbrev!", "Settings" : "Innstillinger", "Show storage location" : "Vis lagringssted", @@ -378,12 +391,19 @@ "Uninstalling ...." : "Avinstallerer…", "Error while uninstalling app" : "Feil ved avinstallering av app", "Uninstall" : "Avinstaller", + "This is used for sending out notifications." : "Dette brukes for utsending av varsler.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modulen 'fileinfo' mangler. Vi anbefaler at du aktiverer denne modulen for å kunne detektere MIME-typen korrekt.", "Uninstall app" : "Avinstaller app", "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>" : "Hei,<br><br>vil bare opplyse deg om at du har en %s konto.<br><br>Ditt brukernavn: <strong>%s</strong><br>Gå dit: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "Hadet!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hei,\n\nvil bare opplyse deg omat du har en %s konto.\n\nDitt brukernavn: %s\nGå dit: %s\n\n", "For password recovery and notifications" : "For passord-gjenoppretting og varsler", + "Your website" : "Din nettside", + "Your Twitter handle" : "Din Twitter nøkkel", + "Passcodes that give an app or device permissions to access your account." : "Passordet som gi en app eller enhet tilgang til din konto.", + "Follow us on Google Plus!" : "Følg oss på Google Plus!", + "Subscribe to our twitter channel!" : "Abonner på vår twitter kanal!", + "Subscribe to our news feed!" : "Abonner på vår nyhetsstrøm!", "Show last log in" : "Vis siste innlogging" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/settings/l10n/nl.js b/settings/l10n/nl.js index f2b14eee1cc..e122f632b8f 100644 --- a/settings/l10n/nl.js +++ b/settings/l10n/nl.js @@ -8,6 +8,10 @@ OC.L10N.register( "You changed your email address" : "Je wijzigde je e-mailadres", "Your email address was changed by an administrator" : "Je e-mailadres is gewijzigd door een beheerder", "Your <strong>password</strong> or <strong>email</strong> was modified" : "Je <strong>wachtwoord</strong> of <strong>e-mailadres</strong> is gewijzigd", + "Your apps" : "Jou apps", + "Enabled apps" : "Ingeschakelde apps", + "Disabled apps" : "Uitgeschakelde apps", + "App bundles" : "App bundels", "Wrong password" : "Onjuist wachtwoord", "Saved" : "Opgeslagen", "No user supplied" : "Geen gebruiker opgegeven", @@ -16,7 +20,7 @@ OC.L10N.register( "Please provide an admin recovery password; otherwise, all user data will be lost." : "Voer een beheerdersherstelwachtwoord in, anders zullen alle gebruikersgegevens verloren gaan", "Wrong admin recovery password. Please check the password and try again." : "Onjuist beheerdersherstelwachtwoord. Controleer het wachtwoord en probeer het opnieuw.", "Backend doesn't support password change, but the user's encryption key was updated." : "De Back-end ondersteunt geen wachtwoordwijzigingen, maar de cryptosleutel van de gebruiker is succesvol bijgewerkt.", - "installing and updating apps via the app store or Federated Cloud Sharing" : "installeren en bijwerken applicaties via de app store of Federated Cloud Sharing", + "installing and updating apps via the app store or Federated Cloud Sharing" : "installeren en bijwerken applicaties via de app store of gefedereerd cloud delen", "Federated Cloud Sharing" : "Federated Cloud Sharing", "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cUrl gebruikt een verouderde %s versie (%s). Werk het besturingssysteem bij, want anders zullen functies als %s niet betrouwbaar werken.", "A problem occurred, please check your log files (Error: %s)" : "Er trad een een probleem op, controleer je logbestanden (Fout: %s).", @@ -28,7 +32,7 @@ OC.L10N.register( "Well done, %s!" : "Goed gedaan, %s!", "If you received this email, the email configuration seems to be correct." : "Als je dit e-mailtje ontving, dan lijken de e-mailinstellingen correct.", "Email setting test" : "E-mailinstellingen test", - "Mail could not be sent. Check your mail server log" : "E-mail kon niet verzonden worden. Kijk de logs na van je e-mail server", + "Email could not be sent. Check your mail server log" : "Er kon geen e-mail verstuurd worden. Controleer je server log files", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Er ontstond een probleem bij het versturen van de e-mail. Controleer je instellingen. (Fout: %s)", "You need to set your user email before being able to send test emails." : "Je moet je e-mailadres invoeren voordat je testberichten kunt versturen.", "Invalid request" : "Ongeldige aanvraag", @@ -38,6 +42,8 @@ OC.L10N.register( "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.", "Unable to delete user." : "Kan de gebruiker niet verwijderen.", + "Error while enabling user." : "Fout bij inschakelen gebruiker.", + "Error while disabling user." : "Fout bij uitschakelen gebruiker.", "Settings saved" : "Instellingen opgeslagen", "Unable to change full name" : "Kan de volledige naam niet wijzigen", "Unable to change email address" : "Kan e-mailadres niet wijzigen", @@ -78,7 +84,7 @@ OC.L10N.register( "Email sent" : "E-mail verzonden", "Official" : "Officieel", "All" : "Alle", - "Update to %s" : "Bijgewerkt naar %s", + "Update to %s" : "Werk bij naar %s", "_You have %n app update pending_::_You have %n app updates pending_" : ["Er is %n update voor een applicatie","Er zijn %n applicaties die bijgewerkt kunnen worden"], "No apps found for your version" : "Geen apps gevonden voor jouw versie", "The app will be downloaded from the app store" : "De app zal worden gedownload van de app store", @@ -97,11 +103,15 @@ OC.L10N.register( "Updating...." : "Bijwerken....", "Error while updating app" : "Fout bij het bijwerken van de app", "Updated" : "Bijgewerkt", + "Removing …" : "Verwijderen ...", + "Error while removing app" : "Fout tijdens het verwijderen van de app", + "Remove" : "Verwijderen", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "De app is ingeschakeld maar moet worden bijgewerkt. Je wordt over 5 seconden doorgeleid naar de bijwerkpagina.", "App update" : "App update", "Approved" : "Goedgekeurd", "Experimental" : "Experimenteel", "No apps found for {query}" : "Geen apps gevonden voor {query}", + "Enable all" : "Alles activeren", "Allow filesystem access" : "Toestaan toegang bestandssysteem", "Disconnect" : "Verbreek verbinding", "Revoke" : "Intrekken", @@ -136,6 +146,8 @@ OC.L10N.register( "Visible to local users and to trusted servers" : "Alleen zichtbaar voor lokale gebruikers en vertrouwde servers", "Public" : "Openbaar", "Will be synced to a global and public address book" : "Wordt gesyncht met een globaal en openbaar adresboek", + "Verify" : "Verifiëren", + "Verifying …" : "Verifiëren...", "Select a profile picture" : "Kies een profielafbeelding", "Very weak password" : "Zeer zwak wachtwoord", "Weak password" : "Zwak wachtwoord", @@ -165,6 +177,7 @@ OC.L10N.register( "A valid email must be provided" : "Er moet een geldig e-mailadres worden opgegeven", "__language_name__" : "Nederlands", "Unlimited" : "Ongelimiteerd", + "Verifying" : "Verifiëren", "Personal info" : "Persoonlijke info", "Sessions" : "Sessies", "App passwords" : "App wachtwoorden", @@ -177,7 +190,7 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "Email server" : "E-mailserver", "Open documentation" : "Open documentatie", - "This is used for sending out notifications." : "Dit wordt gebruikt voor het verzenden van meldingen.", + "It is important to set up this server to be able to send emails, like for password reset and notifications." : "Het is belangrijk deze server zo in te stellen dat er ook e-mails verstuurd kunnen worden om wachtwoord resets en meldingen bijvoorbeeld te versturen.", "Send mode" : "Verstuurmodus", "Encryption" : "Versleuteling", "From address" : "Afzenderadres", @@ -263,6 +276,8 @@ OC.L10N.register( "Check the security of your Nextcloud over our security scan" : "Controleer de beveiliging van je Nextcloud met onze securityscan", "Hardening and security guidance" : "Hardening en security advies", "Developer documentation" : "Ontwikkelaarsdocumentatie", + "View in store" : "Bekijken in store", + "Limit to groups" : "Beperk to groepen", "This app has an update available." : "Er is een update beschikbaar voor deze applicatie.", "by %s" : "op %s", "%s-licensed" : "%s-licensed", @@ -309,9 +324,7 @@ OC.L10N.register( "Address" : "Adres", "Your postal address" : "Je postadres", "Website" : "Website", - "Your website" : "Je website", "Twitter" : "Twitter", - "Your Twitter handle" : "Je Twitter naam", "You are member of the following groups:" : "U bent lid van de volgende groepen:", "Password" : "Wachtwoord", "Current password" : "Huidig wachtwoord", @@ -328,7 +341,6 @@ OC.L10N.register( "Web, desktop and mobile clients currently logged in to your account." : "Web, desktop en mobiele clients zijn nu ingelogd op je account.", "Device" : "Apparaat", "Last activity" : "Laatste activiteit", - "Passcodes that give an app or device permissions to access your account." : "Een toegangscode die een app of apparaat toegang geven om je account te gebruiken.", "Name" : "Naam", "App name" : "Appnaam", "Create new app password" : "Creëer een nieuw app wachtwoord", @@ -337,10 +349,10 @@ OC.L10N.register( "Username" : "Gebruikersnaam", "Done" : "Gedaan", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Ontwikkeld door de {communityopen}Nextcloud community{linkclose}, de {githubopen}broncode{linkclose} is gelicenseerd onder de {licenseopen}AGPL{linkclose}.", - "Follow us on Google Plus!" : "Volg ons op Google Plus!", + "Follow us on Google+!" : "Volg ons op Google+!", "Like our facebook page!" : "Vind onze Facebook pagina leuk!", - "Subscribe to our twitter channel!" : "Abonneer jezelf op ons twitter kanaal!", - "Subscribe to our news feed!" : "Abonneer jezelf op onze nieuwsfeed!", + "Follow us on Twitter!" : "Volg ons op Twitter!", + "Check out our blog!" : "Lees ons blog!", "Subscribe to our newsletter!" : "Abonneer jezelf op onze nieuwsbrief!", "Settings" : "Instellingen", "Show storage location" : "Toon opslaglocatie", @@ -380,12 +392,19 @@ OC.L10N.register( "Uninstalling ...." : "De-installeren ...", "Error while uninstalling app" : "Fout bij de-installeren app", "Uninstall" : "De-installeren", + "This is used for sending out notifications." : "Dit wordt gebruikt voor het verzenden van meldingen.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "De PHP module 'fileinfo' ontbreekt. We adviseren met klem om deze module te activeren om de beste resultaten te bereiken voor mime-type detectie.", "Uninstall app" : "De-installeren app", "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 daar,<br><br>we willen je laten weten dat je nu een %s account hebt.<br><br>Je gebruikersnaam: <strong>%s</strong><br>Ga naar: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "Proficiat!", "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\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", + "Your website" : "Je website", + "Your Twitter handle" : "Je Twitter naam", + "Passcodes that give an app or device permissions to access your account." : "Een toegangscode die een app of apparaat toegang geven om je account te gebruiken.", + "Follow us on Google Plus!" : "Volg ons op Google Plus!", + "Subscribe to our twitter channel!" : "Abonneer jezelf op ons twitter kanaal!", + "Subscribe to our news feed!" : "Abonneer jezelf op onze nieuwsfeed!", "Show last log in" : "Toon laatste inlog" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/nl.json b/settings/l10n/nl.json index 0277c7bba46..0aa02237ecb 100644 --- a/settings/l10n/nl.json +++ b/settings/l10n/nl.json @@ -6,6 +6,10 @@ "You changed your email address" : "Je wijzigde je e-mailadres", "Your email address was changed by an administrator" : "Je e-mailadres is gewijzigd door een beheerder", "Your <strong>password</strong> or <strong>email</strong> was modified" : "Je <strong>wachtwoord</strong> of <strong>e-mailadres</strong> is gewijzigd", + "Your apps" : "Jou apps", + "Enabled apps" : "Ingeschakelde apps", + "Disabled apps" : "Uitgeschakelde apps", + "App bundles" : "App bundels", "Wrong password" : "Onjuist wachtwoord", "Saved" : "Opgeslagen", "No user supplied" : "Geen gebruiker opgegeven", @@ -14,7 +18,7 @@ "Please provide an admin recovery password; otherwise, all user data will be lost." : "Voer een beheerdersherstelwachtwoord in, anders zullen alle gebruikersgegevens verloren gaan", "Wrong admin recovery password. Please check the password and try again." : "Onjuist beheerdersherstelwachtwoord. Controleer het wachtwoord en probeer het opnieuw.", "Backend doesn't support password change, but the user's encryption key was updated." : "De Back-end ondersteunt geen wachtwoordwijzigingen, maar de cryptosleutel van de gebruiker is succesvol bijgewerkt.", - "installing and updating apps via the app store or Federated Cloud Sharing" : "installeren en bijwerken applicaties via de app store of Federated Cloud Sharing", + "installing and updating apps via the app store or Federated Cloud Sharing" : "installeren en bijwerken applicaties via de app store of gefedereerd cloud delen", "Federated Cloud Sharing" : "Federated Cloud Sharing", "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cUrl gebruikt een verouderde %s versie (%s). Werk het besturingssysteem bij, want anders zullen functies als %s niet betrouwbaar werken.", "A problem occurred, please check your log files (Error: %s)" : "Er trad een een probleem op, controleer je logbestanden (Fout: %s).", @@ -26,7 +30,7 @@ "Well done, %s!" : "Goed gedaan, %s!", "If you received this email, the email configuration seems to be correct." : "Als je dit e-mailtje ontving, dan lijken de e-mailinstellingen correct.", "Email setting test" : "E-mailinstellingen test", - "Mail could not be sent. Check your mail server log" : "E-mail kon niet verzonden worden. Kijk de logs na van je e-mail server", + "Email could not be sent. Check your mail server log" : "Er kon geen e-mail verstuurd worden. Controleer je server log files", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Er ontstond een probleem bij het versturen van de e-mail. Controleer je instellingen. (Fout: %s)", "You need to set your user email before being able to send test emails." : "Je moet je e-mailadres invoeren voordat je testberichten kunt versturen.", "Invalid request" : "Ongeldige aanvraag", @@ -36,6 +40,8 @@ "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.", "Unable to delete user." : "Kan de gebruiker niet verwijderen.", + "Error while enabling user." : "Fout bij inschakelen gebruiker.", + "Error while disabling user." : "Fout bij uitschakelen gebruiker.", "Settings saved" : "Instellingen opgeslagen", "Unable to change full name" : "Kan de volledige naam niet wijzigen", "Unable to change email address" : "Kan e-mailadres niet wijzigen", @@ -76,7 +82,7 @@ "Email sent" : "E-mail verzonden", "Official" : "Officieel", "All" : "Alle", - "Update to %s" : "Bijgewerkt naar %s", + "Update to %s" : "Werk bij naar %s", "_You have %n app update pending_::_You have %n app updates pending_" : ["Er is %n update voor een applicatie","Er zijn %n applicaties die bijgewerkt kunnen worden"], "No apps found for your version" : "Geen apps gevonden voor jouw versie", "The app will be downloaded from the app store" : "De app zal worden gedownload van de app store", @@ -95,11 +101,15 @@ "Updating...." : "Bijwerken....", "Error while updating app" : "Fout bij het bijwerken van de app", "Updated" : "Bijgewerkt", + "Removing …" : "Verwijderen ...", + "Error while removing app" : "Fout tijdens het verwijderen van de app", + "Remove" : "Verwijderen", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "De app is ingeschakeld maar moet worden bijgewerkt. Je wordt over 5 seconden doorgeleid naar de bijwerkpagina.", "App update" : "App update", "Approved" : "Goedgekeurd", "Experimental" : "Experimenteel", "No apps found for {query}" : "Geen apps gevonden voor {query}", + "Enable all" : "Alles activeren", "Allow filesystem access" : "Toestaan toegang bestandssysteem", "Disconnect" : "Verbreek verbinding", "Revoke" : "Intrekken", @@ -134,6 +144,8 @@ "Visible to local users and to trusted servers" : "Alleen zichtbaar voor lokale gebruikers en vertrouwde servers", "Public" : "Openbaar", "Will be synced to a global and public address book" : "Wordt gesyncht met een globaal en openbaar adresboek", + "Verify" : "Verifiëren", + "Verifying …" : "Verifiëren...", "Select a profile picture" : "Kies een profielafbeelding", "Very weak password" : "Zeer zwak wachtwoord", "Weak password" : "Zwak wachtwoord", @@ -163,6 +175,7 @@ "A valid email must be provided" : "Er moet een geldig e-mailadres worden opgegeven", "__language_name__" : "Nederlands", "Unlimited" : "Ongelimiteerd", + "Verifying" : "Verifiëren", "Personal info" : "Persoonlijke info", "Sessions" : "Sessies", "App passwords" : "App wachtwoorden", @@ -175,7 +188,7 @@ "STARTTLS" : "STARTTLS", "Email server" : "E-mailserver", "Open documentation" : "Open documentatie", - "This is used for sending out notifications." : "Dit wordt gebruikt voor het verzenden van meldingen.", + "It is important to set up this server to be able to send emails, like for password reset and notifications." : "Het is belangrijk deze server zo in te stellen dat er ook e-mails verstuurd kunnen worden om wachtwoord resets en meldingen bijvoorbeeld te versturen.", "Send mode" : "Verstuurmodus", "Encryption" : "Versleuteling", "From address" : "Afzenderadres", @@ -261,6 +274,8 @@ "Check the security of your Nextcloud over our security scan" : "Controleer de beveiliging van je Nextcloud met onze securityscan", "Hardening and security guidance" : "Hardening en security advies", "Developer documentation" : "Ontwikkelaarsdocumentatie", + "View in store" : "Bekijken in store", + "Limit to groups" : "Beperk to groepen", "This app has an update available." : "Er is een update beschikbaar voor deze applicatie.", "by %s" : "op %s", "%s-licensed" : "%s-licensed", @@ -307,9 +322,7 @@ "Address" : "Adres", "Your postal address" : "Je postadres", "Website" : "Website", - "Your website" : "Je website", "Twitter" : "Twitter", - "Your Twitter handle" : "Je Twitter naam", "You are member of the following groups:" : "U bent lid van de volgende groepen:", "Password" : "Wachtwoord", "Current password" : "Huidig wachtwoord", @@ -326,7 +339,6 @@ "Web, desktop and mobile clients currently logged in to your account." : "Web, desktop en mobiele clients zijn nu ingelogd op je account.", "Device" : "Apparaat", "Last activity" : "Laatste activiteit", - "Passcodes that give an app or device permissions to access your account." : "Een toegangscode die een app of apparaat toegang geven om je account te gebruiken.", "Name" : "Naam", "App name" : "Appnaam", "Create new app password" : "Creëer een nieuw app wachtwoord", @@ -335,10 +347,10 @@ "Username" : "Gebruikersnaam", "Done" : "Gedaan", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Ontwikkeld door de {communityopen}Nextcloud community{linkclose}, de {githubopen}broncode{linkclose} is gelicenseerd onder de {licenseopen}AGPL{linkclose}.", - "Follow us on Google Plus!" : "Volg ons op Google Plus!", + "Follow us on Google+!" : "Volg ons op Google+!", "Like our facebook page!" : "Vind onze Facebook pagina leuk!", - "Subscribe to our twitter channel!" : "Abonneer jezelf op ons twitter kanaal!", - "Subscribe to our news feed!" : "Abonneer jezelf op onze nieuwsfeed!", + "Follow us on Twitter!" : "Volg ons op Twitter!", + "Check out our blog!" : "Lees ons blog!", "Subscribe to our newsletter!" : "Abonneer jezelf op onze nieuwsbrief!", "Settings" : "Instellingen", "Show storage location" : "Toon opslaglocatie", @@ -378,12 +390,19 @@ "Uninstalling ...." : "De-installeren ...", "Error while uninstalling app" : "Fout bij de-installeren app", "Uninstall" : "De-installeren", + "This is used for sending out notifications." : "Dit wordt gebruikt voor het verzenden van meldingen.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "De PHP module 'fileinfo' ontbreekt. We adviseren met klem om deze module te activeren om de beste resultaten te bereiken voor mime-type detectie.", "Uninstall app" : "De-installeren app", "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 daar,<br><br>we willen je laten weten dat je nu een %s account hebt.<br><br>Je gebruikersnaam: <strong>%s</strong><br>Ga naar: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "Proficiat!", "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\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", + "Your website" : "Je website", + "Your Twitter handle" : "Je Twitter naam", + "Passcodes that give an app or device permissions to access your account." : "Een toegangscode die een app of apparaat toegang geven om je account te gebruiken.", + "Follow us on Google Plus!" : "Volg ons op Google Plus!", + "Subscribe to our twitter channel!" : "Abonneer jezelf op ons twitter kanaal!", + "Subscribe to our news feed!" : "Abonneer jezelf op onze nieuwsfeed!", "Show last log in" : "Toon laatste inlog" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/settings/l10n/pl.js b/settings/l10n/pl.js index b6a7332c7fe..ca08c669536 100644 --- a/settings/l10n/pl.js +++ b/settings/l10n/pl.js @@ -28,7 +28,6 @@ OC.L10N.register( "Well done, %s!" : "Dobra robota, %s!", "If you received this email, the email configuration seems to be correct." : "Jeśli otrzymałeś/-aś tego e-maila to wydaje się, że konfiguracja e-maili jest prawidłowa.", "Email setting test" : "Testuj ustawienia e-maili", - "Mail could not be sent. Check your mail server log" : "E-mail nie mógł zostać wysłany. Sprawdź logi swojego serwera poczty", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Wystąpił błąd podczas wysyłania wiadomości e-mail. Proszę zmienić swoje ustawienia. (Error: %s)", "You need to set your user email before being able to send test emails." : "Musisz najpierw ustawić użytkownika e-mail, aby móc wysyłać wiadomości testowe.", "Invalid request" : "Nieprawidłowe żądanie", @@ -177,7 +176,6 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "Email server" : "Serwer pocztowy", "Open documentation" : "Otwórz dokumentację", - "This is used for sending out notifications." : "To jest używane do wysyłania powiadomień", "Send mode" : "Tryb wysyłki", "Encryption" : "Szyfrowanie", "From address" : "Z adresu", @@ -309,9 +307,7 @@ OC.L10N.register( "Address" : "Adres", "Your postal address" : "Twój kod pocztowy", "Website" : "Strona WWW", - "Your website" : "Twoja strona WWW", "Twitter" : "Twitter", - "Your Twitter handle" : "Twój Twitter:", "You are member of the following groups:" : "Jesteś członkiem następujących grup:", "Password" : "Hasło", "Current password" : "Bieżące hasło", @@ -328,7 +324,6 @@ OC.L10N.register( "Web, desktop and mobile clients currently logged in to your account." : "Aktualnie zalogowany na swoim koncie z Web, komputerów i mobilnych urządzeń.", "Device" : "Urządzenie", "Last activity" : "Ostatnia aktywność", - "Passcodes that give an app or device permissions to access your account." : "Hasła dostępu, które dają uprawnienia aplikacjom lub urządzeniom, do uzyskania dostępu do konta.", "Name" : "Nazwa", "App name" : "Nazwa aplikacji", "Create new app password" : "Utwórz nowe hasło do aplikacji", @@ -337,10 +332,7 @@ OC.L10N.register( "Username" : "Nazwa użytkownika", "Done" : "Ukończono", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Wytworzone przez {communityopen}społeczność Nextclouda{linkclose}. {githubopen}Kod źródłowy{linkclose} jest udostępniony pod licencją {licenseopen}AGPL{linkclose}.", - "Follow us on Google Plus!" : "Śledź nas na Google Plus!", "Like our facebook page!" : "Polub naszą stronę na Facebook!", - "Subscribe to our twitter channel!" : "Zapisz się do naszego kanału na Twitterze!", - "Subscribe to our news feed!" : "Zapisz się do naszego kanału informacyjnego!", "Subscribe to our newsletter!" : "Zapisz się do naszego newslettera!", "Settings" : "Ustawienia", "Show storage location" : "Pokaż miejsce przechowywania", @@ -380,12 +372,19 @@ OC.L10N.register( "Uninstalling ...." : "Odinstalowywanie....", "Error while uninstalling app" : "Błąd przy odinstalowywaniu aplikacji", "Uninstall" : "Odinstaluj", + "This is used for sending out notifications." : "To jest używane do wysyłania powiadomień", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Brak modułu PHP „fileinfo”. Zalecamy włączenie tego modułu, aby uzyskać najlepsze wyniki podczas wykrywania typów MIME.", "Uninstall app" : "Odinstaluj aplikację", "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>" : "Hej,<br><br>informujemy cię, że posiadasz od teraz konto %s.<br><br>Twoja nazwa użytkownika: <strong>%s</strong><br>Zaloguj się: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "Pozdrawiam!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hej,\n\ninformujemy cię, że posiadasz od teraz konto %s.\n\nTwoja nazwa użytkownika: %s\nZaloguj się: %s\n\n", "For password recovery and notifications" : "W celu odzyskania hasła i powiadomień", + "Your website" : "Twoja strona WWW", + "Your Twitter handle" : "Twój Twitter:", + "Passcodes that give an app or device permissions to access your account." : "Hasła dostępu, które dają uprawnienia aplikacjom lub urządzeniom, do uzyskania dostępu do konta.", + "Follow us on Google Plus!" : "Śledź nas na Google Plus!", + "Subscribe to our twitter channel!" : "Zapisz się do naszego kanału na Twitterze!", + "Subscribe to our news feed!" : "Zapisz się do naszego kanału informacyjnego!", "Show last log in" : "Pokaż ostatni login" }, "nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"); diff --git a/settings/l10n/pl.json b/settings/l10n/pl.json index a33b97334a8..05cdb80ee7e 100644 --- a/settings/l10n/pl.json +++ b/settings/l10n/pl.json @@ -26,7 +26,6 @@ "Well done, %s!" : "Dobra robota, %s!", "If you received this email, the email configuration seems to be correct." : "Jeśli otrzymałeś/-aś tego e-maila to wydaje się, że konfiguracja e-maili jest prawidłowa.", "Email setting test" : "Testuj ustawienia e-maili", - "Mail could not be sent. Check your mail server log" : "E-mail nie mógł zostać wysłany. Sprawdź logi swojego serwera poczty", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Wystąpił błąd podczas wysyłania wiadomości e-mail. Proszę zmienić swoje ustawienia. (Error: %s)", "You need to set your user email before being able to send test emails." : "Musisz najpierw ustawić użytkownika e-mail, aby móc wysyłać wiadomości testowe.", "Invalid request" : "Nieprawidłowe żądanie", @@ -175,7 +174,6 @@ "STARTTLS" : "STARTTLS", "Email server" : "Serwer pocztowy", "Open documentation" : "Otwórz dokumentację", - "This is used for sending out notifications." : "To jest używane do wysyłania powiadomień", "Send mode" : "Tryb wysyłki", "Encryption" : "Szyfrowanie", "From address" : "Z adresu", @@ -307,9 +305,7 @@ "Address" : "Adres", "Your postal address" : "Twój kod pocztowy", "Website" : "Strona WWW", - "Your website" : "Twoja strona WWW", "Twitter" : "Twitter", - "Your Twitter handle" : "Twój Twitter:", "You are member of the following groups:" : "Jesteś członkiem następujących grup:", "Password" : "Hasło", "Current password" : "Bieżące hasło", @@ -326,7 +322,6 @@ "Web, desktop and mobile clients currently logged in to your account." : "Aktualnie zalogowany na swoim koncie z Web, komputerów i mobilnych urządzeń.", "Device" : "Urządzenie", "Last activity" : "Ostatnia aktywność", - "Passcodes that give an app or device permissions to access your account." : "Hasła dostępu, które dają uprawnienia aplikacjom lub urządzeniom, do uzyskania dostępu do konta.", "Name" : "Nazwa", "App name" : "Nazwa aplikacji", "Create new app password" : "Utwórz nowe hasło do aplikacji", @@ -335,10 +330,7 @@ "Username" : "Nazwa użytkownika", "Done" : "Ukończono", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Wytworzone przez {communityopen}społeczność Nextclouda{linkclose}. {githubopen}Kod źródłowy{linkclose} jest udostępniony pod licencją {licenseopen}AGPL{linkclose}.", - "Follow us on Google Plus!" : "Śledź nas na Google Plus!", "Like our facebook page!" : "Polub naszą stronę na Facebook!", - "Subscribe to our twitter channel!" : "Zapisz się do naszego kanału na Twitterze!", - "Subscribe to our news feed!" : "Zapisz się do naszego kanału informacyjnego!", "Subscribe to our newsletter!" : "Zapisz się do naszego newslettera!", "Settings" : "Ustawienia", "Show storage location" : "Pokaż miejsce przechowywania", @@ -378,12 +370,19 @@ "Uninstalling ...." : "Odinstalowywanie....", "Error while uninstalling app" : "Błąd przy odinstalowywaniu aplikacji", "Uninstall" : "Odinstaluj", + "This is used for sending out notifications." : "To jest używane do wysyłania powiadomień", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Brak modułu PHP „fileinfo”. Zalecamy włączenie tego modułu, aby uzyskać najlepsze wyniki podczas wykrywania typów MIME.", "Uninstall app" : "Odinstaluj aplikację", "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>" : "Hej,<br><br>informujemy cię, że posiadasz od teraz konto %s.<br><br>Twoja nazwa użytkownika: <strong>%s</strong><br>Zaloguj się: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "Pozdrawiam!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hej,\n\ninformujemy cię, że posiadasz od teraz konto %s.\n\nTwoja nazwa użytkownika: %s\nZaloguj się: %s\n\n", "For password recovery and notifications" : "W celu odzyskania hasła i powiadomień", + "Your website" : "Twoja strona WWW", + "Your Twitter handle" : "Twój Twitter:", + "Passcodes that give an app or device permissions to access your account." : "Hasła dostępu, które dają uprawnienia aplikacjom lub urządzeniom, do uzyskania dostępu do konta.", + "Follow us on Google Plus!" : "Śledź nas na Google Plus!", + "Subscribe to our twitter channel!" : "Zapisz się do naszego kanału na Twitterze!", + "Subscribe to our news feed!" : "Zapisz się do naszego kanału informacyjnego!", "Show last log in" : "Pokaż ostatni login" },"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);" }
\ No newline at end of file diff --git a/settings/l10n/pt_BR.js b/settings/l10n/pt_BR.js index 55bf85034aa..c8ee932b071 100644 --- a/settings/l10n/pt_BR.js +++ b/settings/l10n/pt_BR.js @@ -8,6 +8,10 @@ OC.L10N.register( "You changed your email address" : "Você alterou seu email", "Your email address was changed by an administrator" : "Seu email foi alterado pelo administrador", "Your <strong>password</strong> or <strong>email</strong> was modified" : "Sua <strong>senha</strong> ou <strong>email</strong> foram alterados", + "Your apps" : "Seus aplicativos", + "Enabled apps" : "Aplicativos habilitados", + "Disabled apps" : "Aplicativos desabilitados", + "App bundles" : "Pacotes de aplicativos", "Wrong password" : "Senha incorreta", "Saved" : "Salvo", "No user supplied" : "Nenhum usuário fornecido", @@ -28,7 +32,7 @@ OC.L10N.register( "Well done, %s!" : "Bom trabalho, %s!", "If you received this email, the email configuration seems to be correct." : "Se você recebeu este email, é sinal que a configuração do email está correta.", "Email setting test" : "Teste da configuração de email", - "Mail could not be sent. Check your mail server log" : "Email não pôde ser enviado. Verifique o log do seu servidor de email", + "Email could not be sent. Check your mail server log" : "O email não pôde ser enviado. Verifique o log do servidor de email", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Ocorreu um problema ao enviar o email. Por favor, revise suas configurações. (Erro: %s)", "You need to set your user email before being able to send test emails." : "Você precisa configurar seu email de usuário antes de ser capaz de enviar emails de teste.", "Invalid request" : "Solicitação inválida", @@ -38,6 +42,10 @@ OC.L10N.register( "To send a password link to the user an email address is required." : "Para envio da senha ao usuário é necessário um endereço de email.", "Unable to create user." : "Não é possível criar usuário.", "Unable to delete user." : "Não é possível excluir o usuário.", + "Error while enabling user." : "Erro ao habilitar usuário.", + "Error while disabling user." : "Erro ao desabilitar usuário.", + "In order to verify your Twitter account post following tweet on Twitter (please make sure to post it without any line breaks):" : "A fim de verificar sua conta no Twitter, poste isso no Twitter (por favor, certifique-se de postar sem quebras de linha):", + "In order to verify your Website store following content in your web-root at '.well-known/CloudIdVerificationCode.txt' (please make sure that the complete text is in one line):" : "A fim de verificar seu site, coloque o seguinte conteúdo no raiz do site: '.well-known/CloudIdVerificationCode.txt' (por favor certifique-se que o texto completo esteja em uma linha):", "Settings saved" : "Configurações salvas", "Unable to change full name" : "Não é possível alterar o nome completo", "Unable to change email address" : "Não foi possível alterar o endereço de email", @@ -97,11 +105,15 @@ OC.L10N.register( "Updating...." : "Atualizando...", "Error while updating app" : "Erro ao atualizar aplicativo", "Updated" : "Atualizado", + "Removing …" : "Excluindo...", + "Error while removing app" : "Erro excluindo aplicativo", + "Remove" : "Excluir", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "O aplicativo foi habilitado mas precisa ser atualizado. Você será redirecionado para a página de atualização em 5 segundos.", "App update" : "Atualização de aplicativo", "Approved" : "Aprovado", "Experimental" : "Experimental", "No apps found for {query}" : "Nenhum aplicativo encontrado para {query}", + "Enable all" : "Habilitar tudo", "Allow filesystem access" : "Permitir acesso ao sistema de arquivos", "Disconnect" : "Desconectar", "Revoke" : "Revogar", @@ -136,6 +148,8 @@ OC.L10N.register( "Visible to local users and to trusted servers" : "Visível para usuários locais e servidores confiáveis", "Public" : "Publico", "Will be synced to a global and public address book" : "Será sincronizado com livro de endereços público e global", + "Verify" : "Verificar", + "Verifying …" : "Verificando...", "Select a profile picture" : "Selecione uma imagem para o perfil", "Very weak password" : "Senha muito fraca", "Weak password" : "Senha fraca", @@ -159,12 +173,14 @@ OC.L10N.register( "Password successfully changed" : "Senha alterada com sucesso", "Changing the password will result in data loss, because data recovery is not available for this user" : "Alterar a senha irá resultar em perda de dados pois a recuperação de dados não está disponível para este usuário", "Could not change the users email" : "Não foi possível alterar o email dos usuários", + "Error while changing status of {user}" : "Erro ao mudar o status de {user}", "A valid username must be provided" : "Forneça um nome de usuário válido", "Error creating user: {message}" : "Erro criando o usuário: {message}", "A valid password must be provided" : "Forneça uma senha válida", "A valid email must be provided" : "Um email válido deve ser fornecido", "__language_name__" : "Português Brasileiro", "Unlimited" : "Ilimitado", + "Verifying" : "Verificando", "Personal info" : "Informação pessoal", "Sessions" : "Sessões", "App passwords" : "Senhas de aplicativos", @@ -177,7 +193,7 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "Email server" : "Servidor de email", "Open documentation" : "Abrir documentação", - "This is used for sending out notifications." : "Usado para o envio de notificações.", + "It is important to set up this server to be able to send emails, like for password reset and notifications." : "É importante configurar este servidor para poder enviar emails, assim como para redefinir a senha e notificações.", "Send mode" : "Modo de envio", "Encryption" : "Criptografia", "From address" : "Endereço \"From\"", @@ -193,6 +209,7 @@ OC.L10N.register( "Test email settings" : "Configurações do email de teste", "Send email" : "Enviar email", "Server-side encryption" : "Criptografia do lado do servidor", + "Server-side encryption makes it possible to encrypt files which are uploaded to this server. This comes with limitations like a performance penalty, so enable this only if needed." : "A criptografia do lado do servidor torna possível criptografar arquivos que são carregados para este servidor. Isso vem com limitações como uma diminuição de desempenho, portanto, habilite isso apenas se necessário.", "Enable server-side encryption" : "Habilitar a criptografia do lado do servidor", "Please read carefully before activating server-side encryption: " : "Por favor, leia com atenção antes de ativar a criptografia do lado do servidor:", "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." : "Uma vez que a criptografia é ativada, todos os arquivos enviados ao servidor a partir desse ponto em diante serão criptografados e assim ficarão no servidor. Só será possível desativar a criptografia em uma data posterior se o módulo de criptografia ativo suportar essa função e todas as pré-condições sejam cumpridas (ex., defininindo uma chave de recuperação).", @@ -207,6 +224,7 @@ OC.L10N.register( "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Você precisa migrar suas chaves de criptografia a partir da antiga criptografia (ownCloud <= 8,0) para a nova.", "Start migration" : "Iniciar migração", "Security & setup warnings" : "Segurança & avisos de configuração", + "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the Tips & Ticks section and the documentation for more information." : "É importante para a segurança e o desempenho de sua instância que tudo esteja configurado corretamente. Para ajudá-lo com isso, estamos fazendo algumas verificações automáticas. Consulte a seção Dicas e a documentação para obter mais informações.", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "O PHP não parece estar configurado corretamente para consultar as variáveis de ambiente do sistema. O teste com getenv(\"PATH\") só retorna uma resposta vazia.", "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Por favor verifique a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação de instalação ↗</a> para as notas da configuração do PHP e do PHP do servidor, especialmente quando se utiliza php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "A configuração Somente-Leitura foi habilitada. Isso impede que algumas configurações sejam definidas via interface web. Além disso, o arquivo precisa ser definido manualmente com permissão de escrita para cada atualização.", @@ -227,6 +245,7 @@ OC.L10N.register( "Last cron job execution: %s." : "Última execução do trabalho Cron: %s.", "Last cron job execution: %s. Something seems wrong." : "Última execução do trabalho Cron: %s. Algo parece errado.", "Cron was not executed yet!" : "Cron não foi executado ainda!", + "For optimal performance it's important to configure background jobs correctly. For bigger instances 'Cron' is the recommended setting. Please see the documentation for more information." : "Para um desempenho ideal, é importante configurar corretamente os trabalhos em segundo plano. Para instâncias maiores 'Cron' é a configuração recomendada. Consulte a documentação para obter mais informações.", "Execute one task with each page loaded" : "Execute uma tarefa com cada página carregada", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php está registrado no serviço webcron para chamar cron.php a cada 15 minutos sob http.", "Use system's cron service to call the cron.php file every 15 minutes." : "Usar o serviço cron do sistema para chamar o arquivo cron.php a cada 15 minutos.", @@ -234,6 +253,7 @@ OC.L10N.register( "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Para rodar isso você precisa da extensão posix PHP. Veja a {linkstart}documentação PHP{linkend} para mais detalhes.", "Version" : "Versão", "Sharing" : "Compartilhamento", + "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Como administrador, você pode ajustar o comportamento de compartilhamento. Consulte a documentação para obter mais informações.", "Allow apps to use the Share API" : "Permitir que aplicativos usem a API de compartilhamento", "Allow users to share via link" : "Permitir que os usuários compartilhem por link", "Allow public uploads" : "Permitir envio público", @@ -252,6 +272,7 @@ OC.L10N.register( "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Mostrar o texto de aviso na página pública do link de envio. (Só é mostrado quando a lista de arquivos está oculta.)", "This text will be shown on the public link upload page when the file list is hidden." : "Este texto será mostrado na página de envio do link público quando a lista de arquivos está oculta.", "Tips & tricks" : "Dicas & Truques", + "There are a lot of features and config switches available to optimally customize and use this instance. Here are some pointers for more information." : "Há muitos recursos e opções de configuração disponíveis para otimizar e usar essa instância. Aqui estão algumas indicações para obter mais informações.", "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "SQLite é usando atualmente como backend de banco de dados. Para instalações maiores recomendamos que voce use um outro banco de dados", "This is particularly recommended when using the desktop client for file synchronisation." : "Isso é particulamente recomendado quando se utiliza um cliente para sincronização.", "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>." : "Para migrar para outro banco de dados use a ferramenta de linha de comando: 'occ db:convert-type', ou consulte a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação ↗</a>.", @@ -263,6 +284,8 @@ OC.L10N.register( "Check the security of your Nextcloud over our security scan" : "Verifique a segurança da sua Nextcloud na nossa análise de segurança", "Hardening and security guidance" : "Orientações de proteção e segurança", "Developer documentation" : "Documentação do desenvolvedor", + "View in store" : "Ver na loja", + "Limit to groups" : "Limite para grupos", "This app has an update available." : "Este aplicativo tem uma atualização disponível.", "by %s" : "por %s", "%s-licensed" : "%s-licenciado", @@ -309,9 +332,10 @@ OC.L10N.register( "Address" : "Endereço", "Your postal address" : "Seu endereço postal", "Website" : "Website", - "Your website" : "Seu website", + "It can take up to 24 hours before the account is displayed as verified." : "Pode levar até 24 horas para que a conta seja mostrada como verificada.", + "Link https://…" : "Link https://…", "Twitter" : "Twitter", - "Your Twitter handle" : "Seu Twitter", + "Twitter handle @…" : "Twitter handle @…", "You are member of the following groups:" : "Você é membro dos seguintes grupos:", "Password" : "Senha", "Current password" : "Senha atual", @@ -328,7 +352,7 @@ OC.L10N.register( "Web, desktop and mobile clients currently logged in to your account." : "Clientes Web, desktop e móvel que estão conectados à sua conta.", "Device" : "Dispositivo", "Last activity" : "Última atividade", - "Passcodes that give an app or device permissions to access your account." : "Códigos de acesso que fornecem permissões a um aplicativo ou dispositivo para acessar sua conta.", + "Here you can generate individual passwords for apps so you don’t have to give out your password. You can revoke them individually too." : "Aqui você pode gerar senhas individuais para aplicativos. Assim você não tem que dar sua senha. Você pode revogá-los individualmente também.", "Name" : "Nome", "App name" : "Nome do aplicativo", "Create new app password" : "Criar uma nova senha do aplicativo", @@ -337,10 +361,10 @@ OC.L10N.register( "Username" : "Nome de Usuário", "Done" : "Concluído", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Desenvolvido pela {communityopen}comunidade Nextcloud{linkclose}. O {githubopen}código fonte{linkclose} é licenciado sob a {licenseopen}AGPL{linkclose}.", - "Follow us on Google Plus!" : "Siga-nos no Google Plus!", + "Follow us on Google+!" : "Siga-nos no Google+!", "Like our facebook page!" : "Curta nossa página no Facebook!", - "Subscribe to our twitter channel!" : "Assine o nosso canal no Twitter!", - "Subscribe to our news feed!" : "Assine nosso feed de notícias!", + "Follow us on Twitter!" : "Siga-nos no Twitter!", + "Check out our blog!" : "Confira nosso blog!", "Subscribe to our newsletter!" : "Inscreva-se para receber nosso boletim informativo!", "Settings" : "Configurações", "Show storage location" : "Mostrar localização do armazenamento", @@ -356,6 +380,7 @@ OC.L10N.register( "Group name" : "Nome do grupo", "Everyone" : "Para todos", "Admins" : "Administradores", + "Disabled" : "Desabilitado", "Default quota" : "Cota padrão", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Por favor insira a cota de armazenamento (ex: \"512\" ou \"12 GB\")", "Other" : "Outro", @@ -380,12 +405,19 @@ OC.L10N.register( "Uninstalling ...." : "Desinstalando...", "Error while uninstalling app" : "Erro enquanto desinstalava aplicativo", "Uninstall" : "Desinstalar", + "This is used for sending out notifications." : "Usado para o envio de notificações.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "O módulo PHP 'fileinfo' está faltando. Recomendamos que ative este módulo para obter melhores resultados com a detecção de mime-type.", "Uninstall app" : "Desinstalar aplicativo", "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>" : "Olá,<br><br>só para lhe informar que agora você tem uma %s conta.<br><br>Nome de usuário: <strong>%s</strong><br>Acesse: <strong><a href=\"%s\">%s</a></strong><br><br>", - "Cheers!" : "Saúde!", + "Cheers!" : "Saudações!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Olá,\n\nsó para lhe informar que você agora tem uma conta %s.\n\nNome de Usuário: %s\nAcesse: %s\n\n", "For password recovery and notifications" : "Para recuperação de senha e notificações", + "Your website" : "Seu website", + "Your Twitter handle" : "Seu Twitter", + "Passcodes that give an app or device permissions to access your account." : "Códigos de acesso que fornecem permissões a um aplicativo ou dispositivo para acessar sua conta.", + "Follow us on Google Plus!" : "Siga-nos no Google Plus!", + "Subscribe to our twitter channel!" : "Assine o nosso canal no Twitter!", + "Subscribe to our news feed!" : "Assine nosso feed de notícias!", "Show last log in" : "Mostrar o último acesso" }, "nplurals=2; plural=(n > 1);"); diff --git a/settings/l10n/pt_BR.json b/settings/l10n/pt_BR.json index b2c8794a613..56f90ece24c 100644 --- a/settings/l10n/pt_BR.json +++ b/settings/l10n/pt_BR.json @@ -6,6 +6,10 @@ "You changed your email address" : "Você alterou seu email", "Your email address was changed by an administrator" : "Seu email foi alterado pelo administrador", "Your <strong>password</strong> or <strong>email</strong> was modified" : "Sua <strong>senha</strong> ou <strong>email</strong> foram alterados", + "Your apps" : "Seus aplicativos", + "Enabled apps" : "Aplicativos habilitados", + "Disabled apps" : "Aplicativos desabilitados", + "App bundles" : "Pacotes de aplicativos", "Wrong password" : "Senha incorreta", "Saved" : "Salvo", "No user supplied" : "Nenhum usuário fornecido", @@ -26,7 +30,7 @@ "Well done, %s!" : "Bom trabalho, %s!", "If you received this email, the email configuration seems to be correct." : "Se você recebeu este email, é sinal que a configuração do email está correta.", "Email setting test" : "Teste da configuração de email", - "Mail could not be sent. Check your mail server log" : "Email não pôde ser enviado. Verifique o log do seu servidor de email", + "Email could not be sent. Check your mail server log" : "O email não pôde ser enviado. Verifique o log do servidor de email", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Ocorreu um problema ao enviar o email. Por favor, revise suas configurações. (Erro: %s)", "You need to set your user email before being able to send test emails." : "Você precisa configurar seu email de usuário antes de ser capaz de enviar emails de teste.", "Invalid request" : "Solicitação inválida", @@ -36,6 +40,10 @@ "To send a password link to the user an email address is required." : "Para envio da senha ao usuário é necessário um endereço de email.", "Unable to create user." : "Não é possível criar usuário.", "Unable to delete user." : "Não é possível excluir o usuário.", + "Error while enabling user." : "Erro ao habilitar usuário.", + "Error while disabling user." : "Erro ao desabilitar usuário.", + "In order to verify your Twitter account post following tweet on Twitter (please make sure to post it without any line breaks):" : "A fim de verificar sua conta no Twitter, poste isso no Twitter (por favor, certifique-se de postar sem quebras de linha):", + "In order to verify your Website store following content in your web-root at '.well-known/CloudIdVerificationCode.txt' (please make sure that the complete text is in one line):" : "A fim de verificar seu site, coloque o seguinte conteúdo no raiz do site: '.well-known/CloudIdVerificationCode.txt' (por favor certifique-se que o texto completo esteja em uma linha):", "Settings saved" : "Configurações salvas", "Unable to change full name" : "Não é possível alterar o nome completo", "Unable to change email address" : "Não foi possível alterar o endereço de email", @@ -95,11 +103,15 @@ "Updating...." : "Atualizando...", "Error while updating app" : "Erro ao atualizar aplicativo", "Updated" : "Atualizado", + "Removing …" : "Excluindo...", + "Error while removing app" : "Erro excluindo aplicativo", + "Remove" : "Excluir", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "O aplicativo foi habilitado mas precisa ser atualizado. Você será redirecionado para a página de atualização em 5 segundos.", "App update" : "Atualização de aplicativo", "Approved" : "Aprovado", "Experimental" : "Experimental", "No apps found for {query}" : "Nenhum aplicativo encontrado para {query}", + "Enable all" : "Habilitar tudo", "Allow filesystem access" : "Permitir acesso ao sistema de arquivos", "Disconnect" : "Desconectar", "Revoke" : "Revogar", @@ -134,6 +146,8 @@ "Visible to local users and to trusted servers" : "Visível para usuários locais e servidores confiáveis", "Public" : "Publico", "Will be synced to a global and public address book" : "Será sincronizado com livro de endereços público e global", + "Verify" : "Verificar", + "Verifying …" : "Verificando...", "Select a profile picture" : "Selecione uma imagem para o perfil", "Very weak password" : "Senha muito fraca", "Weak password" : "Senha fraca", @@ -157,12 +171,14 @@ "Password successfully changed" : "Senha alterada com sucesso", "Changing the password will result in data loss, because data recovery is not available for this user" : "Alterar a senha irá resultar em perda de dados pois a recuperação de dados não está disponível para este usuário", "Could not change the users email" : "Não foi possível alterar o email dos usuários", + "Error while changing status of {user}" : "Erro ao mudar o status de {user}", "A valid username must be provided" : "Forneça um nome de usuário válido", "Error creating user: {message}" : "Erro criando o usuário: {message}", "A valid password must be provided" : "Forneça uma senha válida", "A valid email must be provided" : "Um email válido deve ser fornecido", "__language_name__" : "Português Brasileiro", "Unlimited" : "Ilimitado", + "Verifying" : "Verificando", "Personal info" : "Informação pessoal", "Sessions" : "Sessões", "App passwords" : "Senhas de aplicativos", @@ -175,7 +191,7 @@ "STARTTLS" : "STARTTLS", "Email server" : "Servidor de email", "Open documentation" : "Abrir documentação", - "This is used for sending out notifications." : "Usado para o envio de notificações.", + "It is important to set up this server to be able to send emails, like for password reset and notifications." : "É importante configurar este servidor para poder enviar emails, assim como para redefinir a senha e notificações.", "Send mode" : "Modo de envio", "Encryption" : "Criptografia", "From address" : "Endereço \"From\"", @@ -191,6 +207,7 @@ "Test email settings" : "Configurações do email de teste", "Send email" : "Enviar email", "Server-side encryption" : "Criptografia do lado do servidor", + "Server-side encryption makes it possible to encrypt files which are uploaded to this server. This comes with limitations like a performance penalty, so enable this only if needed." : "A criptografia do lado do servidor torna possível criptografar arquivos que são carregados para este servidor. Isso vem com limitações como uma diminuição de desempenho, portanto, habilite isso apenas se necessário.", "Enable server-side encryption" : "Habilitar a criptografia do lado do servidor", "Please read carefully before activating server-side encryption: " : "Por favor, leia com atenção antes de ativar a criptografia do lado do servidor:", "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." : "Uma vez que a criptografia é ativada, todos os arquivos enviados ao servidor a partir desse ponto em diante serão criptografados e assim ficarão no servidor. Só será possível desativar a criptografia em uma data posterior se o módulo de criptografia ativo suportar essa função e todas as pré-condições sejam cumpridas (ex., defininindo uma chave de recuperação).", @@ -205,6 +222,7 @@ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Você precisa migrar suas chaves de criptografia a partir da antiga criptografia (ownCloud <= 8,0) para a nova.", "Start migration" : "Iniciar migração", "Security & setup warnings" : "Segurança & avisos de configuração", + "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the Tips & Ticks section and the documentation for more information." : "É importante para a segurança e o desempenho de sua instância que tudo esteja configurado corretamente. Para ajudá-lo com isso, estamos fazendo algumas verificações automáticas. Consulte a seção Dicas e a documentação para obter mais informações.", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "O PHP não parece estar configurado corretamente para consultar as variáveis de ambiente do sistema. O teste com getenv(\"PATH\") só retorna uma resposta vazia.", "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Por favor verifique a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação de instalação ↗</a> para as notas da configuração do PHP e do PHP do servidor, especialmente quando se utiliza php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "A configuração Somente-Leitura foi habilitada. Isso impede que algumas configurações sejam definidas via interface web. Além disso, o arquivo precisa ser definido manualmente com permissão de escrita para cada atualização.", @@ -225,6 +243,7 @@ "Last cron job execution: %s." : "Última execução do trabalho Cron: %s.", "Last cron job execution: %s. Something seems wrong." : "Última execução do trabalho Cron: %s. Algo parece errado.", "Cron was not executed yet!" : "Cron não foi executado ainda!", + "For optimal performance it's important to configure background jobs correctly. For bigger instances 'Cron' is the recommended setting. Please see the documentation for more information." : "Para um desempenho ideal, é importante configurar corretamente os trabalhos em segundo plano. Para instâncias maiores 'Cron' é a configuração recomendada. Consulte a documentação para obter mais informações.", "Execute one task with each page loaded" : "Execute uma tarefa com cada página carregada", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php está registrado no serviço webcron para chamar cron.php a cada 15 minutos sob http.", "Use system's cron service to call the cron.php file every 15 minutes." : "Usar o serviço cron do sistema para chamar o arquivo cron.php a cada 15 minutos.", @@ -232,6 +251,7 @@ "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Para rodar isso você precisa da extensão posix PHP. Veja a {linkstart}documentação PHP{linkend} para mais detalhes.", "Version" : "Versão", "Sharing" : "Compartilhamento", + "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Como administrador, você pode ajustar o comportamento de compartilhamento. Consulte a documentação para obter mais informações.", "Allow apps to use the Share API" : "Permitir que aplicativos usem a API de compartilhamento", "Allow users to share via link" : "Permitir que os usuários compartilhem por link", "Allow public uploads" : "Permitir envio público", @@ -250,6 +270,7 @@ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Mostrar o texto de aviso na página pública do link de envio. (Só é mostrado quando a lista de arquivos está oculta.)", "This text will be shown on the public link upload page when the file list is hidden." : "Este texto será mostrado na página de envio do link público quando a lista de arquivos está oculta.", "Tips & tricks" : "Dicas & Truques", + "There are a lot of features and config switches available to optimally customize and use this instance. Here are some pointers for more information." : "Há muitos recursos e opções de configuração disponíveis para otimizar e usar essa instância. Aqui estão algumas indicações para obter mais informações.", "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "SQLite é usando atualmente como backend de banco de dados. Para instalações maiores recomendamos que voce use um outro banco de dados", "This is particularly recommended when using the desktop client for file synchronisation." : "Isso é particulamente recomendado quando se utiliza um cliente para sincronização.", "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>." : "Para migrar para outro banco de dados use a ferramenta de linha de comando: 'occ db:convert-type', ou consulte a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação ↗</a>.", @@ -261,6 +282,8 @@ "Check the security of your Nextcloud over our security scan" : "Verifique a segurança da sua Nextcloud na nossa análise de segurança", "Hardening and security guidance" : "Orientações de proteção e segurança", "Developer documentation" : "Documentação do desenvolvedor", + "View in store" : "Ver na loja", + "Limit to groups" : "Limite para grupos", "This app has an update available." : "Este aplicativo tem uma atualização disponível.", "by %s" : "por %s", "%s-licensed" : "%s-licenciado", @@ -307,9 +330,10 @@ "Address" : "Endereço", "Your postal address" : "Seu endereço postal", "Website" : "Website", - "Your website" : "Seu website", + "It can take up to 24 hours before the account is displayed as verified." : "Pode levar até 24 horas para que a conta seja mostrada como verificada.", + "Link https://…" : "Link https://…", "Twitter" : "Twitter", - "Your Twitter handle" : "Seu Twitter", + "Twitter handle @…" : "Twitter handle @…", "You are member of the following groups:" : "Você é membro dos seguintes grupos:", "Password" : "Senha", "Current password" : "Senha atual", @@ -326,7 +350,7 @@ "Web, desktop and mobile clients currently logged in to your account." : "Clientes Web, desktop e móvel que estão conectados à sua conta.", "Device" : "Dispositivo", "Last activity" : "Última atividade", - "Passcodes that give an app or device permissions to access your account." : "Códigos de acesso que fornecem permissões a um aplicativo ou dispositivo para acessar sua conta.", + "Here you can generate individual passwords for apps so you don’t have to give out your password. You can revoke them individually too." : "Aqui você pode gerar senhas individuais para aplicativos. Assim você não tem que dar sua senha. Você pode revogá-los individualmente também.", "Name" : "Nome", "App name" : "Nome do aplicativo", "Create new app password" : "Criar uma nova senha do aplicativo", @@ -335,10 +359,10 @@ "Username" : "Nome de Usuário", "Done" : "Concluído", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Desenvolvido pela {communityopen}comunidade Nextcloud{linkclose}. O {githubopen}código fonte{linkclose} é licenciado sob a {licenseopen}AGPL{linkclose}.", - "Follow us on Google Plus!" : "Siga-nos no Google Plus!", + "Follow us on Google+!" : "Siga-nos no Google+!", "Like our facebook page!" : "Curta nossa página no Facebook!", - "Subscribe to our twitter channel!" : "Assine o nosso canal no Twitter!", - "Subscribe to our news feed!" : "Assine nosso feed de notícias!", + "Follow us on Twitter!" : "Siga-nos no Twitter!", + "Check out our blog!" : "Confira nosso blog!", "Subscribe to our newsletter!" : "Inscreva-se para receber nosso boletim informativo!", "Settings" : "Configurações", "Show storage location" : "Mostrar localização do armazenamento", @@ -354,6 +378,7 @@ "Group name" : "Nome do grupo", "Everyone" : "Para todos", "Admins" : "Administradores", + "Disabled" : "Desabilitado", "Default quota" : "Cota padrão", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Por favor insira a cota de armazenamento (ex: \"512\" ou \"12 GB\")", "Other" : "Outro", @@ -378,12 +403,19 @@ "Uninstalling ...." : "Desinstalando...", "Error while uninstalling app" : "Erro enquanto desinstalava aplicativo", "Uninstall" : "Desinstalar", + "This is used for sending out notifications." : "Usado para o envio de notificações.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "O módulo PHP 'fileinfo' está faltando. Recomendamos que ative este módulo para obter melhores resultados com a detecção de mime-type.", "Uninstall app" : "Desinstalar aplicativo", "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>" : "Olá,<br><br>só para lhe informar que agora você tem uma %s conta.<br><br>Nome de usuário: <strong>%s</strong><br>Acesse: <strong><a href=\"%s\">%s</a></strong><br><br>", - "Cheers!" : "Saúde!", + "Cheers!" : "Saudações!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Olá,\n\nsó para lhe informar que você agora tem uma conta %s.\n\nNome de Usuário: %s\nAcesse: %s\n\n", "For password recovery and notifications" : "Para recuperação de senha e notificações", + "Your website" : "Seu website", + "Your Twitter handle" : "Seu Twitter", + "Passcodes that give an app or device permissions to access your account." : "Códigos de acesso que fornecem permissões a um aplicativo ou dispositivo para acessar sua conta.", + "Follow us on Google Plus!" : "Siga-nos no Google Plus!", + "Subscribe to our twitter channel!" : "Assine o nosso canal no Twitter!", + "Subscribe to our news feed!" : "Assine nosso feed de notícias!", "Show last log in" : "Mostrar o último acesso" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/settings/l10n/pt_PT.js b/settings/l10n/pt_PT.js index 776dc8a3fa1..9305bc3bc5a 100644 --- a/settings/l10n/pt_PT.js +++ b/settings/l10n/pt_PT.js @@ -95,7 +95,6 @@ OC.L10N.register( "NT LAN Manager" : "Gestor de REDE NT", "Email server" : "Servidor de Correio Eletrónico", "Open documentation" : "Abrir documentação", - "This is used for sending out notifications." : "Isto é utilizado para enviar notificações", "Send mode" : "Modo de Envio", "Encryption" : "Encriptação", "From address" : "Do endereço", @@ -248,6 +247,7 @@ OC.L10N.register( "Uninstalling ...." : "A desinstalar....", "Error while uninstalling app" : "Ocorreu um erro durante a desinstalação da app", "Uninstall" : "Desinstalar", + "This is used for sending out notifications." : "Isto é utilizado para enviar notificações", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "O Módulo PHP 'fileinfo' não se encontra instalado/activado. É fortemente recomendado que active este módulo para obter os melhores resultado com a detecção dos tipos de mime.", "Cheers!" : "Parabéns!", "For password recovery and notifications" : "Para recuperação da palavra-passe e notificações", diff --git a/settings/l10n/pt_PT.json b/settings/l10n/pt_PT.json index 7246e998fb2..3a8edc901e7 100644 --- a/settings/l10n/pt_PT.json +++ b/settings/l10n/pt_PT.json @@ -93,7 +93,6 @@ "NT LAN Manager" : "Gestor de REDE NT", "Email server" : "Servidor de Correio Eletrónico", "Open documentation" : "Abrir documentação", - "This is used for sending out notifications." : "Isto é utilizado para enviar notificações", "Send mode" : "Modo de Envio", "Encryption" : "Encriptação", "From address" : "Do endereço", @@ -246,6 +245,7 @@ "Uninstalling ...." : "A desinstalar....", "Error while uninstalling app" : "Ocorreu um erro durante a desinstalação da app", "Uninstall" : "Desinstalar", + "This is used for sending out notifications." : "Isto é utilizado para enviar notificações", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "O Módulo PHP 'fileinfo' não se encontra instalado/activado. É fortemente recomendado que active este módulo para obter os melhores resultado com a detecção dos tipos de mime.", "Cheers!" : "Parabéns!", "For password recovery and notifications" : "Para recuperação da palavra-passe e notificações", diff --git a/settings/l10n/ru.js b/settings/l10n/ru.js index 55089b235e5..d9f630de32e 100644 --- a/settings/l10n/ru.js +++ b/settings/l10n/ru.js @@ -8,6 +8,9 @@ OC.L10N.register( "You changed your email address" : "Вы изменили свой адрес email", "Your email address was changed by an administrator" : "Ваш адрес email был изменён администратором", "Your <strong>password</strong> or <strong>email</strong> was modified" : "Вашr <strong>пароль</strong> или <strong>email</strong> были изменены", + "Your apps" : "Ваши приложения", + "Enabled apps" : "Активные приложения", + "Disabled apps" : "Отключённые приложения", "Wrong password" : "Неправильный пароль", "Saved" : "Сохранено", "No user supplied" : "Пользователь не задан", @@ -28,7 +31,6 @@ OC.L10N.register( "Well done, %s!" : "Отлично, %s!", "If you received this email, the email configuration seems to be correct." : "Если вы получили это сообщение, значит электронная почта настроена правильно.", "Email setting test" : "Проверка настроек электронной почты", - "Mail could not be sent. Check your mail server log" : "Не удалось отправить почту. Проверьте журнал почтового сервера.", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Во время отправки письма произошла ошибка. Пожалуйста проверьте настройки. (Ошибка: %s)", "You need to set your user email before being able to send test emails." : "Вы должны настроить ваш собственный адрес электронной почты прежде чем отправлять тестовые сообщения.", "Invalid request" : "Неправильный запрос", @@ -97,6 +99,9 @@ OC.L10N.register( "Updating...." : "Обновление...", "Error while updating app" : "Ошибка при обновлении приложения", "Updated" : "Обновлено", + "Removing …" : "Удаление…", + "Error while removing app" : "Ошибка при удалении приложения", + "Remove" : "Удалить", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Приложение было включено и нуждается в обновлении. Вас перенаправит на страницу обновления через 5 секунд.", "App update" : "Обновить приложения", "Approved" : "Подтвержденное", @@ -177,7 +182,6 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "Email server" : "Почтовый сервер", "Open documentation" : "Открыть документацию", - "This is used for sending out notifications." : "Используется для отправки уведомлений.", "Send mode" : "Способ отправки", "Encryption" : "Шифрование", "From address" : "Адрес отправителя", @@ -263,6 +267,8 @@ OC.L10N.register( "Check the security of your Nextcloud over our security scan" : "Проверить безопасность вашего Nextcloud нашем сканером", "Hardening and security guidance" : "Руководство по безопасности и защите", "Developer documentation" : "Документация для разработчиков", + "View in store" : "Посмотреть в магазине приложений", + "Limit to groups" : "Ограничить группами", "This app has an update available." : "Для этого приложения доступно обновление.", "by %s" : "от %s", "%s-licensed" : "Лицензия %s", @@ -309,9 +315,7 @@ OC.L10N.register( "Address" : "Адрес", "Your postal address" : "Ваш почтовый адрес", "Website" : "Сайт", - "Your website" : "Ваш сайт", "Twitter" : "Twitter", - "Your Twitter handle" : "Ваше имя в Twiter", "You are member of the following groups:" : "Вы являетесь членом следующих групп:", "Password" : "Пароль", "Current password" : "Текущий пароль", @@ -328,7 +332,6 @@ OC.L10N.register( "Web, desktop and mobile clients currently logged in to your account." : "Веб, настольные и мобильные клиенты, которые в настоящий момент авторизованы вашей учётной записью.", "Device" : "Устройство", "Last activity" : "Последние действия", - "Passcodes that give an app or device permissions to access your account." : "Код доступа, который дает приложению или устройству разрешения на доступ к вашей учётной записи.", "Name" : "Название", "App name" : "Название приложения", "Create new app password" : "Создать новый пароль для приложения", @@ -337,10 +340,7 @@ OC.L10N.register( "Username" : "Имя пользователя", "Done" : "Выполнено", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Разработано {communityopen}сообществом Nextcloud{linkclose}, {githubopen}исходный код{linkclose} лицензируется в соответствии с {licenseopen}AGPL{linkclose}.", - "Follow us on Google Plus!" : "Следите за нашими новостями в Google Plus!", "Like our facebook page!" : "Посмотрите нашу страницу на facebook!", - "Subscribe to our twitter channel!" : "Подпишитесь на наш twitter-канал!", - "Subscribe to our news feed!" : "Подпишитесь на нашу ленту новостей!", "Subscribe to our newsletter!" : "Подписывайтесь на нашу новостную рассылку!", "Settings" : "Настройки", "Show storage location" : "Показать местонахождение хранилища", @@ -380,12 +380,19 @@ OC.L10N.register( "Uninstalling ...." : "Удаление ...", "Error while uninstalling app" : "Ошибка при удалении приложения", "Uninstall" : "Удалить", + "This is used for sending out notifications." : "Используется для отправки уведомлений.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-модуль 'fileinfo' отсутствует. Мы настоятельно рекомендуем включить этот модуль для улучшения определения типов (mime-type) файлов.", "Uninstall app" : "Удалить приложение", "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "Здравствуйте,<br><br>просто хотим сообщить, что теперь у вас есть учетная запись на %s.<br><br>Ваше имя пользователя: <strong>%s</strong><br>Зайти: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "Удачи!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Здравствуйте,\n\nПросто хотим сообщить, что теперь у вас есть учетная запись на %s.\n\nИмя пользователя: %s\nЗайти: %s\n", "For password recovery and notifications" : "Для восстановления пароля и уведомлений", + "Your website" : "Ваш сайт", + "Your Twitter handle" : "Ваше имя в Twiter", + "Passcodes that give an app or device permissions to access your account." : "Код доступа, который дает приложению или устройству разрешения на доступ к вашей учётной записи.", + "Follow us on Google Plus!" : "Следите за нашими новостями в Google Plus!", + "Subscribe to our twitter channel!" : "Подпишитесь на наш twitter-канал!", + "Subscribe to our news feed!" : "Подпишитесь на нашу ленту новостей!", "Show last log in" : "Показать последний вход в систему" }, "nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"); diff --git a/settings/l10n/ru.json b/settings/l10n/ru.json index ce84adbeace..ab2a70678ca 100644 --- a/settings/l10n/ru.json +++ b/settings/l10n/ru.json @@ -6,6 +6,9 @@ "You changed your email address" : "Вы изменили свой адрес email", "Your email address was changed by an administrator" : "Ваш адрес email был изменён администратором", "Your <strong>password</strong> or <strong>email</strong> was modified" : "Вашr <strong>пароль</strong> или <strong>email</strong> были изменены", + "Your apps" : "Ваши приложения", + "Enabled apps" : "Активные приложения", + "Disabled apps" : "Отключённые приложения", "Wrong password" : "Неправильный пароль", "Saved" : "Сохранено", "No user supplied" : "Пользователь не задан", @@ -26,7 +29,6 @@ "Well done, %s!" : "Отлично, %s!", "If you received this email, the email configuration seems to be correct." : "Если вы получили это сообщение, значит электронная почта настроена правильно.", "Email setting test" : "Проверка настроек электронной почты", - "Mail could not be sent. Check your mail server log" : "Не удалось отправить почту. Проверьте журнал почтового сервера.", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Во время отправки письма произошла ошибка. Пожалуйста проверьте настройки. (Ошибка: %s)", "You need to set your user email before being able to send test emails." : "Вы должны настроить ваш собственный адрес электронной почты прежде чем отправлять тестовые сообщения.", "Invalid request" : "Неправильный запрос", @@ -95,6 +97,9 @@ "Updating...." : "Обновление...", "Error while updating app" : "Ошибка при обновлении приложения", "Updated" : "Обновлено", + "Removing …" : "Удаление…", + "Error while removing app" : "Ошибка при удалении приложения", + "Remove" : "Удалить", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Приложение было включено и нуждается в обновлении. Вас перенаправит на страницу обновления через 5 секунд.", "App update" : "Обновить приложения", "Approved" : "Подтвержденное", @@ -175,7 +180,6 @@ "STARTTLS" : "STARTTLS", "Email server" : "Почтовый сервер", "Open documentation" : "Открыть документацию", - "This is used for sending out notifications." : "Используется для отправки уведомлений.", "Send mode" : "Способ отправки", "Encryption" : "Шифрование", "From address" : "Адрес отправителя", @@ -261,6 +265,8 @@ "Check the security of your Nextcloud over our security scan" : "Проверить безопасность вашего Nextcloud нашем сканером", "Hardening and security guidance" : "Руководство по безопасности и защите", "Developer documentation" : "Документация для разработчиков", + "View in store" : "Посмотреть в магазине приложений", + "Limit to groups" : "Ограничить группами", "This app has an update available." : "Для этого приложения доступно обновление.", "by %s" : "от %s", "%s-licensed" : "Лицензия %s", @@ -307,9 +313,7 @@ "Address" : "Адрес", "Your postal address" : "Ваш почтовый адрес", "Website" : "Сайт", - "Your website" : "Ваш сайт", "Twitter" : "Twitter", - "Your Twitter handle" : "Ваше имя в Twiter", "You are member of the following groups:" : "Вы являетесь членом следующих групп:", "Password" : "Пароль", "Current password" : "Текущий пароль", @@ -326,7 +330,6 @@ "Web, desktop and mobile clients currently logged in to your account." : "Веб, настольные и мобильные клиенты, которые в настоящий момент авторизованы вашей учётной записью.", "Device" : "Устройство", "Last activity" : "Последние действия", - "Passcodes that give an app or device permissions to access your account." : "Код доступа, который дает приложению или устройству разрешения на доступ к вашей учётной записи.", "Name" : "Название", "App name" : "Название приложения", "Create new app password" : "Создать новый пароль для приложения", @@ -335,10 +338,7 @@ "Username" : "Имя пользователя", "Done" : "Выполнено", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Разработано {communityopen}сообществом Nextcloud{linkclose}, {githubopen}исходный код{linkclose} лицензируется в соответствии с {licenseopen}AGPL{linkclose}.", - "Follow us on Google Plus!" : "Следите за нашими новостями в Google Plus!", "Like our facebook page!" : "Посмотрите нашу страницу на facebook!", - "Subscribe to our twitter channel!" : "Подпишитесь на наш twitter-канал!", - "Subscribe to our news feed!" : "Подпишитесь на нашу ленту новостей!", "Subscribe to our newsletter!" : "Подписывайтесь на нашу новостную рассылку!", "Settings" : "Настройки", "Show storage location" : "Показать местонахождение хранилища", @@ -378,12 +378,19 @@ "Uninstalling ...." : "Удаление ...", "Error while uninstalling app" : "Ошибка при удалении приложения", "Uninstall" : "Удалить", + "This is used for sending out notifications." : "Используется для отправки уведомлений.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-модуль 'fileinfo' отсутствует. Мы настоятельно рекомендуем включить этот модуль для улучшения определения типов (mime-type) файлов.", "Uninstall app" : "Удалить приложение", "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "Здравствуйте,<br><br>просто хотим сообщить, что теперь у вас есть учетная запись на %s.<br><br>Ваше имя пользователя: <strong>%s</strong><br>Зайти: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "Удачи!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Здравствуйте,\n\nПросто хотим сообщить, что теперь у вас есть учетная запись на %s.\n\nИмя пользователя: %s\nЗайти: %s\n", "For password recovery and notifications" : "Для восстановления пароля и уведомлений", + "Your website" : "Ваш сайт", + "Your Twitter handle" : "Ваше имя в Twiter", + "Passcodes that give an app or device permissions to access your account." : "Код доступа, который дает приложению или устройству разрешения на доступ к вашей учётной записи.", + "Follow us on Google Plus!" : "Следите за нашими новостями в Google Plus!", + "Subscribe to our twitter channel!" : "Подпишитесь на наш twitter-канал!", + "Subscribe to our news feed!" : "Подпишитесь на нашу ленту новостей!", "Show last log in" : "Показать последний вход в систему" },"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);" }
\ No newline at end of file diff --git a/settings/l10n/sk.js b/settings/l10n/sk.js index b9ccb75f997..d4075f51f92 100644 --- a/settings/l10n/sk.js +++ b/settings/l10n/sk.js @@ -134,7 +134,6 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "Email server" : "Email server", "Open documentation" : "Otvoriť dokumentáciu", - "This is used for sending out notifications." : "Používa sa na odosielanie upozornení.", "Send mode" : "Mód odosielania", "Encryption" : "Šifrovanie", "From address" : "Z adresy", @@ -245,9 +244,7 @@ OC.L10N.register( "Address" : "Adresa", "Your postal address" : "Vaša poštová adresa", "Website" : "Webstránka", - "Your website" : "Vaša webstránka", "Twitter" : "Twitter", - "Your Twitter handle" : "Vaša stránka na Twitteri", "You are member of the following groups:" : "Ste členom nasledovných skupín:", "Password" : "Heslo", "Current password" : "Aktuálne heslo", @@ -264,7 +261,6 @@ OC.L10N.register( "Web, desktop and mobile clients currently logged in to your account." : "Weboví, desktopoví, alebo mobilní klienti práve prihlásení na váš účet.", "Device" : "Zariadenie", "Last activity" : "Posledná aktivita", - "Passcodes that give an app or device permissions to access your account." : "Prístupové heslá, ktoré dovolia aplikáciam alebo zariadeniam prístup na váš účet.", "Name" : "Názov", "App name" : "Názov aplikácie", "Create new app password" : "Vytvoriť nové heslo aplikácie", @@ -272,7 +268,6 @@ OC.L10N.register( "For security reasons this password will only be shown once." : "Z dôvodu bezpečnosti toto heslo bude zobrazené iba jeden krát.", "Username" : "Používateľské meno", "Done" : "Hotovo", - "Follow us on Google Plus!" : "Sleduj nás na Google Plus!", "Settings" : "Nastavenia", "Show storage location" : "Zobraziť umiestnenie úložiska", "Show user backend" : "Zobraziť backend používateľa", @@ -310,12 +305,17 @@ OC.L10N.register( "Uninstalling ...." : "Prebieha odinštalovanie...", "Error while uninstalling app" : "Chyba pri odinštalovaní aplikácie", "Uninstall" : "Odinštalácia", + "This is used for sending out notifications." : "Používa sa na odosielanie upozornení.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Chýba modul 'fileinfo'. Dôrazne doporučujeme ho povoliť pre dosiahnutie najlepších výsledkov zisťovania mime-typu.", "Uninstall app" : "Odinštalovať aplikáciu", "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "Dobrý deň,<br><br>toto je oznámenie o novo vytvorenom účte %s.<br><br>Vaše používateľské meno: <strong>%s</strong><br>Prihlásiť sa môžete tu: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "Pekný deň!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Dobrý deň,\n\ntoto je oznámenie o novo vytvorenom účte %s.\n\nVaše používateľské meno: %s\nPrihlásiť sa môžete tu: %s\n\n", "For password recovery and notifications" : "Pre obnovu hesla a oznámenia", + "Your website" : "Vaša webstránka", + "Your Twitter handle" : "Vaša stránka na Twitteri", + "Passcodes that give an app or device permissions to access your account." : "Prístupové heslá, ktoré dovolia aplikáciam alebo zariadeniam prístup na váš účet.", + "Follow us on Google Plus!" : "Sleduj nás na Google Plus!", "Show last log in" : "Zobraziť posledné prihlásenie" }, "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/settings/l10n/sk.json b/settings/l10n/sk.json index e76e13a4beb..c782bef0b1a 100644 --- a/settings/l10n/sk.json +++ b/settings/l10n/sk.json @@ -132,7 +132,6 @@ "STARTTLS" : "STARTTLS", "Email server" : "Email server", "Open documentation" : "Otvoriť dokumentáciu", - "This is used for sending out notifications." : "Používa sa na odosielanie upozornení.", "Send mode" : "Mód odosielania", "Encryption" : "Šifrovanie", "From address" : "Z adresy", @@ -243,9 +242,7 @@ "Address" : "Adresa", "Your postal address" : "Vaša poštová adresa", "Website" : "Webstránka", - "Your website" : "Vaša webstránka", "Twitter" : "Twitter", - "Your Twitter handle" : "Vaša stránka na Twitteri", "You are member of the following groups:" : "Ste členom nasledovných skupín:", "Password" : "Heslo", "Current password" : "Aktuálne heslo", @@ -262,7 +259,6 @@ "Web, desktop and mobile clients currently logged in to your account." : "Weboví, desktopoví, alebo mobilní klienti práve prihlásení na váš účet.", "Device" : "Zariadenie", "Last activity" : "Posledná aktivita", - "Passcodes that give an app or device permissions to access your account." : "Prístupové heslá, ktoré dovolia aplikáciam alebo zariadeniam prístup na váš účet.", "Name" : "Názov", "App name" : "Názov aplikácie", "Create new app password" : "Vytvoriť nové heslo aplikácie", @@ -270,7 +266,6 @@ "For security reasons this password will only be shown once." : "Z dôvodu bezpečnosti toto heslo bude zobrazené iba jeden krát.", "Username" : "Používateľské meno", "Done" : "Hotovo", - "Follow us on Google Plus!" : "Sleduj nás na Google Plus!", "Settings" : "Nastavenia", "Show storage location" : "Zobraziť umiestnenie úložiska", "Show user backend" : "Zobraziť backend používateľa", @@ -308,12 +303,17 @@ "Uninstalling ...." : "Prebieha odinštalovanie...", "Error while uninstalling app" : "Chyba pri odinštalovaní aplikácie", "Uninstall" : "Odinštalácia", + "This is used for sending out notifications." : "Používa sa na odosielanie upozornení.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Chýba modul 'fileinfo'. Dôrazne doporučujeme ho povoliť pre dosiahnutie najlepších výsledkov zisťovania mime-typu.", "Uninstall app" : "Odinštalovať aplikáciu", "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "Dobrý deň,<br><br>toto je oznámenie o novo vytvorenom účte %s.<br><br>Vaše používateľské meno: <strong>%s</strong><br>Prihlásiť sa môžete tu: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "Pekný deň!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Dobrý deň,\n\ntoto je oznámenie o novo vytvorenom účte %s.\n\nVaše používateľské meno: %s\nPrihlásiť sa môžete tu: %s\n\n", "For password recovery and notifications" : "Pre obnovu hesla a oznámenia", + "Your website" : "Vaša webstránka", + "Your Twitter handle" : "Vaša stránka na Twitteri", + "Passcodes that give an app or device permissions to access your account." : "Prístupové heslá, ktoré dovolia aplikáciam alebo zariadeniam prístup na váš účet.", + "Follow us on Google Plus!" : "Sleduj nás na Google Plus!", "Show last log in" : "Zobraziť posledné prihlásenie" },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" }
\ No newline at end of file diff --git a/settings/l10n/sl.js b/settings/l10n/sl.js index 76f538a91fe..3990696158e 100644 --- a/settings/l10n/sl.js +++ b/settings/l10n/sl.js @@ -93,7 +93,6 @@ OC.L10N.register( "NT LAN Manager" : "Upravljalnik NT LAN", "Email server" : "Poštni strežnik", "Open documentation" : "Odprta dokumentacija", - "This is used for sending out notifications." : "Možnost je uporabljena za omogočanje pošiljanja obvestil.", "Send mode" : "Način pošiljanja", "Encryption" : "Šifriranje", "From address" : "Naslov pošiljatelja", @@ -236,6 +235,7 @@ OC.L10N.register( "Uninstalling ...." : "Odstranjevanje namestitve ...", "Error while uninstalling app" : "Prišlo je do napake med odstranjevanjem programa.", "Uninstall" : "Odstrani namestitev", + "This is used for sending out notifications." : "Možnost je uporabljena za omogočanje pošiljanja obvestil.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Manjka modul PHP 'fileinfo'. Priporočljivo je omogočiti ta modul za popolno zaznavanje vrst MIME.", "Cheers!" : "Lep pozdrav!", "For password recovery and notifications" : "Za obnovo gesla in obveščanje", diff --git a/settings/l10n/sl.json b/settings/l10n/sl.json index 0eadd1ed4e0..139abde42f7 100644 --- a/settings/l10n/sl.json +++ b/settings/l10n/sl.json @@ -91,7 +91,6 @@ "NT LAN Manager" : "Upravljalnik NT LAN", "Email server" : "Poštni strežnik", "Open documentation" : "Odprta dokumentacija", - "This is used for sending out notifications." : "Možnost je uporabljena za omogočanje pošiljanja obvestil.", "Send mode" : "Način pošiljanja", "Encryption" : "Šifriranje", "From address" : "Naslov pošiljatelja", @@ -234,6 +233,7 @@ "Uninstalling ...." : "Odstranjevanje namestitve ...", "Error while uninstalling app" : "Prišlo je do napake med odstranjevanjem programa.", "Uninstall" : "Odstrani namestitev", + "This is used for sending out notifications." : "Možnost je uporabljena za omogočanje pošiljanja obvestil.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Manjka modul PHP 'fileinfo'. Priporočljivo je omogočiti ta modul za popolno zaznavanje vrst MIME.", "Cheers!" : "Lep pozdrav!", "For password recovery and notifications" : "Za obnovo gesla in obveščanje", diff --git a/settings/l10n/sq.js b/settings/l10n/sq.js index 42233670fed..579a4f460e6 100644 --- a/settings/l10n/sq.js +++ b/settings/l10n/sq.js @@ -137,7 +137,6 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "Email server" : "Shërbyes email-esh", "Open documentation" : "Hapni dokumentimin", - "This is used for sending out notifications." : "Ky përdoret për të dërguar njoftime.", "Send mode" : "Mënyrë dërgimi", "Encryption" : "Fshehtëzim", "From address" : "Nga adresa", @@ -264,9 +263,7 @@ OC.L10N.register( "Address" : "Adresa", "Your postal address" : "Adresa juaj postale", "Website" : "Website", - "Your website" : "Website-i juaj", "Twitter" : "Twitter", - "Your Twitter handle" : "Emri i përdoruesit tuaj në Twitter", "You are member of the following groups:" : "Jeni anëtar i grupeve vijuese:", "Password" : "Fjalëkalim", "Current password" : "Fjalëkalimi i tanishëm", @@ -283,7 +280,6 @@ OC.L10N.register( "Web, desktop and mobile clients currently logged in to your account." : "Klientë në rrjet, desktop dhe celular kanë hyrë aktualisht në llogarinë tuaj.", "Device" : "Pajisje", "Last activity" : "Aktiviteti i fundit", - "Passcodes that give an app or device permissions to access your account." : "Fjalëkalimet të cilat i japin një aplikacioni ose pajisje lejen për të aksesuar llogarinë tuaj.", "Name" : "Emër", "App name" : "Emër aplikacioni", "Create new app password" : "Krijoni fjalëkalim aplikacioni të ri", @@ -292,10 +288,7 @@ OC.L10N.register( "Username" : "Emër përdoruesi", "Done" : "U bë", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Zhvilluar nga {communityopen}komuniteti Nextcloud {linkclose}, {githubopen}kodi i hapur{linkclose} iështë licensuar sipar {licenseopen}AGPL{linkclose}.", - "Follow us on Google Plus!" : "Na ndiqni në Google Plus!", "Like our facebook page!" : "Pëlqeni faqen tonë në facebook!", - "Subscribe to our twitter channel!" : "Abonohuni në kanalin tonë në twitter!", - "Subscribe to our news feed!" : "Abonohuni në kanalin tonë në twitter!", "Subscribe to our newsletter!" : "Abonohuni në buletinin tonë informativ!", "Show storage location" : "Shfaq vendndodhje depozite", "Show user backend" : "Shfaq programin klient të përdoruesit", @@ -332,12 +325,19 @@ OC.L10N.register( "Uninstalling ...." : "Po çinstalohet…", "Error while uninstalling app" : "Gabim në çinstalimin e aplikacionit", "Uninstall" : "Çinstaloje", + "This is used for sending out notifications." : "Ky përdoret për të dërguar njoftime.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Moduli PHP 'fileinfo' mungon. Ju këshillojmë me forcë ta aktivizoni këtë modul, për të patur përfundimet më të mira në zbulim llojesh MIME.", "Uninstall app" : "Çinstaloje Aplikacionin", "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>" : "Njatjeta,<br><br>thjesht po ju bëjmë të ditur që tani keni një llogari %s.<br><br>Emri juaj i përdoruesit: <strong>%s</strong><br> Hyni në të te: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "Gëzuar!", "Hey there,\n\njust letting you know that you now have a %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 ", + "Your website" : "Website-i juaj", + "Your Twitter handle" : "Emri i përdoruesit tuaj në Twitter", + "Passcodes that give an app or device permissions to access your account." : "Fjalëkalimet të cilat i japin një aplikacioni ose pajisje lejen për të aksesuar llogarinë tuaj.", + "Follow us on Google Plus!" : "Na ndiqni në Google Plus!", + "Subscribe to our twitter channel!" : "Abonohuni në kanalin tonë në twitter!", + "Subscribe to our news feed!" : "Abonohuni në kanalin tonë në twitter!", "Show last log in" : "Shfaq hyrjen e fundit" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/sq.json b/settings/l10n/sq.json index 81eae9891e5..193fca52de6 100644 --- a/settings/l10n/sq.json +++ b/settings/l10n/sq.json @@ -135,7 +135,6 @@ "STARTTLS" : "STARTTLS", "Email server" : "Shërbyes email-esh", "Open documentation" : "Hapni dokumentimin", - "This is used for sending out notifications." : "Ky përdoret për të dërguar njoftime.", "Send mode" : "Mënyrë dërgimi", "Encryption" : "Fshehtëzim", "From address" : "Nga adresa", @@ -262,9 +261,7 @@ "Address" : "Adresa", "Your postal address" : "Adresa juaj postale", "Website" : "Website", - "Your website" : "Website-i juaj", "Twitter" : "Twitter", - "Your Twitter handle" : "Emri i përdoruesit tuaj në Twitter", "You are member of the following groups:" : "Jeni anëtar i grupeve vijuese:", "Password" : "Fjalëkalim", "Current password" : "Fjalëkalimi i tanishëm", @@ -281,7 +278,6 @@ "Web, desktop and mobile clients currently logged in to your account." : "Klientë në rrjet, desktop dhe celular kanë hyrë aktualisht në llogarinë tuaj.", "Device" : "Pajisje", "Last activity" : "Aktiviteti i fundit", - "Passcodes that give an app or device permissions to access your account." : "Fjalëkalimet të cilat i japin një aplikacioni ose pajisje lejen për të aksesuar llogarinë tuaj.", "Name" : "Emër", "App name" : "Emër aplikacioni", "Create new app password" : "Krijoni fjalëkalim aplikacioni të ri", @@ -290,10 +286,7 @@ "Username" : "Emër përdoruesi", "Done" : "U bë", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Zhvilluar nga {communityopen}komuniteti Nextcloud {linkclose}, {githubopen}kodi i hapur{linkclose} iështë licensuar sipar {licenseopen}AGPL{linkclose}.", - "Follow us on Google Plus!" : "Na ndiqni në Google Plus!", "Like our facebook page!" : "Pëlqeni faqen tonë në facebook!", - "Subscribe to our twitter channel!" : "Abonohuni në kanalin tonë në twitter!", - "Subscribe to our news feed!" : "Abonohuni në kanalin tonë në twitter!", "Subscribe to our newsletter!" : "Abonohuni në buletinin tonë informativ!", "Show storage location" : "Shfaq vendndodhje depozite", "Show user backend" : "Shfaq programin klient të përdoruesit", @@ -330,12 +323,19 @@ "Uninstalling ...." : "Po çinstalohet…", "Error while uninstalling app" : "Gabim në çinstalimin e aplikacionit", "Uninstall" : "Çinstaloje", + "This is used for sending out notifications." : "Ky përdoret për të dërguar njoftime.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Moduli PHP 'fileinfo' mungon. Ju këshillojmë me forcë ta aktivizoni këtë modul, për të patur përfundimet më të mira në zbulim llojesh MIME.", "Uninstall app" : "Çinstaloje Aplikacionin", "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>" : "Njatjeta,<br><br>thjesht po ju bëjmë të ditur që tani keni një llogari %s.<br><br>Emri juaj i përdoruesit: <strong>%s</strong><br> Hyni në të te: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "Gëzuar!", "Hey there,\n\njust letting you know that you now have a %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 ", + "Your website" : "Website-i juaj", + "Your Twitter handle" : "Emri i përdoruesit tuaj në Twitter", + "Passcodes that give an app or device permissions to access your account." : "Fjalëkalimet të cilat i japin një aplikacioni ose pajisje lejen për të aksesuar llogarinë tuaj.", + "Follow us on Google Plus!" : "Na ndiqni në Google Plus!", + "Subscribe to our twitter channel!" : "Abonohuni në kanalin tonë në twitter!", + "Subscribe to our news feed!" : "Abonohuni në kanalin tonë në twitter!", "Show last log in" : "Shfaq hyrjen e fundit" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/settings/l10n/sr.js b/settings/l10n/sr.js index 999afdabdda..63c3ecf0229 100644 --- a/settings/l10n/sr.js +++ b/settings/l10n/sr.js @@ -78,7 +78,6 @@ OC.L10N.register( "NT LAN Manager" : "НТ ЛАН менаџер", "Email server" : "Сервер е-поште", "Open documentation" : "Отвори документацију", - "This is used for sending out notifications." : "Ово се користи за слање обавештења.", "Send mode" : "Режим слања", "Encryption" : "Шифровање", "From address" : "Са адресе", @@ -209,6 +208,7 @@ OC.L10N.register( "Uninstalling ...." : "Деинсталирам ...", "Error while uninstalling app" : "Грешка при деинсталацији апликације", "Uninstall" : "Деинсталирај", + "This is used for sending out notifications." : "Ово се користи за слање обавештења.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Недостаје ПХП модул „fileinfo“. Препоручујемо вам да га укључите да бисте добили најбоље резултате с откривањем МИМЕ врста.", "Cheers!" : "Здраво!", "Show last log in" : "Прикажи последњу пријаву" diff --git a/settings/l10n/sr.json b/settings/l10n/sr.json index 7867ce720dc..ac4732e7e69 100644 --- a/settings/l10n/sr.json +++ b/settings/l10n/sr.json @@ -76,7 +76,6 @@ "NT LAN Manager" : "НТ ЛАН менаџер", "Email server" : "Сервер е-поште", "Open documentation" : "Отвори документацију", - "This is used for sending out notifications." : "Ово се користи за слање обавештења.", "Send mode" : "Режим слања", "Encryption" : "Шифровање", "From address" : "Са адресе", @@ -207,6 +206,7 @@ "Uninstalling ...." : "Деинсталирам ...", "Error while uninstalling app" : "Грешка при деинсталацији апликације", "Uninstall" : "Деинсталирај", + "This is used for sending out notifications." : "Ово се користи за слање обавештења.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Недостаје ПХП модул „fileinfo“. Препоручујемо вам да га укључите да бисте добили најбоље резултате с откривањем МИМЕ врста.", "Cheers!" : "Здраво!", "Show last log in" : "Прикажи последњу пријаву" diff --git a/settings/l10n/sv.js b/settings/l10n/sv.js index d564ce40ecd..a01eaf70563 100644 --- a/settings/l10n/sv.js +++ b/settings/l10n/sv.js @@ -1,11 +1,23 @@ OC.L10N.register( "settings", { + "{actor} changed your password" : "{actor} ändrade ditt lösenord", + "You changed your password" : "Du ändrade ditt lösenord", + "Your password was reset by an administrator" : "Ditt lösenord återställdes av en administratör", + "{actor} changed your email address" : "{actor} ändrade din e-postadress", + "You changed your email address" : "Du ändrade din e-postadress", + "Your email address was changed by an administrator" : "Din e-postadress ändrades av en administratör", + "Your <strong>password</strong> or <strong>email</strong> was modified" : "Ditt <strong>lösenord</strong> eller <strong>e-postadress</strong> har ändrats", + "Your apps" : "Dina appar", + "Enabled apps" : "Aktiverade appar", + "Disabled apps" : "Inaktiverade appar", + "App bundles" : "App-paket", "Wrong password" : "Fel lösenord", "Saved" : "Sparad", "No user supplied" : "Ingen användare angiven", "Unable to change password" : "Kunde inte ändra lösenord", "Authentication error" : "Fel vid autentisering", + "Please provide an admin recovery password; otherwise, all user data will be lost." : "Vänligen ange ett återställningslösenord; annars kommer all din data att försvinna.", "Wrong admin recovery password. Please check the password and try again." : "Felaktigt återställningslösenord för administratör. Kolla lösenordet och prova igen.", "installing and updating apps via the app store or Federated Cloud Sharing" : "installering och uppdatering utav applikationer eller Federerad Moln-delning.", "Federated Cloud Sharing" : "Federerad Moln-delning", @@ -15,6 +27,11 @@ OC.L10N.register( "Group already exists." : "Gruppen finns redan.", "Unable to add group." : "Lyckades inte lägga till grupp.", "Unable to delete group." : "Lyckades inte radera grupp.", + "Invalid SMTP password." : "Ogiltigt SMTP-lösenord.", + "Well done, %s!" : "Bra gjort, %s!", + "If you received this email, the email configuration seems to be correct." : "Om du får detta e-postmeddelande så har du ställt in e-postinställningarna rätt.", + "Email setting test" : "E-postinställningar test", + "Email could not be sent. Check your mail server log" : "E-post kunde inte skickas. Titta i din mailserverlogg", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Ett problem uppstod när mail försökte skickas. Var god kontrollera dina inställningar. (Error: %s)", "You need to set your user email before being able to send test emails." : "Du behöver ställa in din användares e-postadress före du kan skicka test e-post.", "Invalid request" : "Ogiltig begäran", @@ -24,6 +41,8 @@ OC.L10N.register( "To send a password link to the user an email address is required." : "För att skicka en länk med lösenord till användaren så krävs en e-postadress.", "Unable to create user." : "Kan inte skapa användare.", "Unable to delete user." : "Kan inte radera användare.", + "Error while enabling user." : "Fel vid aktivering av användare.", + "Error while disabling user." : "Fel vid inaktivering av användare.", "Settings saved" : "Inställningar sparade", "Unable to change full name" : "Kunde inte ändra namn", "Unable to change email address" : "Kunde inte ändra e-postadress", @@ -32,6 +51,24 @@ OC.L10N.register( "Invalid user" : "Ogiltig användare", "Unable to change mail address" : "Kan inte ändra e-postadress", "Email saved" : "E-post sparad", + "%1$s changed your password on %2$s." : "%1$s ändrade ditt lösenord på %2$s", + "Your password on %s was changed." : "Ditt lösenord på %s har ändrats.", + "Your password on %s was reset by an administrator." : "Ditt lösenord på %s har blivit återställt av en administratör.", + "Password changed for %s" : "Lösenord ändrat för %s", + "If you did not request this, please contact an administrator." : "Om du inte har begärt detta, vänligen kontakta en administratör.", + "Password for %1$s changed on %2$s" : "Lösenord för %1$s ändrades %2$s", + "%1$s changed your email address on %2$s." : "%1$s ändrade din e-postadress %2$s.", + "Your email address on %s was changed." : "Din e-postadress på %s har ändrats.", + "Your email address on %s was changed by an administrator." : "Din e-postadress på %s har ändrats av en administratör.", + "Email address changed for %s" : "E-postadress ändrad för %s", + "The new email address is %s" : "Nya e-postadressen är %s", + "Email address for %1$s changed on %2$s" : "E-postadressen för %1$s ändrades %2$s", + "Welcome aboard" : "Välkommen ombord", + "Welcome aboard %s" : "Välkommen ombord %s", + "Your username is: %s" : "Ditt användarnamn är: %s", + "Set your password" : "Ställ in ditt lösenord", + "Go to %s" : "Gå till %s", + "Install Client" : "Installera Klient", "Your %s account was created" : "Ditt %s konto skapades", "Password confirmation is required" : "Lösenordsbekräftelse krävs", "Couldn't remove app." : "Kunde inte ta bort applikationen.", @@ -41,6 +78,7 @@ OC.L10N.register( "Migration in progress. Please wait until the migration is finished" : "Migrering pågår. Var god vänta tills migreringen är färdigställd.", "Migration started …" : "Migrering påbörjad ...", "Not saved" : "Inte sparad", + "Sending…" : "Skickar...", "Email sent" : "E-post skickad", "Official" : "Officiell", "All" : "Alla", @@ -63,11 +101,15 @@ OC.L10N.register( "Updating...." : "Uppdaterar ...", "Error while updating app" : "Fel uppstod vid uppdatering av appen", "Updated" : "Uppdaterad", + "Removing …" : "Tar bort ...", + "Error while removing app" : "Fel vid borttagning av app", + "Remove" : "Ta bort", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Applikationen har aktiverats men behöver uppdateras. Du kommer bli omdirigerad till uppdateringssidan inom 5 sekunder.", "App update" : "Uppdatering av app", "Approved" : "Godkänd", "Experimental" : "Experimentiell", "No apps found for {query}" : "Inga applikationer funna för {query}", + "Enable all" : "Aktivera alla", "Allow filesystem access" : "Tillåt åtkomst till filsystemet", "Disconnect" : "Koppla från", "Revoke" : "Återkalla", @@ -102,6 +144,8 @@ OC.L10N.register( "Visible to local users and to trusted servers" : "Synlig för lokala användare och tillförlitliga servrar", "Public" : "Offentlig", "Will be synced to a global and public address book" : "Kommer att synkroniseras till global och offentlig adressbok", + "Verify" : "Verifiera", + "Verifying …" : "Verifierar ...", "Select a profile picture" : "Välj en profilbild", "Very weak password" : "Väldigt svagt lösenord", "Weak password" : "Svagt lösenord", @@ -125,12 +169,14 @@ OC.L10N.register( "Password successfully changed" : "Ändringen av lösenordet lyckades.", "Changing the password will result in data loss, because data recovery is not available for this user" : "Ändring utav lösenord kommer resultera i förlorad data, eftersom dataåterställning ej är tillgängligt för denna användare.", "Could not change the users email" : "Kunde inte ändra användarens e-postadress", + "Error while changing status of {user}" : "Fel vid ändring av status för {user}", "A valid username must be provided" : "Ett giltigt användarnamn måste anges", "Error creating user: {message}" : "Fel uppstod när användare skulle skapas: {message}", "A valid password must be provided" : "Ett giltigt lösenord måste anges", "A valid email must be provided" : "En giltig e-postadress måste anges", "__language_name__" : "Svenska", "Unlimited" : "Obegränsat", + "Verifying" : "Verifierar", "Personal info" : "Personlig information", "Sessions" : "Sessioner", "App passwords" : "Applösenord", @@ -143,7 +189,6 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "Email server" : "E-post server", "Open documentation" : "Öppna dokumentation", - "This is used for sending out notifications." : "Detta används för att skicka ut notifieringar.", "Send mode" : "Sändningsläge", "Encryption" : "Kryptering", "From address" : "Från adress", @@ -202,6 +247,7 @@ OC.L10N.register( "Allow apps to use the Share API" : "Tillåt applikationer att använda API för delning", "Allow users to share via link" : "Tillåt användare att dela via länk", "Allow public uploads" : "Tillåt offentlig uppladdning", + "Always ask for a password" : "Fråga alltid efter lösenord", "Enforce password protection" : "Tillämpa lösenordskydd", "Set default expiration date" : "Ställ in standardutgångsdatum", "Expire after " : "Förfaller efter", @@ -227,6 +273,8 @@ OC.L10N.register( "Check the security of your Nextcloud over our security scan" : "Kontrollera säkerheten för ditt Nextcloud med vår säkerhets-skanning", "Hardening and security guidance" : "Säkerhetsriktlinjer", "Developer documentation" : "Utvecklardokumentation", + "View in store" : "Visa i butik", + "Limit to groups" : "Begränsa till grupper", "This app has an update available." : "Denna applikation har en uppdatering tillgänglig.", "by %s" : "av %s", "%s-licensed" : "%s-licensierad.", @@ -273,9 +321,9 @@ OC.L10N.register( "Address" : "Adress", "Your postal address" : "Din postadress", "Website" : "Webbsida", - "Your website" : "Din webbsida", + "It can take up to 24 hours before the account is displayed as verified." : "Det kan ta upp till 24 timmar innan kontot visas som verifierat.", + "Link https://…" : "Länk https://...", "Twitter" : "Twitter", - "Your Twitter handle" : "Ditt Twitterkonto", "You are member of the following groups:" : "Du är medlem i följande grupper:", "Password" : "Lösenord", "Current password" : "Nuvarande lösenord", @@ -292,7 +340,6 @@ OC.L10N.register( "Web, desktop and mobile clients currently logged in to your account." : "Webb, skrivbordsklienter och mobila klienter som är inloggade på ditt konto just nu.", "Device" : "Enhet", "Last activity" : "Senaste aktivitet", - "Passcodes that give an app or device permissions to access your account." : "Lösenordskod som ger en applikation eller enhet rättigheter att ansluta till ditt konto.", "Name" : "Namn", "App name" : "Appnamn", "Create new app password" : "Skapa nytt applösenord", @@ -301,15 +348,18 @@ OC.L10N.register( "Username" : "Användarnamn", "Done" : "Färdig", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Utvecklat av {communityopen}Nextclouds community{linkclose}, {githubopen}källkoden{linkclose} är licensierad enligt {licenseopen}AGPL-standard{linkclose}.", - "Follow us on Google Plus!" : "Fälj oss på Google Plus!", + "Follow us on Google+!" : "Följ oss på Google+!", "Like our facebook page!" : "Gilla vår Facebooksida!", - "Subscribe to our twitter channel!" : "Prenumerera på vårt Twitterkonto!", - "Subscribe to our news feed!" : "Prenumerera på vårt nyhetsflöde!", + "Follow us on Twitter!" : "Följ oss på Twitter!", + "Check out our blog!" : "Titta på vår blogg!", "Subscribe to our newsletter!" : "Prenumerera på vårt nyhetsbrev!", + "Settings" : "Inställningar", "Show storage location" : "Visa lagringsplats", "Show user backend" : "Visa användar-backend", + "Show last login" : "Visa senaste inloggning", "Show email address" : "Visa e-postadress", "Send email to new user" : "Skicka e-post till ny användare", + "When the password of a new user is left empty, an activation email with a link to set the password is sent." : "När lösenordet för en ny användare lämnas tomt så skickas ett aktiveringsmejl med en länk för att välja ett lösenord.", "E-Mail" : "E-post", "Create" : "Skapa", "Admin Recovery Password" : "Admin-återställningslösen", @@ -317,6 +367,7 @@ OC.L10N.register( "Group name" : "Gruppnamn", "Everyone" : "Alla", "Admins" : "Administratörer", + "Disabled" : "Inaktiverad", "Default quota" : "Förvalt lagringsutrymme", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Ange storlek på lagringsutrymmet (t.ex: \"512 MB\" eller \"12 GB\")", "Other" : "Annat", @@ -341,12 +392,19 @@ OC.L10N.register( "Uninstalling ...." : "Avinstallerar ...", "Error while uninstalling app" : "Ett fel inträffade när applikatonen avinstallerades", "Uninstall" : "Avinstallera", + "This is used for sending out notifications." : "Detta används för att skicka ut notifieringar.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-modulen 'fileinfo' saknas. Vi rekommenderar starkt att aktivera den här modulen för att kunna upptäcka korrekt mime-typ.", "Uninstall app" : "Avinstallera app", "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>" : "Hej där,<br><br>Tänkte bara informera om att du du nu har ett %s konto.<br><br>Ditt användarnamn: <strong>%s</strong><br>Logga in: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "Ha de fint!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hej där,\n\nTänkte bara informera om att du nu har ett %s konto.\n\nDitt användarnamn: %s\nLogga in: %s\n\n", "For password recovery and notifications" : "För lösenordsåterställning och notifieringar", + "Your website" : "Din webbsida", + "Your Twitter handle" : "Ditt Twitterkonto", + "Passcodes that give an app or device permissions to access your account." : "Lösenordskod som ger en applikation eller enhet rättigheter att ansluta till ditt konto.", + "Follow us on Google Plus!" : "Fälj oss på Google Plus!", + "Subscribe to our twitter channel!" : "Prenumerera på vårt Twitterkonto!", + "Subscribe to our news feed!" : "Prenumerera på vårt nyhetsflöde!", "Show last log in" : "Visa senaste inloggning" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/sv.json b/settings/l10n/sv.json index ca3cc5976dc..51aaa93e426 100644 --- a/settings/l10n/sv.json +++ b/settings/l10n/sv.json @@ -1,9 +1,21 @@ { "translations": { + "{actor} changed your password" : "{actor} ändrade ditt lösenord", + "You changed your password" : "Du ändrade ditt lösenord", + "Your password was reset by an administrator" : "Ditt lösenord återställdes av en administratör", + "{actor} changed your email address" : "{actor} ändrade din e-postadress", + "You changed your email address" : "Du ändrade din e-postadress", + "Your email address was changed by an administrator" : "Din e-postadress ändrades av en administratör", + "Your <strong>password</strong> or <strong>email</strong> was modified" : "Ditt <strong>lösenord</strong> eller <strong>e-postadress</strong> har ändrats", + "Your apps" : "Dina appar", + "Enabled apps" : "Aktiverade appar", + "Disabled apps" : "Inaktiverade appar", + "App bundles" : "App-paket", "Wrong password" : "Fel lösenord", "Saved" : "Sparad", "No user supplied" : "Ingen användare angiven", "Unable to change password" : "Kunde inte ändra lösenord", "Authentication error" : "Fel vid autentisering", + "Please provide an admin recovery password; otherwise, all user data will be lost." : "Vänligen ange ett återställningslösenord; annars kommer all din data att försvinna.", "Wrong admin recovery password. Please check the password and try again." : "Felaktigt återställningslösenord för administratör. Kolla lösenordet och prova igen.", "installing and updating apps via the app store or Federated Cloud Sharing" : "installering och uppdatering utav applikationer eller Federerad Moln-delning.", "Federated Cloud Sharing" : "Federerad Moln-delning", @@ -13,6 +25,11 @@ "Group already exists." : "Gruppen finns redan.", "Unable to add group." : "Lyckades inte lägga till grupp.", "Unable to delete group." : "Lyckades inte radera grupp.", + "Invalid SMTP password." : "Ogiltigt SMTP-lösenord.", + "Well done, %s!" : "Bra gjort, %s!", + "If you received this email, the email configuration seems to be correct." : "Om du får detta e-postmeddelande så har du ställt in e-postinställningarna rätt.", + "Email setting test" : "E-postinställningar test", + "Email could not be sent. Check your mail server log" : "E-post kunde inte skickas. Titta i din mailserverlogg", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Ett problem uppstod när mail försökte skickas. Var god kontrollera dina inställningar. (Error: %s)", "You need to set your user email before being able to send test emails." : "Du behöver ställa in din användares e-postadress före du kan skicka test e-post.", "Invalid request" : "Ogiltig begäran", @@ -22,6 +39,8 @@ "To send a password link to the user an email address is required." : "För att skicka en länk med lösenord till användaren så krävs en e-postadress.", "Unable to create user." : "Kan inte skapa användare.", "Unable to delete user." : "Kan inte radera användare.", + "Error while enabling user." : "Fel vid aktivering av användare.", + "Error while disabling user." : "Fel vid inaktivering av användare.", "Settings saved" : "Inställningar sparade", "Unable to change full name" : "Kunde inte ändra namn", "Unable to change email address" : "Kunde inte ändra e-postadress", @@ -30,6 +49,24 @@ "Invalid user" : "Ogiltig användare", "Unable to change mail address" : "Kan inte ändra e-postadress", "Email saved" : "E-post sparad", + "%1$s changed your password on %2$s." : "%1$s ändrade ditt lösenord på %2$s", + "Your password on %s was changed." : "Ditt lösenord på %s har ändrats.", + "Your password on %s was reset by an administrator." : "Ditt lösenord på %s har blivit återställt av en administratör.", + "Password changed for %s" : "Lösenord ändrat för %s", + "If you did not request this, please contact an administrator." : "Om du inte har begärt detta, vänligen kontakta en administratör.", + "Password for %1$s changed on %2$s" : "Lösenord för %1$s ändrades %2$s", + "%1$s changed your email address on %2$s." : "%1$s ändrade din e-postadress %2$s.", + "Your email address on %s was changed." : "Din e-postadress på %s har ändrats.", + "Your email address on %s was changed by an administrator." : "Din e-postadress på %s har ändrats av en administratör.", + "Email address changed for %s" : "E-postadress ändrad för %s", + "The new email address is %s" : "Nya e-postadressen är %s", + "Email address for %1$s changed on %2$s" : "E-postadressen för %1$s ändrades %2$s", + "Welcome aboard" : "Välkommen ombord", + "Welcome aboard %s" : "Välkommen ombord %s", + "Your username is: %s" : "Ditt användarnamn är: %s", + "Set your password" : "Ställ in ditt lösenord", + "Go to %s" : "Gå till %s", + "Install Client" : "Installera Klient", "Your %s account was created" : "Ditt %s konto skapades", "Password confirmation is required" : "Lösenordsbekräftelse krävs", "Couldn't remove app." : "Kunde inte ta bort applikationen.", @@ -39,6 +76,7 @@ "Migration in progress. Please wait until the migration is finished" : "Migrering pågår. Var god vänta tills migreringen är färdigställd.", "Migration started …" : "Migrering påbörjad ...", "Not saved" : "Inte sparad", + "Sending…" : "Skickar...", "Email sent" : "E-post skickad", "Official" : "Officiell", "All" : "Alla", @@ -61,11 +99,15 @@ "Updating...." : "Uppdaterar ...", "Error while updating app" : "Fel uppstod vid uppdatering av appen", "Updated" : "Uppdaterad", + "Removing …" : "Tar bort ...", + "Error while removing app" : "Fel vid borttagning av app", + "Remove" : "Ta bort", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Applikationen har aktiverats men behöver uppdateras. Du kommer bli omdirigerad till uppdateringssidan inom 5 sekunder.", "App update" : "Uppdatering av app", "Approved" : "Godkänd", "Experimental" : "Experimentiell", "No apps found for {query}" : "Inga applikationer funna för {query}", + "Enable all" : "Aktivera alla", "Allow filesystem access" : "Tillåt åtkomst till filsystemet", "Disconnect" : "Koppla från", "Revoke" : "Återkalla", @@ -100,6 +142,8 @@ "Visible to local users and to trusted servers" : "Synlig för lokala användare och tillförlitliga servrar", "Public" : "Offentlig", "Will be synced to a global and public address book" : "Kommer att synkroniseras till global och offentlig adressbok", + "Verify" : "Verifiera", + "Verifying …" : "Verifierar ...", "Select a profile picture" : "Välj en profilbild", "Very weak password" : "Väldigt svagt lösenord", "Weak password" : "Svagt lösenord", @@ -123,12 +167,14 @@ "Password successfully changed" : "Ändringen av lösenordet lyckades.", "Changing the password will result in data loss, because data recovery is not available for this user" : "Ändring utav lösenord kommer resultera i förlorad data, eftersom dataåterställning ej är tillgängligt för denna användare.", "Could not change the users email" : "Kunde inte ändra användarens e-postadress", + "Error while changing status of {user}" : "Fel vid ändring av status för {user}", "A valid username must be provided" : "Ett giltigt användarnamn måste anges", "Error creating user: {message}" : "Fel uppstod när användare skulle skapas: {message}", "A valid password must be provided" : "Ett giltigt lösenord måste anges", "A valid email must be provided" : "En giltig e-postadress måste anges", "__language_name__" : "Svenska", "Unlimited" : "Obegränsat", + "Verifying" : "Verifierar", "Personal info" : "Personlig information", "Sessions" : "Sessioner", "App passwords" : "Applösenord", @@ -141,7 +187,6 @@ "STARTTLS" : "STARTTLS", "Email server" : "E-post server", "Open documentation" : "Öppna dokumentation", - "This is used for sending out notifications." : "Detta används för att skicka ut notifieringar.", "Send mode" : "Sändningsläge", "Encryption" : "Kryptering", "From address" : "Från adress", @@ -200,6 +245,7 @@ "Allow apps to use the Share API" : "Tillåt applikationer att använda API för delning", "Allow users to share via link" : "Tillåt användare att dela via länk", "Allow public uploads" : "Tillåt offentlig uppladdning", + "Always ask for a password" : "Fråga alltid efter lösenord", "Enforce password protection" : "Tillämpa lösenordskydd", "Set default expiration date" : "Ställ in standardutgångsdatum", "Expire after " : "Förfaller efter", @@ -225,6 +271,8 @@ "Check the security of your Nextcloud over our security scan" : "Kontrollera säkerheten för ditt Nextcloud med vår säkerhets-skanning", "Hardening and security guidance" : "Säkerhetsriktlinjer", "Developer documentation" : "Utvecklardokumentation", + "View in store" : "Visa i butik", + "Limit to groups" : "Begränsa till grupper", "This app has an update available." : "Denna applikation har en uppdatering tillgänglig.", "by %s" : "av %s", "%s-licensed" : "%s-licensierad.", @@ -271,9 +319,9 @@ "Address" : "Adress", "Your postal address" : "Din postadress", "Website" : "Webbsida", - "Your website" : "Din webbsida", + "It can take up to 24 hours before the account is displayed as verified." : "Det kan ta upp till 24 timmar innan kontot visas som verifierat.", + "Link https://…" : "Länk https://...", "Twitter" : "Twitter", - "Your Twitter handle" : "Ditt Twitterkonto", "You are member of the following groups:" : "Du är medlem i följande grupper:", "Password" : "Lösenord", "Current password" : "Nuvarande lösenord", @@ -290,7 +338,6 @@ "Web, desktop and mobile clients currently logged in to your account." : "Webb, skrivbordsklienter och mobila klienter som är inloggade på ditt konto just nu.", "Device" : "Enhet", "Last activity" : "Senaste aktivitet", - "Passcodes that give an app or device permissions to access your account." : "Lösenordskod som ger en applikation eller enhet rättigheter att ansluta till ditt konto.", "Name" : "Namn", "App name" : "Appnamn", "Create new app password" : "Skapa nytt applösenord", @@ -299,15 +346,18 @@ "Username" : "Användarnamn", "Done" : "Färdig", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Utvecklat av {communityopen}Nextclouds community{linkclose}, {githubopen}källkoden{linkclose} är licensierad enligt {licenseopen}AGPL-standard{linkclose}.", - "Follow us on Google Plus!" : "Fälj oss på Google Plus!", + "Follow us on Google+!" : "Följ oss på Google+!", "Like our facebook page!" : "Gilla vår Facebooksida!", - "Subscribe to our twitter channel!" : "Prenumerera på vårt Twitterkonto!", - "Subscribe to our news feed!" : "Prenumerera på vårt nyhetsflöde!", + "Follow us on Twitter!" : "Följ oss på Twitter!", + "Check out our blog!" : "Titta på vår blogg!", "Subscribe to our newsletter!" : "Prenumerera på vårt nyhetsbrev!", + "Settings" : "Inställningar", "Show storage location" : "Visa lagringsplats", "Show user backend" : "Visa användar-backend", + "Show last login" : "Visa senaste inloggning", "Show email address" : "Visa e-postadress", "Send email to new user" : "Skicka e-post till ny användare", + "When the password of a new user is left empty, an activation email with a link to set the password is sent." : "När lösenordet för en ny användare lämnas tomt så skickas ett aktiveringsmejl med en länk för att välja ett lösenord.", "E-Mail" : "E-post", "Create" : "Skapa", "Admin Recovery Password" : "Admin-återställningslösen", @@ -315,6 +365,7 @@ "Group name" : "Gruppnamn", "Everyone" : "Alla", "Admins" : "Administratörer", + "Disabled" : "Inaktiverad", "Default quota" : "Förvalt lagringsutrymme", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Ange storlek på lagringsutrymmet (t.ex: \"512 MB\" eller \"12 GB\")", "Other" : "Annat", @@ -339,12 +390,19 @@ "Uninstalling ...." : "Avinstallerar ...", "Error while uninstalling app" : "Ett fel inträffade när applikatonen avinstallerades", "Uninstall" : "Avinstallera", + "This is used for sending out notifications." : "Detta används för att skicka ut notifieringar.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-modulen 'fileinfo' saknas. Vi rekommenderar starkt att aktivera den här modulen för att kunna upptäcka korrekt mime-typ.", "Uninstall app" : "Avinstallera app", "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>" : "Hej där,<br><br>Tänkte bara informera om att du du nu har ett %s konto.<br><br>Ditt användarnamn: <strong>%s</strong><br>Logga in: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "Ha de fint!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hej där,\n\nTänkte bara informera om att du nu har ett %s konto.\n\nDitt användarnamn: %s\nLogga in: %s\n\n", "For password recovery and notifications" : "För lösenordsåterställning och notifieringar", + "Your website" : "Din webbsida", + "Your Twitter handle" : "Ditt Twitterkonto", + "Passcodes that give an app or device permissions to access your account." : "Lösenordskod som ger en applikation eller enhet rättigheter att ansluta till ditt konto.", + "Follow us on Google Plus!" : "Fälj oss på Google Plus!", + "Subscribe to our twitter channel!" : "Prenumerera på vårt Twitterkonto!", + "Subscribe to our news feed!" : "Prenumerera på vårt nyhetsflöde!", "Show last log in" : "Visa senaste inloggning" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/settings/l10n/th.js b/settings/l10n/th.js index bfa99ce6853..956a026cd77 100644 --- a/settings/l10n/th.js +++ b/settings/l10n/th.js @@ -90,7 +90,6 @@ OC.L10N.register( "NT LAN Manager" : "ตัวจัดการ NT LAN", "Email server" : "อีเมลเซิร์ฟเวอร์", "Open documentation" : "เปิดเอกสาร", - "This is used for sending out notifications." : "นี้จะใช้สำหรับการส่งออกการแจ้งเตือน", "Send mode" : "โหมดการส่ง", "Encryption" : "การเข้ารหัส", "From address" : "จากที่อยู่", @@ -238,6 +237,7 @@ OC.L10N.register( "Uninstalling ...." : "กำลังถอนการติดตั้ง ...", "Error while uninstalling app" : "เกิดข้อผิดพลาดขณะถอนการติดตั้งแอพพลิเคชัน", "Uninstall" : "ถอนการติดตั้ง", + "This is used for sending out notifications." : "นี้จะใช้สำหรับการส่งออกการแจ้งเตือน", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "โมดูล PHP 'fileinfo' หายไป เราขอแนะนำให้เปิดใช้งานโมดูลนี้เพื่อให้ได้ผลลัพธ์ที่ดีที่สุดกับการตรวจสอบชนิด mime", "Cheers!" : "ไชโย!", "For password recovery and notifications" : "สำหรับการกู้คืนรหัสผ่านและการแจ้งเตือน", diff --git a/settings/l10n/th.json b/settings/l10n/th.json index 9fa127cfd1d..9ed7658ad53 100644 --- a/settings/l10n/th.json +++ b/settings/l10n/th.json @@ -88,7 +88,6 @@ "NT LAN Manager" : "ตัวจัดการ NT LAN", "Email server" : "อีเมลเซิร์ฟเวอร์", "Open documentation" : "เปิดเอกสาร", - "This is used for sending out notifications." : "นี้จะใช้สำหรับการส่งออกการแจ้งเตือน", "Send mode" : "โหมดการส่ง", "Encryption" : "การเข้ารหัส", "From address" : "จากที่อยู่", @@ -236,6 +235,7 @@ "Uninstalling ...." : "กำลังถอนการติดตั้ง ...", "Error while uninstalling app" : "เกิดข้อผิดพลาดขณะถอนการติดตั้งแอพพลิเคชัน", "Uninstall" : "ถอนการติดตั้ง", + "This is used for sending out notifications." : "นี้จะใช้สำหรับการส่งออกการแจ้งเตือน", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "โมดูล PHP 'fileinfo' หายไป เราขอแนะนำให้เปิดใช้งานโมดูลนี้เพื่อให้ได้ผลลัพธ์ที่ดีที่สุดกับการตรวจสอบชนิด mime", "Cheers!" : "ไชโย!", "For password recovery and notifications" : "สำหรับการกู้คืนรหัสผ่านและการแจ้งเตือน", diff --git a/settings/l10n/tr.js b/settings/l10n/tr.js index 4bbb387801e..8833e1cc7dc 100644 --- a/settings/l10n/tr.js +++ b/settings/l10n/tr.js @@ -8,6 +8,10 @@ OC.L10N.register( "You changed your email address" : "E-posta adresinizi değiştirdiniz", "Your email address was changed by an administrator" : "E-posta adresiniz bir yönetici tarafından değiştirildi", "Your <strong>password</strong> or <strong>email</strong> was modified" : "<strong>Parolanız</strong> ya da <strong>e-posta adresiniz</strong> değiştirildi", + "Your apps" : "Uygulamalarınız", + "Enabled apps" : "Etkinleştirilmiş Uygulamalar", + "Disabled apps" : "Devre Dışı Uygulamalar", + "App bundles" : "Uygulama Paketleri", "Wrong password" : "Parola hatalı", "Saved" : "Kaydedildi", "No user supplied" : "Kullanıcı belirtilmemiş", @@ -28,7 +32,7 @@ OC.L10N.register( "Well done, %s!" : "Tamamdır %s!", "If you received this email, the email configuration seems to be correct." : "Bu e-postayı aldıysanız e-posta ayarları doğru olarak yapılmıştır.", "Email setting test" : "E-posta ayarları sınaması", - "Mail could not be sent. Check your mail server log" : "Posta gönderilemedi. Posta sunucunuzun günlüklerine bakın", + "Email could not be sent. Check your mail server log" : "E-posta gönderilemedi. E-posta sunucunuzun günlüklerine bakın", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "E-posta gönderilirken bir sorun çıktı. Lütfen ayarlarınızı gözden geçirin. (Hata: %s)", "You need to set your user email before being able to send test emails." : "Sınama e-postaları göndermeden önce kullanıcı e-postasını ayarlamalısınız.", "Invalid request" : "İstek geçersiz", @@ -38,6 +42,8 @@ OC.L10N.register( "To send a password link to the user an email address is required." : "Kullanıcı e-posta adresi parola bağlantısının gönderilebilmesi için gereklidir.", "Unable to create user." : "Kullanıcı oluşturulamadı.", "Unable to delete user." : "Kullanıcı silinemedi.", + "Error while enabling user." : "Kullanıcı etkinleştirilirken sorun çıktı", + "Error while disabling user." : "Kullanıcı devre dışı bırakılırken sorun çıktı", "Settings saved" : "Ayarlar kaydedildi", "Unable to change full name" : "Tam adınız değiştirilemedi", "Unable to change email address" : "E-posta adresi değiştirilemedi", @@ -97,11 +103,15 @@ OC.L10N.register( "Updating...." : "Güncelleniyor....", "Error while updating app" : "Uygulama güncellenirken sorun çıktı", "Updated" : "Güncellendi", + "Removing …" : "Kaldırılıyor...", + "Error while removing app" : "Uygulama kaldırılırken sorun çıktı", + "Remove" : "Kaldır", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Uygulama etkinleştirilmiş fakat güncellenmesi gerekiyor. 5 saniye içinde güncelleme sayfasına yönlendirileceksiniz.", "App update" : "Uygulama güncellemesi", "Approved" : "Onaylanmış", "Experimental" : "Deneysel", "No apps found for {query}" : "{query} aramasına uyan bir uygulama bulunamadı", + "Enable all" : "Tümünü Etkinleştir", "Allow filesystem access" : "Dosya sistemine erişilebilsin", "Disconnect" : "Bağlantıyı Kes", "Revoke" : "Geri Al", @@ -177,7 +187,7 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "Email server" : "E-posta sunucusu", "Open documentation" : "Belgeleri aç", - "This is used for sending out notifications." : "Bu özellik bildirimler gönderilirken kullanılır.", + "It is important to set up this server to be able to send emails, like for password reset and notifications." : "Bu sunucunun parola sıfırlama ve bildirim işlemleri için e-posta gönderebilecek şekilde ayarlanmış olması önemlidir.", "Send mode" : "Gönderim kipi", "Encryption" : "Şifreleme", "From address" : "Kimden adresi", @@ -193,6 +203,7 @@ OC.L10N.register( "Test email settings" : "E-posta ayarlarını sına", "Send email" : "E-posta gönder", "Server-side encryption" : "Sunucu tarafı şifreleme", + "Server-side encryption makes it possible to encrypt files which are uploaded to this server. This comes with limitations like a performance penalty, so enable this only if needed." : "Sunucu tarafındaki şifreleme, sunucuya yüklenen dosyaların şifrelenebilmesini sağlar. Bu özellik genel başarımı düşürdüğünden yalnız gerek varsa etkinleştirin.", "Enable server-side encryption" : "Sunucu tarafı şifreleme kullanılsın", "Please read carefully before activating server-side encryption: " : "Lütfen sunucu tarafında şifrelemeyi etkinleştirmeden önce dikkatlice okuyun: ", "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." : "Şifreleme etkinleştirildiğinde, etkinleştirme anından sonra sunucuya yüklenen tüm dosyalar şifrelenir. Şifreleme daha sonra devre dışı bırakılmak istenirse, etkin şifreleme modülünün bu özelliği desteklemesi ve tüm ön koşulların (örneğin kurtarma anahtarı oluşturulması) yerine getirilmesi gerekir.", @@ -207,6 +218,7 @@ OC.L10N.register( "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Şifreleme anahtarlarınızı eski şifrelemeden (ownCloud <= 8.0) yenisine aktarmalısınız.", "Start migration" : "Aktarmayı başlat", "Security & setup warnings" : "Güvenlik ve kurulum uyarıları", + "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the Tips & Ticks section and the documentation for more information." : "Kopyanızın güvenli ve yüksek başarımla çalışması için ayarların doğru yapılmış olması önemlidir. Bunu sağlamak için bazı otomatik denetimler yapılır. Ayrıntılı bilgi almak için İpuçları bölümüne ve belgelere bakın.", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP sistem ortam değişkenlerini okuyamayacak şekilde hatalı olarak kurulmuş gibi görünüyor. getenv(\"PATH\") komutu ile yapılan sınama sonucunda boş bir cevap alındı.", "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Lütfen PHP yapılandırma notları ve özellikle php-fpm kullanırken sunucunuzdaki PHP yapılandırması için <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">kurulum belgelerine ↗</a> bakın.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Salt Okunur yapılandırma etkinleştirilmiş. Bu yapılandırma, bazı ayarların web arayüzünden yapılmasını önler. Ayrıca, bu dosyanın her güncelleme öncesinde el ile yazılabilir yapılması gerekir.", @@ -227,6 +239,7 @@ OC.L10N.register( "Last cron job execution: %s." : "Zamanlanmış görevin son yürütülmesi: %s.", "Last cron job execution: %s. Something seems wrong." : "Zamanlanmış görevin son yürütülmesi: %s. Bir şeyler yanlış görünüyor.", "Cron was not executed yet!" : "Zamanlanmış görev henüz yürütülmemiş!", + "For optimal performance it's important to configure background jobs correctly. For bigger instances 'Cron' is the recommended setting. Please see the documentation for more information." : "En iyi başarım için art alan görevlerinin doğru şekilde ayarlanması önemlidir. Büyük kurulumlar için 'Cron' ayarı önerilir. Ayrıntılı bilgi almak için belgelere bakın.", "Execute one task with each page loaded" : "Her sayfa yüklemesinde bir görev yürütülsün", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php, http üzerinden 15 dakikada bir yürütülmesi için webcron hizmetine kaydedildi.", "Use system's cron service to call the cron.php file every 15 minutes." : "Cron.php dosyasını 15 dakikada bir çağırmak için sistem cron hizmeti kullanılır.", @@ -234,6 +247,7 @@ OC.L10N.register( "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Bunu çalıştıraiblmek için PHP posix eklentisi gereklidir. Ayrıntılı bilgi almak için {linkstart}PHP belgelerine{linkend} bakın.", "Version" : "Sürüm", "Sharing" : "Paylaşım", + "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Yönetici olarak paylaşma davranışı ile ilgili ince ayarları yapabilirsiniz. Ayrıntılı bilgi almak için belgelere bakın.", "Allow apps to use the Share API" : "Uygulamalar Paylaşım API kullanabilsin", "Allow users to share via link" : "Kullanıcıların bağlantı ile paylaşabilsin", "Allow public uploads" : "Herkes yükleme yapabilsin", @@ -252,6 +266,7 @@ OC.L10N.register( "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Herkese açık bağlantı yükleme sayfasındaki sorumluluk reddi bildirim metni (yalnız dosya listesi gizli iken görüntülenir).", "This text will be shown on the public link upload page when the file list is hidden." : "Dosya listesi gizli iken herkese açık bağlantı yükleme sayfasında görüntülenecek sorumluluk reddi bildirimi metni.", "Tips & tricks" : "İpucu ve incelikler", + "There are a lot of features and config switches available to optimally customize and use this instance. Here are some pointers for more information." : "Bu kopyayı kullanmak ve en iyi şekilde ayarlamak için çok sayıda özellik ve ayar seçeneği vardır. Ayrıntılı bilgi alabileceğiniz bazı konular şu şekildedir.", "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "Şu anda veritabanı olarak SQLite kullanılıyor. Daha büyük kurulumlar için farklı bir veritabanı arka ucuna geçmenizi öneriyoruz.", "This is particularly recommended when using the desktop client for file synchronisation." : "Özellikle dosya eşitleme için masaüstü istemcisi kullanılırken SQLite kullanımı önerilmez.", "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>." : "Başka bir veritabanına geçmek için komut satırı aracını kullanın: 'occ db:convert-type' ya da <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">belgelere ↗</a> bakın.", @@ -263,6 +278,8 @@ OC.L10N.register( "Check the security of your Nextcloud over our security scan" : "Güvenlik sınamamızdan geçirerek Nextcloud güvenliğinizi denetleyin", "Hardening and security guidance" : "Sağlamlaştırma ve güvenlik rehberliği", "Developer documentation" : "Geliştirici belgeleri", + "View in store" : "Mağazada görüntüle", + "Limit to groups" : "Şu gruplarla sınırla", "This app has an update available." : "Bu uygulama için bir güncelleme yayınlanmış.", "by %s" : "Yazar: %s", "%s-licensed" : "%s lisanslı", @@ -309,9 +326,7 @@ OC.L10N.register( "Address" : "Adres", "Your postal address" : "Posta adresiniz", "Website" : "Web sitesi", - "Your website" : "Web sitesi adresiniz", "Twitter" : "Twitter", - "Your Twitter handle" : "Twitter adresiniz", "You are member of the following groups:" : "Şu gruplara üyesiniz:", "Password" : "Parola", "Current password" : "Geçerli parola", @@ -328,7 +343,6 @@ OC.L10N.register( "Web, desktop and mobile clients currently logged in to your account." : "Şu anda hesabınıza web, masaüstü ve mobil istemciler oturum açmış.", "Device" : "Aygıt", "Last activity" : "Son işlem", - "Passcodes that give an app or device permissions to access your account." : "Parola kodları bir uygulama ya da aygıtın hesabınıza erişmesini sağlar.", "Name" : "Ad", "App name" : "Uygulama adı", "Create new app password" : "Yeni uygulama parolası oluştur", @@ -337,10 +351,10 @@ OC.L10N.register( "Username" : "Kullanıcı Adı", "Done" : "Tamam", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "{communityopen}Nextcloud topluluğu tarafından geliştirilmiştir{linkclose}. {githubopen}Kaynak kodu{linkclose} {licenseopen}AGPL{linkclose} koşulları altında lisanslanmıştır.", - "Follow us on Google Plus!" : "Bizi Google Plus üzerinde izleyin", + "Follow us on Google+!" : "Bizi Google+ üzerinde izleyin!", "Like our facebook page!" : "Facebook sayfamızı beğenin!", - "Subscribe to our twitter channel!" : "Twitter kanalımıza abone olun!", - "Subscribe to our news feed!" : "Haber akışımıza abone olun!", + "Follow us on Twitter!" : "Bizi Twitter üzerinde izleyin!", + "Check out our blog!" : "Bloğumuza bakın!", "Subscribe to our newsletter!" : " Bültenimize abone olun!", "Settings" : "Ayarlar", "Show storage location" : "Depolama konumu görüntülensin", @@ -380,12 +394,19 @@ OC.L10N.register( "Uninstalling ...." : "Kaldırılıyor ....", "Error while uninstalling app" : "Uygulama kaldırılırken sorun çıktı", "Uninstall" : "Kaldır", + "This is used for sending out notifications." : "Bu özellik bildirimler gönderilirken kullanılır.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP 'fileinfo' modülü bulunamadı. MIME türü algılamasında en iyi sonuçları elde etmek için bu modülü etkinleştirmeniz önerilir.", "Uninstall app" : "Uygulamayı Kaldır", "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>" : "Merhaba,<br><br>Artık bir %s hesabınızın olduğunu bildirmek istedik.<br><br>Kullanıcı adınız: %s<br>Şuradan erişebilirsiniz: <a href=\"%s\">%s</a><br><br>", "Cheers!" : "Hoşçakalın!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Merhaba\n\nArtık bir %s hesabınızın olduğunu bildirmek istedik.\n\nKullanıcı adınız: %s\nŞuradan erişebilirsiniz: %s\n", "For password recovery and notifications" : "Parola sıfırlama ve bildirimler için", + "Your website" : "Web sitesi adresiniz", + "Your Twitter handle" : "Twitter adresiniz", + "Passcodes that give an app or device permissions to access your account." : "Parola kodları bir uygulama ya da aygıtın hesabınıza erişmesini sağlar.", + "Follow us on Google Plus!" : "Bizi Google Plus üzerinde izleyin", + "Subscribe to our twitter channel!" : "Twitter kanalımıza abone olun!", + "Subscribe to our news feed!" : "Haber akışımıza abone olun!", "Show last log in" : "Son oturum açma zamanı görüntülensin" }, "nplurals=2; plural=(n > 1);"); diff --git a/settings/l10n/tr.json b/settings/l10n/tr.json index 0b0446a0a27..48f40bd5b70 100644 --- a/settings/l10n/tr.json +++ b/settings/l10n/tr.json @@ -6,6 +6,10 @@ "You changed your email address" : "E-posta adresinizi değiştirdiniz", "Your email address was changed by an administrator" : "E-posta adresiniz bir yönetici tarafından değiştirildi", "Your <strong>password</strong> or <strong>email</strong> was modified" : "<strong>Parolanız</strong> ya da <strong>e-posta adresiniz</strong> değiştirildi", + "Your apps" : "Uygulamalarınız", + "Enabled apps" : "Etkinleştirilmiş Uygulamalar", + "Disabled apps" : "Devre Dışı Uygulamalar", + "App bundles" : "Uygulama Paketleri", "Wrong password" : "Parola hatalı", "Saved" : "Kaydedildi", "No user supplied" : "Kullanıcı belirtilmemiş", @@ -26,7 +30,7 @@ "Well done, %s!" : "Tamamdır %s!", "If you received this email, the email configuration seems to be correct." : "Bu e-postayı aldıysanız e-posta ayarları doğru olarak yapılmıştır.", "Email setting test" : "E-posta ayarları sınaması", - "Mail could not be sent. Check your mail server log" : "Posta gönderilemedi. Posta sunucunuzun günlüklerine bakın", + "Email could not be sent. Check your mail server log" : "E-posta gönderilemedi. E-posta sunucunuzun günlüklerine bakın", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "E-posta gönderilirken bir sorun çıktı. Lütfen ayarlarınızı gözden geçirin. (Hata: %s)", "You need to set your user email before being able to send test emails." : "Sınama e-postaları göndermeden önce kullanıcı e-postasını ayarlamalısınız.", "Invalid request" : "İstek geçersiz", @@ -36,6 +40,8 @@ "To send a password link to the user an email address is required." : "Kullanıcı e-posta adresi parola bağlantısının gönderilebilmesi için gereklidir.", "Unable to create user." : "Kullanıcı oluşturulamadı.", "Unable to delete user." : "Kullanıcı silinemedi.", + "Error while enabling user." : "Kullanıcı etkinleştirilirken sorun çıktı", + "Error while disabling user." : "Kullanıcı devre dışı bırakılırken sorun çıktı", "Settings saved" : "Ayarlar kaydedildi", "Unable to change full name" : "Tam adınız değiştirilemedi", "Unable to change email address" : "E-posta adresi değiştirilemedi", @@ -95,11 +101,15 @@ "Updating...." : "Güncelleniyor....", "Error while updating app" : "Uygulama güncellenirken sorun çıktı", "Updated" : "Güncellendi", + "Removing …" : "Kaldırılıyor...", + "Error while removing app" : "Uygulama kaldırılırken sorun çıktı", + "Remove" : "Kaldır", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Uygulama etkinleştirilmiş fakat güncellenmesi gerekiyor. 5 saniye içinde güncelleme sayfasına yönlendirileceksiniz.", "App update" : "Uygulama güncellemesi", "Approved" : "Onaylanmış", "Experimental" : "Deneysel", "No apps found for {query}" : "{query} aramasına uyan bir uygulama bulunamadı", + "Enable all" : "Tümünü Etkinleştir", "Allow filesystem access" : "Dosya sistemine erişilebilsin", "Disconnect" : "Bağlantıyı Kes", "Revoke" : "Geri Al", @@ -175,7 +185,7 @@ "STARTTLS" : "STARTTLS", "Email server" : "E-posta sunucusu", "Open documentation" : "Belgeleri aç", - "This is used for sending out notifications." : "Bu özellik bildirimler gönderilirken kullanılır.", + "It is important to set up this server to be able to send emails, like for password reset and notifications." : "Bu sunucunun parola sıfırlama ve bildirim işlemleri için e-posta gönderebilecek şekilde ayarlanmış olması önemlidir.", "Send mode" : "Gönderim kipi", "Encryption" : "Şifreleme", "From address" : "Kimden adresi", @@ -191,6 +201,7 @@ "Test email settings" : "E-posta ayarlarını sına", "Send email" : "E-posta gönder", "Server-side encryption" : "Sunucu tarafı şifreleme", + "Server-side encryption makes it possible to encrypt files which are uploaded to this server. This comes with limitations like a performance penalty, so enable this only if needed." : "Sunucu tarafındaki şifreleme, sunucuya yüklenen dosyaların şifrelenebilmesini sağlar. Bu özellik genel başarımı düşürdüğünden yalnız gerek varsa etkinleştirin.", "Enable server-side encryption" : "Sunucu tarafı şifreleme kullanılsın", "Please read carefully before activating server-side encryption: " : "Lütfen sunucu tarafında şifrelemeyi etkinleştirmeden önce dikkatlice okuyun: ", "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." : "Şifreleme etkinleştirildiğinde, etkinleştirme anından sonra sunucuya yüklenen tüm dosyalar şifrelenir. Şifreleme daha sonra devre dışı bırakılmak istenirse, etkin şifreleme modülünün bu özelliği desteklemesi ve tüm ön koşulların (örneğin kurtarma anahtarı oluşturulması) yerine getirilmesi gerekir.", @@ -205,6 +216,7 @@ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Şifreleme anahtarlarınızı eski şifrelemeden (ownCloud <= 8.0) yenisine aktarmalısınız.", "Start migration" : "Aktarmayı başlat", "Security & setup warnings" : "Güvenlik ve kurulum uyarıları", + "It's important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the Tips & Ticks section and the documentation for more information." : "Kopyanızın güvenli ve yüksek başarımla çalışması için ayarların doğru yapılmış olması önemlidir. Bunu sağlamak için bazı otomatik denetimler yapılır. Ayrıntılı bilgi almak için İpuçları bölümüne ve belgelere bakın.", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP sistem ortam değişkenlerini okuyamayacak şekilde hatalı olarak kurulmuş gibi görünüyor. getenv(\"PATH\") komutu ile yapılan sınama sonucunda boş bir cevap alındı.", "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Lütfen PHP yapılandırma notları ve özellikle php-fpm kullanırken sunucunuzdaki PHP yapılandırması için <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">kurulum belgelerine ↗</a> bakın.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Salt Okunur yapılandırma etkinleştirilmiş. Bu yapılandırma, bazı ayarların web arayüzünden yapılmasını önler. Ayrıca, bu dosyanın her güncelleme öncesinde el ile yazılabilir yapılması gerekir.", @@ -225,6 +237,7 @@ "Last cron job execution: %s." : "Zamanlanmış görevin son yürütülmesi: %s.", "Last cron job execution: %s. Something seems wrong." : "Zamanlanmış görevin son yürütülmesi: %s. Bir şeyler yanlış görünüyor.", "Cron was not executed yet!" : "Zamanlanmış görev henüz yürütülmemiş!", + "For optimal performance it's important to configure background jobs correctly. For bigger instances 'Cron' is the recommended setting. Please see the documentation for more information." : "En iyi başarım için art alan görevlerinin doğru şekilde ayarlanması önemlidir. Büyük kurulumlar için 'Cron' ayarı önerilir. Ayrıntılı bilgi almak için belgelere bakın.", "Execute one task with each page loaded" : "Her sayfa yüklemesinde bir görev yürütülsün", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php, http üzerinden 15 dakikada bir yürütülmesi için webcron hizmetine kaydedildi.", "Use system's cron service to call the cron.php file every 15 minutes." : "Cron.php dosyasını 15 dakikada bir çağırmak için sistem cron hizmeti kullanılır.", @@ -232,6 +245,7 @@ "To run this you need the PHP posix extension. See {linkstart}PHP documentation{linkend} for more details." : "Bunu çalıştıraiblmek için PHP posix eklentisi gereklidir. Ayrıntılı bilgi almak için {linkstart}PHP belgelerine{linkend} bakın.", "Version" : "Sürüm", "Sharing" : "Paylaşım", + "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Yönetici olarak paylaşma davranışı ile ilgili ince ayarları yapabilirsiniz. Ayrıntılı bilgi almak için belgelere bakın.", "Allow apps to use the Share API" : "Uygulamalar Paylaşım API kullanabilsin", "Allow users to share via link" : "Kullanıcıların bağlantı ile paylaşabilsin", "Allow public uploads" : "Herkes yükleme yapabilsin", @@ -250,6 +264,7 @@ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Herkese açık bağlantı yükleme sayfasındaki sorumluluk reddi bildirim metni (yalnız dosya listesi gizli iken görüntülenir).", "This text will be shown on the public link upload page when the file list is hidden." : "Dosya listesi gizli iken herkese açık bağlantı yükleme sayfasında görüntülenecek sorumluluk reddi bildirimi metni.", "Tips & tricks" : "İpucu ve incelikler", + "There are a lot of features and config switches available to optimally customize and use this instance. Here are some pointers for more information." : "Bu kopyayı kullanmak ve en iyi şekilde ayarlamak için çok sayıda özellik ve ayar seçeneği vardır. Ayrıntılı bilgi alabileceğiniz bazı konular şu şekildedir.", "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "Şu anda veritabanı olarak SQLite kullanılıyor. Daha büyük kurulumlar için farklı bir veritabanı arka ucuna geçmenizi öneriyoruz.", "This is particularly recommended when using the desktop client for file synchronisation." : "Özellikle dosya eşitleme için masaüstü istemcisi kullanılırken SQLite kullanımı önerilmez.", "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>." : "Başka bir veritabanına geçmek için komut satırı aracını kullanın: 'occ db:convert-type' ya da <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">belgelere ↗</a> bakın.", @@ -261,6 +276,8 @@ "Check the security of your Nextcloud over our security scan" : "Güvenlik sınamamızdan geçirerek Nextcloud güvenliğinizi denetleyin", "Hardening and security guidance" : "Sağlamlaştırma ve güvenlik rehberliği", "Developer documentation" : "Geliştirici belgeleri", + "View in store" : "Mağazada görüntüle", + "Limit to groups" : "Şu gruplarla sınırla", "This app has an update available." : "Bu uygulama için bir güncelleme yayınlanmış.", "by %s" : "Yazar: %s", "%s-licensed" : "%s lisanslı", @@ -307,9 +324,7 @@ "Address" : "Adres", "Your postal address" : "Posta adresiniz", "Website" : "Web sitesi", - "Your website" : "Web sitesi adresiniz", "Twitter" : "Twitter", - "Your Twitter handle" : "Twitter adresiniz", "You are member of the following groups:" : "Şu gruplara üyesiniz:", "Password" : "Parola", "Current password" : "Geçerli parola", @@ -326,7 +341,6 @@ "Web, desktop and mobile clients currently logged in to your account." : "Şu anda hesabınıza web, masaüstü ve mobil istemciler oturum açmış.", "Device" : "Aygıt", "Last activity" : "Son işlem", - "Passcodes that give an app or device permissions to access your account." : "Parola kodları bir uygulama ya da aygıtın hesabınıza erişmesini sağlar.", "Name" : "Ad", "App name" : "Uygulama adı", "Create new app password" : "Yeni uygulama parolası oluştur", @@ -335,10 +349,10 @@ "Username" : "Kullanıcı Adı", "Done" : "Tamam", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "{communityopen}Nextcloud topluluğu tarafından geliştirilmiştir{linkclose}. {githubopen}Kaynak kodu{linkclose} {licenseopen}AGPL{linkclose} koşulları altında lisanslanmıştır.", - "Follow us on Google Plus!" : "Bizi Google Plus üzerinde izleyin", + "Follow us on Google+!" : "Bizi Google+ üzerinde izleyin!", "Like our facebook page!" : "Facebook sayfamızı beğenin!", - "Subscribe to our twitter channel!" : "Twitter kanalımıza abone olun!", - "Subscribe to our news feed!" : "Haber akışımıza abone olun!", + "Follow us on Twitter!" : "Bizi Twitter üzerinde izleyin!", + "Check out our blog!" : "Bloğumuza bakın!", "Subscribe to our newsletter!" : " Bültenimize abone olun!", "Settings" : "Ayarlar", "Show storage location" : "Depolama konumu görüntülensin", @@ -378,12 +392,19 @@ "Uninstalling ...." : "Kaldırılıyor ....", "Error while uninstalling app" : "Uygulama kaldırılırken sorun çıktı", "Uninstall" : "Kaldır", + "This is used for sending out notifications." : "Bu özellik bildirimler gönderilirken kullanılır.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP 'fileinfo' modülü bulunamadı. MIME türü algılamasında en iyi sonuçları elde etmek için bu modülü etkinleştirmeniz önerilir.", "Uninstall app" : "Uygulamayı Kaldır", "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>" : "Merhaba,<br><br>Artık bir %s hesabınızın olduğunu bildirmek istedik.<br><br>Kullanıcı adınız: %s<br>Şuradan erişebilirsiniz: <a href=\"%s\">%s</a><br><br>", "Cheers!" : "Hoşçakalın!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Merhaba\n\nArtık bir %s hesabınızın olduğunu bildirmek istedik.\n\nKullanıcı adınız: %s\nŞuradan erişebilirsiniz: %s\n", "For password recovery and notifications" : "Parola sıfırlama ve bildirimler için", + "Your website" : "Web sitesi adresiniz", + "Your Twitter handle" : "Twitter adresiniz", + "Passcodes that give an app or device permissions to access your account." : "Parola kodları bir uygulama ya da aygıtın hesabınıza erişmesini sağlar.", + "Follow us on Google Plus!" : "Bizi Google Plus üzerinde izleyin", + "Subscribe to our twitter channel!" : "Twitter kanalımıza abone olun!", + "Subscribe to our news feed!" : "Haber akışımıza abone olun!", "Show last log in" : "Son oturum açma zamanı görüntülensin" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/settings/l10n/uk.js b/settings/l10n/uk.js index b9726c2ff56..5dd9cd466e9 100644 --- a/settings/l10n/uk.js +++ b/settings/l10n/uk.js @@ -81,7 +81,6 @@ OC.L10N.register( "NT LAN Manager" : "Менеджер NT LAN", "Email server" : "Сервер електронної пошти", "Open documentation" : "Відкрити документацію", - "This is used for sending out notifications." : "Використовується для відсилання повідомлень.", "Send mode" : "Режим надсилання", "Encryption" : "Шифрування", "From address" : "Адреса відправника", @@ -213,6 +212,7 @@ OC.L10N.register( "Uninstalling ...." : "Видалення...", "Error while uninstalling app" : "Помилка видалення додатка", "Uninstall" : "Видалити", + "This is used for sending out notifications." : "Використовується для відсилання повідомлень.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP модуль 'fileinfo' відсутній. Ми наполегливо рекомендуємо увімкнути цей модуль, щоб отримати кращі результати при виявленні MIME-типів.", "Cheers!" : "Будьмо!", "Show last log in" : "Показати останній вхід в систему" diff --git a/settings/l10n/uk.json b/settings/l10n/uk.json index 2565cad4252..06b280c2aa2 100644 --- a/settings/l10n/uk.json +++ b/settings/l10n/uk.json @@ -79,7 +79,6 @@ "NT LAN Manager" : "Менеджер NT LAN", "Email server" : "Сервер електронної пошти", "Open documentation" : "Відкрити документацію", - "This is used for sending out notifications." : "Використовується для відсилання повідомлень.", "Send mode" : "Режим надсилання", "Encryption" : "Шифрування", "From address" : "Адреса відправника", @@ -211,6 +210,7 @@ "Uninstalling ...." : "Видалення...", "Error while uninstalling app" : "Помилка видалення додатка", "Uninstall" : "Видалити", + "This is used for sending out notifications." : "Використовується для відсилання повідомлень.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP модуль 'fileinfo' відсутній. Ми наполегливо рекомендуємо увімкнути цей модуль, щоб отримати кращі результати при виявленні MIME-типів.", "Cheers!" : "Будьмо!", "Show last log in" : "Показати останній вхід в систему" diff --git a/settings/l10n/zh_CN.js b/settings/l10n/zh_CN.js index e06defa4ad0..fea05297a24 100644 --- a/settings/l10n/zh_CN.js +++ b/settings/l10n/zh_CN.js @@ -16,7 +16,6 @@ OC.L10N.register( "Group already exists." : "分组已经存在.", "Unable to add group." : "无法添加分组.", "Unable to delete group." : "无法删除分组.", - "Mail could not be sent. Check your mail server log" : "邮件无法发送. 检查你的邮件服务器日志", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "在发送电子邮件时出现问题. 请修正您的设置. (错误: %s)", "You need to set your user email before being able to send test emails." : "在发送测试邮件前您需要设置您的电子邮件地址.", "Invalid request" : "无效请求", @@ -145,7 +144,6 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "Email server" : "电子邮件服务器", "Open documentation" : "打开文档", - "This is used for sending out notifications." : "这被用于发送通知.", "Send mode" : "发送模式", "Encryption" : "加密", "From address" : "来自地址", @@ -275,9 +273,7 @@ OC.L10N.register( "Address" : "地址", "Your postal address" : "您的邮寄地址", "Website" : "网站", - "Your website" : "您的网站", "Twitter" : "Twitter", - "Your Twitter handle" : "您的 Twitter 账号", "You are member of the following groups:" : "您是以下组的成员:", "Password" : "密码", "Current password" : "当前密码", @@ -294,7 +290,6 @@ OC.L10N.register( "Web, desktop and mobile clients currently logged in to your account." : "您账号当前登录的 Web 页面, 桌面和客户端客户端.", "Device" : "设备", "Last activity" : "最后活跃", - "Passcodes that give an app or device permissions to access your account." : "Passcodes 可以使应用或设备访问您的账号.", "Name" : "名称", "App name" : "应用名", "Create new app password" : "创建新应用密码", @@ -303,10 +298,7 @@ OC.L10N.register( "Username" : "用户名", "Done" : "完成", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "由 {communityopen}Nextcloud community{linkclose} 开发, {githubopen}源代码{linkclose} 基于 {licenseopen}AGPL{linkclose} 许可协议.", - "Follow us on Google Plus!" : "在 Google+ 上关注我们!", "Like our facebook page!" : "点赞我们 facebook 页面!", - "Subscribe to our twitter channel!" : "关注我们的 twitter!", - "Subscribe to our news feed!" : "订阅我们 RSS 最新消息!", "Subscribe to our newsletter!" : "订阅我们的最新消息!", "Show storage location" : "显示存储位置", "Show user backend" : "显示用户来源", @@ -343,12 +335,19 @@ OC.L10N.register( "Uninstalling ...." : "正在卸载....", "Error while uninstalling app" : "卸载应用时发生了一个错误", "Uninstall" : "卸载", + "This is used for sending out notifications." : "这被用于发送通知.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP 模块 'fileinfo' 缺失. 我们强烈建议启用此模块以便在 MIME 类型检测时获得最准确的结果.", "Uninstall app" : "卸载应用", "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "您好,<br><br>您刚刚创建了 %s 账户<br><br>您的用户名: <strong>%s</strong><br>现在访问: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "干杯!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "您好,\n\n您刚刚创建了 %s 账户.\n\n您的用户名: %s\n现在访问: %s\n", "For password recovery and notifications" : "用于密码恢复和通知", + "Your website" : "您的网站", + "Your Twitter handle" : "您的 Twitter 账号", + "Passcodes that give an app or device permissions to access your account." : "Passcodes 可以使应用或设备访问您的账号.", + "Follow us on Google Plus!" : "在 Google+ 上关注我们!", + "Subscribe to our twitter channel!" : "关注我们的 twitter!", + "Subscribe to our news feed!" : "订阅我们 RSS 最新消息!", "Show last log in" : "显示最后登录" }, "nplurals=1; plural=0;"); diff --git a/settings/l10n/zh_CN.json b/settings/l10n/zh_CN.json index b83bb4c06bc..2f800e744b4 100644 --- a/settings/l10n/zh_CN.json +++ b/settings/l10n/zh_CN.json @@ -14,7 +14,6 @@ "Group already exists." : "分组已经存在.", "Unable to add group." : "无法添加分组.", "Unable to delete group." : "无法删除分组.", - "Mail could not be sent. Check your mail server log" : "邮件无法发送. 检查你的邮件服务器日志", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "在发送电子邮件时出现问题. 请修正您的设置. (错误: %s)", "You need to set your user email before being able to send test emails." : "在发送测试邮件前您需要设置您的电子邮件地址.", "Invalid request" : "无效请求", @@ -143,7 +142,6 @@ "STARTTLS" : "STARTTLS", "Email server" : "电子邮件服务器", "Open documentation" : "打开文档", - "This is used for sending out notifications." : "这被用于发送通知.", "Send mode" : "发送模式", "Encryption" : "加密", "From address" : "来自地址", @@ -273,9 +271,7 @@ "Address" : "地址", "Your postal address" : "您的邮寄地址", "Website" : "网站", - "Your website" : "您的网站", "Twitter" : "Twitter", - "Your Twitter handle" : "您的 Twitter 账号", "You are member of the following groups:" : "您是以下组的成员:", "Password" : "密码", "Current password" : "当前密码", @@ -292,7 +288,6 @@ "Web, desktop and mobile clients currently logged in to your account." : "您账号当前登录的 Web 页面, 桌面和客户端客户端.", "Device" : "设备", "Last activity" : "最后活跃", - "Passcodes that give an app or device permissions to access your account." : "Passcodes 可以使应用或设备访问您的账号.", "Name" : "名称", "App name" : "应用名", "Create new app password" : "创建新应用密码", @@ -301,10 +296,7 @@ "Username" : "用户名", "Done" : "完成", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "由 {communityopen}Nextcloud community{linkclose} 开发, {githubopen}源代码{linkclose} 基于 {licenseopen}AGPL{linkclose} 许可协议.", - "Follow us on Google Plus!" : "在 Google+ 上关注我们!", "Like our facebook page!" : "点赞我们 facebook 页面!", - "Subscribe to our twitter channel!" : "关注我们的 twitter!", - "Subscribe to our news feed!" : "订阅我们 RSS 最新消息!", "Subscribe to our newsletter!" : "订阅我们的最新消息!", "Show storage location" : "显示存储位置", "Show user backend" : "显示用户来源", @@ -341,12 +333,19 @@ "Uninstalling ...." : "正在卸载....", "Error while uninstalling app" : "卸载应用时发生了一个错误", "Uninstall" : "卸载", + "This is used for sending out notifications." : "这被用于发送通知.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP 模块 'fileinfo' 缺失. 我们强烈建议启用此模块以便在 MIME 类型检测时获得最准确的结果.", "Uninstall app" : "卸载应用", "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "您好,<br><br>您刚刚创建了 %s 账户<br><br>您的用户名: <strong>%s</strong><br>现在访问: <strong><a href=\"%s\">%s</a></strong><br><br>", "Cheers!" : "干杯!", "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "您好,\n\n您刚刚创建了 %s 账户.\n\n您的用户名: %s\n现在访问: %s\n", "For password recovery and notifications" : "用于密码恢复和通知", + "Your website" : "您的网站", + "Your Twitter handle" : "您的 Twitter 账号", + "Passcodes that give an app or device permissions to access your account." : "Passcodes 可以使应用或设备访问您的账号.", + "Follow us on Google Plus!" : "在 Google+ 上关注我们!", + "Subscribe to our twitter channel!" : "关注我们的 twitter!", + "Subscribe to our news feed!" : "订阅我们 RSS 最新消息!", "Show last log in" : "显示最后登录" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/settings/l10n/zh_TW.js b/settings/l10n/zh_TW.js index fa5f5a2cfe0..ab1c29019ff 100644 --- a/settings/l10n/zh_TW.js +++ b/settings/l10n/zh_TW.js @@ -99,7 +99,6 @@ OC.L10N.register( "NT LAN Manager" : "NT LAN Manager", "Email server" : "郵件伺服器", "Open documentation" : "開啟說明文件", - "This is used for sending out notifications." : "用於寄送通知", "Send mode" : "寄送模式", "Encryption" : "加密", "From address" : "寄件地址", @@ -247,6 +246,7 @@ OC.L10N.register( "Uninstalling ...." : "正在解除安裝…", "Error while uninstalling app" : "移除應用程式錯誤", "Uninstall" : "解除安裝", + "This is used for sending out notifications." : "用於寄送通知", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "未偵測到 PHP 模組 'fileinfo'。我們強烈建議啟用這個模組以取得最好的 mime-type 支援。", "Cheers!" : "太棒了!", "For password recovery and notifications" : "用於密碼重設和通知", diff --git a/settings/l10n/zh_TW.json b/settings/l10n/zh_TW.json index 955eb4e57b5..9eeeb4eb326 100644 --- a/settings/l10n/zh_TW.json +++ b/settings/l10n/zh_TW.json @@ -97,7 +97,6 @@ "NT LAN Manager" : "NT LAN Manager", "Email server" : "郵件伺服器", "Open documentation" : "開啟說明文件", - "This is used for sending out notifications." : "用於寄送通知", "Send mode" : "寄送模式", "Encryption" : "加密", "From address" : "寄件地址", @@ -245,6 +244,7 @@ "Uninstalling ...." : "正在解除安裝…", "Error while uninstalling app" : "移除應用程式錯誤", "Uninstall" : "解除安裝", + "This is used for sending out notifications." : "用於寄送通知", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "未偵測到 PHP 模組 'fileinfo'。我們強烈建議啟用這個模組以取得最好的 mime-type 支援。", "Cheers!" : "太棒了!", "For password recovery and notifications" : "用於密碼重設和通知", diff --git a/settings/personal.php b/settings/personal.php index 2c46a9f8dd2..86ac4f753f4 100644 --- a/settings/personal.php +++ b/settings/personal.php @@ -40,7 +40,11 @@ OC_Util::checkLoggedIn(); $defaults = \OC::$server->getThemingDefaults(); $certificateManager = \OC::$server->getCertificateManager(); -$accountManager = new \OC\Accounts\AccountManager(\OC::$server->getDatabaseConnection(), \OC::$server->getEventDispatcher()); +$accountManager = new \OC\Accounts\AccountManager( + \OC::$server->getDatabaseConnection(), + \OC::$server->getEventDispatcher(), + \OC::$server->getJobList() +); $config = \OC::$server->getConfig(); $urlGenerator = \OC::$server->getURLGenerator(); @@ -181,6 +185,28 @@ $tmpl->assign('websiteScope', $userData[\OC\Accounts\AccountManager::PROPERTY_WE $tmpl->assign('twitterScope', $userData[\OC\Accounts\AccountManager::PROPERTY_TWITTER]['scope']); $tmpl->assign('addressScope', $userData[\OC\Accounts\AccountManager::PROPERTY_ADDRESS]['scope']); +$tmpl->assign('websiteVerification', $userData[\OC\Accounts\AccountManager::PROPERTY_WEBSITE]['verified']); +$tmpl->assign('twitterVerification', $userData[\OC\Accounts\AccountManager::PROPERTY_TWITTER]['verified']); +$tmpl->assign('emailVerification', $userData[\OC\Accounts\AccountManager::PROPERTY_EMAIL]['verified']); + +$needVerifyMessage = [\OC\Accounts\AccountManager::PROPERTY_EMAIL, \OC\Accounts\AccountManager::PROPERTY_WEBSITE, \OC\Accounts\AccountManager::PROPERTY_TWITTER]; + +foreach ($needVerifyMessage as $property) { + + switch ($userData[$property]['verified']) { + case \OC\Accounts\AccountManager::VERIFIED: + $message = $l->t('Verifying'); + break; + case \OC\Accounts\AccountManager::VERIFICATION_IN_PROGRESS: + $message = $l->t('Verifying …'); + break; + default: + $message = $l->t('Verify'); + } + + $tmpl->assign($property . 'Message', $message); +} + $tmpl->assign('avatarChangeSupported', OC_User::canUserChangeAvatar(OC_User::getUser())); $tmpl->assign('certs', $certificateManager->listCertificates()); $tmpl->assign('showCertificates', $enableCertImport); @@ -220,8 +246,13 @@ $formsMap = array_map(function($form){ if (preg_match('%(<h2(?P<class>[^>]*)>.*?</h2>)%i', $form, $regs)) { $sectionName = str_replace('<h2'.$regs['class'].'>', '', $regs[0]); $sectionName = str_replace('</h2>', '', $sectionName); - $anchor = strtolower($sectionName); - $anchor = str_replace(' ', '-', $anchor); + if (strpos($regs['class'], 'data-anchor-name') !== false) { + preg_match('%.*data-anchor-name="(?P<anchor>[^"]*)"%i', $regs['class'], $matches); + $anchor = $matches['anchor']; + } else { + $anchor = strtolower($sectionName); + $anchor = str_replace(' ', '-', $anchor); + } return array( 'anchor' => $anchor, diff --git a/settings/routes.php b/settings/routes.php index b76bb213d0c..fb85b11f390 100644 --- a/settings/routes.php +++ b/settings/routes.php @@ -52,6 +52,8 @@ $application->registerRoutes($this, [ ['name' => 'Users#setDisplayName', 'url' => '/settings/users/{username}/displayName', 'verb' => 'POST'], ['name' => 'Users#setEMailAddress', 'url' => '/settings/users/{id}/mailAddress', 'verb' => 'PUT'], ['name' => 'Users#setUserSettings', 'url' => '/settings/users/{username}/settings', 'verb' => 'PUT'], + ['name' => 'Users#getVerificationCode', 'url' => '/settings/users/{account}/verify', 'verb' => 'GET'], + ['name' => 'Users#setEnabled', 'url' => '/settings/users/{id}/setEnabled', 'verb' => 'POST'], ['name' => 'Users#stats', 'url' => '/settings/users/stats', 'verb' => 'GET'], ['name' => 'LogSettings#setLogLevel', 'url' => '/settings/admin/log/level', 'verb' => 'POST'], ['name' => 'LogSettings#getEntries', 'url' => '/settings/admin/log/entries', 'verb' => 'GET'], diff --git a/settings/templates/admin/additional-mail.php b/settings/templates/admin/additional-mail.php index 249252dc694..bce7e5adeee 100644 --- a/settings/templates/admin/additional-mail.php +++ b/settings/templates/admin/additional-mail.php @@ -61,7 +61,7 @@ if ($_['mail_smtpmode'] === 'qmail') { <p> <label for="mail_smtpmode"><?php p($l->t('Send mode')); ?></label> - <select name="mail_smtpmode" id="mail_smtpmode'> + <select name="mail_smtpmode" id="mail_smtpmode"> <?php foreach ($mail_smtpmode as $smtpmode): $selected = ''; if ($smtpmode[0] == $_['mail_smtpmode']): diff --git a/settings/templates/apps.php b/settings/templates/apps.php index 310513722cf..260b042c078 100644 --- a/settings/templates/apps.php +++ b/settings/templates/apps.php @@ -29,8 +29,17 @@ script( <?php endif; ?> </script> - <script id="app-template-installed" type="text/x-handlebars"> +{{#if newCategory}} +<div class="apps-header"> + <div class="app-image"></div> + <h2>{{categoryName}} <input class="enable" type="submit" data-bundleid="{{bundleId}}" data-active="true" value="<?php p($l->t('Enable all'));?>"/></h2> + <div class="app-version"></div> + <div class="app-level"></div> + <div class="app-groups"></div> + <div class="actions"> </div> +</div> +{{/if}} <div class="section" id="app-{{id}}"> <div class="app-image app-image-icon"></div> <div class="app-name"> diff --git a/settings/templates/certificates.php b/settings/templates/certificates.php index 16f8dda31ad..ac0a2293800 100644 --- a/settings/templates/certificates.php +++ b/settings/templates/certificates.php @@ -1,5 +1,5 @@ <div class="section"> - <h2><?php p($l->t('SSL Root Certificates')); ?></h2> + <h2 data-anchor-name="ssl-root-certificate"><?php p($l->t('SSL Root Certificates')); ?></h2> <table id="sslCertificate" class="grid" data-type="<?php p($_['type']); ?>"> <thead> <tr> diff --git a/settings/templates/personal.php b/settings/templates/personal.php index 20475290df2..3e30d775395 100644 --- a/settings/templates/personal.php +++ b/settings/templates/personal.php @@ -99,6 +99,21 @@ <label for="email"><?php p($l->t('Email')); ?></label> <span class="icon-password"/> </h2> + <div class="verify <?php if ($_['email'] === '' || $_['emailScope'] !== 'public') p('hidden'); ?>"> + <img id="verify-email" title="<?php p($_['emailMessage']); ?>" data-status="<?php p($_['emailVerification']) ?>" src=" + <?php + switch($_['emailVerification']) { + case \OC\Accounts\AccountManager::VERIFICATION_IN_PROGRESS: + p(image_path('core', 'actions/verifying.svg')); + break; + case \OC\Accounts\AccountManager::VERIFIED: + p(image_path('core', 'actions/verified.svg')); + break; + default: + p(image_path('core', 'actions/verify.svg')); + } + ?>"> + </div> <input type="email" name="email" id="email" value="<?php p($_['email']); ?>" <?php if(!$_['displayNameChangeSupported']) { print_unescaped('class="hidden"'); } ?> placeholder="<?php p($l->t('Your email address')); ?>" @@ -151,8 +166,32 @@ <label for="website"><?php p($l->t('Website')); ?></label> <span class="icon-password"/> </h2> + <div class="verify <?php if ($_['website'] === '' || $_['websiteScope'] !== 'public') p('hidden'); ?>"> + <img id="verify-website" title="<?php p($_['websiteMessage']); ?>" data-status="<?php p($_['websiteVerification']) ?>" src=" + <?php + switch($_['websiteVerification']) { + case \OC\Accounts\AccountManager::VERIFICATION_IN_PROGRESS: + p(image_path('core', 'actions/verifying.svg')); + break; + case \OC\Accounts\AccountManager::VERIFIED: + p(image_path('core', 'actions/verified.svg')); + break; + default: + p(image_path('core', 'actions/verify.svg')); + } + ?>" + <?php if($_['websiteVerification'] === \OC\Accounts\AccountManager::VERIFICATION_IN_PROGRESS || $_['websiteVerification'] === \OC\Accounts\AccountManager::NOT_VERIFIED) print_unescaped(' class="verify-action"') ?> + > + <div class="verification-dialog popovermenu bubble menu"> + <div class="verification-dialog-content"> + <p class="explainVerification"></p> + <p class="verificationCode"></p> + <p><?php p($l->t('It can take up to 24 hours before the account is displayed as verified.'));?></p> + </div> + </div> + </div> <input type="text" name="website" id="website" value="<?php p($_['website']); ?>" - placeholder="<?php p($l->t('Your website')); ?>" + placeholder="<?php p($l->t('Link https://…')); ?>" autocomplete="on" autocapitalize="none" autocorrect="off" /> <span class="icon-checkmark hidden"/> <input type="hidden" id="websitescope" value="<?php p($_['websiteScope']) ?>"> @@ -164,8 +203,32 @@ <label for="twitter"><?php p($l->t('Twitter')); ?></label> <span class="icon-password"/> </h2> + <div class="verify <?php if ($_['twitter'] === '' || $_['twitterScope'] !== 'public') p('hidden'); ?>"> + <img id="verify-twitter" title="<?php p($_['twitterMessage']); ?>" data-status="<?php p($_['twitterVerification']) ?>" src=" + <?php + switch($_['twitterVerification']) { + case \OC\Accounts\AccountManager::VERIFICATION_IN_PROGRESS: + p(image_path('core', 'actions/verifying.svg')); + break; + case \OC\Accounts\AccountManager::VERIFIED: + p(image_path('core', 'actions/verified.svg')); + break; + default: + p(image_path('core', 'actions/verify.svg')); + } + ?>" + <?php if($_['twitterVerification'] === \OC\Accounts\AccountManager::VERIFICATION_IN_PROGRESS || $_['twitterVerification'] === \OC\Accounts\AccountManager::NOT_VERIFIED) print_unescaped(' class="verify-action"') ?> + > + <div class="verification-dialog popovermenu bubble menu"> + <div class="verification-dialog-content"> + <p class="explainVerification"></p> + <p class="verificationCode"></p> + <p><?php p($l->t('It can take up to 24 hours before the account is displayed as verified.'));?></p> + </div> + </div> + </div> <input type="text" name="twitter" id="twitter" value="<?php p($_['twitter']); ?>" - placeholder="<?php p($l->t('Your Twitter handle')); ?>" + placeholder="<?php p($l->t('Twitter handle @…')); ?>" autocomplete="on" autocapitalize="none" autocorrect="off" /> <span class="icon-checkmark hidden"/> <input type="hidden" id="twitterscope" value="<?php p($_['twitterScope']) ?>"> @@ -273,7 +336,7 @@ if($_['passwordChangeSupported']) { <div id="sessions" class="section"> <h2><?php p($l->t('Sessions'));?></h2> - <span class="hidden-when-empty"><?php p($l->t('Web, desktop and mobile clients currently logged in to your account.'));?></span> + <p class="settings-hint hidden-when-empty"><?php p($l->t('Web, desktop and mobile clients currently logged in to your account.'));?></p> <table class="icon-loading"> <thead class="token-list-header"> <tr> @@ -289,7 +352,7 @@ if($_['passwordChangeSupported']) { <div id="apppasswords" class="section"> <h2><?php p($l->t('App passwords'));?></h2> - <p><?php p($l->t('Passcodes that give an app or device permissions to access your account.'));?></p> + <p class="settings-hint"><?php p($l->t('Here you can generate individual passwords for apps so you don’t have to give out your password. You can revoke them individually too.'));?></p> <table class="icon-loading"> <thead class="hidden-when-empty"> <tr> diff --git a/settings/templates/settings.development.notice.php b/settings/templates/settings.development.notice.php index 4e763de14cb..770f868eda5 100644 --- a/settings/templates/settings.development.notice.php +++ b/settings/templates/settings.development.notice.php @@ -28,7 +28,7 @@ '{facebookopen}', '{twitteropen}', '{rssopen}', - '{newsletteropen}', + '{newsletteropen}', '{linkclose}', '{googletext}', '{facebooktext}', @@ -45,13 +45,13 @@ '<a target="_blank" rel="noreferrer noopener" href="https://plus.google.com/+Nextcloud">', '<a target="_blank" rel="noreferrer noopener" href="https://www.facebook.com/Nextclouders/">', '<a target="_blank" rel="noreferrer noopener" href="https://twitter.com/nextclouders">', - '<a target="_blank" rel="noreferrer noopener" href="https://nextcloud.com/blogfeed">', + '<a target="_blank" rel="noreferrer noopener" href="https://nextcloud.com/news/">', '<a target="_blank" rel="noreferrer noopener" href="https://newsletter.nextcloud.com/?p=subscribe&id=1">', '</a>', - $l->t('Follow us on Google Plus!'), + $l->t('Follow us on Google+!'), $l->t('Like our facebook page!'), - $l->t('Subscribe to our twitter channel!'), - $l->t('Subscribe to our news feed!'), + $l->t('Follow us on Twitter!'), + $l->t('Check out our blog!'), $l->t('Subscribe to our newsletter!'), ], diff --git a/settings/templates/users/part.grouplist.php b/settings/templates/users/part.grouplist.php index beb0f275a33..5dfd7836f6a 100644 --- a/settings/templates/users/part.grouplist.php +++ b/settings/templates/users/part.grouplist.php @@ -37,6 +37,15 @@ </li> <?php endforeach; ?> + <!-- Disabled Users --> + <?php $disabledUsersGroup = $_["disabledUsersGroup"] ?> + <li data-gid="_disabledUsers" data-usercount="<?php if($disabledUsersGroup['usercount'] > 0) { p($disabledUsersGroup['usercount']); } ?>" class="isgroup"> + <a href="#"><span class="groupname"><?php p($l->t('Disabled')); ?></span></a> + <span class="utils"> + <span class="usercount"><?php if($disabledUsersGroup['usercount'] > 0) { p($disabledUsersGroup['usercount']); } ?></span> + </span> + </li> + <!--List of Groups--> <?php foreach($_["groups"] as $group): ?> <li data-gid="<?php p($group['name']) ?>" data-usercount="<?php p($group['usercount']) ?>" class="isgroup"> diff --git a/settings/templates/users/part.userlist.php b/settings/templates/users/part.userlist.php index 7e7e1561e2f..b908109ad2d 100644 --- a/settings/templates/users/part.userlist.php +++ b/settings/templates/users/part.userlist.php @@ -14,7 +14,7 @@ <th class="storageLocation" scope="col"><?php p($l->t('Storage location')); ?></th> <th class="userBackend" scope="col"><?php p($l->t('User backend')); ?></th> <th class="lastLogin" scope="col"><?php p($l->t('Last login')); ?></th> - <th id="headerRemove"> </th> + <th class="userActions"></th> </tr> </thead> <tbody> @@ -63,7 +63,21 @@ <td class="storageLocation"></td> <td class="userBackend"></td> <td class="lastLogin"></td> - <td class="remove"></td> + <td class="userActions"><span></span> + <div class="popovermenu bubble open menu"> + <ul class="userActionsMenu"> + <li> + <a href="#" class="menuitem action-togglestate permanent" data-action="togglestate"></a> + </li> + <li> + <a href="#" class="menuitem action-remove permanent" data-action="remove"> + <span class="icon icon-delete"></span> + <span><?php p($l->t('Delete')); ?></span> + </a> + </li> + </ul> + </div> + </td> </tr> </tbody> </table> diff --git a/settings/users.php b/settings/users.php index 1986592af75..4d214bf9502 100644 --- a/settings/users.php +++ b/settings/users.php @@ -45,6 +45,7 @@ $groupManager = \OC::$server->getGroupManager(); // Set the sort option: SORT_USERCOUNT or SORT_GROUPNAME $sortGroupsBy = \OC\Group\MetaData::SORT_USERCOUNT; +$isLDAPUsed = false; if (\OC_App::isEnabled('user_ldap')) { $isLDAPUsed = $groupManager->isBackendUsed('\OCA\User_LDAP\Group_LDAP') @@ -59,12 +60,15 @@ $config = \OC::$server->getConfig(); $isAdmin = OC_User::isAdminUser(OC_User::getUser()); +$isDisabled = !OC_User::isEnabled(OC_User::getUser()); + $groupsInfo = new \OC\Group\MetaData( OC_User::getUser(), $isAdmin, $groupManager, \OC::$server->getUserSession() ); + $groupsInfo->setSorting($sortGroupsBy); list($adminGroup, $groups) = $groupsInfo->get(); @@ -93,6 +97,13 @@ if($isAdmin) { $subAdmins = false; } +$disabledUsers = $isLDAPUsed ? 0 : $userManager->countDisabledUsers(); +$disabledUsersGroup = [ + 'id' => '_disabledUsers', + 'name' => '_disabledUsers', + 'usercount' => $disabledUsers +]; + // load preset quotas $quotaPreset=$config->getAppValue('files', 'quota_preset', '1 GB, 5 GB, 10 GB'); $quotaPreset=explode(',', $quotaPreset); @@ -111,6 +122,7 @@ $tmpl = new OC_Template("settings", "users/main", "user"); $tmpl->assign('groups', $groups); $tmpl->assign('sortGroups', $sortGroupsBy); $tmpl->assign('adminGroup', $adminGroup); +$tmpl->assign('disabledUsersGroup', $disabledUsersGroup); $tmpl->assign('isAdmin', (int)$isAdmin); $tmpl->assign('subadmins', $subAdmins); $tmpl->assign('numofgroups', count($groups) + count($adminGroup)); diff --git a/tests/Core/Controller/ContactsMenuControllerTest.php b/tests/Core/Controller/ContactsMenuControllerTest.php index bf6188e9097..92a185cf2ad 100644 --- a/tests/Core/Controller/ContactsMenuControllerTest.php +++ b/tests/Core/Controller/ContactsMenuControllerTest.php @@ -76,4 +76,35 @@ class ContactsMenuControllerTest extends TestCase { $this->assertEquals($entries, $response); } + public function testFindOne() { + $user = $this->createMock(IUser::class); + $entry = $this->createMock(IEntry::class); + $this->userSession->expects($this->once()) + ->method('getUser') + ->willReturn($user); + $this->contactsManager->expects($this->once()) + ->method('findOne') + ->with($this->equalTo($user), $this->equalTo(42), $this->equalTo('test-search-phrase')) + ->willReturn($entry); + + $response = $this->controller->findOne(42, 'test-search-phrase'); + + $this->assertEquals($entry, $response); + } + + public function testFindOne404() { + $user = $this->createMock(IUser::class); + $this->userSession->expects($this->once()) + ->method('getUser') + ->willReturn($user); + $this->contactsManager->expects($this->once()) + ->method('findOne') + ->with($this->equalTo($user), $this->equalTo(42), $this->equalTo('test-search-phrase')) + ->willReturn(null); + + $response = $this->controller->findOne(42, 'test-search-phrase'); + + $this->assertEquals([], $response->getData()); + $this->assertEquals(404, $response->getStatus()); + } } diff --git a/tests/Settings/Controller/AppSettingsControllerTest.php b/tests/Settings/Controller/AppSettingsControllerTest.php index 14dc33ca191..9633c771596 100644 --- a/tests/Settings/Controller/AppSettingsControllerTest.php +++ b/tests/Settings/Controller/AppSettingsControllerTest.php @@ -22,6 +22,7 @@ namespace Tests\Settings\Controller; +use OC\App\AppStore\Bundles\BundleFetcher; use OC\App\AppStore\Fetcher\AppFetcher; use OC\App\AppStore\Fetcher\CategoryFetcher; use OC\Settings\Controller\AppSettingsController; @@ -60,6 +61,8 @@ class AppSettingsControllerTest extends TestCase { private $appFetcher; /** @var IFactory|\PHPUnit_Framework_MockObject_MockObject */ private $l10nFactory; + /** @var BundleFetcher|\PHPUnit_Framework_MockObject_MockObject */ + private $bundleFetcher; public function setUp() { parent::setUp(); @@ -75,6 +78,7 @@ class AppSettingsControllerTest extends TestCase { $this->categoryFetcher = $this->createMock(CategoryFetcher::class); $this->appFetcher = $this->createMock(AppFetcher::class); $this->l10nFactory = $this->createMock(IFactory::class); + $this->bundleFetcher = $this->createMock(BundleFetcher::class); $this->appSettingsController = new AppSettingsController( 'settings', @@ -85,7 +89,8 @@ class AppSettingsControllerTest extends TestCase { $this->appManager, $this->categoryFetcher, $this->appFetcher, - $this->l10nFactory + $this->l10nFactory, + $this->bundleFetcher ); } @@ -107,6 +112,11 @@ class AppSettingsControllerTest extends TestCase { 'displayName' => 'Disabled apps', ], [ + 'id' => 3, + 'ident' => 'app-bundles', + 'displayName' => 'App bundles', + ], + [ 'id' => 'auth', 'ident' => 'auth', 'displayName' => 'Authentication & authorization', diff --git a/tests/Settings/Controller/UsersControllerTest.php b/tests/Settings/Controller/UsersControllerTest.php index d659d812b0d..5905023e960 100644 --- a/tests/Settings/Controller/UsersControllerTest.php +++ b/tests/Settings/Controller/UsersControllerTest.php @@ -18,6 +18,7 @@ use OCP\App\IAppManager; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\Utility\ITimeFactory; +use OCP\BackgroundJob\IJobList; use OCP\IAvatar; use OCP\IAvatarManager; use OCP\IConfig; @@ -74,6 +75,10 @@ class UsersControllerTest extends \Test\TestCase { private $newUserMailHelper; /** @var ICrypto | \PHPUnit_Framework_MockObject_MockObject */ private $crypto; + /** @var IJobList | \PHPUnit_Framework_MockObject_MockObject */ + private $jobList; + /** @var \OC\Security\IdentityProof\Manager |\PHPUnit_Framework_MockObject_MockObject */ + private $securityManager; protected function setUp() { parent::setUp(); @@ -92,6 +97,10 @@ class UsersControllerTest extends \Test\TestCase { $this->timeFactory = $this->createMock(ITimeFactory::class); $this->crypto = $this->createMock(ICrypto::class); $this->newUserMailHelper = $this->createMock(NewUserMailHelper::class); + $this->timeFactory = $this->createMock(ITimeFactory::class); + $this->crypto = $this->createMock(ICrypto::class); + $this->securityManager = $this->getMockBuilder(\OC\Security\IdentityProof\Manager::class)->disableOriginalConstructor()->getMock(); + $this->jobList = $this->createMock(IJobList::class); $this->l = $this->createMock(IL10N::class); $this->l->method('t') ->will($this->returnCallback(function ($text, $parameters = []) { @@ -136,7 +145,12 @@ class UsersControllerTest extends \Test\TestCase { $this->avatarManager, $this->accountManager, $this->secureRandom, - $this->newUserMailHelper + $this->newUserMailHelper, + $this->timeFactory, + $this->crypto, + $this->securityManager, + $this->jobList + ); } else { return $this->getMockBuilder(UsersController::class) @@ -157,7 +171,11 @@ class UsersControllerTest extends \Test\TestCase { $this->avatarManager, $this->accountManager, $this->secureRandom, - $this->newUserMailHelper + $this->newUserMailHelper, + $this->timeFactory, + $this->crypto, + $this->securityManager, + $this->jobList ] )->setMethods($mockedMethods)->getMock(); } @@ -193,6 +211,9 @@ class UsersControllerTest extends \Test\TestCase { ->expects($this->once()) ->method('getBackendClassName') ->will($this->returnValue('OC_User_Database')); + $foo->expects($this->any()) + ->method('isEnabled') + ->willReturn(true); $admin = $this->createMock(User::class); $admin ->expects($this->exactly(2)) @@ -222,6 +243,9 @@ class UsersControllerTest extends \Test\TestCase { ->expects($this->once()) ->method('getBackendClassName') ->willReturn(Dummy::class); + $admin->expects($this->any()) + ->method('isEnabled') + ->willReturn(true); $bar = $this->createMock(User::class); $bar ->expects($this->exactly(2)) @@ -249,6 +273,15 @@ class UsersControllerTest extends \Test\TestCase { ->expects($this->once()) ->method('getBackendClassName') ->willReturn(Dummy::class); + $bar->expects($this->at(0)) + ->method('isEnabled') + ->willReturn(true); + $bar->expects($this->at(1)) + ->method('isEnabled') + ->willReturn(true); + $bar->expects($this->at(2)) + ->method('isEnabled') + ->willReturn(false); $this->groupManager ->expects($this->once()) @@ -312,6 +345,7 @@ class UsersControllerTest extends \Test\TestCase { 'email' => 'foo@bar.com', 'isRestoreDisabled' => false, 'isAvatarAvailable' => true, + 'isEnabled' => true, ), 1 => array( 'name' => 'admin', @@ -325,6 +359,7 @@ class UsersControllerTest extends \Test\TestCase { 'email' => 'admin@bar.com', 'isRestoreDisabled' => false, 'isAvatarAvailable' => false, + 'isEnabled' => true, ), 2 => array( 'name' => 'bar', @@ -338,6 +373,7 @@ class UsersControllerTest extends \Test\TestCase { 'email' => 'bar@dummy.com', 'isRestoreDisabled' => false, 'isAvatarAvailable' => true, + 'isEnabled' => false, ), ) ); @@ -381,6 +417,9 @@ class UsersControllerTest extends \Test\TestCase { ->expects($this->once()) ->method('getBackendClassName') ->will($this->returnValue('OC_User_Database')); + $foo->expects($this->any()) + ->method('isEnabled') + ->willReturn(true); $admin = $this->createMock(User::class); $admin ->expects($this->exactly(2)) @@ -410,6 +449,9 @@ class UsersControllerTest extends \Test\TestCase { ->expects($this->once()) ->method('getBackendClassName') ->willReturn(Dummy::class); + $admin->expects($this->any()) + ->method('isEnabled') + ->willReturn(true); $bar = $this->createMock(User::class); $bar ->expects($this->exactly(2)) @@ -437,6 +479,9 @@ class UsersControllerTest extends \Test\TestCase { ->expects($this->once()) ->method('getBackendClassName') ->willReturn(Dummy::class); + $bar->expects($this->any()) + ->method('isEnabled') + ->willReturn(true); $this->groupManager ->expects($this->at(2)) @@ -514,6 +559,7 @@ class UsersControllerTest extends \Test\TestCase { 'email' => 'bar@dummy.com', 'isRestoreDisabled' => false, 'isAvatarAvailable' => true, + 'isEnabled' => true, ], 1=> [ 'name' => 'foo', @@ -527,6 +573,7 @@ class UsersControllerTest extends \Test\TestCase { 'email' => 'foo@bar.com', 'isRestoreDisabled' => false, 'isAvatarAvailable' => true, + 'isEnabled' => true, ], 2 => [ 'name' => 'admin', @@ -540,6 +587,7 @@ class UsersControllerTest extends \Test\TestCase { 'email' => 'admin@bar.com', 'isRestoreDisabled' => false, 'isAvatarAvailable' => false, + 'isEnabled' => true, ], ] ); @@ -582,6 +630,9 @@ class UsersControllerTest extends \Test\TestCase { ->expects($this->once()) ->method('getBackendClassName') ->will($this->returnValue('OC_User_Database')); + $foo->expects($this->any()) + ->method('isEnabled') + ->willReturn(true); $admin = $this->createMock(User::class); $admin ->expects($this->exactly(2)) @@ -611,6 +662,9 @@ class UsersControllerTest extends \Test\TestCase { ->expects($this->once()) ->method('getBackendClassName') ->willReturn(Dummy::class); + $admin->expects($this->any()) + ->method('isEnabled') + ->willReturn(true); $bar = $this->createMock(User::class); $bar ->expects($this->exactly(2)) @@ -638,6 +692,9 @@ class UsersControllerTest extends \Test\TestCase { ->expects($this->once()) ->method('getBackendClassName') ->willReturn(Dummy::class); + $bar->expects($this->any()) + ->method('isEnabled') + ->willReturn(true); $this->userManager ->expects($this->once()) @@ -674,6 +731,7 @@ class UsersControllerTest extends \Test\TestCase { 'email' => 'foo@bar.com', 'isRestoreDisabled' => false, 'isAvatarAvailable' => true, + 'isEnabled' => true, ), 1 => array( 'name' => 'admin', @@ -687,6 +745,7 @@ class UsersControllerTest extends \Test\TestCase { 'email' => 'admin@bar.com', 'isRestoreDisabled' => false, 'isAvatarAvailable' => false, + 'isEnabled' => true, ), 2 => array( 'name' => 'bar', @@ -700,6 +759,7 @@ class UsersControllerTest extends \Test\TestCase { 'email' => 'bar@dummy.com', 'isRestoreDisabled' => false, 'isAvatarAvailable' => true, + 'isEnabled' => true, ), ) ); @@ -737,6 +797,10 @@ class UsersControllerTest extends \Test\TestCase { ->expects($this->once()) ->method('getBackendClassName') ->will($this->returnValue('OC_User_Database')); + $user->expects($this->any()) + ->method('isEnabled') + ->willReturn(true); + $this->userManager ->expects($this->once()) ->method('getBackends') @@ -775,6 +839,7 @@ class UsersControllerTest extends \Test\TestCase { 'email' => null, 'isRestoreDisabled' => false, 'isAvatarAvailable' => true, + 'isEnabled' => true, ) ) ); @@ -814,6 +879,9 @@ class UsersControllerTest extends \Test\TestCase { ->expects($this->once()) ->method('getBackendClassName') ->will($this->returnValue('bar')); + $user->expects($this->any()) + ->method('isEnabled') + ->willReturn(true); $this->userManager ->expects($this->once()) @@ -846,6 +914,7 @@ class UsersControllerTest extends \Test\TestCase { 'email' => null, 'isRestoreDisabled' => false, 'isAvatarAvailable' => true, + 'isEnabled' => true, ), Http::STATUS_CREATED ); @@ -870,6 +939,9 @@ class UsersControllerTest extends \Test\TestCase { ->expects($this->once()) ->method('getBackendClassName') ->will($this->returnValue('bar')); + $user->expects($this->any()) + ->method('isEnabled') + ->willReturn(true); $existingGroup = $this->getMockBuilder('\OCP\IGroup') ->disableOriginalConstructor()->getMock(); $existingGroup @@ -928,6 +1000,7 @@ class UsersControllerTest extends \Test\TestCase { 'email' => null, 'isRestoreDisabled' => false, 'isAvatarAvailable' => true, + 'isEnabled' => true, ), Http::STATUS_CREATED ); @@ -957,6 +1030,9 @@ class UsersControllerTest extends \Test\TestCase { ->method('getBackendClassName') ->will($this->returnValue('bar')); $subGroup1 = $this->createMock(IGroup::class); + $newUser->expects($this->any()) + ->method('isEnabled') + ->willReturn(true); $subGroup1 ->expects($this->any()) ->method('getGID') @@ -1016,6 +1092,7 @@ class UsersControllerTest extends \Test\TestCase { 'email' => null, 'isRestoreDisabled' => false, 'isAvatarAvailable' => true, + 'isEnabled' => true, ), Http::STATUS_CREATED ); @@ -1445,7 +1522,8 @@ class UsersControllerTest extends \Test\TestCase { } private function mockUser($userId = 'foo', $displayName = 'M. Foo', - $lastLogin = 500, $home = '/home/foo', $backend = 'OC_User_Database') { + $lastLogin = 500, $home = '/home/foo', + $backend = 'OC_User_Database', $enabled = true) { $user = $this->createMock(User::class); $user ->expects($this->any()) @@ -1465,6 +1543,9 @@ class UsersControllerTest extends \Test\TestCase { ->expects($this->once()) ->method('getBackendClassName') ->will($this->returnValue($backend)); + $user->expects($this->any()) + ->method('isEnabled') + ->willReturn($enabled); $result = [ 'name' => $userId, @@ -1478,6 +1559,7 @@ class UsersControllerTest extends \Test\TestCase { 'email' => null, 'isRestoreDisabled' => false, 'isAvatarAvailable' => true, + 'isEnabled' => $enabled, ]; return [$user, $result]; @@ -2141,6 +2223,11 @@ class UsersControllerTest extends \Test\TestCase { /** * @dataProvider setEmailAddressData * + * @param string $mailAddress + * @param bool $isValid + * @param bool $expectsUpdate + * @param bool $canChangeDisplayName + * @param int $responseCode */ public function testSetEMailAddress($mailAddress, $isValid, $expectsUpdate, $canChangeDisplayName, $responseCode) { $user = $this->createMock(User::class); @@ -2212,6 +2299,9 @@ class UsersControllerTest extends \Test\TestCase { ->expects($this->once()) ->method('getBackendClassName') ->willReturn('bar'); + $user + ->method('isEnabled') + ->willReturn(true); $this->userManager ->expects($this->once()) @@ -2261,10 +2351,519 @@ class UsersControllerTest extends \Test\TestCase { 'email' => 'abc@example.org', 'isRestoreDisabled' => false, 'isAvatarAvailable' => true, + 'isEnabled' => true, ], Http::STATUS_CREATED ); $response = $controller->create('foo', '', array(), 'abc@example.org'); $this->assertEquals($expectedResponse, $response); } + + /** + * @param string $account + * @param string $type + * @param array $dataBefore + * @param array $expectedData + * + * @dataProvider dataTestGetVerificationCode + */ + public function testGetVerificationCode($account, $type, $dataBefore, $expectedData, $onlyVerificationCode) { + + $message = 'Use my Federated Cloud ID to share with me: user@nextcloud.com'; + $signature = 'theSignature'; + + $code = $message . ' ' . $signature; + if($type === AccountManager::PROPERTY_TWITTER) { + $code = $message . ' ' . md5($signature); + } + + $controller = $this->getController(false, ['signMessage', 'getCurrentTime']); + + $user = $this->createMock(IUser::class); + $this->userSession->expects($this->once())->method('getUser')->willReturn($user); + $this->accountManager->expects($this->once())->method('getUser')->with($user)->willReturn($dataBefore); + $user->expects($this->any())->method('getCloudId')->willReturn('user@nextcloud.com'); + $user->expects($this->any())->method('getUID')->willReturn('uid'); + $controller->expects($this->once())->method('signMessage')->with($user, $message)->willReturn($signature); + $controller->expects($this->any())->method('getCurrentTime')->willReturn(1234567); + + if ($onlyVerificationCode === false) { + $this->accountManager->expects($this->once())->method('updateUser')->with($user, $expectedData); + $this->jobList->expects($this->once())->method('add') + ->with('OC\Settings\BackgroundJobs\VerifyUserData', + [ + 'verificationCode' => $code, + 'data' => $dataBefore[$type]['value'], + 'type' => $type, + 'uid' => 'uid', + 'try' => 0, + 'lastRun' => 1234567 + ]); + } + + $result = $controller->getVerificationCode($account, $onlyVerificationCode); + + $data = $result->getData(); + $this->assertSame(Http::STATUS_OK, $result->getStatus()); + $this->assertSame($code, $data['code']); + } + + public function dataTestGetVerificationCode() { + + $accountDataBefore = [ + AccountManager::PROPERTY_WEBSITE => ['value' => 'https://nextcloud.com', 'verified' => AccountManager::NOT_VERIFIED], + AccountManager::PROPERTY_TWITTER => ['value' => '@nextclouders', 'verified' => AccountManager::NOT_VERIFIED, 'signature' => 'theSignature'], + ]; + + $accountDataAfterWebsite = [ + AccountManager::PROPERTY_WEBSITE => ['value' => 'https://nextcloud.com', 'verified' => AccountManager::VERIFICATION_IN_PROGRESS, 'signature' => 'theSignature'], + AccountManager::PROPERTY_TWITTER => ['value' => '@nextclouders', 'verified' => AccountManager::NOT_VERIFIED, 'signature' => 'theSignature'], + ]; + + $accountDataAfterTwitter = [ + AccountManager::PROPERTY_WEBSITE => ['value' => 'https://nextcloud.com', 'verified' => AccountManager::NOT_VERIFIED], + AccountManager::PROPERTY_TWITTER => ['value' => '@nextclouders', 'verified' => AccountManager::VERIFICATION_IN_PROGRESS, 'signature' => 'theSignature'], + ]; + + return [ + ['verify-twitter', AccountManager::PROPERTY_TWITTER, $accountDataBefore, $accountDataAfterTwitter, false], + ['verify-website', AccountManager::PROPERTY_WEBSITE, $accountDataBefore, $accountDataAfterWebsite, false], + ['verify-twitter', AccountManager::PROPERTY_TWITTER, $accountDataBefore, $accountDataAfterTwitter, true], + ['verify-website', AccountManager::PROPERTY_WEBSITE, $accountDataBefore, $accountDataAfterWebsite, true], + ]; + } + + /** + * test get verification code in case no valid user was given + */ + public function testGetVerificationCodeInvalidUser() { + + $controller = $this->getController(); + $this->userSession->expects($this->once())->method('getUser')->willReturn(null); + $result = $controller->getVerificationCode('account', false); + + $this->assertSame(Http::STATUS_BAD_REQUEST, $result->getStatus()); + } + + public function testDisableUserFailsDueSameUser() { + $user = $this->getMockBuilder('\OC\User\User') + ->disableOriginalConstructor()->getMock(); + $user->expects($this->once()) + ->method('getUID') + ->will($this->returnValue('abc')); + $this->userSession + ->expects($this->once()) + ->method('getUser') + ->will($this->returnValue($user)); + $expectedResponse = new DataResponse( + [ + 'status' => 'error', + 'data' => [ + 'message' => 'Error while disabling user.', + ], + ], + Http::STATUS_FORBIDDEN + ); + $response = $this->getController(true)->setEnabled('abc', false); + $this->assertEquals($expectedResponse, $response); + } + + public function testDisableUserFailsDueNoAdminAndNoSubadmin() { + $user = $this->getMockBuilder('\OC\User\User') + ->disableOriginalConstructor()->getMock(); + $user->expects($this->once()) + ->method('getUID') + ->will($this->returnValue('def')); + $this->userSession + ->expects($this->exactly(2)) + ->method('getUser') + ->will($this->returnValue($user)); + $user2 = $this->getMockBuilder('\OC\User\User') + ->disableOriginalConstructor()->getMock(); + $user2->expects($this->never()) + ->method('setEnabled'); + $this->userManager + ->expects($this->once()) + ->method('get') + ->with('abc') + ->willReturn($user2); + + $subadmin = $this->createMock('\OC\SubAdmin'); + $subadmin->expects($this->once()) + ->method('isUserAccessible') + ->will($this->returnValue(false)); + $this->groupManager + ->expects($this->once()) + ->method('getSubAdmin') + ->willReturn($subadmin); + + $expectedResponse = new DataResponse( + [ + 'status' => 'error', + 'data' => [ + 'message' => 'Authentication error', + ], + ], + Http::STATUS_FORBIDDEN + ); + $response = $this->getController(false)->setEnabled('abc', false); + $this->assertEquals($expectedResponse, $response); + } + + public function testDisableUserFailsDueNoUser() { + $user = $this->getMockBuilder('\OC\User\User') + ->disableOriginalConstructor()->getMock(); + $user->expects($this->once()) + ->method('getUID') + ->will($this->returnValue('def')); + $this->userSession + ->expects($this->exactly(1)) + ->method('getUser') + ->will($this->returnValue($user)); + $this->userManager + ->expects($this->once()) + ->method('get') + ->with('abc') + ->willReturn(null); + + $this->groupManager + ->expects($this->never()) + ->method('getSubAdmin'); + + $expectedResponse = new DataResponse( + [ + 'status' => 'error', + 'data' => [ + 'message' => 'Error while disabling user.', + ], + ], + Http::STATUS_FORBIDDEN + ); + $response = $this->getController(true)->setEnabled('abc', false); + $this->assertEquals($expectedResponse, $response); + } + + public function testDisableUserFailsDueNoUserForSubAdmin() { + $user = $this->getMockBuilder('\OC\User\User') + ->disableOriginalConstructor()->getMock(); + $user->expects($this->once()) + ->method('getUID') + ->will($this->returnValue('def')); + $this->userSession + ->expects($this->exactly(1)) + ->method('getUser') + ->will($this->returnValue($user)); + $this->userManager + ->expects($this->once()) + ->method('get') + ->with('abc') + ->willReturn(null); + + $this->groupManager + ->expects($this->never()) + ->method('getSubAdmin'); + + $expectedResponse = new DataResponse( + [ + 'status' => 'error', + 'data' => [ + 'message' => 'Error while disabling user.', + ], + ], + Http::STATUS_FORBIDDEN + ); + $response = $this->getController(false)->setEnabled('abc', false); + $this->assertEquals($expectedResponse, $response); + } + + public function testDisableUserSuccessForAdmin() { + $user = $this->getMockBuilder('\OC\User\User') + ->disableOriginalConstructor()->getMock(); + $user->expects($this->once()) + ->method('getUID') + ->will($this->returnValue('def')); + $this->userSession + ->expects($this->exactly(1)) + ->method('getUser') + ->will($this->returnValue($user)); + $user2 = $this->getMockBuilder('\OC\User\User') + ->disableOriginalConstructor()->getMock(); + $user2->expects($this->once()) + ->method('setEnabled') + ->with(false); + $this->userManager + ->expects($this->once()) + ->method('get') + ->with('abc') + ->willReturn($user2); + + $this->groupManager + ->expects($this->never()) + ->method('getSubAdmin'); + + $expectedResponse = new DataResponse( + [ + 'status' => 'success', + 'data' => [ + 'username' => 'abc', + 'enabled' => 0, + ], + ] + ); + $response = $this->getController(true)->setEnabled('abc', false); + $this->assertEquals($expectedResponse, $response); + } + + public function testDisableUserSuccessForSubAdmin() { + $user = $this->getMockBuilder('\OC\User\User') + ->disableOriginalConstructor()->getMock(); + $user->expects($this->once()) + ->method('getUID') + ->will($this->returnValue('def')); + $this->userSession + ->expects($this->exactly(2)) + ->method('getUser') + ->will($this->returnValue($user)); + $user2 = $this->getMockBuilder('\OC\User\User') + ->disableOriginalConstructor()->getMock(); + $user2->expects($this->once()) + ->method('setEnabled'); + $this->userManager + ->expects($this->once()) + ->method('get') + ->with('abc') + ->willReturn($user2); + + $subadmin = $this->createMock('\OC\SubAdmin'); + $subadmin->expects($this->once()) + ->method('isUserAccessible') + ->will($this->returnValue(true)); + $this->groupManager + ->expects($this->once()) + ->method('getSubAdmin') + ->willReturn($subadmin); + + $expectedResponse = new DataResponse( + [ + 'status' => 'success', + 'data' => [ + 'username' => 'abc', + 'enabled' => 0, + ], + ] + ); + $response = $this->getController(false)->setEnabled('abc', false); + $this->assertEquals($expectedResponse, $response); + } + + public function testEnableUserFailsDueSameUser() { + $user = $this->getMockBuilder('\OC\User\User') + ->disableOriginalConstructor()->getMock(); + $user->expects($this->once()) + ->method('getUID') + ->will($this->returnValue('abc')); + $this->userSession + ->expects($this->once()) + ->method('getUser') + ->will($this->returnValue($user)); + $expectedResponse = new DataResponse( + [ + 'status' => 'error', + 'data' => [ + 'message' => 'Error while enabling user.', + ], + ], + Http::STATUS_FORBIDDEN + ); + $response = $this->getController(true)->setEnabled('abc', true); + $this->assertEquals($expectedResponse, $response); + } + + public function testEnableUserFailsDueNoAdminAndNoSubadmin() { + $user = $this->getMockBuilder('\OC\User\User') + ->disableOriginalConstructor()->getMock(); + $user->expects($this->once()) + ->method('getUID') + ->will($this->returnValue('def')); + $this->userSession + ->expects($this->exactly(2)) + ->method('getUser') + ->will($this->returnValue($user)); + $user2 = $this->getMockBuilder('\OC\User\User') + ->disableOriginalConstructor()->getMock(); + $user2->expects($this->never()) + ->method('setEnabled'); + $this->userManager + ->expects($this->once()) + ->method('get') + ->with('abc') + ->willReturn($user2); + + $subadmin = $this->createMock('\OC\SubAdmin'); + $subadmin->expects($this->once()) + ->method('isUserAccessible') + ->will($this->returnValue(false)); + $this->groupManager + ->expects($this->once()) + ->method('getSubAdmin') + ->willReturn($subadmin); + + $expectedResponse = new DataResponse( + [ + 'status' => 'error', + 'data' => [ + 'message' => 'Authentication error', + ], + ], + Http::STATUS_FORBIDDEN + ); + $response = $this->getController(false)->setEnabled('abc', true); + $this->assertEquals($expectedResponse, $response); + } + + public function testEnableUserFailsDueNoUser() { + $user = $this->getMockBuilder('\OC\User\User') + ->disableOriginalConstructor()->getMock(); + $user->expects($this->once()) + ->method('getUID') + ->will($this->returnValue('def')); + $this->userSession + ->expects($this->exactly(1)) + ->method('getUser') + ->will($this->returnValue($user)); + $this->userManager + ->expects($this->once()) + ->method('get') + ->with('abc') + ->willReturn(null); + + $this->groupManager + ->expects($this->never()) + ->method('getSubAdmin'); + + $expectedResponse = new DataResponse( + [ + 'status' => 'error', + 'data' => [ + 'message' => 'Error while enabling user.', + ], + ], + Http::STATUS_FORBIDDEN + ); + $response = $this->getController(true)->setEnabled('abc', true); + $this->assertEquals($expectedResponse, $response); + } + + public function testEnableUserFailsDueNoUserForSubAdmin() { + $user = $this->getMockBuilder('\OC\User\User') + ->disableOriginalConstructor()->getMock(); + $user->expects($this->once()) + ->method('getUID') + ->will($this->returnValue('def')); + $this->userSession + ->expects($this->exactly(1)) + ->method('getUser') + ->will($this->returnValue($user)); + $this->userManager + ->expects($this->once()) + ->method('get') + ->with('abc') + ->willReturn(null); + + $this->groupManager + ->expects($this->never()) + ->method('getSubAdmin'); + + $expectedResponse = new DataResponse( + [ + 'status' => 'error', + 'data' => [ + 'message' => 'Error while enabling user.', + ], + ], + Http::STATUS_FORBIDDEN + ); + $response = $this->getController(false)->setEnabled('abc', true); + $this->assertEquals($expectedResponse, $response); + } + + public function testEnableUserSuccessForAdmin() { + $user = $this->getMockBuilder('\OC\User\User') + ->disableOriginalConstructor()->getMock(); + $user->expects($this->once()) + ->method('getUID') + ->will($this->returnValue('def')); + $this->userSession + ->expects($this->exactly(1)) + ->method('getUser') + ->will($this->returnValue($user)); + $user2 = $this->getMockBuilder('\OC\User\User') + ->disableOriginalConstructor()->getMock(); + $user2->expects($this->once()) + ->method('setEnabled'); + $this->userManager + ->expects($this->once()) + ->method('get') + ->with('abc') + ->willReturn($user2); + + $this->groupManager + ->expects($this->never()) + ->method('getSubAdmin'); + + $expectedResponse = new DataResponse( + [ + 'status' => 'success', + 'data' => [ + 'username' => 'abc', + 'enabled' => 1, + ], + ] + ); + $response = $this->getController(true)->setEnabled('abc', true); + $this->assertEquals($expectedResponse, $response); + } + + public function testEnableUserSuccessForSubAdmin() { + $user = $this->getMockBuilder('\OC\User\User') + ->disableOriginalConstructor()->getMock(); + $user->expects($this->once()) + ->method('getUID') + ->will($this->returnValue('def')); + $this->userSession + ->expects($this->exactly(2)) + ->method('getUser') + ->will($this->returnValue($user)); + $user2 = $this->getMockBuilder('\OC\User\User') + ->disableOriginalConstructor()->getMock(); + $user2->expects($this->once()) + ->method('setEnabled') + ->with(true); + $this->userManager + ->expects($this->once()) + ->method('get') + ->with('abc') + ->willReturn($user2); + + $subadmin = $this->createMock('\OC\SubAdmin'); + $subadmin->expects($this->once()) + ->method('isUserAccessible') + ->will($this->returnValue(true)); + $this->groupManager + ->expects($this->once()) + ->method('getSubAdmin') + ->willReturn($subadmin); + + $expectedResponse = new DataResponse( + [ + 'status' => 'success', + 'data' => [ + 'username' => 'abc', + 'enabled' => 1, + ], + ] + ); + $response = $this->getController(false)->setEnabled('abc', true); + $this->assertEquals($expectedResponse, $response); + } } diff --git a/tests/acceptance/features/app-files.feature b/tests/acceptance/features/app-files.feature index 7adc618e02e..6779b37e145 100644 --- a/tests/acceptance/features/app-files.feature +++ b/tests/acceptance/features/app-files.feature @@ -1,5 +1,28 @@ Feature: app-files + Scenario: viewing a favorite file in its folder closes the details view + Given I am logged in + And I mark "welcome.txt" as favorite + And I see that "welcome.txt" is marked as favorite + And I open the "Favorites" section + And I open the details view for "welcome.txt" + And I see that the details view for "Favorites" section is open + When I view "welcome.txt" in folder + Then I see that the current section is "All files" + And I see that the details view is closed + + Scenario: viewing a favorite file in its folder does not prevent opening the details view in "All files" section + Given I am logged in + And I mark "welcome.txt" as favorite + And I see that "welcome.txt" is marked as favorite + And I open the "Favorites" section + And I open the details view for "welcome.txt" + And I see that the details view for "Favorites" section is open + And I view "welcome.txt" in folder + And I see that the current section is "All files" + When I open the details view for "welcome.txt" + Then I see that the details view for "All files" section is open + Scenario: set a password to a shared link Given I am logged in And I share the link for "welcome.txt" diff --git a/tests/acceptance/features/bootstrap/FilesAppContext.php b/tests/acceptance/features/bootstrap/FilesAppContext.php index 7e7f592a44e..bc926fbe52f 100644 --- a/tests/acceptance/features/bootstrap/FilesAppContext.php +++ b/tests/acceptance/features/bootstrap/FilesAppContext.php @@ -28,6 +28,55 @@ class FilesAppContext implements Context, ActorAwareInterface { use ActorAware; /** + * @return array + */ + public static function sections() { + return [ "All files" => "files", + "Recent" => "recent", + "Favorites" => "favorites", + "Shared with you" => "sharingin", + "Shared with others" => "sharingout", + "Shared by link" => "sharinglinks", + "Tags" => "systemtagsfilter", + "Deleted files" => "trashbin" ]; + } + + /** + * @return Locator + */ + public static function appNavigation() { + return Locator::forThe()->id("app-navigation")-> + describedAs("App navigation"); + } + + /** + * @return Locator + */ + public static function appNavigationSectionItemFor($sectionText) { + return Locator::forThe()->xpath("//li[normalize-space() = '$sectionText']")-> + descendantOf(self::appNavigation())-> + describedAs($sectionText . " section item in App Navigation"); + } + + /** + * @return Locator + */ + public static function appNavigationCurrentSectionItem() { + return Locator::forThe()->css(".active")->descendantOf(self::appNavigation())-> + describedAs("Current section item in App Navigation"); + } + + /** + * @return Locator + */ + public static function mainViewForSection($section) { + $sectionId = self::sections()[$section]; + + return Locator::forThe()->id("app-content-$sectionId")-> + describedAs("Main view for section $section in Files app"); + } + + /** * @return Locator */ public static function currentSectionMainView() { @@ -38,6 +87,15 @@ class FilesAppContext implements Context, ActorAwareInterface { /** * @return Locator */ + public static function detailsViewForSection($section) { + return Locator::forThe()->xpath("/preceding-sibling::*[position() = 1 and @id = 'app-sidebar']")-> + descendantOf(self::mainViewForSection($section))-> + describedAs("Details view for section $section in Files app"); + } + + /** + * @return Locator + */ public static function currentSectionDetailsView() { return Locator::forThe()->xpath("/preceding-sibling::*[position() = 1 and @id = 'app-sidebar']")-> descendantOf(self::currentSectionMainView())-> @@ -96,12 +154,88 @@ class FilesAppContext implements Context, ActorAwareInterface { /** * @return Locator */ + public static function favoriteActionForFile($fileName) { + return Locator::forThe()->css(".action-favorite")->descendantOf(self::rowForFile($fileName))-> + describedAs("Favorite action for file $fileName in Files app"); + } + + /** + * @return Locator + */ + public static function favoritedStateIconForFile($fileName) { + return Locator::forThe()->content("Favorited")->descendantOf(self::favoriteActionForFile($fileName))-> + describedAs("Favorited state icon for file $fileName in Files app"); + } + + /** + * @return Locator + */ + public static function mainLinkForFile($fileName) { + return Locator::forThe()->css(".name")->descendantOf(self::rowForFile($fileName))-> + describedAs("Main link for file $fileName in Files app"); + } + + /** + * @return Locator + */ public static function shareActionForFile($fileName) { return Locator::forThe()->css(".action-share")->descendantOf(self::rowForFile($fileName))-> describedAs("Share action for file $fileName in Files app"); } /** + * @return Locator + */ + public static function fileActionsMenuButtonForFile($fileName) { + return Locator::forThe()->css(".action-menu")->descendantOf(self::rowForFile($fileName))-> + describedAs("File actions menu button for file $fileName in Files app"); + } + + /** + * @return Locator + */ + public static function fileActionsMenu() { + return Locator::forThe()->css(".fileActionsMenu")-> + describedAs("File actions menu in Files app"); + } + + /** + * @return Locator + */ + public static function viewFileInFolderMenuItem() { + return self::fileActionsMenuItemFor("View in folder"); + } + + /** + * @return Locator + */ + private static function fileActionsMenuItemFor($itemText) { + return Locator::forThe()->content($itemText)->descendantOf(self::fileActionsMenu())-> + describedAs($itemText . " item in file actions menu in Files app"); + } + + /** + * @Given I open the :section section + */ + public function iOpenTheSection($section) { + $this->actor->find(self::appNavigationSectionItemFor($section), 10)->click(); + } + + /** + * @Given I open the details view for :fileName + */ + public function iOpenTheDetailsViewFor($fileName) { + $this->actor->find(self::mainLinkForFile($fileName), 10)->click(); + } + + /** + * @Given I mark :fileName as favorite + */ + public function iMarkAsFavorite($fileName) { + $this->actor->find(self::favoriteActionForFile($fileName), 10)->click(); + } + + /** * @Given I share the link for :fileName */ public function iShareTheLinkFor($fileName) { @@ -118,6 +252,15 @@ class FilesAppContext implements Context, ActorAwareInterface { } /** + * @When I view :fileName in folder + */ + public function iViewInFolder($fileName) { + $this->actor->find(self::fileActionsMenuButtonForFile($fileName), 10)->click(); + + $this->actor->find(self::viewFileInFolderMenuItem(), 2)->click(); + } + + /** * @When I protect the shared link with the password :password */ public function iProtectTheSharedLinkWithThePassword($password) { @@ -136,6 +279,53 @@ class FilesAppContext implements Context, ActorAwareInterface { } /** + * @Then I see that the current section is :section + */ + public function iSeeThatTheCurrentSectionIs($section) { + PHPUnit_Framework_Assert::assertEquals($this->actor->find(self::appNavigationCurrentSectionItem(), 10)->getText(), $section); + } + + /** + * @Then I see that the details view for :section section is open + */ + public function iSeeThatTheDetailsViewForSectionIsOpen($section) { + PHPUnit_Framework_Assert::assertTrue( + $this->actor->find(self::detailsViewForSection($section), 10)->isVisible()); + + $otherSections = self::sections(); + unset($otherSections[$section]); + + $this->assertDetailsViewForSectionsAreClosed($otherSections); + } + + /** + * @Then I see that the details view is closed + */ + public function iSeeThatTheDetailsViewIsClosed() { + PHPUnit_Framework_Assert::assertNotNull($this->actor->find(self::currentSectionMainView(), 10)); + + $this->assertDetailsViewForSectionsAreClosed(self::sections()); + } + + private function assertDetailsViewForSectionsAreClosed($sections) { + foreach ($sections as $section => $id) { + try { + PHPUnit_Framework_Assert::assertFalse( + $this->actor->find(self::detailsViewForSection($section))->isVisible(), + "Details view for section $section is open but it should be closed"); + } catch (NoSuchElementException $exception) { + } + } + } + + /** + * @Then I see that :fileName is marked as favorite + */ + public function iSeeThatIsMarkedAsFavorite($fileName) { + PHPUnit_Framework_Assert::assertNotNull($this->actor->find(self::favoritedStateIconForFile($fileName), 10)); + } + + /** * @Then I see that the working icon for password protect is shown */ public function iSeeThatTheWorkingIconForPasswordProtectIsShown() { diff --git a/tests/lib/Accounts/AccountsManagerTest.php b/tests/lib/Accounts/AccountsManagerTest.php index e6c1552fdc0..6cefebdea86 100644 --- a/tests/lib/Accounts/AccountsManagerTest.php +++ b/tests/lib/Accounts/AccountsManagerTest.php @@ -24,6 +24,7 @@ namespace Test\Accounts; use OC\Accounts\AccountManager; +use OCP\BackgroundJob\IJobList; use OCP\IUser; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\EventDispatcher\GenericEvent; @@ -43,6 +44,9 @@ class AccountsManagerTest extends TestCase { /** @var EventDispatcherInterface | \PHPUnit_Framework_MockObject_MockObject */ private $eventDispatcher; + /** @var IJobList | \PHPUnit_Framework_MockObject_MockObject */ + private $jobList; + /** @var string accounts table name */ private $table = 'accounts'; @@ -51,6 +55,7 @@ class AccountsManagerTest extends TestCase { $this->eventDispatcher = $this->getMockBuilder('Symfony\Component\EventDispatcher\EventDispatcherInterface') ->disableOriginalConstructor()->getMock(); $this->connection = \OC::$server->getDatabaseConnection(); + $this->jobList = $this->getMockBuilder(IJobList::class)->getMock(); } public function tearDown() { @@ -67,7 +72,7 @@ class AccountsManagerTest extends TestCase { */ public function getInstance($mockedMethods = null) { return $this->getMockBuilder('OC\Accounts\AccountManager') - ->setConstructorArgs([$this->connection, $this->eventDispatcher]) + ->setConstructorArgs([$this->connection, $this->eventDispatcher, $this->jobList]) ->setMethods($mockedMethods) ->getMock(); @@ -75,15 +80,24 @@ class AccountsManagerTest extends TestCase { /** * @dataProvider dataTrueFalse + * + * @param array $newData + * @param array $oldData + * @param bool $insertNew + * @param bool $updateExisting */ - public function testUpdateUser($newData, $oldData, $insertNew, $updateExisitng) { - $accountManager = $this->getInstance(['getUser', 'insertNewUser', 'updateExistingUser']); + public function testUpdateUser($newData, $oldData, $insertNew, $updateExisting) { + $accountManager = $this->getInstance(['getUser', 'insertNewUser', 'updateExistingUser', 'updateVerifyStatus', 'checkEmailVerification']); /** @var IUser $user */ $user = $this->createMock(IUser::class); $accountManager->expects($this->once())->method('getUser')->with($user)->willReturn($oldData); - if ($updateExisitng) { + if ($updateExisting) { + $accountManager->expects($this->once())->method('checkEmailVerification') + ->with($oldData, $newData, $user)->willReturn($newData); + $accountManager->expects($this->once())->method('updateVerifyStatus') + ->with($oldData, $newData)->willReturn($newData); $accountManager->expects($this->once())->method('updateExistingUser') ->with($user, $newData); $accountManager->expects($this->never())->method('insertNewUser'); @@ -94,8 +108,10 @@ class AccountsManagerTest extends TestCase { $accountManager->expects($this->never())->method('updateExistingUser'); } - if (!$insertNew && !$updateExisitng) { + if (!$insertNew && !$updateExisting) { $accountManager->expects($this->never())->method('updateExistingUser'); + $accountManager->expects($this->never())->method('checkEmailVerification'); + $accountManager->expects($this->never())->method('updateVerifyStatus'); $accountManager->expects($this->never())->method('insertNewUser'); $this->eventDispatcher->expects($this->never())->method('dispatch'); } else { @@ -133,13 +149,22 @@ class AccountsManagerTest extends TestCase { * @param book $userAlreadyExists */ public function testGetUser($setUser, $setData, $askUser, $expectedData, $userAlreadyExists) { - $accountManager = $this->getInstance(['buildDefaultUserRecord', 'insertNewUser']); + $accountManager = $this->getInstance(['buildDefaultUserRecord', 'insertNewUser', 'addMissingDefaultValues']); if (!$userAlreadyExists) { $accountManager->expects($this->once())->method('buildDefaultUserRecord') ->with($askUser)->willReturn($expectedData); $accountManager->expects($this->once())->method('insertNewUser') ->with($askUser, $expectedData); } + + if(empty($expectedData)) { + $accountManager->expects($this->never())->method('addMissingDefaultValues'); + + } else { + $accountManager->expects($this->once())->method('addMissingDefaultValues')->with($expectedData) + ->willReturn($expectedData); + } + $this->addDummyValuesToTable($setUser, $setData); $this->assertEquals($expectedData, $accountManager->getUser($askUser) @@ -184,6 +209,25 @@ class AccountsManagerTest extends TestCase { $this->assertEquals($data, $dataFromDb); } + public function testAddMissingDefaultValues() { + + $accountManager = $this->getInstance(); + + $input = [ + 'key1' => ['value' => 'value1', 'verified' => '0'], + 'key2' => ['value' => 'value1'], + ]; + + $expected = [ + 'key1' => ['value' => 'value1', 'verified' => '0'], + 'key2' => ['value' => 'value1', 'verified' => '0'], + ]; + + $result = $this->invokePrivate($accountManager, 'addMissingDefaultValues', [$input]); + + $this->assertSame($expected, $result); + } + private function addDummyValuesToTable($uid, $data) { $query = $this->connection->getQueryBuilder(); diff --git a/tests/lib/App/AppStore/Bundles/BundleBase.php b/tests/lib/App/AppStore/Bundles/BundleBase.php new file mode 100644 index 00000000000..23af1cda927 --- /dev/null +++ b/tests/lib/App/AppStore/Bundles/BundleBase.php @@ -0,0 +1,60 @@ +<?php +/** + * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace Test\App\AppStore\Bundles; + +use OC\App\AppStore\Bundles\Bundle; +use OCP\IL10N; +use Test\TestCase; + +abstract class BundleBase extends TestCase { + /** @var IL10N|\PHPUnit_Framework_MockObject_MockObject */ + protected $l10n; + /** @var Bundle */ + protected $bundle; + /** @var string */ + protected $bundleIdentifier; + /** @var string */ + protected $bundleName; + /** @var array */ + protected $bundleAppIds; + + public function setUp() { + parent::setUp(); + $this->l10n = $this->createMock(IL10N::class); + $this->l10n->method('t') + ->will($this->returnCallback(function ($text, $parameters = []) { + return vsprintf($text, $parameters); + })); + } + + public function testGetIdentifier() { + $this->assertSame($this->bundleIdentifier, $this->bundle->getIdentifier()); + } + + public function testGetName() { + $this->assertSame($this->bundleName, $this->bundle->getName()); + } + + public function testGetAppIdentifiers() { + $this->assertSame($this->bundleAppIds, $this->bundle->getAppIdentifiers()); + } +} diff --git a/tests/lib/App/AppStore/Bundles/BundleFetcherTest.php b/tests/lib/App/AppStore/Bundles/BundleFetcherTest.php new file mode 100644 index 00000000000..71f9820fc72 --- /dev/null +++ b/tests/lib/App/AppStore/Bundles/BundleFetcherTest.php @@ -0,0 +1,78 @@ +<?php +/** + * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace Test\App\AppStore\Bundles; + +use OC\App\AppStore\Bundles\BundleFetcher; +use OC\App\AppStore\Bundles\CoreBundle; +use OC\App\AppStore\Bundles\EnterpriseBundle; +use OC\App\AppStore\Bundles\GroupwareBundle; +use OC\App\AppStore\Bundles\SocialSharingBundle; +use OCP\IL10N; +use Test\TestCase; + +class BundleFetcherTest extends TestCase { + /** @var IL10N|\PHPUnit_Framework_MockObject_MockObject */ + private $l10n; + /** @var BundleFetcher */ + private $bundleFetcher; + + public function setUp() { + parent::setUp(); + + $this->l10n = $this->createMock(IL10N::class); + + $this->bundleFetcher = new BundleFetcher( + $this->l10n + ); + } + + public function testGetBundles() { + $expected = [ + new EnterpriseBundle($this->l10n), + new GroupwareBundle($this->l10n), + new SocialSharingBundle($this->l10n), + ]; + $this->assertEquals($expected, $this->bundleFetcher->getBundles()); + } + + public function testGetDefaultInstallationBundle() { + $expected = [ + new CoreBundle($this->l10n), + ]; + $this->assertEquals($expected, $this->bundleFetcher->getDefaultInstallationBundle()); + } + + public function testGetBundleByIdentifier() { + $this->assertEquals(new EnterpriseBundle($this->l10n), $this->bundleFetcher->getBundleByIdentifier('EnterpriseBundle')); + $this->assertEquals(new CoreBundle($this->l10n), $this->bundleFetcher->getBundleByIdentifier('CoreBundle')); + $this->assertEquals(new GroupwareBundle($this->l10n), $this->bundleFetcher->getBundleByIdentifier('GroupwareBundle')); + } + + /** + * @expectedException \BadMethodCallException + * @expectedExceptionMessage Bundle with specified identifier does not exist + */ + public function testGetBundleByIdentifierWithException() { + $this->bundleFetcher->getBundleByIdentifier('NotExistingBundle'); + } + +} diff --git a/tests/lib/App/AppStore/Bundles/CoreBundleTest.php b/tests/lib/App/AppStore/Bundles/CoreBundleTest.php new file mode 100644 index 00000000000..235e2ec84fe --- /dev/null +++ b/tests/lib/App/AppStore/Bundles/CoreBundleTest.php @@ -0,0 +1,36 @@ +<?php +/** + * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace Test\App\AppStore\Bundles; + +use OC\App\AppStore\Bundles\CoreBundle; + +class CoreBundleTest extends BundleBase { + public function setUp() { + parent::setUp(); + $this->bundle = new CoreBundle($this->l10n); + $this->bundleIdentifier = 'CoreBundle'; + $this->bundleName = 'Core bundle'; + $this->bundleAppIds = [ + 'bruteforcesettings', + ]; + } +} diff --git a/tests/lib/App/AppStore/Bundles/EnterpriseBundleTest.php b/tests/lib/App/AppStore/Bundles/EnterpriseBundleTest.php new file mode 100644 index 00000000000..e75486b3ed5 --- /dev/null +++ b/tests/lib/App/AppStore/Bundles/EnterpriseBundleTest.php @@ -0,0 +1,41 @@ +<?php +/** + * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace Test\App\AppStore\Bundles; + +use OC\App\AppStore\Bundles\EnterpriseBundle; + +class EnterpriseBundleTest extends BundleBase { + public function setUp() { + parent::setUp(); + $this->bundle = new EnterpriseBundle($this->l10n); + $this->bundleIdentifier = 'EnterpriseBundle'; + $this->bundleName = 'Enterprise bundle'; + $this->bundleAppIds = [ + 'admin_audit', + 'user_ldap', + 'files_retention', + 'files_automatedtagging', + 'user_saml', + 'files_accesscontrol', + ]; + } +} diff --git a/tests/lib/App/AppStore/Bundles/GroupwareBundleTest.php b/tests/lib/App/AppStore/Bundles/GroupwareBundleTest.php new file mode 100644 index 00000000000..f2f9dcc5ccc --- /dev/null +++ b/tests/lib/App/AppStore/Bundles/GroupwareBundleTest.php @@ -0,0 +1,38 @@ +<?php +/** + * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace Test\App\AppStore\Bundles; + +use OC\App\AppStore\Bundles\GroupwareBundle; + +class GroupwareBundleTest extends BundleBase { + public function setUp() { + parent::setUp(); + $this->bundle = new GroupwareBundle($this->l10n); + $this->bundleIdentifier = 'GroupwareBundle'; + $this->bundleName = 'Groupware bundle'; + $this->bundleAppIds = [ + 'calendar', + 'contacts', + 'spreed', + ]; + } +} diff --git a/tests/lib/App/AppStore/Bundles/SocialSharingBundleTest.php b/tests/lib/App/AppStore/Bundles/SocialSharingBundleTest.php new file mode 100644 index 00000000000..02ea0eb6ae5 --- /dev/null +++ b/tests/lib/App/AppStore/Bundles/SocialSharingBundleTest.php @@ -0,0 +1,40 @@ +<?php +/** + * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace Test\App\AppStore\Bundles; + +use OC\App\AppStore\Bundles\SocialSharingBundle; + +class SocialSharingBundleTest extends BundleBase { + public function setUp() { + parent::setUp(); + $this->bundle = new SocialSharingBundle($this->l10n); + $this->bundleIdentifier = 'SocialSharingBundle'; + $this->bundleName = 'Social sharing bundle'; + $this->bundleAppIds = [ + 'socialsharing_twitter', + 'socialsharing_googleplus', + 'socialsharing_facebook', + 'socialsharing_email', + 'socialsharing_diaspora', + ]; + } +} diff --git a/tests/lib/BackgroundJob/DummyJobList.php b/tests/lib/BackgroundJob/DummyJobList.php index 6cc690fd553..fe8ca5aefe2 100644 --- a/tests/lib/BackgroundJob/DummyJobList.php +++ b/tests/lib/BackgroundJob/DummyJobList.php @@ -7,6 +7,7 @@ */ namespace Test\BackgroundJob; +use OCP\BackgroundJob\IJob; /** * Class DummyJobList @@ -15,7 +16,7 @@ namespace Test\BackgroundJob; */ class DummyJobList extends \OC\BackgroundJob\JobList { /** - * @var \OC\BackgroundJob\Job[] + * @var IJob[] */ private $jobs = array(); @@ -25,7 +26,7 @@ class DummyJobList extends \OC\BackgroundJob\JobList { } /** - * @param \OC\BackgroundJob\Job|string $job + * @param IJob|string $job * @param mixed $argument */ public function add($job, $argument = null) { @@ -40,7 +41,7 @@ class DummyJobList extends \OC\BackgroundJob\JobList { } /** - * @param \OC\BackgroundJob\Job|string $job + * @param IJob|string $job * @param mixed $argument */ public function remove($job, $argument = null) { @@ -64,7 +65,7 @@ class DummyJobList extends \OC\BackgroundJob\JobList { /** * get all jobs in the list * - * @return \OC\BackgroundJob\Job[] + * @return IJob[] */ public function getAll() { return $this->jobs; @@ -73,7 +74,7 @@ class DummyJobList extends \OC\BackgroundJob\JobList { /** * get the next job in the list * - * @return \OC\BackgroundJob\Job + * @return IJob|null */ public function getNext() { if (count($this->jobs) > 0) { @@ -93,7 +94,7 @@ class DummyJobList extends \OC\BackgroundJob\JobList { * * @param \OC\BackgroundJob\Job $job */ - public function setLastJob($job) { + public function setLastJob(IJob $job) { $i = array_search($job, $this->jobs); if ($i !== false) { $this->last = $i; @@ -104,7 +105,7 @@ class DummyJobList extends \OC\BackgroundJob\JobList { /** * @param int $id - * @return Job + * @return IJob */ public function getById($id) { foreach ($this->jobs as $job) { @@ -127,9 +128,12 @@ class DummyJobList extends \OC\BackgroundJob\JobList { /** * set the lastRun of $job to now * - * @param \OC\BackgroundJob\Job $job + * @param IJob $job */ - public function setLastRun($job) { + public function setLastRun(IJob $job) { $job->setLastRun(time()); } + + public function setExecutionTime(IJob $job, $timeTaken) { + } } diff --git a/tests/lib/Contacts/ContactsMenu/ContactsStoreTest.php b/tests/lib/Contacts/ContactsMenu/ContactsStoreTest.php index 80c26a9078e..08da360388f 100644 --- a/tests/lib/Contacts/ContactsMenu/ContactsStoreTest.php +++ b/tests/lib/Contacts/ContactsMenu/ContactsStoreTest.php @@ -157,4 +157,99 @@ class ContactsStoreTest extends TestCase { $this->assertEquals('https://photo', $entries[1]->getAvatar()); } + public function testFindOneUser() { + $user = $this->createMock(IUser::class); + $this->contactsManager->expects($this->once()) + ->method('search') + ->with($this->equalTo('a567'), $this->equalTo(['UID'])) + ->willReturn([ + [ + 'UID' => 123, + 'isLocalSystemBook' => false + ], + [ + 'UID' => 'a567', + 'FN' => 'Darren Roner', + 'EMAIL' => [ + 'darren@roner.au' + ], + 'isLocalSystemBook' => true + ], + ]); + $user->expects($this->once()) + ->method('getUID') + ->willReturn('user123'); + + $entry = $this->contactsStore->findOne($user, 0, 'a567'); + + $this->assertEquals([ + 'darren@roner.au' + ], $entry->getEMailAddresses()); + } + + public function testFindOneEMail() { + $user = $this->createMock(IUser::class); + $this->contactsManager->expects($this->once()) + ->method('search') + ->with($this->equalTo('darren@roner.au'), $this->equalTo(['EMAIL'])) + ->willReturn([ + [ + 'UID' => 123, + 'isLocalSystemBook' => false + ], + [ + 'UID' => 'a567', + 'FN' => 'Darren Roner', + 'EMAIL' => [ + 'darren@roner.au' + ], + 'isLocalSystemBook' => false + ], + ]); + $user->expects($this->once()) + ->method('getUID') + ->willReturn('user123'); + + $entry = $this->contactsStore->findOne($user, 4, 'darren@roner.au'); + + $this->assertEquals([ + 'darren@roner.au' + ], $entry->getEMailAddresses()); + } + + public function testFindOneNotSupportedType() { + $user = $this->createMock(IUser::class); + + $entry = $this->contactsStore->findOne($user, 42, 'darren@roner.au'); + + $this->assertEquals(null, $entry); + } + + public function testFindOneNoMatches() { + $user = $this->createMock(IUser::class); + $this->contactsManager->expects($this->once()) + ->method('search') + ->with($this->equalTo('a567'), $this->equalTo(['UID'])) + ->willReturn([ + [ + 'UID' => 123, + 'isLocalSystemBook' => false + ], + [ + 'UID' => 'a567', + 'FN' => 'Darren Roner', + 'EMAIL' => [ + 'darren@roner.au123' + ], + 'isLocalSystemBook' => false + ], + ]); + $user->expects($this->once()) + ->method('getUID') + ->willReturn('user123'); + + $entry = $this->contactsStore->findOne($user, 0, 'a567'); + + $this->assertEquals(null, $entry); + } } diff --git a/tests/lib/Contacts/ContactsMenu/ManagerTest.php b/tests/lib/Contacts/ContactsMenu/ManagerTest.php index 9c92ec54b9f..783e5590a29 100644 --- a/tests/lib/Contacts/ContactsMenu/ManagerTest.php +++ b/tests/lib/Contacts/ContactsMenu/ManagerTest.php @@ -99,4 +99,49 @@ class ManagerTest extends TestCase { $this->assertEquals($expected, $data); } + public function testFindOne() { + $shareTypeFilter = 42; + $shareWithFilter = 'foobar'; + + $user = $this->createMock(IUser::class); + $entry = current($this->generateTestEntries()); + $provider = $this->createMock(IProvider::class); + $this->contactsStore->expects($this->once()) + ->method('findOne') + ->with($user, $shareTypeFilter, $shareWithFilter) + ->willReturn($entry); + $this->actionProviderStore->expects($this->once()) + ->method('getProviders') + ->with($user) + ->willReturn([$provider]); + $provider->expects($this->once()) + ->method('process'); + + $data = $this->manager->findOne($user, $shareTypeFilter, $shareWithFilter); + + $this->assertEquals($entry, $data); + } + + public function testFindOne404() { + $shareTypeFilter = 42; + $shareWithFilter = 'foobar'; + + $user = $this->createMock(IUser::class); + $provider = $this->createMock(IProvider::class); + $this->contactsStore->expects($this->once()) + ->method('findOne') + ->with($user, $shareTypeFilter, $shareWithFilter) + ->willReturn(null); + $this->actionProviderStore->expects($this->never()) + ->method('getProviders') + ->with($user) + ->willReturn([$provider]); + $provider->expects($this->never()) + ->method('process'); + + $data = $this->manager->findOne($user, $shareTypeFilter, $shareWithFilter); + + $this->assertEquals(null, $data); + } + } diff --git a/tests/lib/Diagnostics/EventLoggerTest.php b/tests/lib/Diagnostics/EventLoggerTest.php new file mode 100644 index 00000000000..2d0c82ba72e --- /dev/null +++ b/tests/lib/Diagnostics/EventLoggerTest.php @@ -0,0 +1,66 @@ +<?php +/** + * @author Piotr Mrowczynski <piotr@owncloud.com> + * + * @copyright Copyright (c) 2017, ownCloud GmbH + * @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\Diagnostics; + +use OC\Diagnostics\EventLogger; +use Test\TestCase; + +class EventLoggerTest extends TestCase { + + /** @var \OC\Diagnostics\EventLogger */ + private $logger; + + public function setUp() { + parent::setUp(); + + $this->logger = new EventLogger(); + } + + public function testQueryLogger() { + // Module is not activated and this should not be logged + $this->logger->start("test1", "testevent1"); + $this->logger->end("test1"); + $this->logger->log("test2", "testevent2", microtime(true), microtime(true)); + $events = $this->logger->getEvents(); + $this->assertSame(0, sizeof($events)); + + // Activate module and log some query + $this->logger->activate(); + + // start one event + $this->logger->start("test3", "testevent3"); + + // force log of another event + $this->logger->log("test4", "testevent4", microtime(true), microtime(true)); + + // log started event + $this->logger->end("test3"); + + $events = $this->logger->getEvents(); + $this->assertSame("test4", $events['test4']->getId()); + $this->assertSame("testevent4", $events['test4']->getDescription()); + $this->assertSame("test3", $events['test3']->getId()); + $this->assertSame("testevent3", $events['test3']->getDescription()); + $this->assertSame(2, sizeof($events)); + + } +} diff --git a/tests/lib/Diagnostics/QueryLoggerTest.php b/tests/lib/Diagnostics/QueryLoggerTest.php new file mode 100644 index 00000000000..99de60ed8e4 --- /dev/null +++ b/tests/lib/Diagnostics/QueryLoggerTest.php @@ -0,0 +1,54 @@ +<?php +/** + * @author Piotr Mrowczynski <piotr@owncloud.com> + * + * @copyright Copyright (c) 2017, ownCloud GmbH + * @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\Diagnostics; + +use OC\Diagnostics\QueryLogger; +use Test\TestCase; + +class QueryLoggerTest extends TestCase { + + /** @var \OC\Diagnostics\QueryLogger */ + private $logger; + + public function setUp() { + parent::setUp(); + + $this->logger = new QueryLogger(); + } + + public function testQueryLogger() { + // Module is not activated and this should not be logged + $this->logger->startQuery("SELECT", ["testuser", "count"], ["string", "int"]); + $this->logger->stopQuery(); + $queries = $this->logger->getQueries(); + $this->assertSame(0, sizeof($queries)); + + // Activate module and log some query + $this->logger->activate(); + $this->logger->startQuery("SELECT", ["testuser", "count"], ["string", "int"]); + $this->logger->stopQuery(); + + $queries = $this->logger->getQueries(); + $this->assertSame(1, sizeof($queries)); + + } +} diff --git a/tests/lib/InstallerTest.php b/tests/lib/InstallerTest.php index d1923970588..a31c8826bd9 100644 --- a/tests/lib/InstallerTest.php +++ b/tests/lib/InstallerTest.php @@ -9,11 +9,13 @@ namespace Test; +use OC\App\AppStore\Bundles\Bundle; use OC\App\AppStore\Fetcher\AppFetcher; use OC\Archive\ZIP; use OC\Installer; use OCP\Http\Client\IClient; use OCP\Http\Client\IClientService; +use OCP\IConfig; use OCP\ILogger; use OCP\ITempManager; @@ -29,6 +31,8 @@ class InstallerTest extends TestCase { private $tempManager; /** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */ private $logger; + /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */ + private $config; /** @var Installer */ private $installer; @@ -40,11 +44,13 @@ class InstallerTest extends TestCase { $this->clientService = $this->createMock(IClientService::class); $this->tempManager = $this->createMock(ITempManager::class); $this->logger = $this->createMock(ILogger::class); + $this->config = $this->createMock(IConfig::class); $this->installer = new Installer( $this->appFetcher, $this->clientService, $this->tempManager, - $this->logger + $this->logger, + $this->config ); $config = \OC::$server->getConfig(); @@ -54,7 +60,8 @@ class InstallerTest extends TestCase { \OC::$server->getAppFetcher(), \OC::$server->getHTTPClientService(), \OC::$server->getTempManager(), - \OC::$server->getLogger() + \OC::$server->getLogger(), + $config ); $installer->removeApp(self::$appid); } @@ -64,7 +71,8 @@ class InstallerTest extends TestCase { \OC::$server->getAppFetcher(), \OC::$server->getHTTPClientService(), \OC::$server->getTempManager(), - \OC::$server->getLogger() + \OC::$server->getLogger(), + \OC::$server->getConfig() ); $installer->removeApp(self::$appid); \OC::$server->getConfig()->setSystemValue('appstoreenabled', $this->appstore); @@ -86,7 +94,8 @@ class InstallerTest extends TestCase { \OC::$server->getAppFetcher(), \OC::$server->getHTTPClientService(), \OC::$server->getTempManager(), - \OC::$server->getLogger() + \OC::$server->getLogger(), + \OC::$server->getConfig() ); $installer->installApp(self::$appid); $isInstalled = Installer::isInstalled(self::$appid); diff --git a/tests/lib/Repair/NC12/InstallCoreBundleTest.php b/tests/lib/Repair/NC12/InstallCoreBundleTest.php new file mode 100644 index 00000000000..3a72934df86 --- /dev/null +++ b/tests/lib/Repair/NC12/InstallCoreBundleTest.php @@ -0,0 +1,144 @@ +<?php +/** + * @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch> + * + * @author Lukas Reschke <lukas@statuscode.ch> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace Test\Repair\NC12; + +use OC\App\AppStore\Bundles\Bundle; +use OC\App\AppStore\Bundles\BundleFetcher; +use OC\Installer; +use OC\Repair\NC12\InstallCoreBundle; +use OCP\IConfig; +use OCP\Migration\IOutput; +use Test\TestCase; + + +class InstallCoreBundleTest extends TestCase { + /** @var BundleFetcher|\PHPUnit_Framework_MockObject_MockObject */ + private $bundleFetcher; + /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */ + private $config; + /** @var Installer|\PHPUnit_Framework_MockObject_MockObject */ + private $installer; + /** @var InstallCoreBundle */ + private $installCoreBundle; + + public function setUp() { + parent::setUp(); + $this->bundleFetcher = $this->createMock(BundleFetcher::class); + $this->config = $this->createMock(IConfig::class); + $this->installer = $this->createMock(Installer::class); + + $this->installCoreBundle = new InstallCoreBundle( + $this->bundleFetcher, + $this->config, + $this->installer + ); + } + + public function testGetName() { + $this->assertSame('Install new core bundle components', $this->installCoreBundle->getName()); + } + + public function testRunOlder() { + $this->config + ->expects($this->once()) + ->method('getSystemValue') + ->with('version', '0.0.0') + ->willReturn('12.0.0.15'); + $this->bundleFetcher + ->expects($this->never()) + ->method('getDefaultInstallationBundle'); + /** @var IOutput|\PHPUnit_Framework_MockObject_MockObject $output */ + $output = $this->createMock(IOutput::class); + $output + ->expects($this->never()) + ->method('info'); + $output + ->expects($this->never()) + ->method('warning'); + + $this->installCoreBundle->run($output); + } + + public function testRunWithException() { + $this->config + ->expects($this->once()) + ->method('getSystemValue') + ->with('version', '0.0.0') + ->willReturn('12.0.0.14'); + $bundle = $this->createMock(Bundle::class); + $this->bundleFetcher + ->expects($this->once()) + ->method('getDefaultInstallationBundle') + ->willReturn([ + $bundle, + ]); + $this->installer + ->expects($this->once()) + ->method('installAppBundle') + ->with($bundle) + ->willThrowException(new \Exception('ExceptionText')); + /** @var IOutput|\PHPUnit_Framework_MockObject_MockObject $output */ + $output = $this->createMock(IOutput::class); + $output + ->expects($this->never()) + ->method('info'); + $output + ->expects($this->once()) + ->method('warning') + ->with('Could not install core app bundle: ExceptionText'); + + $this->installCoreBundle->run($output); + } + + public function testRun() { + $this->config + ->expects($this->once()) + ->method('getSystemValue') + ->with('version', '0.0.0') + ->willReturn('12.0.0.14'); + $bundle = $this->createMock(Bundle::class); + $this->bundleFetcher + ->expects($this->once()) + ->method('getDefaultInstallationBundle') + ->willReturn([ + $bundle, + ]); + $this->installer + ->expects($this->once()) + ->method('installAppBundle') + ->with($bundle); + /** @var IOutput|\PHPUnit_Framework_MockObject_MockObject $output */ + $output = $this->createMock(IOutput::class); + $output + ->expects($this->once()) + ->method('info') + ->with('Successfully installed core app bundle.'); + $output + ->expects($this->never()) + ->method('warning'); + + $this->installCoreBundle->run($output); + } + +} diff --git a/tests/lib/Settings/ManagerTest.php b/tests/lib/Settings/ManagerTest.php index 497a0df9f4e..07f7e71feca 100644 --- a/tests/lib/Settings/ManagerTest.php +++ b/tests/lib/Settings/ManagerTest.php @@ -157,7 +157,7 @@ class ManagerTest extends TestCase { ]); $this->assertEquals([ - 0 => [new Section('server', 'Server settings', 0, '1')], + 0 => [new Section('server', 'Basic settings', 0, '1')], 5 => [new Section('sharing', 'Sharing', 0, '2')], 10 => [new Section('security', 'Security', 0, '3')], 45 => [new Section('encryption', 'Encryption', 0, '3')], @@ -189,7 +189,7 @@ class ManagerTest extends TestCase { ]); $this->assertEquals([ - 0 => [new Section('server', 'Server settings', 0, '1')], + 0 => [new Section('server', 'Basic settings', 0, '1')], 5 => [new Section('sharing', 'Sharing', 0, '2')], 10 => [new Section('security', 'Security', 0, '3')], 45 => [new Section('encryption', 'Encryption', 0, '3')], diff --git a/tests/lib/User/ManagerTest.php b/tests/lib/User/ManagerTest.php index 671b2ac57c1..cf725aae671 100644 --- a/tests/lib/User/ManagerTest.php +++ b/tests/lib/User/ManagerTest.php @@ -291,10 +291,18 @@ class ManagerTest extends TestCase { * @dataProvider dataCreateUserInvalid */ public function testCreateUserInvalid($uid, $password, $exception) { + /** @var \Test\Util\User\Dummy|\PHPUnit_Framework_MockObject_MockObject $backend */ + $backend = $this->createMock(\Test\Util\User\Dummy::class); + $backend->expects($this->once()) + ->method('implementsActions') + ->with(\OC\User\Backend::CREATE_USER) + ->willReturn(true); - $this->setExpectedException(\Exception::class, $exception); $manager = new \OC\User\Manager($this->config); + $manager->registerBackend($backend); + + $this->setExpectedException(\InvalidArgumentException::class, $exception); $manager->createUser($uid, $password); } @@ -362,10 +370,8 @@ class ManagerTest extends TestCase { $backend->expects($this->never()) ->method('createUser'); - $backend->expects($this->once()) - ->method('userExists') - ->with($this->equalTo('foo')) - ->will($this->returnValue(false)); + $backend->expects($this->never()) + ->method('userExists'); $manager = new \OC\User\Manager($this->config); $manager->registerBackend($backend); @@ -504,6 +510,31 @@ class ManagerTest extends TestCase { $this->assertEquals(7 + 16, $users); } + public function testCountUsersOnlyDisabled() { + $manager = \OC::$server->getUserManager(); + // count other users in the db before adding our own + $countBefore = $manager->countDisabledUsers(); + + //Add test users + $user1 = $manager->createUser('testdisabledcount1', 'testdisabledcount1'); + + $user2 = $manager->createUser('testdisabledcount2', 'testdisabledcount2'); + $user2->setEnabled(false); + + $user3 = $manager->createUser('testdisabledcount3', 'testdisabledcount3'); + + $user4 = $manager->createUser('testdisabledcount4', 'testdisabledcount4'); + $user4->setEnabled(false); + + $this->assertEquals($countBefore + 2, $manager->countDisabledUsers()); + + //cleanup + $user1->delete(); + $user2->delete(); + $user3->delete(); + $user4->delete(); + } + public function testCountUsersOnlySeen() { $manager = \OC::$server->getUserManager(); // count other users in the db before adding our own diff --git a/tests/lib/UtilTest.php b/tests/lib/UtilTest.php index 278e6cfd4ce..39a29742e4f 100644 --- a/tests/lib/UtilTest.php +++ b/tests/lib/UtilTest.php @@ -204,41 +204,51 @@ class UtilTest extends \Test\TestCase { } public function filenameValidationProvider() { - return array( + return [ // valid names - array('boringname', true), - array('something.with.extension', true), - array('now with spaces', true), - array('.a', true), - array('..a', true), - array('.dotfile', true), - array('single\'quote', true), - array(' spaces before', true), - array('spaces after ', true), - array('allowed chars including the crazy ones $%&_-^@!,()[]{}=;#', true), - array('汉字也能用', true), - array('und Ümläüte sind auch willkommen', true), + ['boringname', true], + ['something.with.extension', true], + ['now with spaces', true], + ['.a', true], + ['..a', true], + ['.dotfile', true], + ['single\'quote', true], + [' spaces before', true], + ['spaces after ', true], + ['allowed chars including the crazy ones $%&_-^@!,()[]{}=;#', true], + ['汉字也能用', true], + ['und Ümläüte sind auch willkommen', true], // disallowed names - array('', false), - array(' ', false), - array('.', false), - array('..', false), - array('back\\slash', false), - array('sl/ash', false), - array('lt<lt', true), - array('gt>gt', true), - array('col:on', true), - array('double"quote', true), - array('pi|pe', true), - array('dont?ask?questions?', true), - array('super*star', true), - array('new\nline', false), + ['', false], + [' ', false], + ['.', false], + ['..', false], + ['back\\slash', false], + ['sl/ash', false], + ['lt<lt', true], + ['gt>gt', true], + ['col:on', true], + ['double"quote', true], + ['pi|pe', true], + ['dont?ask?questions?', true], + ['super*star', true], + ['new\nline', false], + // better disallow these to avoid unexpected trimming to have side effects - array(' ..', false), - array('.. ', false), - array('. ', false), - array(' .', false), - ); + [' ..', false], + ['.. ', false], + ['. ', false], + [' .', false], + + // part files not allowed + ['.part', false], + ['notallowed.part', false], + ['neither.filepart', false], + + // part in the middle is ok + ['super movie part one.mkv', true], + ['super.movie.part.mkv', true], + ]; } /** diff --git a/version.php b/version.php index 0d1d327cb7f..c4a33654a8e 100644 --- a/version.php +++ b/version.php @@ -26,10 +26,10 @@ // between betas, final and RCs. This is _not_ the public version number. Reset minor/patchlevel // when updating major/minor version number. -$OC_Version = array(12, 0, 0, 14); +$OC_Version = array(12, 0, 0, 15); // The human readable string -$OC_VersionString = '12.0 alpha'; +$OC_VersionString = '12.0 beta 1'; $OC_VersionCanBeUpgradedFrom = [ 'nextcloud' => [ @@ -37,7 +37,6 @@ $OC_VersionCanBeUpgradedFrom = [ '12.0' => true, ], 'owncloud' => [ - '10.0' => true, ], ]; |