diff options
Diffstat (limited to 'apps')
32 files changed, 957 insertions, 99 deletions
diff --git a/apps/comments/js/commentstabview.js b/apps/comments/js/commentstabview.js index 0c43e156985..9b75cb4671e 100644 --- a/apps/comments/js/commentstabview.js +++ b/apps/comments/js/commentstabview.js @@ -530,9 +530,13 @@ $field.toggleClass('error', limitExceeded); $submitButton.prop('disabled', limitExceeded); - //submits form on ctrl+Enter or cmd+Enter - if (ev.keyCode === 13 && (ev.ctrlKey || ev.metaKey)) { + // Submits form with Enter, but Shift+Enter is a new line. If the + // autocomplete popover is being shown Enter does not submit the + // form either; it will be handled by At.js which will add the + // currently selected item to the message. + if (ev.keyCode === 13 && !ev.shiftKey && !$field.atwho('isSelecting')) { $submitButton.click(); + ev.preventDefault(); } }, diff --git a/apps/comments/l10n/et_EE.js b/apps/comments/l10n/et_EE.js index 65c259eedaa..478f4ae1245 100644 --- a/apps/comments/l10n/et_EE.js +++ b/apps/comments/l10n/et_EE.js @@ -25,7 +25,9 @@ OC.L10N.register( "You commented on {file}" : "Sa kommenteerisid faili {file}", "%1$s commented on %2$s" : "%1$s kommenteeris %2$s", "{author} commented on {file}" : "{author} kommenteeris faili {file}", - "<strong>Comments</strong> for files" : "<strong>kommentaari</strong> ffailidele", + "<strong>Comments</strong> for files" : "<strong>Kommentaarid</strong> failidele", + "You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Sind mainiti \"%s\", kommentaaris kasutataja poolt, mis on praeguseks kustutatud", + "You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Sind mainiti \"{file}\", kommentaaris kasutataja poolt, mis on praeguseks kustutatud", "%1$s mentioned you in a comment on “%2$s”" : "%1$s mainis sind \"%2$s\" kommentaaris", "{user} mentioned you in a comment on “{file}”" : "{user} mainis sind faili “{file}” kommentaaris", "A (now) deleted user mentioned you in a comment on “%s”" : "Kustutatud kasutaja mainis sind \"%s\" kommentaaris", diff --git a/apps/comments/l10n/et_EE.json b/apps/comments/l10n/et_EE.json index f178cfa7e08..226d844f0d3 100644 --- a/apps/comments/l10n/et_EE.json +++ b/apps/comments/l10n/et_EE.json @@ -23,7 +23,9 @@ "You commented on {file}" : "Sa kommenteerisid faili {file}", "%1$s commented on %2$s" : "%1$s kommenteeris %2$s", "{author} commented on {file}" : "{author} kommenteeris faili {file}", - "<strong>Comments</strong> for files" : "<strong>kommentaari</strong> ffailidele", + "<strong>Comments</strong> for files" : "<strong>Kommentaarid</strong> failidele", + "You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Sind mainiti \"%s\", kommentaaris kasutataja poolt, mis on praeguseks kustutatud", + "You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Sind mainiti \"{file}\", kommentaaris kasutataja poolt, mis on praeguseks kustutatud", "%1$s mentioned you in a comment on “%2$s”" : "%1$s mainis sind \"%2$s\" kommentaaris", "{user} mentioned you in a comment on “{file}”" : "{user} mainis sind faili “{file}” kommentaaris", "A (now) deleted user mentioned you in a comment on “%s”" : "Kustutatud kasutaja mainis sind \"%s\" kommentaaris", diff --git a/apps/comments/tests/js/commentstabviewSpec.js b/apps/comments/tests/js/commentstabviewSpec.js index 8b99ad081cd..813b2a72eae 100644 --- a/apps/comments/tests/js/commentstabviewSpec.js +++ b/apps/comments/tests/js/commentstabviewSpec.js @@ -219,6 +219,7 @@ describe('OCA.Comments.CommentsTabView tests', function() { describe('posting comments', function() { var createStub; var currentUserStub; + var $newCommentForm; beforeEach(function() { view.collection.set(testComments); @@ -229,6 +230,8 @@ describe('OCA.Comments.CommentsTabView tests', function() { displayName: 'Test User' }); + $newCommentForm = view.$el.find('.newCommentForm'); + // Required for the absolute selector used to find the new comment // after a successful creation in _onSubmitSuccess. $('#testArea').append(view.$el); @@ -239,8 +242,23 @@ describe('OCA.Comments.CommentsTabView tests', function() { }); it('creates a new comment when clicking post button', function() { - view.$el.find('.message').text('New message'); - view.$el.find('form').submit(); + $newCommentForm.find('.message').text('New message'); + $newCommentForm.submit(); + + expect(createStub.calledOnce).toEqual(true); + expect(createStub.lastCall.args[0]).toEqual({ + actorId: 'testuser', + actorDisplayName: 'Test User', + actorType: 'users', + verb: 'comment', + message: 'New message', + creationDateTime: new Date(Date.UTC(2016, 1, 3, 10, 5, 9)).toUTCString() + }); + }); + it('creates a new comment when typing enter', function() { + $newCommentForm.find('.message').text('New message'); + var keydownEvent = new $.Event('keydown', {keyCode: 13}); + $newCommentForm.find('.message').trigger(keydownEvent); expect(createStub.calledOnce).toEqual(true); expect(createStub.lastCall.args[0]).toEqual({ @@ -251,10 +269,68 @@ describe('OCA.Comments.CommentsTabView tests', function() { message: 'New message', creationDateTime: new Date(Date.UTC(2016, 1, 3, 10, 5, 9)).toUTCString() }); + expect(keydownEvent.isDefaultPrevented()).toEqual(true); + }); + it('creates a new mention when typing enter in the autocomplete popover', function() { + var autoCompleteStub = sinon.stub(view, '_onAutoComplete'); + autoCompleteStub.callsArgWith(1, [{"id":"userId", "label":"User Name", "source":"users"}]); + + // Force the autocomplete to be initialized + view._initAutoComplete($newCommentForm.find('.message')); + + // PhantomJS does not seem to handle typing in a contenteditable, so + // some tricks are needed to show the autocomplete popover. + // + // Instead of sending key events to type "@u" the characters are + // programatically set in the input field. + $newCommentForm.find('.message').text('Mention to @u'); + + // When focusing on the input field the caret is not guaranteed to + // be at the end; instead of calling "focus()" on the input field + // the caret is explicitly set at the end of the input field, that + // is, after "@u". + var range = document.createRange(); + range.selectNodeContents($newCommentForm.find('.message')[0]); + range.collapse(false); + var selection = window.getSelection(); + selection.removeAllRanges(); + selection.addRange(range); + + // As PhantomJS does not handle typing in a contenteditable the key + // typed here is in practice ignored by At.js, but despite that it + // will cause the popover to be shown. + $newCommentForm.find('.message').trigger(new $.Event('keydown', {keyCode: 's'})); + $newCommentForm.find('.message').trigger(new $.Event('keyup', {keyCode: 's'})); + + expect(autoCompleteStub.calledOnce).toEqual(true); + + var keydownEvent = new $.Event('keydown', {keyCode: 13}); + $newCommentForm.find('.message').trigger(keydownEvent); + + expect(createStub.calledOnce).toEqual(false); + expect($newCommentForm.find('.message').html()).toContain('Mention to <span'); + expect($newCommentForm.find('.message').html()).toContain('<div class="avatar"'); + expect($newCommentForm.find('.message').html()).toContain('<strong>User Name</strong>'); + expect($newCommentForm.find('.message').text()).not.toContain('@'); + // In this case the default behaviour is prevented by the + // "onKeydown" event handler of At.js. + expect(keydownEvent.isDefaultPrevented()).toEqual(true); + }); + it('creates a new line when typing shift+enter', function() { + $newCommentForm.find('.message').text('New message'); + var keydownEvent = new $.Event('keydown', {keyCode: 13, shiftKey: true}); + $newCommentForm.find('.message').trigger(keydownEvent); + + expect(createStub.calledOnce).toEqual(false); + // PhantomJS does not seem to handle typing in a contenteditable, so + // instead of looking for a new line the best that can be done is + // checking that the default behaviour would have been executed. + expect($newCommentForm.find('.message').text()).toContain('New message'); + expect(keydownEvent.isDefaultPrevented()).toEqual(false); }); it('creates a new comment with mentions when clicking post button', function() { - view.$el.find('.message').text('New message @anotheruser'); - view.$el.find('form').submit(); + $newCommentForm.find('.message').text('New message @anotheruser'); + $newCommentForm.submit(); var createStubExpectedData = { actorId: 'testuser', @@ -297,8 +373,8 @@ describe('OCA.Comments.CommentsTabView tests', function() { expect($message.find('.avatar[data-user=anotheruser] ~ .contactsmenu-popover').length).toEqual(1); }); it('does not create a comment if the field is empty', function() { - view.$el.find('.message').val(' '); - view.$el.find('form').submit(); + $newCommentForm.find('.message').val(' '); + $newCommentForm.submit(); expect(createStub.notCalled).toEqual(true); }); @@ -307,8 +383,8 @@ describe('OCA.Comments.CommentsTabView tests', function() { for (var i = 0; i < view._commentMaxLength * 2; i++) { bigMessage += 'a'; } - view.$el.find('.message').val(bigMessage); - view.$el.find('form').submit(); + $newCommentForm.find('.message').val(bigMessage); + $newCommentForm.submit(); expect(createStub.notCalled).toEqual(true); }); @@ -319,8 +395,8 @@ describe('OCA.Comments.CommentsTabView tests', function() { beforeEach(function() { tooltipStub = sinon.stub($.fn, 'tooltip'); - $message = view.$el.find('.message'); - $submitButton = view.$el.find('.submit'); + $message = $newCommentForm.find('.message'); + $submitButton = $newCommentForm.find('.submit'); }); afterEach(function() { tooltipStub.restore(); diff --git a/apps/dav/l10n/et_EE.js b/apps/dav/l10n/et_EE.js new file mode 100644 index 00000000000..e640488514f --- /dev/null +++ b/apps/dav/l10n/et_EE.js @@ -0,0 +1,62 @@ +OC.L10N.register( + "dav", + { + "Calendar" : "Kalender", + "Todos" : "Ülesanded", + "Personal" : "Isiklik", + "{actor} created calendar {calendar}" : "{actor} lõi kalendri {calendar}", + "You created calendar {calendar}" : "Sa lõid kalendri {calendar}", + "{actor} deleted calendar {calendar}" : "{actor} kustutas kalendri {calendar}", + "You deleted calendar {calendar}" : "Sa kustutasid kalendri {calendar}", + "{actor} updated calendar {calendar}" : "{actor} uuendas kalendrit {calendar}", + "You updated calendar {calendar}" : "Sa uuendasid kalendrit {calendar}", + "{actor} shared calendar {calendar} with you" : "{actor} jagas kalendrit {calendar} sinuga", + "You shared calendar {calendar} with {user}" : "Sa jagasid kalendrit {calendar} kasutajaga {user}", + "{actor} shared calendar {calendar} with {user}" : "{actor} jagas kalendrit {calendar} kasutajaga {user}", + "{actor} unshared calendar {calendar} from you" : "{actor} lõpetas sinuga kalendri {calendar} jagamise", + "You unshared calendar {calendar} from {user}" : "Sa lõpetasid kalendri {calendar} jagamise kasutajaga {user}", + "{actor} unshared calendar {calendar} from {user}" : "{actor} lõpetas kalendri {calendar} jagamise kasutajaga {user}", + "{actor} unshared calendar {calendar} from themselves" : "{actor} lõpetas iseendaga kalendri {calendar} jagamise", + "You shared calendar {calendar} with group {group}" : "Sa jagasid kalendrit {calendar} grupiga {group}", + "{actor} shared calendar {calendar} with group {group}" : "{actor} jagas kalendrit {calendar} grupiga {group}", + "You unshared calendar {calendar} from group {group}" : "Sa lõpetasid kalendri {calendar} jagamise grupiga {group}", + "{actor} unshared calendar {calendar} from group {group}" : "{actor} lõpetas kalendri {calendar} jagamise grupiga {group}", + "{actor} created event {event} in calendar {calendar}" : "{actor} lõi sündmuse {event} kalendrisse {calendar}", + "You created event {event} in calendar {calendar}" : "Sa lõid sündmuse {event} kalendrisse {calendar}", + "{actor} deleted event {event} from calendar {calendar}" : "{actor} kustutas sündmuse {event} kalendrist {calendar}", + "You deleted event {event} from calendar {calendar}" : "Sa kustutasid sündmuse {event} kalendrist {calendar}", + "{actor} updated event {event} in calendar {calendar}" : "{actor} uuendas sündmust {event} kalendris {calendar}", + "You updated event {event} in calendar {calendar}" : "Sa uuendasid sündmust {event} kalendris {calendar}", + "{actor} created todo {todo} in list {calendar}" : "{actor} lõi ülesande {todo} nimekirjas {calendar}", + "You created todo {todo} in list {calendar}" : "Sa lõid ülesande {todo} nimekirjas {calendar}", + "{actor} deleted todo {todo} from list {calendar}" : "{actor} kustutas ülesande {todo} nimekirjast {calendar}", + "You deleted todo {todo} from list {calendar}" : "Sa kustutasid ülesande {todo} nimekirjast {calendar}", + "{actor} updated todo {todo} in list {calendar}" : "{actor} uuendas ülesande {todo} nimekirjas {calendar}", + "You updated todo {todo} in list {calendar}" : "Sa uuendasid ülesande {todo} nimekirjas {calendar}", + "{actor} solved todo {todo} in list {calendar}" : "{actor} lõpetas ülesande {todo} nimekirjas {calendar}", + "You solved todo {todo} in list {calendar}" : "Sa lõpetasid ülesande {todo} nimekirjas {calendar}", + "{actor} reopened todo {todo} in list {calendar}" : "{actor} taasavas ülesande {todo} nimekirjas {calendar}", + "You reopened todo {todo} in list {calendar}" : "Sa taasavasid ülesande {todo} nimekirjas {calendar}", + "A <strong>calendar</strong> was modified" : " <strong>Kalendrit</strong> muudeti", + "A calendar <strong>event</strong> was modified" : "Kalendri <strong>sündmust </strong> muudeti", + "A calendar <strong>todo</strong> was modified" : "Kalendri <strong>ülesannet</strong> muudeti", + "Contact birthdays" : "Kontaktide sünnipäevad", + "Invitation canceled" : "Kutse on tühistatud", + "Hello %s," : "Tere %s,", + "The meeting »%s« with %s was canceled." : "Koosolek »%s« osaleja(te)ga %s tühistati.", + "Invitation updated" : "Kutse uuendatud", + "The meeting »%s« with %s was updated." : "Koosolek »%s« osaleja(te)ga %s uuendati.", + "%s invited you to »%s«" : "%s kutsus sind »%s«", + "When:" : "Millal:", + "Where:" : "Kus:", + "Description:" : "Kirjeldus:", + "Link:" : "Link:", + "Contacts" : "Kontaktid", + "Technical details" : "Tehnilised detailid", + "Remote Address: %s" : "Kaugaadress: %s", + "Request ID: %s" : "Päringu ID: %s", + "CalDAV server" : "CalDAV server", + "Send invitations to attendees" : "Saada osalejatele kutsed", + "Please make sure to properly set up the email settings above." : "Veendu, et e-posti seaded oleksid eespool õigesti seadistatud." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/dav/l10n/et_EE.json b/apps/dav/l10n/et_EE.json new file mode 100644 index 00000000000..e1c1f11e038 --- /dev/null +++ b/apps/dav/l10n/et_EE.json @@ -0,0 +1,60 @@ +{ "translations": { + "Calendar" : "Kalender", + "Todos" : "Ülesanded", + "Personal" : "Isiklik", + "{actor} created calendar {calendar}" : "{actor} lõi kalendri {calendar}", + "You created calendar {calendar}" : "Sa lõid kalendri {calendar}", + "{actor} deleted calendar {calendar}" : "{actor} kustutas kalendri {calendar}", + "You deleted calendar {calendar}" : "Sa kustutasid kalendri {calendar}", + "{actor} updated calendar {calendar}" : "{actor} uuendas kalendrit {calendar}", + "You updated calendar {calendar}" : "Sa uuendasid kalendrit {calendar}", + "{actor} shared calendar {calendar} with you" : "{actor} jagas kalendrit {calendar} sinuga", + "You shared calendar {calendar} with {user}" : "Sa jagasid kalendrit {calendar} kasutajaga {user}", + "{actor} shared calendar {calendar} with {user}" : "{actor} jagas kalendrit {calendar} kasutajaga {user}", + "{actor} unshared calendar {calendar} from you" : "{actor} lõpetas sinuga kalendri {calendar} jagamise", + "You unshared calendar {calendar} from {user}" : "Sa lõpetasid kalendri {calendar} jagamise kasutajaga {user}", + "{actor} unshared calendar {calendar} from {user}" : "{actor} lõpetas kalendri {calendar} jagamise kasutajaga {user}", + "{actor} unshared calendar {calendar} from themselves" : "{actor} lõpetas iseendaga kalendri {calendar} jagamise", + "You shared calendar {calendar} with group {group}" : "Sa jagasid kalendrit {calendar} grupiga {group}", + "{actor} shared calendar {calendar} with group {group}" : "{actor} jagas kalendrit {calendar} grupiga {group}", + "You unshared calendar {calendar} from group {group}" : "Sa lõpetasid kalendri {calendar} jagamise grupiga {group}", + "{actor} unshared calendar {calendar} from group {group}" : "{actor} lõpetas kalendri {calendar} jagamise grupiga {group}", + "{actor} created event {event} in calendar {calendar}" : "{actor} lõi sündmuse {event} kalendrisse {calendar}", + "You created event {event} in calendar {calendar}" : "Sa lõid sündmuse {event} kalendrisse {calendar}", + "{actor} deleted event {event} from calendar {calendar}" : "{actor} kustutas sündmuse {event} kalendrist {calendar}", + "You deleted event {event} from calendar {calendar}" : "Sa kustutasid sündmuse {event} kalendrist {calendar}", + "{actor} updated event {event} in calendar {calendar}" : "{actor} uuendas sündmust {event} kalendris {calendar}", + "You updated event {event} in calendar {calendar}" : "Sa uuendasid sündmust {event} kalendris {calendar}", + "{actor} created todo {todo} in list {calendar}" : "{actor} lõi ülesande {todo} nimekirjas {calendar}", + "You created todo {todo} in list {calendar}" : "Sa lõid ülesande {todo} nimekirjas {calendar}", + "{actor} deleted todo {todo} from list {calendar}" : "{actor} kustutas ülesande {todo} nimekirjast {calendar}", + "You deleted todo {todo} from list {calendar}" : "Sa kustutasid ülesande {todo} nimekirjast {calendar}", + "{actor} updated todo {todo} in list {calendar}" : "{actor} uuendas ülesande {todo} nimekirjas {calendar}", + "You updated todo {todo} in list {calendar}" : "Sa uuendasid ülesande {todo} nimekirjas {calendar}", + "{actor} solved todo {todo} in list {calendar}" : "{actor} lõpetas ülesande {todo} nimekirjas {calendar}", + "You solved todo {todo} in list {calendar}" : "Sa lõpetasid ülesande {todo} nimekirjas {calendar}", + "{actor} reopened todo {todo} in list {calendar}" : "{actor} taasavas ülesande {todo} nimekirjas {calendar}", + "You reopened todo {todo} in list {calendar}" : "Sa taasavasid ülesande {todo} nimekirjas {calendar}", + "A <strong>calendar</strong> was modified" : " <strong>Kalendrit</strong> muudeti", + "A calendar <strong>event</strong> was modified" : "Kalendri <strong>sündmust </strong> muudeti", + "A calendar <strong>todo</strong> was modified" : "Kalendri <strong>ülesannet</strong> muudeti", + "Contact birthdays" : "Kontaktide sünnipäevad", + "Invitation canceled" : "Kutse on tühistatud", + "Hello %s," : "Tere %s,", + "The meeting »%s« with %s was canceled." : "Koosolek »%s« osaleja(te)ga %s tühistati.", + "Invitation updated" : "Kutse uuendatud", + "The meeting »%s« with %s was updated." : "Koosolek »%s« osaleja(te)ga %s uuendati.", + "%s invited you to »%s«" : "%s kutsus sind »%s«", + "When:" : "Millal:", + "Where:" : "Kus:", + "Description:" : "Kirjeldus:", + "Link:" : "Link:", + "Contacts" : "Kontaktid", + "Technical details" : "Tehnilised detailid", + "Remote Address: %s" : "Kaugaadress: %s", + "Request ID: %s" : "Päringu ID: %s", + "CalDAV server" : "CalDAV server", + "Send invitations to attendees" : "Saada osalejatele kutsed", + "Please make sure to properly set up the email settings above." : "Veendu, et e-posti seaded oleksid eespool õigesti seadistatud." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/dav/lib/Connector/Sabre/File.php b/apps/dav/lib/Connector/Sabre/File.php index f172bde5f1f..32cc8b7adeb 100644 --- a/apps/dav/lib/Connector/Sabre/File.php +++ b/apps/dav/lib/Connector/Sabre/File.php @@ -36,13 +36,16 @@ namespace OCA\DAV\Connector\Sabre; +use OC\AppFramework\Http\Request; use OC\Files\Filesystem; +use OC\Files\View; use OCA\DAV\Connector\Sabre\Exception\EntityTooLarge; use OCA\DAV\Connector\Sabre\Exception\FileLocked; use OCA\DAV\Connector\Sabre\Exception\Forbidden as DAVForbiddenException; use OCA\DAV\Connector\Sabre\Exception\UnsupportedMediaType; use OCP\Encryption\Exceptions\GenericEncryptionException; use OCP\Files\EntityTooLargeException; +use OCP\Files\FileInfo; use OCP\Files\ForbiddenException; use OCP\Files\InvalidContentException; use OCP\Files\InvalidPathException; @@ -51,6 +54,7 @@ use OCP\Files\NotPermittedException; use OCP\Files\StorageNotAvailableException; use OCP\Lock\ILockingProvider; use OCP\Lock\LockedException; +use OCP\Share\IManager; use Sabre\DAV\Exception; use Sabre\DAV\Exception\BadRequest; use Sabre\DAV\Exception\Forbidden; @@ -61,6 +65,26 @@ use Sabre\DAV\Exception\NotFound; class File extends Node implements IFile { + protected $request; + + /** + * Sets up the node, expects a full path name + * + * @param \OC\Files\View $view + * @param \OCP\Files\FileInfo $info + * @param \OCP\Share\IManager $shareManager + * @param \OC\AppFramework\Http\Request $request + */ + public function __construct(View $view, FileInfo $info, IManager $shareManager = null, Request $request = null) { + parent::__construct($view, $info, $shareManager); + + if (isset($request)) { + $this->request = $request; + } else { + $this->request = \OC::$server->getRequest(); + } + } + /** * Updates the data * @@ -208,15 +232,10 @@ class File extends Node implements IFile { } // allow sync clients to send the mtime along in a header - $request = \OC::$server->getRequest(); - if (isset($request->server['HTTP_X_OC_MTIME'])) { - $mtimeStr = $request->server['HTTP_X_OC_MTIME']; - if (!is_numeric($mtimeStr)) { - throw new \InvalidArgumentException('X-OC-Mtime header must be an integer (unix timestamp).'); - } - $mtime = intval($mtimeStr); + if (isset($this->request->server['HTTP_X_OC_MTIME'])) { + $mtime = $this->sanitizeMtime($this->request->server['HTTP_X_OC_MTIME']); if ($this->fileView->touch($this->path, $mtime)) { - header('X-OC-MTime: accepted'); + $this->header('X-OC-MTime: accepted'); } } @@ -226,8 +245,8 @@ class File extends Node implements IFile { $this->refreshInfo(); - if (isset($request->server['HTTP_OC_CHECKSUM'])) { - $checksum = trim($request->server['HTTP_OC_CHECKSUM']); + if (isset($this->request->server['HTTP_OC_CHECKSUM'])) { + $checksum = trim($this->request->server['HTTP_OC_CHECKSUM']); $this->fileView->putFileInfo($this->path, ['checksum' => $checksum]); $this->refreshInfo(); } else if ($this->getChecksum() !== null && $this->getChecksum() !== '') { @@ -470,10 +489,10 @@ class File extends Node implements IFile { } // allow sync clients to send the mtime along in a header - $request = \OC::$server->getRequest(); - if (isset($request->server['HTTP_X_OC_MTIME'])) { - if ($targetStorage->touch($targetInternalPath, $request->server['HTTP_X_OC_MTIME'])) { - header('X-OC-MTime: accepted'); + if (isset($this->request->server['HTTP_X_OC_MTIME'])) { + $mtime = $this->sanitizeMtime($this->request->server['HTTP_X_OC_MTIME']); + if ($targetStorage->touch($targetInternalPath, $mtime)) { + $this->header('X-OC-MTime: accepted'); } } @@ -487,8 +506,8 @@ class File extends Node implements IFile { // FIXME: should call refreshInfo but can't because $this->path is not the of the final file $info = $this->fileView->getFileInfo($targetPath); - if (isset($request->server['HTTP_OC_CHECKSUM'])) { - $checksum = trim($request->server['HTTP_OC_CHECKSUM']); + if (isset($this->request->server['HTTP_OC_CHECKSUM'])) { + $checksum = trim($this->request->server['HTTP_OC_CHECKSUM']); $this->fileView->putFileInfo($targetPath, ['checksum' => $checksum]); } else if ($info->getChecksum() !== null && $info->getChecksum() !== '') { $this->fileView->putFileInfo($this->path, ['checksum' => '']); @@ -570,6 +589,18 @@ class File extends Node implements IFile { throw new \Sabre\DAV\Exception($e->getMessage(), 0, $e); } + private function sanitizeMtime($mtimeFromRequest) { + // In PHP 5.X "is_numeric" returns true for strings in hexadecimal + // notation. This is no longer the case in PHP 7.X, so this check + // ensures that strings with hexadecimal notations fail too in PHP 5.X. + $isHexadecimal = is_string($mtimeFromRequest) && preg_match('/^\s*0[xX]/', $mtimeFromRequest); + if ($isHexadecimal || !is_numeric($mtimeFromRequest)) { + throw new \InvalidArgumentException('X-OC-MTime header must be an integer (unix timestamp).'); + } + + return intval($mtimeFromRequest); + } + /** * Get the checksum for this file * @@ -578,4 +609,8 @@ class File extends Node implements IFile { public function getChecksum() { return $this->info->getChecksum(); } + + protected function header($string) { + \header($string); + } } diff --git a/apps/dav/tests/unit/Connector/Sabre/FileTest.php b/apps/dav/tests/unit/Connector/Sabre/FileTest.php index 4d106842cf0..1db9b7948e3 100644 --- a/apps/dav/tests/unit/Connector/Sabre/FileTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/FileTest.php @@ -31,6 +31,7 @@ use OC\Files\Storage\Local; use OC\Files\View; use OCP\Files\ForbiddenException; use OCP\Files\Storage; +use OCP\IConfig; use Test\HookHelper; use OC\Files\Filesystem; use OCP\Lock\ILockingProvider; @@ -49,6 +50,9 @@ class FileTest extends \Test\TestCase { */ private $user; + /** @var IConfig | \PHPUnit_Framework_MockObject_MockObject */ + protected $config; + public function setUp() { parent::setUp(); unset($_SERVER['HTTP_OC_CHUNKED']); @@ -62,6 +66,8 @@ class FileTest extends \Test\TestCase { $userManager->createUser($this->user, 'pass'); $this->loginAsUser($this->user); + + $this->config = $this->getMockBuilder('\OCP\IConfig')->getMock(); } public function tearDown() { @@ -284,10 +290,11 @@ class FileTest extends \Test\TestCase { * * @param string $path path to put the file into * @param string $viewRoot root to use for the view + * @param null|\OC\AppFramework\Http\Request $request the HTTP request * * @return null|string of the PUT operaiton which is usually the etag */ - private function doPut($path, $viewRoot = null) { + private function doPut($path, $viewRoot = null, \OC\AppFramework\Http\Request $request = null) { $view = \OC\Files\Filesystem::getView(); if (!is_null($viewRoot)) { $view = new \OC\Files\View($viewRoot); @@ -303,7 +310,11 @@ class FileTest extends \Test\TestCase { null ); - $file = new \OCA\DAV\Connector\Sabre\File($view, $info); + /** @var \OCA\DAV\Connector\Sabre\File | \PHPUnit_Framework_MockObject_MockObject $file */ + $file = $this->getMockBuilder(\OCA\DAV\Connector\Sabre\File::class) + ->setConstructorArgs([$view, $info, null, $request]) + ->setMethods(['header']) + ->getMock(); // beforeMethod locks $view->lockFile($path, ILockingProvider::LOCK_SHARED); @@ -323,6 +334,110 @@ class FileTest extends \Test\TestCase { $this->assertNotEmpty($this->doPut('/foo.txt')); } + public function legalMtimeProvider() { + return [ + "string" => [ + 'HTTP_X_OC_MTIME' => "string", + 'expected result' => null + ], + "castable string (int)" => [ + 'HTTP_X_OC_MTIME' => "34", + 'expected result' => 34 + ], + "castable string (float)" => [ + 'HTTP_X_OC_MTIME' => "34.56", + 'expected result' => 34 + ], + "float" => [ + 'HTTP_X_OC_MTIME' => 34.56, + 'expected result' => 34 + ], + "zero" => [ + 'HTTP_X_OC_MTIME' => 0, + 'expected result' => 0 + ], + "zero string" => [ + 'HTTP_X_OC_MTIME' => "0", + 'expected result' => 0 + ], + "negative zero string" => [ + 'HTTP_X_OC_MTIME' => "-0", + 'expected result' => 0 + ], + "string starting with number following by char" => [ + 'HTTP_X_OC_MTIME' => "2345asdf", + 'expected result' => null + ], + "string castable hex int" => [ + 'HTTP_X_OC_MTIME' => "0x45adf", + 'expected result' => null + ], + "string that looks like invalid hex int" => [ + 'HTTP_X_OC_MTIME' => "0x123g", + 'expected result' => null + ], + "negative int" => [ + 'HTTP_X_OC_MTIME' => -34, + 'expected result' => -34 + ], + "negative float" => [ + 'HTTP_X_OC_MTIME' => -34.43, + 'expected result' => -34 + ], + ]; + } + + /** + * Test putting a file with string Mtime + * @dataProvider legalMtimeProvider + */ + public function testPutSingleFileLegalMtime($requestMtime, $resultMtime) { + $request = new \OC\AppFramework\Http\Request([ + 'server' => [ + 'HTTP_X_OC_MTIME' => $requestMtime, + ] + ], null, $this->config, null); + $file = 'foo.txt'; + + if ($resultMtime === null) { + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessage("X-OC-MTime header must be an integer (unix timestamp)."); + } + + $this->doPut($file, null, $request); + + if ($resultMtime !== null) { + $this->assertEquals($resultMtime, $this->getFileInfos($file)['mtime']); + } + } + + /** + * Test putting a file with string Mtime using chunking + * @dataProvider legalMtimeProvider + */ + public function testChunkedPutLegalMtime($requestMtime, $resultMtime) { + $request = new \OC\AppFramework\Http\Request([ + 'server' => [ + 'HTTP_X_OC_MTIME' => $requestMtime, + ] + ], null, $this->config, null); + + $_SERVER['HTTP_OC_CHUNKED'] = true; + $file = 'foo.txt'; + + if ($resultMtime === null) { + $this->expectException(\Sabre\DAV\Exception::class); + $this->expectExceptionMessage("X-OC-MTime header must be an integer (unix timestamp)."); + } + + $this->doPut($file.'-chunking-12345-2-0', null, $request); + $this->doPut($file.'-chunking-12345-2-1', null, $request); + + if ($resultMtime !== null) { + $this->assertEquals($resultMtime, $this->getFileInfos($file)['mtime']); + } + } + /** * Test putting a file using chunking */ @@ -968,6 +1083,25 @@ class FileTest extends \Test\TestCase { } /** + * returns an array of file information filesize, mtime, filetype, mimetype + * + * @param string $path + * @param View $userView + * @return array + */ + private function getFileInfos($path = '', View $userView = null) { + if ($userView === null) { + $userView = Filesystem::getView(); + } + return [ + "filesize" => $userView->filesize($path), + "mtime" => $userView->filemtime($path), + "filetype" => $userView->filetype($path), + "mimetype" => $userView->getMimeType($path) + ]; + } + + /** * @expectedException \Sabre\DAV\Exception\ServiceUnavailable */ public function testGetFopenFails() { diff --git a/apps/federatedfilesharing/l10n/et_EE.js b/apps/federatedfilesharing/l10n/et_EE.js index 8e61e9ddf6e..f9206e53711 100644 --- a/apps/federatedfilesharing/l10n/et_EE.js +++ b/apps/federatedfilesharing/l10n/et_EE.js @@ -1,15 +1,58 @@ OC.L10N.register( "federatedfilesharing", { + "Federated sharing" : "Liit-jagamine", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "Soovid lisada kaugjagamise {name} asukohast {owner}@{remote}?", + "Remote share" : "Kaugjagamine", + "Remote share password" : "Kaugjagamise parool", + "Cancel" : "Tühista", + "Add remote share" : "Lisa kaugjagamine", + "Copy" : "Kopeeri", + "Copied!" : "Kopeeritud!", + "Not supported!" : "Pole toetatud!", + "Press ⌘-C to copy." : "Kopeerimiseks vajuta ⌘ + C.", + "Press Ctrl-C to copy." : "Kopeerimiseks vajuta Ctrl + C.", + "Invalid Federated Cloud ID" : "Vigane liitpilve ID", + "Server to server sharing is not enabled on this server" : "Serveritevaheline jagamine ei ole selle pilves aktiiveeritud", + "Couldn't establish a federated share." : "Liitjagamist ei õnnestunud luua", + "Couldn't establish a federated share, maybe the password was wrong." : "Liitjagamist ei õnnestunud luua, ehk oli parool vale.", + "Federated Share request sent, you will receive an invitation. Check your notifications." : "Liitjagamise päring edastatud, sulle saadetakse kutse. Kontrolli oma teateid.", + "The mountpoint name contains invalid characters." : "Ühenduspunkti nimes on vigaseid märke.", + "Not allowed to create a federated share with the owner." : "Liitjagamise loomine omanikuga ei ole lubatud.", + "Invalid or untrusted SSL certificate" : "Vigane või tundmatu SSL sertifikaat", + "Could not authenticate to remote share, password might be wrong" : "Ei õnnestunud kagujagamist autentida, ehk on parool vale", + "Storage not valid" : "Andmehoidla pole korrektne", + "Federated share added" : "Liitjagamine lisatud", + "Couldn't add remote share" : "Ei suutnud lisada kaugjagamist", "Sharing %s failed, because this item is already shared with %s" : "%s jagamine ebaõnnestus, kuna see üksus on juba jagatud %s", + "Not allowed to create a federated share with the same user" : "Liitjagamise loomine sama kasutajaga ei ole lubatud.", + "File is already shared with %s" : "Fail on juba jagatud kasutajaga %s", + "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "%s jagamine ebaõnnestus, ei suutnud %s leida, ehk ei ole server kättesaadav või kasutab ise allkirjastatud sertifikaati.", + "Could not find share" : "Jagamist ei leitud", + "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Sa said kaugjagatud faili \"%3$s\" kasutajalt %1$s (%2$s nimel)", + "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Sa said kaugjagatud faili {share} kasjutajalt {user} ({behalf} nimel)", + "You received \"%3$s\" as a remote share from %1$s" : "Sa said kaugjagatud faili \"%3$s\" kasutajalt %1$s", + "You received {share} as a remote share from {user}" : "Sa said kaugjagatud faili {file} kasutajalt {user}", "Accept" : "Nõustu", - "Decline" : "Lükka tagasi", + "Decline" : "Keeldu", + "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Jaga minuga läbi minu #Nextcloudi liitpilve ID, vaata %s", + "Share with me through my #Nextcloud Federated Cloud ID" : "Jaga minuga läbi minu #Nextcloudi liitpilve ID", + "Sharing" : "Jagamine", + "Federated Cloud Sharing" : "Jagamine liitpilves", "Open documentation" : "Ava dokumentatsioon", + "Adjust how people can share between servers." : "Seadista kuidas inimesed saavad serverite vahel jagada.", "Allow users on this server to send shares to other servers" : "Luba selle serveri kasutajatel saata faile teistesse serveritesse", "Allow users on this server to receive shares from other servers" : "Luba selle serveri kasutajatel võtta vastu jagamisi teistest serveritest", - "Share it:" : "Jaga seda:", + "Search global and public address book for users" : "Otsi kasutajaid globaalsest ja avalikust aadressiraamatust", + "Allow users to publish their data to a global and public address book" : "Luba kasutajatel avaldada oma andmeid globaalses ja avalikus aadressiraamatus", + "Federated Cloud" : "Liitpilv", + "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" : "Sa võid jagada kõigiga kes kasutab Nextcloudi, ownCloudi või Pydio't. Lihtsalt siseta jagamise dialoogi nende liitpilve ID. See näeb välja nagu person@cloud.example.com", + "Your Federated Cloud ID:" : "Sinu liitpilve ID:", + "Share it so your friends can share files with you:" : "Jaga seda, et su sõbrad saaksid sinuga faile jagada:", "Add to your website" : "Lisa oma veebisaidile", "Share with me via Nextcloud" : "Jaga minuga läbi Nextclouddiga", - "HTML Code:" : "HTML kood:" + "HTML Code:" : "HTML kood:", + "Search global and public address book for users and let local users publish their data" : "Otsi kasutajaid globaalsest ja avalikust aadressiraamatust ja luba kohalikel kasutajatel avaldada oma andmeid", + "Share it:" : "Jaga seda:" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federatedfilesharing/l10n/et_EE.json b/apps/federatedfilesharing/l10n/et_EE.json index 239b69b974c..e669fc92d66 100644 --- a/apps/federatedfilesharing/l10n/et_EE.json +++ b/apps/federatedfilesharing/l10n/et_EE.json @@ -1,13 +1,56 @@ { "translations": { + "Federated sharing" : "Liit-jagamine", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "Soovid lisada kaugjagamise {name} asukohast {owner}@{remote}?", + "Remote share" : "Kaugjagamine", + "Remote share password" : "Kaugjagamise parool", + "Cancel" : "Tühista", + "Add remote share" : "Lisa kaugjagamine", + "Copy" : "Kopeeri", + "Copied!" : "Kopeeritud!", + "Not supported!" : "Pole toetatud!", + "Press ⌘-C to copy." : "Kopeerimiseks vajuta ⌘ + C.", + "Press Ctrl-C to copy." : "Kopeerimiseks vajuta Ctrl + C.", + "Invalid Federated Cloud ID" : "Vigane liitpilve ID", + "Server to server sharing is not enabled on this server" : "Serveritevaheline jagamine ei ole selle pilves aktiiveeritud", + "Couldn't establish a federated share." : "Liitjagamist ei õnnestunud luua", + "Couldn't establish a federated share, maybe the password was wrong." : "Liitjagamist ei õnnestunud luua, ehk oli parool vale.", + "Federated Share request sent, you will receive an invitation. Check your notifications." : "Liitjagamise päring edastatud, sulle saadetakse kutse. Kontrolli oma teateid.", + "The mountpoint name contains invalid characters." : "Ühenduspunkti nimes on vigaseid märke.", + "Not allowed to create a federated share with the owner." : "Liitjagamise loomine omanikuga ei ole lubatud.", + "Invalid or untrusted SSL certificate" : "Vigane või tundmatu SSL sertifikaat", + "Could not authenticate to remote share, password might be wrong" : "Ei õnnestunud kagujagamist autentida, ehk on parool vale", + "Storage not valid" : "Andmehoidla pole korrektne", + "Federated share added" : "Liitjagamine lisatud", + "Couldn't add remote share" : "Ei suutnud lisada kaugjagamist", "Sharing %s failed, because this item is already shared with %s" : "%s jagamine ebaõnnestus, kuna see üksus on juba jagatud %s", + "Not allowed to create a federated share with the same user" : "Liitjagamise loomine sama kasutajaga ei ole lubatud.", + "File is already shared with %s" : "Fail on juba jagatud kasutajaga %s", + "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "%s jagamine ebaõnnestus, ei suutnud %s leida, ehk ei ole server kättesaadav või kasutab ise allkirjastatud sertifikaati.", + "Could not find share" : "Jagamist ei leitud", + "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Sa said kaugjagatud faili \"%3$s\" kasutajalt %1$s (%2$s nimel)", + "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Sa said kaugjagatud faili {share} kasjutajalt {user} ({behalf} nimel)", + "You received \"%3$s\" as a remote share from %1$s" : "Sa said kaugjagatud faili \"%3$s\" kasutajalt %1$s", + "You received {share} as a remote share from {user}" : "Sa said kaugjagatud faili {file} kasutajalt {user}", "Accept" : "Nõustu", - "Decline" : "Lükka tagasi", + "Decline" : "Keeldu", + "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Jaga minuga läbi minu #Nextcloudi liitpilve ID, vaata %s", + "Share with me through my #Nextcloud Federated Cloud ID" : "Jaga minuga läbi minu #Nextcloudi liitpilve ID", + "Sharing" : "Jagamine", + "Federated Cloud Sharing" : "Jagamine liitpilves", "Open documentation" : "Ava dokumentatsioon", + "Adjust how people can share between servers." : "Seadista kuidas inimesed saavad serverite vahel jagada.", "Allow users on this server to send shares to other servers" : "Luba selle serveri kasutajatel saata faile teistesse serveritesse", "Allow users on this server to receive shares from other servers" : "Luba selle serveri kasutajatel võtta vastu jagamisi teistest serveritest", - "Share it:" : "Jaga seda:", + "Search global and public address book for users" : "Otsi kasutajaid globaalsest ja avalikust aadressiraamatust", + "Allow users to publish their data to a global and public address book" : "Luba kasutajatel avaldada oma andmeid globaalses ja avalikus aadressiraamatus", + "Federated Cloud" : "Liitpilv", + "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" : "Sa võid jagada kõigiga kes kasutab Nextcloudi, ownCloudi või Pydio't. Lihtsalt siseta jagamise dialoogi nende liitpilve ID. See näeb välja nagu person@cloud.example.com", + "Your Federated Cloud ID:" : "Sinu liitpilve ID:", + "Share it so your friends can share files with you:" : "Jaga seda, et su sõbrad saaksid sinuga faile jagada:", "Add to your website" : "Lisa oma veebisaidile", "Share with me via Nextcloud" : "Jaga minuga läbi Nextclouddiga", - "HTML Code:" : "HTML kood:" + "HTML Code:" : "HTML kood:", + "Search global and public address book for users and let local users publish their data" : "Otsi kasutajaid globaalsest ja avalikust aadressiraamatust ja luba kohalikel kasutajatel avaldada oma andmeid", + "Share it:" : "Jaga seda:" },"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 11b5525e399..e764d8d6739 100644 --- a/apps/federatedfilesharing/l10n/nl.js +++ b/apps/federatedfilesharing/l10n/nl.js @@ -27,7 +27,7 @@ OC.L10N.register( "Sharing %s failed, because this item is already shared with %s" : "Delen van %s is mislukt, omdat het object al wordt gedeeld met %s", "Not allowed to create a federated share with the same user" : "Het is niet toegestaan om een gefedereerde share met dezelfde gebruikersserver te maken", "File is already shared with %s" : "Bestand is al gedeeld met %s", - "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Delen van %s mislukt, kon %s niet vinden, misschien is de server niet bereikbaar of u gebruikt een zelf getekend certificaat.", + "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Delen van %s mislukt, kon %s niet vinden, misschien is de server niet bereikbaar of je gebruikt een zelf getekend certificaat.", "Could not find share" : "Kon share niet vinden", "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Je ontving \"%3$s\" als een extern deel verzoek van %1$s (namens %2$s)", "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Je ontving {share} als een extern deel verzoek van {user} (namens {behalf})", diff --git a/apps/federatedfilesharing/l10n/nl.json b/apps/federatedfilesharing/l10n/nl.json index 8caaab558c8..5e3ea12bdf5 100644 --- a/apps/federatedfilesharing/l10n/nl.json +++ b/apps/federatedfilesharing/l10n/nl.json @@ -25,7 +25,7 @@ "Sharing %s failed, because this item is already shared with %s" : "Delen van %s is mislukt, omdat het object al wordt gedeeld met %s", "Not allowed to create a federated share with the same user" : "Het is niet toegestaan om een gefedereerde share met dezelfde gebruikersserver te maken", "File is already shared with %s" : "Bestand is al gedeeld met %s", - "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Delen van %s mislukt, kon %s niet vinden, misschien is de server niet bereikbaar of u gebruikt een zelf getekend certificaat.", + "Sharing %s failed, could not find %s, maybe the server is currently unreachable or uses a self-signed certificate." : "Delen van %s mislukt, kon %s niet vinden, misschien is de server niet bereikbaar of je gebruikt een zelf getekend certificaat.", "Could not find share" : "Kon share niet vinden", "You received \"%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Je ontving \"%3$s\" als een extern deel verzoek van %1$s (namens %2$s)", "You received {share} as a remote share from {user} (on behalf of {behalf})" : "Je ontving {share} als een extern deel verzoek van {user} (namens {behalf})", diff --git a/apps/federation/l10n/et_EE.js b/apps/federation/l10n/et_EE.js index bdad264db7d..e0d93d85bb4 100644 --- a/apps/federation/l10n/et_EE.js +++ b/apps/federation/l10n/et_EE.js @@ -1,7 +1,16 @@ OC.L10N.register( "federation", { - "No ownCloud server found" : "ownCloudi serverit ei leitud", - "Could not add server" : "Serveri lisamine ebaõnnestus" + "Added to the list of trusted servers" : "Usaldatud serverite nimekirja lisatud", + "Server is already in the list of trusted servers." : "Server on juba usaldatud serverite nimekirjas.", + "No server to federate with found" : "Serverit millega liituda ei leitud", + "Could not add server" : "Serveri lisamine ebaõnnestus", + "Trusted servers" : "Usaldatud serverid", + "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." : "Liitumine lubab sul ühenduse luua teiste usaldusväärsete serveritega, et kasutajaid jagada. Näiteks saab seda rakendada liitunud serverite väliste kasutajanimede automaatseks täitmiseks.", + "Add server automatically once a federated share was created successfully" : "Lisa server automaatselt niipea kui liitjagamine õnnestus", + "+ Add trusted server" : "+ Lisa usaldatud server", + "Trusted server" : "Usaldatud server", + "Add" : "Lisa", + "Federation" : "Liit" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federation/l10n/et_EE.json b/apps/federation/l10n/et_EE.json index 9a5a8881c9b..7e5912b1133 100644 --- a/apps/federation/l10n/et_EE.json +++ b/apps/federation/l10n/et_EE.json @@ -1,5 +1,14 @@ { "translations": { - "No ownCloud server found" : "ownCloudi serverit ei leitud", - "Could not add server" : "Serveri lisamine ebaõnnestus" + "Added to the list of trusted servers" : "Usaldatud serverite nimekirja lisatud", + "Server is already in the list of trusted servers." : "Server on juba usaldatud serverite nimekirjas.", + "No server to federate with found" : "Serverit millega liituda ei leitud", + "Could not add server" : "Serveri lisamine ebaõnnestus", + "Trusted servers" : "Usaldatud serverid", + "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." : "Liitumine lubab sul ühenduse luua teiste usaldusväärsete serveritega, et kasutajaid jagada. Näiteks saab seda rakendada liitunud serverite väliste kasutajanimede automaatseks täitmiseks.", + "Add server automatically once a federated share was created successfully" : "Lisa server automaatselt niipea kui liitjagamine õnnestus", + "+ Add trusted server" : "+ Lisa usaldatud server", + "Trusted server" : "Usaldatud server", + "Add" : "Lisa", + "Federation" : "Liit" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/et_EE.js b/apps/files/l10n/et_EE.js index 8bb56696fc1..e8b8e55848e 100644 --- a/apps/files/l10n/et_EE.js +++ b/apps/files/l10n/et_EE.js @@ -20,6 +20,7 @@ OC.L10N.register( "…" : "...", "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize}/{loadedSize} ({bitrate})", "Target folder does not exist any more" : "Sihtkataloogi pole enam olemas", + "Error when assembling chunks, status code {status}" : "Tükkide kokkupanemise viga, staatus kood {status}", "Actions" : "Tegevused", "Download" : "Lae alla", "Rename" : "Nimeta ümber", @@ -40,6 +41,8 @@ OC.L10N.register( "Could not move \"{file}\"" : "\"{file}\" liigutamine ebaõnnestus", "Could not copy \"{file}\", target exists" : "\"{file}\" kopeerimine ebaõnnestus, sihtfail on juba olemas", "Could not copy \"{file}\"" : "\"{file}\" kopeerimine ebaõnnestus", + "Copied {origin} inside {destination}" : "Kopeeris {origin} {destination} sisse", + "Copied {origin} and {nbfiles} other files inside {destination}" : "Kopeeris {origin} ja {nbfiles} teist faili {destination} sisse", "{newName} already exists" : "{newName} on juba olemas", "Could not rename \"{fileName}\", it does not exist any more" : "\"{fileName}\" ümbernimetamine ebaõnnestus, seda pole enam olemas", "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Nimi \"{targetName}\" on juba \"{dir}\" kaustas kasutusel. Palun valige teine nimi.", @@ -76,6 +79,7 @@ OC.L10N.register( "Favorite" : "Lemmik", "New folder" : "Uus kaust", "Upload file" : "Lae fail üles", + "Not favorited" : "Lemmikuks lisamata", "Remove from favorites" : "Eemalda lemmikutest", "Add to favorites" : "Lisa lemmikutesse", "An error occurred while trying to update the tags" : "Siltide uuendamisel tekkis tõrge", diff --git a/apps/files/l10n/et_EE.json b/apps/files/l10n/et_EE.json index 0b45f837a0e..7d8d47e3b95 100644 --- a/apps/files/l10n/et_EE.json +++ b/apps/files/l10n/et_EE.json @@ -18,6 +18,7 @@ "…" : "...", "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize}/{loadedSize} ({bitrate})", "Target folder does not exist any more" : "Sihtkataloogi pole enam olemas", + "Error when assembling chunks, status code {status}" : "Tükkide kokkupanemise viga, staatus kood {status}", "Actions" : "Tegevused", "Download" : "Lae alla", "Rename" : "Nimeta ümber", @@ -38,6 +39,8 @@ "Could not move \"{file}\"" : "\"{file}\" liigutamine ebaõnnestus", "Could not copy \"{file}\", target exists" : "\"{file}\" kopeerimine ebaõnnestus, sihtfail on juba olemas", "Could not copy \"{file}\"" : "\"{file}\" kopeerimine ebaõnnestus", + "Copied {origin} inside {destination}" : "Kopeeris {origin} {destination} sisse", + "Copied {origin} and {nbfiles} other files inside {destination}" : "Kopeeris {origin} ja {nbfiles} teist faili {destination} sisse", "{newName} already exists" : "{newName} on juba olemas", "Could not rename \"{fileName}\", it does not exist any more" : "\"{fileName}\" ümbernimetamine ebaõnnestus, seda pole enam olemas", "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Nimi \"{targetName}\" on juba \"{dir}\" kaustas kasutusel. Palun valige teine nimi.", @@ -74,6 +77,7 @@ "Favorite" : "Lemmik", "New folder" : "Uus kaust", "Upload file" : "Lae fail üles", + "Not favorited" : "Lemmikuks lisamata", "Remove from favorites" : "Eemalda lemmikutest", "Add to favorites" : "Lisa lemmikutesse", "An error occurred while trying to update the tags" : "Siltide uuendamisel tekkis tõrge", diff --git a/apps/files/l10n/ja.js b/apps/files/l10n/ja.js index c92138cbcfe..77a97ed35d1 100644 --- a/apps/files/l10n/ja.js +++ b/apps/files/l10n/ja.js @@ -113,8 +113,8 @@ OC.L10N.register( "Save" : "保存", "With PHP-FPM it might take 5 minutes for changes to be applied." : "PHP-FPM の場合は値を変更後、反映されるのに5分程度かかります。", "Missing permissions to edit from here." : "ここから編集するための権限がありません。", - "%s of %s used" : "%s のうち%s が使われています", - "%s used" : "%s 使われています", + "%s of %s used" : "%s / %s 使用中", + "%s used" : "%s 使用中", "Settings" : "設定", "Show hidden files" : "隠しファイルを表示", "WebDAV" : "WebDAV", diff --git a/apps/files/l10n/ja.json b/apps/files/l10n/ja.json index b4dafd2565d..32fd39ecbe4 100644 --- a/apps/files/l10n/ja.json +++ b/apps/files/l10n/ja.json @@ -111,8 +111,8 @@ "Save" : "保存", "With PHP-FPM it might take 5 minutes for changes to be applied." : "PHP-FPM の場合は値を変更後、反映されるのに5分程度かかります。", "Missing permissions to edit from here." : "ここから編集するための権限がありません。", - "%s of %s used" : "%s のうち%s が使われています", - "%s used" : "%s 使われています", + "%s of %s used" : "%s / %s 使用中", + "%s used" : "%s 使用中", "Settings" : "設定", "Show hidden files" : "隠しファイルを表示", "WebDAV" : "WebDAV", diff --git a/apps/files/l10n/zh_TW.js b/apps/files/l10n/zh_TW.js index 625d9176d65..a0e9e1642dc 100644 --- a/apps/files/l10n/zh_TW.js +++ b/apps/files/l10n/zh_TW.js @@ -19,6 +19,8 @@ OC.L10N.register( "Uploading …" : "上傳中...", "…" : "...", "{loadedSize} of {totalSize} ({bitrate})" : "{totalSize} 中的 {loadedSize} ({bitrate})", + "Target folder does not exist any more" : "目標資料夾已經不存在了", + "Error when assembling chunks, status code {status}" : "重組檔案片段時出錯,狀態代碼 {status}", "Actions" : "動作", "Download" : "下載", "Rename" : "重新命名", @@ -39,6 +41,8 @@ OC.L10N.register( "Could not move \"{file}\"" : "無法移動 \"{file}\"", "Could not copy \"{file}\", target exists" : "無法複製\"{file}\",目標已存在", "Could not copy \"{file}\"" : "無法複製\"{file}\"", + "Copied {origin} inside {destination}" : "已複製 {origin} 至 {destination}", + "Copied {origin} and {nbfiles} other files inside {destination}" : "已複製 {origin} 和其他 {nbfiles} 個檔案至 {destination}", "{newName} already exists" : "{newName} 已經存在", "Could not rename \"{fileName}\", it does not exist any more" : "無法命名檔案 \"{fileName}\",因為此檔案已經不存在", "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "此名稱 \"{targetName}\" 在這資料夾 \"{dir}\" 已經被使用。請重新選擇不同的名稱", diff --git a/apps/files/l10n/zh_TW.json b/apps/files/l10n/zh_TW.json index 871f33e1276..41db3db0d49 100644 --- a/apps/files/l10n/zh_TW.json +++ b/apps/files/l10n/zh_TW.json @@ -17,6 +17,8 @@ "Uploading …" : "上傳中...", "…" : "...", "{loadedSize} of {totalSize} ({bitrate})" : "{totalSize} 中的 {loadedSize} ({bitrate})", + "Target folder does not exist any more" : "目標資料夾已經不存在了", + "Error when assembling chunks, status code {status}" : "重組檔案片段時出錯,狀態代碼 {status}", "Actions" : "動作", "Download" : "下載", "Rename" : "重新命名", @@ -37,6 +39,8 @@ "Could not move \"{file}\"" : "無法移動 \"{file}\"", "Could not copy \"{file}\", target exists" : "無法複製\"{file}\",目標已存在", "Could not copy \"{file}\"" : "無法複製\"{file}\"", + "Copied {origin} inside {destination}" : "已複製 {origin} 至 {destination}", + "Copied {origin} and {nbfiles} other files inside {destination}" : "已複製 {origin} 和其他 {nbfiles} 個檔案至 {destination}", "{newName} already exists" : "{newName} 已經存在", "Could not rename \"{fileName}\", it does not exist any more" : "無法命名檔案 \"{fileName}\",因為此檔案已經不存在", "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "此名稱 \"{targetName}\" 在這資料夾 \"{dir}\" 已經被使用。請重新選擇不同的名稱", diff --git a/apps/files_sharing/l10n/et_EE.js b/apps/files_sharing/l10n/et_EE.js index 05d9517f0c2..404f481c561 100644 --- a/apps/files_sharing/l10n/et_EE.js +++ b/apps/files_sharing/l10n/et_EE.js @@ -1,11 +1,6 @@ OC.L10N.register( "files_sharing", { - "Server to server sharing is not enabled on this server" : "Serverist serverisse jagamine pole antud serveris lubatud", - "The mountpoint name contains invalid characters." : "Ühenduspunkti nimes on vigaseid märke.", - "Invalid or untrusted SSL certificate" : "Vigane või tundmatu SSL sertifikaat", - "Storage not valid" : "Andmehoidla pole korrektne", - "Couldn't add remote share" : "Ei suutnud lisada kaugjagamist", "Shared with you" : "Sinuga jagatud", "Shared with others" : "Teistega jagatud", "Shared by link" : "Jagatud lingiga", @@ -15,43 +10,106 @@ OC.L10N.register( "Files and folders you share will show up here" : "Siin kuvatakse faile ja kaustasid, mida sa oled teistega jaganud", "No shared links" : "Jagatud linke pole", "Files and folders you share by link will show up here" : "Siin kuvatakse faile ja kaustasid, mida sa jagad lingiga", - "Do you want to add the remote share {name} from {owner}@{remote}?" : "Soovid lisata kaugjagamise {name} asukohast {owner}@{remote}?", - "Remote share" : "Kaugjagamine", - "Remote share password" : "Kaugjagamise parool", - "Cancel" : "Loobu", - "Add remote share" : "Lisa kaugjagamine", "You can upload into this folder" : "Sa saad sellesse kausta faile üles laadida", - "No ownCloud installation (7 or higher) found at {remote}" : "Saidilt {remote} ei leitud ownCloudi (7 või uuem) ", - "Invalid ownCloud url" : "Vigane ownCloud url", + "No compatible server found at {remote}" : "Aadressil {remote} ei leitud ühilduvat serverit", + "Invalid server URL" : "Vigane serveri URL", + "Failed to add the public link to your Nextcloud" : "Avaliku lingi lisamine sinu Nextcloudi ebaõnnestus", + "Share" : "Jaga", + "No expiration date set" : "Aegumise kuupäeva pole määratud", "Shared by" : "Jagas", "Sharing" : "Jagamine", - "A file or folder has been <strong>shared</strong>" : "Fail või kataloog on <strong>jagatud</strong>", - "You shared %1$s with %2$s" : "Jagasid %1$s %2$s kasutajaga", - "You shared %1$s with group %2$s" : "Jagasid %1$s %2$s grupiga", - "You shared %1$s via link" : "Jagasid %1$s lingiga", - "%2$s shared %1$s with you" : "%2$s jagas sinuga %1$s", + "File shares" : "Jagatud failid", "Downloaded via public link" : "Alla laetud avalikult lingilt", - "Shared with %2$s" : "Jagatud kasutajaga %2$s", - "Shared with group %2$s" : "Jagatud grupiga %2$s", - "Shared via public link" : "Jagatud avaliku lingiga", + "Downloaded by {email}" : "Alla laetud {email} poolt", + "{file} downloaded via public link" : "{file} laeti alla avaliku lingi kaudu", + "{email} downloaded {file}" : "{email} laadis {file} alla", + "Shared with group {group}" : "Jagatud grupiga {group}", + "Removed share for group {group}" : "Eemaldas jagamise grupiga {group}", + "{actor} shared with group {group}" : "{actor} jagas grupiga {group}", + "{actor} removed share for group {group}" : "{actor} eemaldas jagamise grupiga {group}", + "You shared {file} with group {group}" : "Sa jagasid faili {file} grupiga {group}", + "You removed group {group} from {file}" : "Sa eemaldasid grupi {group} faili {file} jagamisest", + "{actor} shared {file} with group {group}" : "{actor} jagas faili {file} grupiga {group}", + "{actor} removed group {group} from {file}" : "{actor} eemaldas grupi {group} faili {file} jagamisest", + "Shared as public link" : "Jaga avaliku lingina", "Removed public link" : "Avalik link on eemaldatud", "Public link expired" : "Avalik link aegus", - "Shares" : "Jagamised", + "{actor} shared as public link" : "{actor} jagas avaliku lingina", + "{actor} removed public link" : "{actor} eemaldas avaliku lingi", + "Public link of {actor} expired" : "{actor} avalik link aegus", + "You shared {file} as public link" : "Sa jagasid {file} avaliku lingina", + "You removed public link for {file}" : "Sa eemaldasid {file} avaliku lingi", + "Public link expired for {file}" : "{file} avalik link aegus", + "{actor} shared {file} as public link" : "{actor} jagas {file} avaliku lingina", + "{actor} removed public link for {file}" : "{actor} eemaldas {file} avaliku lingi", + "Public link of {actor} for {file} expired" : " {actor} faili {file} avalik link aegus", + "{user} accepted the remote share" : "{user} aksepteeris kaugjagamise", + "{user} declined the remote share" : "{user} keeldus kaugjagamisest", + "You received a new remote share {file} from {user}" : "Sa said uue kaugjagatud faili {file} kasutajalt {user}", + "{user} accepted the remote share of {file}" : "{user} aksepteeris faili {file} kaugjagamise", + "{user} declined the remote share of {file}" : "{user} keeldus faili {file} kaugjagamisest", + "{user} unshared {file} from you" : "{user} lõpetas sinuga faili {file} jagamise", + "Shared with {user}" : "Jagatud kasutajale {user}", + "Removed share for {user}" : "Eemaldas jagamise kasutajaga {user}", + "{actor} shared with {user}" : "{actor} jagas kasutajaga {user}", + "{actor} removed share for {user}" : "{actor} eemaldas jagamise kasutajaga {user}", + "Shared by {actor}" : "Jagatud kasutajalt {actor}", + "{actor} removed share" : "{actor} eemaldas jagamise", + "You shared {file} with {user}" : "Sa jagasid {file} kasutajaga {user}", + "You removed {user} from {file}" : "Sa eemaldasid faili {file} jagamise kasutajaga {user} ", + "{actor} shared {file} with {user}" : "{actor} jagas {file} kasutajaga {user}", + "{actor} removed {user} from {file}" : "{actor} eemaldas {user} jagamise faililt {file}", + "{actor} shared {file} with you" : "{actor} jagas singuga {file}", + "{actor} removed you from {file}" : "{actor} eemaldas sind {file} jagamisest", + "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Fail või kaust mis on jagatud e-posti või avaliku lingiga <strong>laeti alla</strong>", + "A file or folder was shared from <strong>another server</strong>" : "Fail või kaust jagati <strong>teisest serverist</strong>", + "A file or folder has been <strong>shared</strong>" : "Fail või kataloog on <strong>jagatud</strong>", + "Wrong share ID, share doesn't exist" : "Vale jagamise ID, sellist jagamist ei eksisteeri", + "could not delete share" : "ei saanud jagamist eemaldada", + "Could not delete share" : "Ei saanud jagamist eemaldada", + "Please specify a file or folder path" : "Palun määra faili või kausta rada", + "Wrong path, file/folder doesn't exist" : "Vale rada, faili/kausta ei leitud", + "Could not create share" : "Ei saanud jagamist luua", + "invalid permissions" : "valed õigused", + "Please specify a valid user" : "Palun määra kehtiv kasutaja", + "Group sharing is disabled by the administrator" : "Grupiga jagamine on administraatori poolt keelatud", + "Please specify a valid group" : "Palun määra kehtiv grupp", + "Public link sharing is disabled by the administrator" : "Avaliku lingiga jagamine on administraatori poolt keelatud", + "Public upload disabled by the administrator" : "Avalik üleslaadimine on administraatori poolt keelatud", + "Public upload is only possible for publicly shared folders" : "Avalik üleslaadminie on võimalik ainult avalikult jagatud kaustades", + "Invalid date, date format must be YYYY-MM-DD" : "Vigane kuupäev, formaat peab olema YYYY-MM-DD", + "Sharing %s failed because the back end does not allow shares from type %s" : "%s jagamine ebaõnnestus sest server ei luba %s tüüpi jagamisi", + "You cannot share to a Circle if the app is not enabled" : "Sa ei saa jagada Ringi kui see rakendus pole lubatud", + "Please specify a valid circle" : "Palun määra kehtiv ring", + "Unknown share type" : "Tundmatu jagamise tüüp", + "Not a directory" : "Ei ole kaust", + "Could not lock path" : "Ei saanud rada lukustada", + "Wrong or no update parameter given" : "Antud vale või aegunud parameeter", + "Can't change permissions for public share links" : "Avalikult jagatud linkide õigusi muuta ei saa", + "Cannot increase permissions" : "Ei saa õigusi suurendada", + "Share API is disabled" : "Jagamise API on keelatud", "This share is password-protected" : "See jagamine on parooliga kaitstud", "The password is wrong. Try again." : "Parool on vale. Proovi uuesti.", "Password" : "Parool", "No entries found in this folder" : "Selles kaustas ei leitud kirjeid", "Name" : "Nimi", "Share time" : "Jagamise aeg", + "Expiration date" : "Aegumise kuupäev", "Sorry, this link doesn’t seem to work anymore." : "Vabandust, see link ei tundu enam toimivat.", "Reasons might be:" : "Põhjused võivad olla:", "the item was removed" : "üksus on eemaldatud", "the link expired" : "link on aegunud", "sharing is disabled" : "jagamine on peatatud", "For more info, please ask the person who sent this link." : "Täpsema info saamiseks palun pöördu lingi saatnud isiku poole.", - "Add to your ownCloud" : "Lisa oma ownCloudi", + "shared by %s" : "jagas %s", "Download" : "Lae alla", + "Direct link" : "Otsene link", + "Add to your Nextcloud" : "Lisa oma Nextcloudi", "Download %s" : "Laadi alla %s", - "Direct link" : "Otsene link" + "Upload files to %s" : "Laadi failid %s", + "Select or drop files" : "Vali või lohista failid", + "Uploading files…" : "Failide üleslaadimine...", + "Uploaded files:" : "Üleslaetud failid:", + "%s is publicly shared" : "%s on avalikult jagatud" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/et_EE.json b/apps/files_sharing/l10n/et_EE.json index b782953c83e..89086670a74 100644 --- a/apps/files_sharing/l10n/et_EE.json +++ b/apps/files_sharing/l10n/et_EE.json @@ -1,9 +1,4 @@ { "translations": { - "Server to server sharing is not enabled on this server" : "Serverist serverisse jagamine pole antud serveris lubatud", - "The mountpoint name contains invalid characters." : "Ühenduspunkti nimes on vigaseid märke.", - "Invalid or untrusted SSL certificate" : "Vigane või tundmatu SSL sertifikaat", - "Storage not valid" : "Andmehoidla pole korrektne", - "Couldn't add remote share" : "Ei suutnud lisada kaugjagamist", "Shared with you" : "Sinuga jagatud", "Shared with others" : "Teistega jagatud", "Shared by link" : "Jagatud lingiga", @@ -13,43 +8,106 @@ "Files and folders you share will show up here" : "Siin kuvatakse faile ja kaustasid, mida sa oled teistega jaganud", "No shared links" : "Jagatud linke pole", "Files and folders you share by link will show up here" : "Siin kuvatakse faile ja kaustasid, mida sa jagad lingiga", - "Do you want to add the remote share {name} from {owner}@{remote}?" : "Soovid lisata kaugjagamise {name} asukohast {owner}@{remote}?", - "Remote share" : "Kaugjagamine", - "Remote share password" : "Kaugjagamise parool", - "Cancel" : "Loobu", - "Add remote share" : "Lisa kaugjagamine", "You can upload into this folder" : "Sa saad sellesse kausta faile üles laadida", - "No ownCloud installation (7 or higher) found at {remote}" : "Saidilt {remote} ei leitud ownCloudi (7 või uuem) ", - "Invalid ownCloud url" : "Vigane ownCloud url", + "No compatible server found at {remote}" : "Aadressil {remote} ei leitud ühilduvat serverit", + "Invalid server URL" : "Vigane serveri URL", + "Failed to add the public link to your Nextcloud" : "Avaliku lingi lisamine sinu Nextcloudi ebaõnnestus", + "Share" : "Jaga", + "No expiration date set" : "Aegumise kuupäeva pole määratud", "Shared by" : "Jagas", "Sharing" : "Jagamine", - "A file or folder has been <strong>shared</strong>" : "Fail või kataloog on <strong>jagatud</strong>", - "You shared %1$s with %2$s" : "Jagasid %1$s %2$s kasutajaga", - "You shared %1$s with group %2$s" : "Jagasid %1$s %2$s grupiga", - "You shared %1$s via link" : "Jagasid %1$s lingiga", - "%2$s shared %1$s with you" : "%2$s jagas sinuga %1$s", + "File shares" : "Jagatud failid", "Downloaded via public link" : "Alla laetud avalikult lingilt", - "Shared with %2$s" : "Jagatud kasutajaga %2$s", - "Shared with group %2$s" : "Jagatud grupiga %2$s", - "Shared via public link" : "Jagatud avaliku lingiga", + "Downloaded by {email}" : "Alla laetud {email} poolt", + "{file} downloaded via public link" : "{file} laeti alla avaliku lingi kaudu", + "{email} downloaded {file}" : "{email} laadis {file} alla", + "Shared with group {group}" : "Jagatud grupiga {group}", + "Removed share for group {group}" : "Eemaldas jagamise grupiga {group}", + "{actor} shared with group {group}" : "{actor} jagas grupiga {group}", + "{actor} removed share for group {group}" : "{actor} eemaldas jagamise grupiga {group}", + "You shared {file} with group {group}" : "Sa jagasid faili {file} grupiga {group}", + "You removed group {group} from {file}" : "Sa eemaldasid grupi {group} faili {file} jagamisest", + "{actor} shared {file} with group {group}" : "{actor} jagas faili {file} grupiga {group}", + "{actor} removed group {group} from {file}" : "{actor} eemaldas grupi {group} faili {file} jagamisest", + "Shared as public link" : "Jaga avaliku lingina", "Removed public link" : "Avalik link on eemaldatud", "Public link expired" : "Avalik link aegus", - "Shares" : "Jagamised", + "{actor} shared as public link" : "{actor} jagas avaliku lingina", + "{actor} removed public link" : "{actor} eemaldas avaliku lingi", + "Public link of {actor} expired" : "{actor} avalik link aegus", + "You shared {file} as public link" : "Sa jagasid {file} avaliku lingina", + "You removed public link for {file}" : "Sa eemaldasid {file} avaliku lingi", + "Public link expired for {file}" : "{file} avalik link aegus", + "{actor} shared {file} as public link" : "{actor} jagas {file} avaliku lingina", + "{actor} removed public link for {file}" : "{actor} eemaldas {file} avaliku lingi", + "Public link of {actor} for {file} expired" : " {actor} faili {file} avalik link aegus", + "{user} accepted the remote share" : "{user} aksepteeris kaugjagamise", + "{user} declined the remote share" : "{user} keeldus kaugjagamisest", + "You received a new remote share {file} from {user}" : "Sa said uue kaugjagatud faili {file} kasutajalt {user}", + "{user} accepted the remote share of {file}" : "{user} aksepteeris faili {file} kaugjagamise", + "{user} declined the remote share of {file}" : "{user} keeldus faili {file} kaugjagamisest", + "{user} unshared {file} from you" : "{user} lõpetas sinuga faili {file} jagamise", + "Shared with {user}" : "Jagatud kasutajale {user}", + "Removed share for {user}" : "Eemaldas jagamise kasutajaga {user}", + "{actor} shared with {user}" : "{actor} jagas kasutajaga {user}", + "{actor} removed share for {user}" : "{actor} eemaldas jagamise kasutajaga {user}", + "Shared by {actor}" : "Jagatud kasutajalt {actor}", + "{actor} removed share" : "{actor} eemaldas jagamise", + "You shared {file} with {user}" : "Sa jagasid {file} kasutajaga {user}", + "You removed {user} from {file}" : "Sa eemaldasid faili {file} jagamise kasutajaga {user} ", + "{actor} shared {file} with {user}" : "{actor} jagas {file} kasutajaga {user}", + "{actor} removed {user} from {file}" : "{actor} eemaldas {user} jagamise faililt {file}", + "{actor} shared {file} with you" : "{actor} jagas singuga {file}", + "{actor} removed you from {file}" : "{actor} eemaldas sind {file} jagamisest", + "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Fail või kaust mis on jagatud e-posti või avaliku lingiga <strong>laeti alla</strong>", + "A file or folder was shared from <strong>another server</strong>" : "Fail või kaust jagati <strong>teisest serverist</strong>", + "A file or folder has been <strong>shared</strong>" : "Fail või kataloog on <strong>jagatud</strong>", + "Wrong share ID, share doesn't exist" : "Vale jagamise ID, sellist jagamist ei eksisteeri", + "could not delete share" : "ei saanud jagamist eemaldada", + "Could not delete share" : "Ei saanud jagamist eemaldada", + "Please specify a file or folder path" : "Palun määra faili või kausta rada", + "Wrong path, file/folder doesn't exist" : "Vale rada, faili/kausta ei leitud", + "Could not create share" : "Ei saanud jagamist luua", + "invalid permissions" : "valed õigused", + "Please specify a valid user" : "Palun määra kehtiv kasutaja", + "Group sharing is disabled by the administrator" : "Grupiga jagamine on administraatori poolt keelatud", + "Please specify a valid group" : "Palun määra kehtiv grupp", + "Public link sharing is disabled by the administrator" : "Avaliku lingiga jagamine on administraatori poolt keelatud", + "Public upload disabled by the administrator" : "Avalik üleslaadimine on administraatori poolt keelatud", + "Public upload is only possible for publicly shared folders" : "Avalik üleslaadminie on võimalik ainult avalikult jagatud kaustades", + "Invalid date, date format must be YYYY-MM-DD" : "Vigane kuupäev, formaat peab olema YYYY-MM-DD", + "Sharing %s failed because the back end does not allow shares from type %s" : "%s jagamine ebaõnnestus sest server ei luba %s tüüpi jagamisi", + "You cannot share to a Circle if the app is not enabled" : "Sa ei saa jagada Ringi kui see rakendus pole lubatud", + "Please specify a valid circle" : "Palun määra kehtiv ring", + "Unknown share type" : "Tundmatu jagamise tüüp", + "Not a directory" : "Ei ole kaust", + "Could not lock path" : "Ei saanud rada lukustada", + "Wrong or no update parameter given" : "Antud vale või aegunud parameeter", + "Can't change permissions for public share links" : "Avalikult jagatud linkide õigusi muuta ei saa", + "Cannot increase permissions" : "Ei saa õigusi suurendada", + "Share API is disabled" : "Jagamise API on keelatud", "This share is password-protected" : "See jagamine on parooliga kaitstud", "The password is wrong. Try again." : "Parool on vale. Proovi uuesti.", "Password" : "Parool", "No entries found in this folder" : "Selles kaustas ei leitud kirjeid", "Name" : "Nimi", "Share time" : "Jagamise aeg", + "Expiration date" : "Aegumise kuupäev", "Sorry, this link doesn’t seem to work anymore." : "Vabandust, see link ei tundu enam toimivat.", "Reasons might be:" : "Põhjused võivad olla:", "the item was removed" : "üksus on eemaldatud", "the link expired" : "link on aegunud", "sharing is disabled" : "jagamine on peatatud", "For more info, please ask the person who sent this link." : "Täpsema info saamiseks palun pöördu lingi saatnud isiku poole.", - "Add to your ownCloud" : "Lisa oma ownCloudi", + "shared by %s" : "jagas %s", "Download" : "Lae alla", + "Direct link" : "Otsene link", + "Add to your Nextcloud" : "Lisa oma Nextcloudi", "Download %s" : "Laadi alla %s", - "Direct link" : "Otsene link" + "Upload files to %s" : "Laadi failid %s", + "Select or drop files" : "Vali või lohista failid", + "Uploading files…" : "Failide üleslaadimine...", + "Uploaded files:" : "Üleslaetud failid:", + "%s is publicly shared" : "%s on avalikult jagatud" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/tests/js/shareSpec.js b/apps/files_sharing/tests/js/shareSpec.js index 893525f7566..91060f6a735 100644 --- a/apps/files_sharing/tests/js/shareSpec.js +++ b/apps/files_sharing/tests/js/shareSpec.js @@ -498,7 +498,7 @@ describe('OCA.Sharing.Util tests', function() { var changeHandler = sinon.stub(); fileInfoModel.on('change', changeHandler); - shareTabSpy.getCall(0).thisValue.trigger('sharesChanged', shareModel); + shareTabSpy.getCall(0).returnValue.trigger('sharesChanged', shareModel); expect(changeHandler.calledOnce).toEqual(true); expect(changeHandler.getCall(0).args[0].changed).toEqual({ diff --git a/apps/systemtags/l10n/et_EE.js b/apps/systemtags/l10n/et_EE.js index a7af5717495..d2af006af9d 100644 --- a/apps/systemtags/l10n/et_EE.js +++ b/apps/systemtags/l10n/et_EE.js @@ -26,9 +26,17 @@ OC.L10N.register( "You deleted system tag {systemtag}" : "Sa kustutasid süsteemi sildi {systemtag}", "%1$s deleted system tag %2$s" : "%1$s kustutas süsteemi sildi %2$s", "{actor} deleted system tag {systemtag}" : "{actor} kustutas süsteemi sildi {systemtag}", + "You updated system tag %2$s to %1$s" : "Sa uuendasid süsteemi sildi %2$s => %1$s", + "You updated system tag {oldsystemtag} to {newsystemtag}" : "Sa uuendasid süsteemi sildi {oldsystemtag} => {newsystemtag}", + "%1$s updated system tag %3$s to %2$s" : "%1$s uuendas süsteemi sildi %3$s => %2$s", + "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} uuendas süsteemi sildi {oldsystemtag} => {newsystemtag}", + "You added system tag %2$s to %1$s" : "Sa lisasid süsteemi sildi %2$s => %1$s", "You added system tag {systemtag} to {file}" : "Sa lisasid süsteemi sildi {systemtag} failile {file}", + "%1$s added system tag %3$s to %2$s" : "%1$s lisas süsteemi sildi %3$s => %2$s", "{actor} added system tag {systemtag} to {file}" : "{actor} lisas süsteemi sildi {systemtag} failile {file}", + "You removed system tag %2$s from %1$s" : "Sa eemaldasid süsteemi sildi %2$s - %1$s", "You removed system tag {systemtag} from {file}" : "Sa eemaldasid süsteemi sildi {systemtag} {file} faililt", + "%1$s removed system tag %3$s from %2$s" : "%1$s eemaldas süsteemi sildi %3$s - %2$s", "{actor} removed system tag {systemtag} from {file}" : "{actor} eemaldas süsteemi sildi {systemtag} {file} faililt", "%s (restricted)" : "%s (piiratud)", "%s (invisible)" : "%s (nähtamatu)", diff --git a/apps/systemtags/l10n/et_EE.json b/apps/systemtags/l10n/et_EE.json index 6afc7567dfc..fe327cfbddc 100644 --- a/apps/systemtags/l10n/et_EE.json +++ b/apps/systemtags/l10n/et_EE.json @@ -24,9 +24,17 @@ "You deleted system tag {systemtag}" : "Sa kustutasid süsteemi sildi {systemtag}", "%1$s deleted system tag %2$s" : "%1$s kustutas süsteemi sildi %2$s", "{actor} deleted system tag {systemtag}" : "{actor} kustutas süsteemi sildi {systemtag}", + "You updated system tag %2$s to %1$s" : "Sa uuendasid süsteemi sildi %2$s => %1$s", + "You updated system tag {oldsystemtag} to {newsystemtag}" : "Sa uuendasid süsteemi sildi {oldsystemtag} => {newsystemtag}", + "%1$s updated system tag %3$s to %2$s" : "%1$s uuendas süsteemi sildi %3$s => %2$s", + "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} uuendas süsteemi sildi {oldsystemtag} => {newsystemtag}", + "You added system tag %2$s to %1$s" : "Sa lisasid süsteemi sildi %2$s => %1$s", "You added system tag {systemtag} to {file}" : "Sa lisasid süsteemi sildi {systemtag} failile {file}", + "%1$s added system tag %3$s to %2$s" : "%1$s lisas süsteemi sildi %3$s => %2$s", "{actor} added system tag {systemtag} to {file}" : "{actor} lisas süsteemi sildi {systemtag} failile {file}", + "You removed system tag %2$s from %1$s" : "Sa eemaldasid süsteemi sildi %2$s - %1$s", "You removed system tag {systemtag} from {file}" : "Sa eemaldasid süsteemi sildi {systemtag} {file} faililt", + "%1$s removed system tag %3$s from %2$s" : "%1$s eemaldas süsteemi sildi %3$s - %2$s", "{actor} removed system tag {systemtag} from {file}" : "{actor} eemaldas süsteemi sildi {systemtag} {file} faililt", "%s (restricted)" : "%s (piiratud)", "%s (invisible)" : "%s (nähtamatu)", diff --git a/apps/systemtags/l10n/zh_TW.js b/apps/systemtags/l10n/zh_TW.js index bfcf22f94ba..5638d565c05 100644 --- a/apps/systemtags/l10n/zh_TW.js +++ b/apps/systemtags/l10n/zh_TW.js @@ -2,9 +2,47 @@ OC.L10N.register( "systemtags", { "Tags" : "標籤", + "Update" : "套用", + "Create" : "新增", + "Select tag…" : "選擇標籤", + "Tagged files" : "已標籤檔案", + "Select tags to filter by" : "依照選擇的標籤篩選", + "No tags found" : "找不到標籤", + "Please select tags to filter by" : "請選擇標籤以篩選", + "No files found for the selected tags" : "沒有與選擇的標籤相符的檔案", + "Added system tag %1$s" : "已加入系統標籤 %1$s", + "Added system tag {systemtag}" : "已加入系統標籤 {systemtag}", + "%1$s added system tag %2$s" : "%1$s已加入系統標籤 %2$s", + "{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 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}", + "%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", + "%s (restricted)" : "%s (受限)", + "%s (invisible)" : "%s (隱藏)", + "<strong>System tags</strong> for a file have been modified" : "一個檔案的<strong>系統標籤</strong>已經被修改", + "Collaborative tags" : "協作標籤", + "Create and edit collaborative tags. These tags affect all users." : "新增和編輯協作標籤,這些標籤將影響所有使用者", + "Select tag …" : "選擇標籤…", + "Name" : "名稱", + "Delete" : "移除", + "Public" : "公開", + "Restricted" : "受限", + "Invisible" : "隱藏", + "Reset" : "重設", "No files in here" : "沒有任何檔案", "No entries found in this folder" : "在此資料夾中沒有任何項目", - "Name" : "名稱", "Size" : "大小", "Modified" : "修改時間" }, diff --git a/apps/systemtags/l10n/zh_TW.json b/apps/systemtags/l10n/zh_TW.json index abd8415c4cf..20858a6f2fb 100644 --- a/apps/systemtags/l10n/zh_TW.json +++ b/apps/systemtags/l10n/zh_TW.json @@ -1,8 +1,46 @@ { "translations": { "Tags" : "標籤", + "Update" : "套用", + "Create" : "新增", + "Select tag…" : "選擇標籤", + "Tagged files" : "已標籤檔案", + "Select tags to filter by" : "依照選擇的標籤篩選", + "No tags found" : "找不到標籤", + "Please select tags to filter by" : "請選擇標籤以篩選", + "No files found for the selected tags" : "沒有與選擇的標籤相符的檔案", + "Added system tag %1$s" : "已加入系統標籤 %1$s", + "Added system tag {systemtag}" : "已加入系統標籤 {systemtag}", + "%1$s added system tag %2$s" : "%1$s已加入系統標籤 %2$s", + "{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 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}", + "%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", + "%s (restricted)" : "%s (受限)", + "%s (invisible)" : "%s (隱藏)", + "<strong>System tags</strong> for a file have been modified" : "一個檔案的<strong>系統標籤</strong>已經被修改", + "Collaborative tags" : "協作標籤", + "Create and edit collaborative tags. These tags affect all users." : "新增和編輯協作標籤,這些標籤將影響所有使用者", + "Select tag …" : "選擇標籤…", + "Name" : "名稱", + "Delete" : "移除", + "Public" : "公開", + "Restricted" : "受限", + "Invisible" : "隱藏", + "Reset" : "重設", "No files in here" : "沒有任何檔案", "No entries found in this folder" : "在此資料夾中沒有任何項目", - "Name" : "名稱", "Size" : "大小", "Modified" : "修改時間" },"pluralForm" :"nplurals=1; plural=0;" diff --git a/apps/theming/js/settings-admin.js b/apps/theming/js/settings-admin.js index 44a799a19b4..7df1bbf1125 100644 --- a/apps/theming/js/settings-admin.js +++ b/apps/theming/js/settings-admin.js @@ -206,7 +206,11 @@ $(document).ready(function () { }); $('#theming-color').change(function (e) { - setThemingValue('color', '#' + $(this).val()); + var color = $(this).val(); + if (color.indexOf('#') !== 0) { + color = '#' + color; + } + setThemingValue('color', color); }); $('.theme-undo').click(function (e) { diff --git a/apps/theming/templates/settings-admin.php b/apps/theming/templates/settings-admin.php index c7451e595d7..1b8ed87bb0d 100644 --- a/apps/theming/templates/settings-admin.php +++ b/apps/theming/templates/settings-admin.php @@ -62,7 +62,7 @@ style('theming', 'settings-admin'); <div> <label> <span><?php p($l->t('Color')) ?></span> - <input id="theming-color" type="text" class="jscolor" maxlength="6" value="<?php p($_['color']) ?>" /> + <input id="theming-color" type="text" class="jscolor" data-jscolor="{hash:true}" maxlength="7" value="<?php p($_['color']) ?>" /> <div data-setting="color" data-toggle="tooltip" data-original-title="<?php p($l->t('Reset to default')); ?>" class="theme-undo icon icon-history"></div> </label> </div> diff --git a/apps/user_ldap/js/wizard/wizardTabLoginFilter.js b/apps/user_ldap/js/wizard/wizardTabLoginFilter.js index 7cc35aae0aa..0eef632d85d 100644 --- a/apps/user_ldap/js/wizard/wizardTabLoginFilter.js +++ b/apps/user_ldap/js/wizard/wizardTabLoginFilter.js @@ -85,6 +85,7 @@ OCA = OCA || {}; setModel: function(configModel) { this._super(configModel); this.configModel.on('configLoaded', this.onConfigSwitch, this); + this.configModel.on('configUpdated', this.onConfigUpdated, this); this.configModel.on('receivedLdapFeature', this.onFeatureReceived, this); }, @@ -205,6 +206,22 @@ OCA = OCA || {}; }, /** + * @param {WizardTabLoginFilter} view + * @param {Object} configuration + */ + onConfigUpdated: function(view, configuration) { + // When the user list filter is updated in assisted mode, also + // update the login filter automatically. + if( + !_.isUndefined(configuration.ldap_userlist_filter) + && view.parsedFilterMode === view.configModel.FILTER_MODE_ASSISTED + && _.toArray(configuration).length === 1 + ) { + view.configModel.requestWizard('ldap_login_filter'); + } + }, + + /** * if UserObjectClasses are found, the corresponding element will be * updated * diff --git a/apps/workflowengine/l10n/et_EE.js b/apps/workflowengine/l10n/et_EE.js new file mode 100644 index 00000000000..a35458ac2e1 --- /dev/null +++ b/apps/workflowengine/l10n/et_EE.js @@ -0,0 +1,68 @@ +OC.L10N.register( + "workflowengine", + { + "Saved" : "Salvestatud", + "Saving failed:" : "Salvestamine ebaõnnestus:", + "File MIME type" : "Faili MIME tüüp", + "is" : "on", + "is not" : "ei ole", + "matches" : "kattub", + "does not match" : "ei kattu", + "Example: {placeholder}" : "Näide: {placeholder}", + "File size (upload)" : "Faili suurus (üleslaadimine)", + "less" : "väiksem", + "less or equals" : "väiksem või võrdne", + "greater or equals" : "suurem või võrdne", + "greater" : "suurem", + "File system tag" : "Faili süsteemi silt", + "is tagged with" : "on sildiga", + "is not tagged with" : "ei ole sildiga", + "Select tag…" : "Vali silt...", + "Request remote address" : "Päringu kaugaadress", + "matches IPv4" : "kattub IPv4 aadressiga", + "does not match IPv4" : "Ei kattu IPv4 aadressiga", + "matches IPv6" : "kattub IPv6 aadressiga", + "does not match IPv6" : "Ei kattu IPv6 aadressiga", + "Request time" : "Päringu aeg", + "between" : "vahemikus", + "not between" : "ei ole vahemikus", + "Start" : "Algus", + "End" : "Lõpp", + "Select timezone…" : "Vali ajavöönd", + "Request URL" : "Päringu URL", + "Predefined URLs" : "Eelmääratletud URL-id", + "Files WebDAV" : "WebDAV failid", + "Request user agent" : "Päringu \"user agent\"", + "Sync clients" : "Kliendiprogrammid", + "Android client" : "Android klient", + "iOS client" : "iOS klient", + "Desktop client" : "Töölaua klient", + "User group membership" : "Kasutajagrupi liige", + "is member of" : "on liige", + "is not member of" : "ei ole liige", + "The given regular expression is invalid" : "Antud regulaaravaldis on vigane", + "The given file size is invalid" : "Antud faili suurus on vigane", + "The given tag id is invalid" : "Antud sildi ID on vigane", + "The given IP range is invalid" : "Antud IP vahemik on vigane", + "The given IP range is not valid for IPv4" : "Antud IP vahemik ei kehti IPv4 kohta", + "The given IP range is not valid for IPv6" : "Antud IP vahemik ei kehti IPv6 kohta", + "The given time span is invalid" : "Antud ajavahemik on vigane", + "The given start time is invalid" : "Antud algusaeg on vigane", + "The given end time is invalid" : "Antud lõppaeg on vigane", + "The given group does not exist" : "Antud gruppi ei leitud", + "Operation #%s does not exist" : "Tegevus # %s ei leitud", + "Operation %s does not exist" : "Tegevust %s ei leitud", + "Operation %s is invalid" : "Tegevus %s on vigane", + "Workflow" : "Töövoog", + "Open documentation" : "Ava dokumentatsioon", + "Add rule group" : "Lisa reegligrupp", + "Short rule description" : "Reegli lühikirjeldus", + "Add rule" : "Lisa reegel", + "Reset" : "Lähtesta", + "Save" : "Salvesta", + "Saving…" : "Salvestamine...", + "Loading…" : "Laadimine...", + "Successfully saved" : "Edukalt salvestatud", + "File mime type" : "Faili MIME tüüp" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/workflowengine/l10n/et_EE.json b/apps/workflowengine/l10n/et_EE.json new file mode 100644 index 00000000000..65067361a14 --- /dev/null +++ b/apps/workflowengine/l10n/et_EE.json @@ -0,0 +1,66 @@ +{ "translations": { + "Saved" : "Salvestatud", + "Saving failed:" : "Salvestamine ebaõnnestus:", + "File MIME type" : "Faili MIME tüüp", + "is" : "on", + "is not" : "ei ole", + "matches" : "kattub", + "does not match" : "ei kattu", + "Example: {placeholder}" : "Näide: {placeholder}", + "File size (upload)" : "Faili suurus (üleslaadimine)", + "less" : "väiksem", + "less or equals" : "väiksem või võrdne", + "greater or equals" : "suurem või võrdne", + "greater" : "suurem", + "File system tag" : "Faili süsteemi silt", + "is tagged with" : "on sildiga", + "is not tagged with" : "ei ole sildiga", + "Select tag…" : "Vali silt...", + "Request remote address" : "Päringu kaugaadress", + "matches IPv4" : "kattub IPv4 aadressiga", + "does not match IPv4" : "Ei kattu IPv4 aadressiga", + "matches IPv6" : "kattub IPv6 aadressiga", + "does not match IPv6" : "Ei kattu IPv6 aadressiga", + "Request time" : "Päringu aeg", + "between" : "vahemikus", + "not between" : "ei ole vahemikus", + "Start" : "Algus", + "End" : "Lõpp", + "Select timezone…" : "Vali ajavöönd", + "Request URL" : "Päringu URL", + "Predefined URLs" : "Eelmääratletud URL-id", + "Files WebDAV" : "WebDAV failid", + "Request user agent" : "Päringu \"user agent\"", + "Sync clients" : "Kliendiprogrammid", + "Android client" : "Android klient", + "iOS client" : "iOS klient", + "Desktop client" : "Töölaua klient", + "User group membership" : "Kasutajagrupi liige", + "is member of" : "on liige", + "is not member of" : "ei ole liige", + "The given regular expression is invalid" : "Antud regulaaravaldis on vigane", + "The given file size is invalid" : "Antud faili suurus on vigane", + "The given tag id is invalid" : "Antud sildi ID on vigane", + "The given IP range is invalid" : "Antud IP vahemik on vigane", + "The given IP range is not valid for IPv4" : "Antud IP vahemik ei kehti IPv4 kohta", + "The given IP range is not valid for IPv6" : "Antud IP vahemik ei kehti IPv6 kohta", + "The given time span is invalid" : "Antud ajavahemik on vigane", + "The given start time is invalid" : "Antud algusaeg on vigane", + "The given end time is invalid" : "Antud lõppaeg on vigane", + "The given group does not exist" : "Antud gruppi ei leitud", + "Operation #%s does not exist" : "Tegevus # %s ei leitud", + "Operation %s does not exist" : "Tegevust %s ei leitud", + "Operation %s is invalid" : "Tegevus %s on vigane", + "Workflow" : "Töövoog", + "Open documentation" : "Ava dokumentatsioon", + "Add rule group" : "Lisa reegligrupp", + "Short rule description" : "Reegli lühikirjeldus", + "Add rule" : "Lisa reegel", + "Reset" : "Lähtesta", + "Save" : "Salvesta", + "Saving…" : "Salvestamine...", + "Loading…" : "Laadimine...", + "Successfully saved" : "Edukalt salvestatud", + "File mime type" : "Faili MIME tüüp" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file |