diff options
728 files changed, 17862 insertions, 10470 deletions
diff --git a/.drone.yml b/.drone.yml index 2798176c9a2..6016ebd6981 100644 --- a/.drone.yml +++ b/.drone.yml @@ -3,18 +3,6 @@ build: image: nextcloudci/jsunit:1.0.6 commands: - ./autotest-js.sh - nodb-php5.4: - image: nextcloudci/php5.4:1.0.7 - commands: - - rm -rf data/* config/config.php # TODO: remove this - temporary fix for CI issues - - git submodule update --init - - NOCOVERAGE=true TEST_SELECTION=NODB ./autotest.sh sqlite - nodb-php5.5: - image: nextcloudci/php5.5:1.0.7 - commands: - - rm -rf data/* config/config.php # TODO: remove this - temporary fix for CI issues - - git submodule update --init - - NOCOVERAGE=true TEST_SELECTION=NODB ./autotest.sh sqlite nodb-php5.6: image: nextcloudci/php5.6:1.0.6 commands: @@ -27,18 +15,6 @@ build: - rm -rf data/* config/config.php # TODO: remove this - temporary fix for CI issues - git submodule update --init - NOCOVERAGE=true TEST_SELECTION=NODB ./autotest.sh sqlite - sqlite-php5.4: - image: nextcloudci/php5.4:1.0.7 - commands: - - rm -rf data/* config/config.php # TODO: remove this - temporary fix for CI issues - - git submodule update --init - - NOCOVERAGE=true TEST_SELECTION=DB ./autotest.sh sqlite - sqlite-php5.5: - image: nextcloudci/php5.5:1.0.7 - commands: - - rm -rf data/* config/config.php # TODO: remove this - temporary fix for CI issues - - git submodule update --init - - NOCOVERAGE=true TEST_SELECTION=DB ./autotest.sh sqlite sqlite-php5.6: image: nextcloudci/php5.6:1.0.6 commands: diff --git a/.travis.yml b/.travis.yml index fbbff9fc16e..ddcba167af1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ sudo: false language: php php: - - 5.4 + - 5.6 env: global: @@ -31,6 +31,7 @@ install: script: - sh -c "if [ '$TC' = 'syntax' ]; then composer install && lib/composer/bin/parallel-lint --exclude lib/composer/jakub-onderka/ --exclude 3rdparty/symfony/polyfill-php70/Resources/stubs/ --exclude 3rdparty/patchwork/utf8/src/Patchwork/Utf8/Bootup/ --exclude 3rdparty/paragonie/random_compat/lib/ --exclude lib/composer/composer/autoload_static.php --exclude 3rdparty/composer/autoload_static.php .; fi" - sh -c "if [ '$TC' = 'app:check-code' ]; then ./occ app:check-code admin_audit; ./occ app:check-code comments; ./occ app:check-code federation; ./occ app:check-code workflowengine; fi" + - sh -c "if [ '$TC' = 'autoloader' ]; then bash build/autoloaderchecker.sh; fi" - sh -c "if [ '$TEST_DAV' != '1' ]; then echo \"Not testing DAV\"; fi" - sh -c "if [ '$TEST_DAV' = '1' ]; then echo \"Testing DAV\"; fi" @@ -38,21 +39,19 @@ script: matrix: include: - - php: 5.4 + - php: 7.0 + env: TC=autoloader;TEST_DAV=0 + - php: 5.6 env: DB=pgsql;TC=litmus-v1 - - php: 5.4 + - php: 5.6 env: DB=sqlite;TC=carddav - - php: 5.4 + - php: 5.6 env: DB=sqlite;TC=caldav - - php: 5.4 - env: DB=sqlite;TC=syntax;TEST_DAV=0 - - php: 5.5 - env: DB=sqlite;TC=syntax;TEST_DAV=0 - php: 5.6 env: DB=sqlite;TC=syntax;TEST_DAV=0 - php: 7.0 env: DB=sqlite;TC=syntax;TEST_DAV=0 - - php: 5.4 + - php: 5.6 env: DB=sqlite;TC=app:check-code;TEST_DAV=0 fast_finish: true diff --git a/3rdparty b/3rdparty -Subproject cba0f29cd541dc796dbc41d79fca9171321cb2e +Subproject 1b3ecc4859174daf3ea39400d689db87e0672e3 diff --git a/apps/comments/css/comments.css b/apps/comments/css/comments.css index a9b72252e88..7f64f1cf7db 100644 --- a/apps/comments/css/comments.css +++ b/apps/comments/css/comments.css @@ -8,43 +8,59 @@ * */ +#commentsTabView .emptycontent { + margin-top: 0; +} + #commentsTabView .newCommentForm { + position: relative; margin-bottom: 20px; } #commentsTabView .newCommentForm .message { - width: 90%; - resize: vertical; + width: calc(100% - 81px); /* 36 (left margin) + 30 (right padding) + 15 (right padding of surrounding box) */ + margin-left: 36px; + padding-right: 30px; +} + +#commentsTabView .newCommentForm .submit { + position: absolute; + top: 1px; + right: 8px; + width: 30px; + margin: 0; + padding: 9px; + background-color: transparent; + border: none; + opacity: .3; +} +#commentsTabView .newCommentForm .submit:hover, +#commentsTabView .newCommentForm .submit:focus { + opacity: 1; } #commentsTabView .newCommentForm .submitLoading { background-position: left; } -#commentsTabView .comment { - margin-bottom: 30px; -} - -#commentsTabView .comment .avatar { - width: 28px; - height: 28px; - line-height: 28px; +#commentsTabView .newCommentForm .cancel { + margin-right: 6px; } #commentsTabView .comment { position: relative; z-index: 1; + margin-bottom: 30px; +} + +#commentsTabView .comment .avatar { + width: 32px; + height: 32px; + line-height: 32px; } #commentsTabView .comment.collapsed .message { - white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */ - white-space: -webkit-pre-wrap; /*Chrome & Safari */ - white-space: -pre-wrap; /* Opera 4-6 */ - white-space: -o-pre-wrap; /* Opera 7 */ - white-space: pre-wrap; /* css-3 */ - word-wrap: break-word; /* Internet Explorer 5.5+ */ - word-break: break-all; - white-space: normal; + white-space: pre-wrap; } #commentsTabView .comment.collapsed .message { @@ -80,17 +96,24 @@ } #commentsTabView .comment .authorRow { - margin-bottom: 5px; position: relative; } +#commentsTabView .comment .author, +#commentsTabView .comment .date { + opacity: .5; +} #commentsTabView .comment .author { - font-weight: bold; + margin-left: 5px; } - #commentsTabView .comment .date { position: absolute; right: 0; + top: 5px; +} + +#commentsTabView .comments li .message { + padding-left: 40px; } #commentsTabView .comment .action { diff --git a/apps/comments/img/comments.svg b/apps/comments/img/comments.svg index 5cdc84a25d7..1eabeec3347 100644 --- a/apps/comments/img/comments.svg +++ b/apps/comments/img/comments.svg @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.1"> +<svg xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.1" viewBox="0 0 32 32"> <path fill="#fff" d="m16 3c-8.8366 0-16 4.9248-16 11s7.1634 11 16 11c0.49926 0 0.98116-0.03174 1.4688-0.0625l8.5312 7.062v-9.406c3.658-2.016 6-5.1198 6-8.594 0-6.0752-7.164-11-16-11z"/> </svg> diff --git a/apps/comments/js/commentstabview.js b/apps/comments/js/commentstabview.js index f71567f04d1..eae18c1d485 100644 --- a/apps/comments/js/commentstabview.js +++ b/apps/comments/js/commentstabview.js @@ -14,7 +14,8 @@ var TEMPLATE = '<ul class="comments">' + '</ul>' + - '<div class="empty hidden">{{emptyResultLabel}}</div>' + + '<div class="emptycontent hidden"><div class="icon-comment"></div>' + + '<p>{{emptyResultLabel}}</p></div>' + '<input type="button" class="showMore hidden" value="{{moreLabel}}"' + ' name="show-more" id="show-more" />' + '<div class="loading hidden" style="height: 50px"></div>'; @@ -31,10 +32,10 @@ '{{/if}}' + ' </div>' + ' <form class="newCommentForm">' + - ' <textarea class="message" placeholder="{{newMessagePlaceholder}}">{{{message}}}</textarea>' + - ' <input class="submit" type="submit" value="{{submitText}}" />' + + ' <input type="text" class="message" placeholder="{{newMessagePlaceholder}}" value="{{message}}" />' + + ' <input class="submit icon-confirm" type="submit" value="" />' + '{{#if isEditMode}}' + - ' <input class="cancel" type="button" value="{{cancelText}}" />' + + ' <input class="cancel pull-right" type="button" value="{{cancelText}}" />' + '{{/if}}' + ' <div class="submitLoading icon-loading-small hidden"></div>'+ ' </form>' + @@ -113,7 +114,7 @@ avatarEnabled: this._avatarsEnabled, actorId: currentUser.uid, actorDisplayName: currentUser.displayName, - newMessagePlaceholder: t('comments', 'Type in a new comment...'), + newMessagePlaceholder: t('comments', 'New comment …'), deleteTooltip: t('comments', 'Delete comment'), submitText: t('comments', 'Post'), cancelText: t('comments', 'Cancel') @@ -162,17 +163,17 @@ render: function() { this.$el.html(this.template({ - emptyResultLabel: t('comments', 'No other comments available'), - moreLabel: t('comments', 'More comments...') + emptyResultLabel: t('comments', 'No comments yet, start the conversation!'), + moreLabel: t('comments', 'More comments …') })); this.$el.find('.comments').before(this.editCommentTemplate({})); this.$el.find('.has-tooltip').tooltip(); this.$container = this.$el.find('ul.comments'); if (this._avatarsEnabled) { - this.$el.find('.avatar').avatar(OC.getCurrentUser().uid, 28); + this.$el.find('.avatar').avatar(OC.getCurrentUser().uid, 32); } this.delegateEvents(); - this.$el.find('textarea').on('keydown input change', this._onTypeComment); + this.$el.find('.message').on('keydown input change', this._onTypeComment); }, _formatItem: function(commentModel) { @@ -200,7 +201,7 @@ _onEndRequest: function(type) { var fileInfoModel = this.model; this._toggleLoading(false); - this.$el.find('.empty').toggleClass('hidden', !!this.collection.length); + this.$el.find('.emptycontent').toggleClass('hidden', !!this.collection.length); this.$el.find('.showMore').toggleClass('hidden', !this.collection.hasMoreResults()); if (type !== 'REPORT') { @@ -238,7 +239,7 @@ if(this._avatarsEnabled) { $el.find('.avatar').each(function() { var $this = $(this); - $this.avatar($this.attr('data-username'), 28); + $this.avatar($this.attr('data-username'), 32); }); } }, @@ -360,7 +361,7 @@ var currentUser = OC.getCurrentUser(); var $submit = $form.find('.submit'); var $loading = $form.find('.submitLoading'); - var $textArea = $form.find('textarea'); + var $textArea = $form.find('.message'); var message = $textArea.val().trim(); e.preventDefault(); @@ -437,4 +438,3 @@ OCA.Comments.CommentsTabView = CommentsTabView; })(OC, OCA); - diff --git a/apps/comments/l10n/cs_CZ.js b/apps/comments/l10n/cs_CZ.js index 0653209616c..9a1e18950d2 100644 --- a/apps/comments/l10n/cs_CZ.js +++ b/apps/comments/l10n/cs_CZ.js @@ -21,6 +21,7 @@ OC.L10N.register( "You commented" : "Okomentoval(a) jsi", "%1$s commented" : "%1$s okomentován", "You commented on %2$s" : "Okomentoval(a) jsi %2$s", - "%1$s commented on %2$s" : "%1$s okomentoval %2$s" + "%1$s commented on %2$s" : "%1$s okomentoval %2$s", + "<strong>Comments</strong> for files" : "<strong>Komentáře</strong> souborů" }, "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/apps/comments/l10n/cs_CZ.json b/apps/comments/l10n/cs_CZ.json index efdd227bfb7..9d6e796907c 100644 --- a/apps/comments/l10n/cs_CZ.json +++ b/apps/comments/l10n/cs_CZ.json @@ -19,6 +19,7 @@ "You commented" : "Okomentoval(a) jsi", "%1$s commented" : "%1$s okomentován", "You commented on %2$s" : "Okomentoval(a) jsi %2$s", - "%1$s commented on %2$s" : "%1$s okomentoval %2$s" + "%1$s commented on %2$s" : "%1$s okomentoval %2$s", + "<strong>Comments</strong> for files" : "<strong>Komentáře</strong> souborů" },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/comments/l10n/de.js b/apps/comments/l10n/de.js index 34a839ab484..c6c98114bde 100644 --- a/apps/comments/l10n/de.js +++ b/apps/comments/l10n/de.js @@ -21,6 +21,7 @@ OC.L10N.register( "You commented" : "Von Dir kommentiert", "%1$s commented" : "%1$s kommentiert", "You commented on %2$s" : "Du hast %2$s kommentiert", - "%1$s commented on %2$s" : "%1$s kommentierte %2$s" + "%1$s commented on %2$s" : "%1$s kommentierte %2$s", + "<strong>Comments</strong> for files" : "<strong>Kommentare</strong> für Dateien" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/comments/l10n/de.json b/apps/comments/l10n/de.json index d9c5309196c..8a37f001b19 100644 --- a/apps/comments/l10n/de.json +++ b/apps/comments/l10n/de.json @@ -19,6 +19,7 @@ "You commented" : "Von Dir kommentiert", "%1$s commented" : "%1$s kommentiert", "You commented on %2$s" : "Du hast %2$s kommentiert", - "%1$s commented on %2$s" : "%1$s kommentierte %2$s" + "%1$s commented on %2$s" : "%1$s kommentierte %2$s", + "<strong>Comments</strong> for files" : "<strong>Kommentare</strong> für Dateien" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/comments/l10n/de_DE.js b/apps/comments/l10n/de_DE.js index bbddac44a10..93ed87318b6 100644 --- a/apps/comments/l10n/de_DE.js +++ b/apps/comments/l10n/de_DE.js @@ -21,6 +21,7 @@ OC.L10N.register( "You commented" : "Sie haben kommentiert", "%1$s commented" : "%1$s kommentierte", "You commented on %2$s" : "Sie haben %2$s kommentiert", - "%1$s commented on %2$s" : "%1$s kommentierte %2$s" + "%1$s commented on %2$s" : "%1$s kommentierte %2$s", + "<strong>Comments</strong> for files" : "<strong>Kommentare</strong> für Dateien" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/comments/l10n/de_DE.json b/apps/comments/l10n/de_DE.json index a8ff860a17f..b75e849a34b 100644 --- a/apps/comments/l10n/de_DE.json +++ b/apps/comments/l10n/de_DE.json @@ -19,6 +19,7 @@ "You commented" : "Sie haben kommentiert", "%1$s commented" : "%1$s kommentierte", "You commented on %2$s" : "Sie haben %2$s kommentiert", - "%1$s commented on %2$s" : "%1$s kommentierte %2$s" + "%1$s commented on %2$s" : "%1$s kommentierte %2$s", + "<strong>Comments</strong> for files" : "<strong>Kommentare</strong> für Dateien" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/comments/l10n/fr.js b/apps/comments/l10n/fr.js index adb5bc00c1c..ddea1138922 100644 --- a/apps/comments/l10n/fr.js +++ b/apps/comments/l10n/fr.js @@ -21,6 +21,7 @@ OC.L10N.register( "You commented" : "Vous avez commenté", "%1$s commented" : "%1$s a commenté", "You commented on %2$s" : "Vous avez commenté %2$s", - "%1$s commented on %2$s" : "%1$s a commenté %2$s" + "%1$s commented on %2$s" : "%1$s a commenté %2$s", + "<strong>Comments</strong> for files" : "<strong>Commentaires</strong> pour les fichiers" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/comments/l10n/fr.json b/apps/comments/l10n/fr.json index 9a7dce480c8..0fd30da94ad 100644 --- a/apps/comments/l10n/fr.json +++ b/apps/comments/l10n/fr.json @@ -19,6 +19,7 @@ "You commented" : "Vous avez commenté", "%1$s commented" : "%1$s a commenté", "You commented on %2$s" : "Vous avez commenté %2$s", - "%1$s commented on %2$s" : "%1$s a commenté %2$s" + "%1$s commented on %2$s" : "%1$s a commenté %2$s", + "<strong>Comments</strong> for files" : "<strong>Commentaires</strong> pour les fichiers" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/comments/l10n/is.js b/apps/comments/l10n/is.js index f32e49d37c5..3036d572db6 100644 --- a/apps/comments/l10n/is.js +++ b/apps/comments/l10n/is.js @@ -21,6 +21,7 @@ OC.L10N.register( "You commented" : "Þú settir inn athugasemd", "%1$s commented" : "%1$s setti inn athugasemd", "You commented on %2$s" : "Þú settir inn athugasemd við %2$s", - "%1$s commented on %2$s" : "%1$s setti inn athugasemd um %2$s" + "%1$s commented on %2$s" : "%1$s setti inn athugasemd um %2$s", + "<strong>Comments</strong> for files" : "<strong>Athugasemdir</strong> við skrár" }, "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/apps/comments/l10n/is.json b/apps/comments/l10n/is.json index c70a192f529..3e91e4ecc48 100644 --- a/apps/comments/l10n/is.json +++ b/apps/comments/l10n/is.json @@ -19,6 +19,7 @@ "You commented" : "Þú settir inn athugasemd", "%1$s commented" : "%1$s setti inn athugasemd", "You commented on %2$s" : "Þú settir inn athugasemd við %2$s", - "%1$s commented on %2$s" : "%1$s setti inn athugasemd um %2$s" + "%1$s commented on %2$s" : "%1$s setti inn athugasemd um %2$s", + "<strong>Comments</strong> for files" : "<strong>Athugasemdir</strong> við skrár" },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" }
\ No newline at end of file diff --git a/apps/comments/l10n/it.js b/apps/comments/l10n/it.js index ae514ece113..6e3b03d9a78 100644 --- a/apps/comments/l10n/it.js +++ b/apps/comments/l10n/it.js @@ -21,6 +21,7 @@ OC.L10N.register( "You commented" : "Hai commentato", "%1$s commented" : "%1$s ha commentato", "You commented on %2$s" : "Hai commentato su %2$s", - "%1$s commented on %2$s" : "%1$s ha commentato %2$s" + "%1$s commented on %2$s" : "%1$s ha commentato %2$s", + "<strong>Comments</strong> for files" : "<strong>Commenti</strong> sui file" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/comments/l10n/it.json b/apps/comments/l10n/it.json index 20ff98ed181..9c260ffe447 100644 --- a/apps/comments/l10n/it.json +++ b/apps/comments/l10n/it.json @@ -19,6 +19,7 @@ "You commented" : "Hai commentato", "%1$s commented" : "%1$s ha commentato", "You commented on %2$s" : "Hai commentato su %2$s", - "%1$s commented on %2$s" : "%1$s ha commentato %2$s" + "%1$s commented on %2$s" : "%1$s ha commentato %2$s", + "<strong>Comments</strong> for files" : "<strong>Commenti</strong> sui file" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/comments/l10n/pt_BR.js b/apps/comments/l10n/pt_BR.js index 0ba0bf5de0c..19efa9e725a 100644 --- a/apps/comments/l10n/pt_BR.js +++ b/apps/comments/l10n/pt_BR.js @@ -21,6 +21,7 @@ OC.L10N.register( "You commented" : "Você comentou", "%1$s commented" : "%1$s comentado", "You commented on %2$s" : "Você comentou em %2$s", - "%1$s commented on %2$s" : "%1$s comentado em %2$s" + "%1$s commented on %2$s" : "%1$s comentado em %2$s", + "<strong>Comments</strong> for files" : "<strong>Comentários</strong> para arquivos" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/comments/l10n/pt_BR.json b/apps/comments/l10n/pt_BR.json index 23b04029d3b..f250472d987 100644 --- a/apps/comments/l10n/pt_BR.json +++ b/apps/comments/l10n/pt_BR.json @@ -19,6 +19,7 @@ "You commented" : "Você comentou", "%1$s commented" : "%1$s comentado", "You commented on %2$s" : "Você comentou em %2$s", - "%1$s commented on %2$s" : "%1$s comentado em %2$s" + "%1$s commented on %2$s" : "%1$s comentado em %2$s", + "<strong>Comments</strong> for files" : "<strong>Comentários</strong> para arquivos" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/comments/lib/Activity/Extension.php b/apps/comments/lib/Activity/Extension.php index 6e5ac894c0f..0a7503c1915 100644 --- a/apps/comments/lib/Activity/Extension.php +++ b/apps/comments/lib/Activity/Extension.php @@ -82,8 +82,8 @@ class Extension implements IExtension { return array( self::APP_NAME => [ - 'desc' => (string) $l->t('<strong>Comments</strong> for files <em>(always listed in stream)</em>'), - 'methods' => [self::METHOD_MAIL], // self::METHOD_STREAM is forced true by the default value + 'desc' => (string) $l->t('<strong>Comments</strong> for files'), + 'methods' => [self::METHOD_MAIL, self::METHOD_STREAM], ], ); } @@ -278,11 +278,7 @@ class Extension implements IExtension { */ public function filterNotificationTypes($types, $filter) { if ($filter === self::APP_NAME) { - return [self::APP_NAME]; - } - if (in_array($filter, ['all', 'by', 'self', 'filter'])) { - $types[] = self::APP_NAME; - return $types; + return array_intersect($types, [self::APP_NAME]); } return false; } diff --git a/apps/comments/tests/js/commentstabviewSpec.js b/apps/comments/tests/js/commentstabviewSpec.js index 70930da7520..33c959e430f 100644 --- a/apps/comments/tests/js/commentstabviewSpec.js +++ b/apps/comments/tests/js/commentstabviewSpec.js @@ -328,12 +328,12 @@ describe('OCA.Comments.CommentsTabView tests', function() { var $formRow = view.$el.find('.newCommentRow.comment[data-id=1]'); expect($formRow.length).toEqual(1); - $formRow.find('textarea').val('modified\nmessage'); + $formRow.find('input').val('modified message'); $formRow.find('form').submit(); expect(saveStub.calledOnce).toEqual(true); expect(saveStub.lastCall.args[0]).toEqual({ - message: 'modified\nmessage' + message: 'modified message' }); var model = view.collection.get(1); diff --git a/apps/dav/appinfo/v1/caldav.php b/apps/dav/appinfo/v1/caldav.php index 490f4477a7b..13b4d3119ca 100644 --- a/apps/dav/appinfo/v1/caldav.php +++ b/apps/dav/appinfo/v1/caldav.php @@ -46,7 +46,7 @@ $principalBackend = new Principal( 'principals/' ); $db = \OC::$server->getDatabaseConnection(); -$calDavBackend = new CalDavBackend($db, $principalBackend); +$calDavBackend = new CalDavBackend($db, $principalBackend, \OC::$server->getUserManager()); $debugging = \OC::$server->getConfig()->getSystemValue('debug', false); diff --git a/apps/dav/appinfo/v1/carddav.php b/apps/dav/appinfo/v1/carddav.php index 005946830ae..e379707807f 100644 --- a/apps/dav/appinfo/v1/carddav.php +++ b/apps/dav/appinfo/v1/carddav.php @@ -48,7 +48,7 @@ $principalBackend = new Principal( 'principals/' ); $db = \OC::$server->getDatabaseConnection(); -$cardDavBackend = new CardDavBackend($db, $principalBackend); +$cardDavBackend = new CardDavBackend($db, $principalBackend, \OC::$server->getUserManager()); $debugging = \OC::$server->getConfig()->getSystemValue('debug', false); diff --git a/apps/dav/lib/AppInfo/Application.php b/apps/dav/lib/AppInfo/Application.php index fa9d6e29fde..17145847fa1 100644 --- a/apps/dav/lib/AppInfo/Application.php +++ b/apps/dav/lib/AppInfo/Application.php @@ -87,7 +87,7 @@ class Application extends App { $c->getServer()->getUserManager(), $c->getServer()->getGroupManager() ); - return new CardDavBackend($db, $principal, $dispatcher); + return new CardDavBackend($db, $principal, $c->getServer()->getUserManager(), $dispatcher); }); $container->registerService('CalDavBackend', function($c) { @@ -97,7 +97,7 @@ class Application extends App { $c->getServer()->getUserManager(), $c->getServer()->getGroupManager() ); - return new CalDavBackend($db, $principal); + return new CalDavBackend($db, $principal, $c->getServer()->getUserManager()); }); $container->registerService('BirthdayService', function($c) { diff --git a/apps/dav/lib/CalDAV/CalDavBackend.php b/apps/dav/lib/CalDAV/CalDavBackend.php index 1f337ab0143..ea5c09939a6 100644 --- a/apps/dav/lib/CalDAV/CalDavBackend.php +++ b/apps/dav/lib/CalDAV/CalDavBackend.php @@ -30,6 +30,8 @@ use OCP\DB\QueryBuilder\IQueryBuilder; use OCA\DAV\Connector\Sabre\Principal; use OCA\DAV\DAV\Sharing\Backend; use OCP\IDBConnection; +use OCP\IUser; +use OCP\IUserManager; use Sabre\CalDAV\Backend\AbstractBackend; use Sabre\CalDAV\Backend\SchedulingSupport; use Sabre\CalDAV\Backend\SubscriptionSupport; @@ -99,6 +101,11 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription '{http://calendarserver.org/ns/}subscribed-strip-attachments' => 'stripattachments', ]; + /** + * @var string[] Map of uid => display name + */ + protected $userDisplayNames; + /** @var IDBConnection */ private $db; @@ -108,15 +115,20 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription /** @var Principal */ private $principalBackend; + /** @var IUserManager */ + private $userManager; + /** * CalDavBackend constructor. * * @param IDBConnection $db * @param Principal $principalBackend + * @param IUserManager $userManager */ - public function __construct(IDBConnection $db, Principal $principalBackend) { + public function __construct(IDBConnection $db, Principal $principalBackend, IUserManager $userManager) { $this->db = $db; $this->principalBackend = $principalBackend; + $this->userManager = $userManager; $this->sharingBackend = new Backend($this->db, $principalBackend, 'calendar'); } @@ -217,7 +229,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription while($row = $result->fetch()) { list(, $name) = URLUtil::splitPath($row['principaluri']); $uri = $row['uri'] . '_shared_by_' . $name; - $row['displayname'] = $row['displayname'] . "($name)"; + $row['displayname'] = $row['displayname'] . ' (' . $this->getUserDisplayName($name) . ')'; $components = []; if ($row['components']) { $components = explode(',',$row['components']); @@ -247,6 +259,20 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription return array_values($calendars); } + private function getUserDisplayName($uid) { + if (!isset($this->userDisplayNames[$uid])) { + $user = $this->userManager->get($uid); + + if ($user instanceof IUser) { + $this->userDisplayNames[$uid] = $user->getDisplayName(); + } else { + $this->userDisplayNames[$uid] = $uid; + } + } + + return $this->userDisplayNames[$uid]; + } + /** * @param string $principal * @param string $uri diff --git a/apps/dav/lib/CardDAV/AddressBookImpl.php b/apps/dav/lib/CardDAV/AddressBookImpl.php index c83ee613d37..9de54eec33d 100644 --- a/apps/dav/lib/CardDAV/AddressBookImpl.php +++ b/apps/dav/lib/CardDAV/AddressBookImpl.php @@ -28,6 +28,7 @@ use OCP\Constants; use OCP\IAddressBook; use OCP\IURLGenerator; use Sabre\VObject\Component\VCard; +use Sabre\VObject\Property; use Sabre\VObject\Property\Text; use Sabre\VObject\Reader; use Sabre\VObject\UUIDUtil; @@ -225,7 +226,7 @@ class AddressBookImpl implements IAddressBook { ]; foreach ($vCard->children as $property) { - $result[$property->name] = $property->getValue(); + /** @var \Sabre\VObject\Property\Unknown $property */ if ($property->name === 'PHOTO' && $property->getValueType() === 'BINARY') { $url = $this->urlGenerator->getAbsoluteURL( $this->urlGenerator->linkTo('', 'remote.php') . '/dav/'); @@ -237,14 +238,53 @@ class AddressBookImpl implements IAddressBook { ]) . '?photo'; $result['PHOTO'] = 'VALUE=uri:' . $url; + + } else if ($property->name === 'X-SOCIALPROFILE') { + $type = $this->getTypeFromProperty($property); + + // Type is the social network, when it's empty we don't need this. + if ($type !== null) { + if (!isset($result[$property->name])) { + $result[$property->name] = []; + } + $result[$property->name][$type] = $property->getValue(); + } + + // The following properties can be set multiple times + } else if (in_array($property->name, ['CLOUD', 'EMAIL', 'IMPP', 'TEL', 'URL'])) { + if (!isset($result[$property->name])) { + $result[$property->name] = []; + } + + $result[$property->name][] = $property->getValue(); + } else { $result[$property->name] = $property->getValue(); } } + if ($this->addressBookInfo['principaluri'] === 'principals/system/system' && $this->addressBookInfo['uri'] === 'system') { $result['isLocalSystemBook'] = true; } return $result; } + + /** + * Get the type of the current property + * + * @param Property $property + * @return null|string + */ + protected function getTypeFromProperty(Property $property) { + $parameters = $property->parameters(); + // Type is the social network, when it's empty we don't need this. + if (isset($parameters['TYPE'])) { + /** @var \Sabre\VObject\Parameter $type */ + $type = $parameters['TYPE']; + return $type->getValue(); + } + + return null; + } } diff --git a/apps/dav/lib/CardDAV/CardDavBackend.php b/apps/dav/lib/CardDAV/CardDavBackend.php index f8552f1323e..f6d80dfe701 100644 --- a/apps/dav/lib/CardDAV/CardDavBackend.php +++ b/apps/dav/lib/CardDAV/CardDavBackend.php @@ -33,6 +33,8 @@ use OCP\DB\QueryBuilder\IQueryBuilder; use OCA\DAV\DAV\Sharing\Backend; use OCA\DAV\DAV\Sharing\IShareable; use OCP\IDBConnection; +use OCP\IUser; +use OCP\IUserManager; use PDO; use Sabre\CardDAV\Backend\BackendInterface; use Sabre\CardDAV\Backend\SyncSupport; @@ -66,6 +68,14 @@ class CardDavBackend implements BackendInterface, SyncSupport { 'BDAY', 'UID', 'N', 'FN', 'TITLE', 'ROLE', 'NOTE', 'NICKNAME', 'ORG', 'CATEGORIES', 'EMAIL', 'TEL', 'IMPP', 'ADR', 'URL', 'GEO', 'CLOUD'); + /** + * @var string[] Map of uid => display name + */ + protected $userDisplayNames; + + /** @var IUserManager */ + private $userManager; + /** @var EventDispatcherInterface */ private $dispatcher; @@ -74,13 +84,16 @@ class CardDavBackend implements BackendInterface, SyncSupport { * * @param IDBConnection $db * @param Principal $principalBackend + * @param IUserManager $userManager * @param EventDispatcherInterface $dispatcher */ public function __construct(IDBConnection $db, Principal $principalBackend, + IUserManager $userManager, EventDispatcherInterface $dispatcher = null) { $this->db = $db; $this->principalBackend = $principalBackend; + $this->userManager = $userManager; $this->dispatcher = $dispatcher; $this->sharingBackend = new Backend($this->db, $principalBackend, 'addressbook'); } @@ -143,7 +156,7 @@ class CardDavBackend implements BackendInterface, SyncSupport { while($row = $result->fetch()) { list(, $name) = URLUtil::splitPath($row['principaluri']); $uri = $row['uri'] . '_shared_by_' . $name; - $displayName = $row['displayname'] . "($name)"; + $displayName = $row['displayname'] . ' (' . $this->getUserDisplayName($name) . ')'; if (!isset($addressBooks[$row['id']])) { $addressBooks[$row['id']] = [ 'id' => $row['id'], @@ -163,6 +176,20 @@ class CardDavBackend implements BackendInterface, SyncSupport { return array_values($addressBooks); } + private function getUserDisplayName($uid) { + if (!isset($this->userDisplayNames[$uid])) { + $user = $this->userManager->get($uid); + + if ($user instanceof IUser) { + $this->userDisplayNames[$uid] = $user->getDisplayName(); + } else { + $this->userDisplayNames[$uid] = $uid; + } + } + + return $this->userDisplayNames[$uid]; + } + /** * @param int $addressBookId */ diff --git a/apps/dav/lib/Command/CreateCalendar.php b/apps/dav/lib/Command/CreateCalendar.php index 7d07ad03279..0bc6398250e 100644 --- a/apps/dav/lib/Command/CreateCalendar.php +++ b/apps/dav/lib/Command/CreateCalendar.php @@ -76,7 +76,7 @@ class CreateCalendar extends Command { ); $name = $input->getArgument('name'); - $caldav = new CalDavBackend($this->dbConnection, $principalBackend); + $caldav = new CalDavBackend($this->dbConnection, $principalBackend, $this->userManager); $caldav->createCalendar("principals/users/$user", $name, []); } } diff --git a/apps/dav/lib/Comments/CommentsPlugin.php b/apps/dav/lib/Comments/CommentsPlugin.php index f3cf4fb2030..9b496ccf6e5 100644 --- a/apps/dav/lib/Comments/CommentsPlugin.php +++ b/apps/dav/lib/Comments/CommentsPlugin.php @@ -149,7 +149,7 @@ class CommentsPlugin extends ServerPlugin { * REPORT operations to look for comments * * @param string $reportName - * @param [] $report + * @param array $report * @param string $uri * @return bool * @throws NotFound diff --git a/apps/dav/lib/Connector/Sabre/Auth.php b/apps/dav/lib/Connector/Sabre/Auth.php index bd80b17b640..a35eed88073 100644 --- a/apps/dav/lib/Connector/Sabre/Auth.php +++ b/apps/dav/lib/Connector/Sabre/Auth.php @@ -224,7 +224,7 @@ class Auth extends AbstractBasic { if($forcedLogout) { $this->userSession->logout(); } else { - if ($this->twoFactorManager->needsSecondFactor()) { + if($this->twoFactorManager->needsSecondFactor($this->userSession->getUser())) { throw new \Sabre\DAV\Exception\NotAuthenticated('2FA challenge not passed.'); } if (\OC_User::handleApacheAuth() || diff --git a/apps/dav/lib/Connector/Sabre/FilesPlugin.php b/apps/dav/lib/Connector/Sabre/FilesPlugin.php index c472f75b6bf..dd5f958ed4c 100644 --- a/apps/dav/lib/Connector/Sabre/FilesPlugin.php +++ b/apps/dav/lib/Connector/Sabre/FilesPlugin.php @@ -324,18 +324,13 @@ class FilesPlugin extends ServerPlugin { return $displayName; }); - $propFind->handle(self::DATA_FINGERPRINT_PROPERTYNAME, function() use ($node) { - if ($node->getPath() === '/') { - return $this->config->getSystemValue('data-fingerprint', ''); - } - }); - $propFind->handle(self::HAS_PREVIEW_PROPERTYNAME, function () use ($node) { return json_encode($this->previewManager->isAvailable($node->getFileInfo())); }); } - if ($node instanceof \OCA\DAV\Files\FilesHome) { + if ($node instanceof \OCA\DAV\Connector\Sabre\Node + || $node instanceof \OCA\DAV\Files\FilesHome) { $propFind->handle(self::DATA_FINGERPRINT_PROPERTYNAME, function() use ($node) { return $this->config->getSystemValue('data-fingerprint', ''); }); diff --git a/apps/dav/lib/Connector/Sabre/ServerFactory.php b/apps/dav/lib/Connector/Sabre/ServerFactory.php index 55b967619d6..644f0f28f57 100644 --- a/apps/dav/lib/Connector/Sabre/ServerFactory.php +++ b/apps/dav/lib/Connector/Sabre/ServerFactory.php @@ -29,6 +29,7 @@ namespace OCA\DAV\Connector\Sabre; +use OC\Files\Node\Folder; use OCA\DAV\Files\BrowserErrorPagePlugin; use OCP\Files\Mount\IMountManager; use OCP\IConfig; @@ -135,7 +136,11 @@ class ServerFactory { /** @var \OC\Files\View $view */ $view = $viewCallBack($server); - $rootInfo = $view->getFileInfo(''); + if ($userFolder instanceof Folder && $userFolder->getPath() === $view->getRoot()) { + $rootInfo = $userFolder; + } else { + $rootInfo = $view->getFileInfo(''); + } // Create ownCloud Dir if ($rootInfo->getType() === 'dir') { diff --git a/apps/dav/lib/RootCollection.php b/apps/dav/lib/RootCollection.php index 16df85d8146..974d08bc34f 100644 --- a/apps/dav/lib/RootCollection.php +++ b/apps/dav/lib/RootCollection.php @@ -59,7 +59,7 @@ class RootCollection extends SimpleCollection { $systemPrincipals->disableListing = $disableListing; $filesCollection = new Files\RootCollection($userPrincipalBackend, 'principals/users'); $filesCollection->disableListing = $disableListing; - $caldavBackend = new CalDavBackend($db, $userPrincipalBackend); + $caldavBackend = new CalDavBackend($db, $userPrincipalBackend, \OC::$server->getUserManager()); $calendarRoot = new CalendarRoot($userPrincipalBackend, $caldavBackend, 'principals/users'); $calendarRoot->disableListing = $disableListing; @@ -83,11 +83,11 @@ class RootCollection extends SimpleCollection { \OC::$server->getLogger() ); - $usersCardDavBackend = new CardDavBackend($db, $userPrincipalBackend, $dispatcher); + $usersCardDavBackend = new CardDavBackend($db, $userPrincipalBackend, \OC::$server->getUserManager(), $dispatcher); $usersAddressBookRoot = new AddressBookRoot($userPrincipalBackend, $usersCardDavBackend, 'principals/users'); $usersAddressBookRoot->disableListing = $disableListing; - $systemCardDavBackend = new CardDavBackend($db, $userPrincipalBackend, $dispatcher); + $systemCardDavBackend = new CardDavBackend($db, $userPrincipalBackend, \OC::$server->getUserManager(), $dispatcher); $systemAddressBookRoot = new AddressBookRoot(new SystemPrincipalBackend(), $systemCardDavBackend, 'principals/system'); $systemAddressBookRoot->disableListing = $disableListing; diff --git a/apps/dav/tests/travis/caldav/install.sh b/apps/dav/tests/travis/caldav/install.sh index 9688ec660de..e0ac30c9e46 100644 --- a/apps/dav/tests/travis/caldav/install.sh +++ b/apps/dav/tests/travis/caldav/install.sh @@ -3,12 +3,12 @@ SCRIPT=`realpath $0` SCRIPTPATH=`dirname $SCRIPT` -if [ ! -f CalDAVTester/run.py ]; then - cd "$SCRIPTPATH" - git clone https://github.com/DeepDiver1975/CalDAVTester.git - cd "$SCRIPTPATH/CalDAVTester" - python run.py -s - cd "$SCRIPTPATH" +cd "$SCRIPTPATH" +if [ ! -f CalDAVTester/testcaldav.py ]; then + git clone https://github.com/apple/ccs-caldavtester.git CalDAVTester +fi +if [ ! -f pycalendar/setup.py ]; then + git clone https://github.com/apple/ccs-pycalendar.git pycalendar fi # create test user diff --git a/apps/dav/tests/travis/carddav/install.sh b/apps/dav/tests/travis/carddav/install.sh index fa5d141ce0d..db8b53bc861 100644 --- a/apps/dav/tests/travis/carddav/install.sh +++ b/apps/dav/tests/travis/carddav/install.sh @@ -3,12 +3,12 @@ SCRIPT=`realpath $0` SCRIPTPATH=`dirname $SCRIPT` -if [ ! -f CalDAVTester/run.py ]; then - cd "$SCRIPTPATH" - git clone https://github.com/DeepDiver1975/CalDAVTester.git - cd "$SCRIPTPATH/CalDAVTester" - python run.py -s - cd "$SCRIPTPATH" +cd "$SCRIPTPATH" +if [ ! -f CalDAVTester/testcaldav.py ]; then + git clone https://github.com/apple/ccs-caldavtester.git CalDAVTester +fi +if [ ! -f pycalendar/setup.py ]; then + git clone https://github.com/apple/ccs-pycalendar.git pycalendar fi # create test user diff --git a/apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.php b/apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.php index 2b7424272e2..0e2e1b0ee51 100644 --- a/apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.php +++ b/apps/dav/tests/unit/CalDAV/AbstractCalDavBackendTest.php @@ -49,6 +49,9 @@ abstract class AbstractCalDavBackendTest extends TestCase { /** @var Principal | \PHPUnit_Framework_MockObject_MockObject */ protected $principal; + /** @var \OCP\IUserManager|\PHPUnit_Framework_MockObject_MockObject */ + protected $userManager; + const UNIT_TEST_USER = 'principals/users/caldav-unit-test'; const UNIT_TEST_USER1 = 'principals/users/caldav-unit-test1'; const UNIT_TEST_GROUP = 'principals/groups/caldav-unit-test-group'; @@ -56,6 +59,9 @@ abstract class AbstractCalDavBackendTest extends TestCase { public function setUp() { parent::setUp(); + $this->userManager = $this->getMockBuilder('OCP\IUserManager') + ->disableOriginalConstructor() + ->getMock(); $this->principal = $this->getMockBuilder('OCA\DAV\Connector\Sabre\Principal') ->disableOriginalConstructor() ->setMethods(['getPrincipalByPath', 'getGroupMembership']) @@ -69,7 +75,7 @@ abstract class AbstractCalDavBackendTest extends TestCase { ->willReturn([self::UNIT_TEST_GROUP]); $db = \OC::$server->getDatabaseConnection(); - $this->backend = new CalDavBackend($db, $this->principal); + $this->backend = new CalDavBackend($db, $this->principal, $this->userManager); $this->tearDown(); } diff --git a/apps/dav/tests/unit/CardDAV/AddressBookImplTest.php b/apps/dav/tests/unit/CardDAV/AddressBookImplTest.php index ba8527dc76e..fa3cae27dec 100644 --- a/apps/dav/tests/unit/CardDAV/AddressBookImplTest.php +++ b/apps/dav/tests/unit/CardDAV/AddressBookImplTest.php @@ -60,7 +60,9 @@ class AddressBookImplTest extends TestCase { $this->addressBookInfo = [ 'id' => 42, - '{DAV:}displayname' => 'display name' + 'uri' => 'system', + 'principaluri' => 'principals/system/system', + '{DAV:}displayname' => 'display name', ]; $this->addressBook = $this->getMockBuilder('OCA\DAV\CardDAV\AddressBook') ->disableOriginalConstructor()->getMock(); @@ -306,4 +308,65 @@ class AddressBookImplTest extends TestCase { $this->assertSame($expectedVCardSerialized, $resultSerialized); } + public function testVCard2Array() { + $vCard = new VCard(); + + $vCard->add($vCard->createProperty('FN', 'Full Name')); + + // Multi-value properties + $vCard->add($vCard->createProperty('CLOUD', 'cloud-user1@localhost')); + $vCard->add($vCard->createProperty('CLOUD', 'cloud-user2@example.tld')); + $vCard->add($vCard->createProperty('EMAIL', 'email-user1@localhost')); + $vCard->add($vCard->createProperty('EMAIL', 'email-user2@example.tld')); + $vCard->add($vCard->createProperty('IMPP', 'impp-user1@localhost')); + $vCard->add($vCard->createProperty('IMPP', 'impp-user2@example.tld')); + $vCard->add($vCard->createProperty('TEL', '+49 123456789')); + $vCard->add($vCard->createProperty('TEL', '+1 555 123456789')); + $vCard->add($vCard->createProperty('URL', 'https://localhost')); + $vCard->add($vCard->createProperty('URL', 'https://example.tld')); + + // Type depending properties + $property = $vCard->createProperty('X-SOCIALPROFILE', 'tw-example'); + $property->add('TYPE', 'twitter'); + $vCard->add($property); + $property = $vCard->createProperty('X-SOCIALPROFILE', 'fb-example'); + $property->add('TYPE', 'facebook'); + $vCard->add($property); + + $array = $this->invokePrivate($this->addressBookImpl, 'vCard2Array', ['uri', $vCard]); + unset($array['PRODID']); + + $this->assertEquals([ + 'URI' => 'uri', + 'VERSION' => '3.0', + 'FN' => 'Full Name', + 'CLOUD' => [ + 'cloud-user1@localhost', + 'cloud-user2@example.tld', + ], + 'EMAIL' => [ + 'email-user1@localhost', + 'email-user2@example.tld', + ], + 'IMPP' => [ + 'impp-user1@localhost', + 'impp-user2@example.tld', + ], + 'TEL' => [ + '+49 123456789', + '+1 555 123456789', + ], + 'URL' => [ + 'https://localhost', + 'https://example.tld', + ], + + 'X-SOCIALPROFILE' => [ + 'twitter'=> 'tw-example', + 'facebook'=> 'fb-example', + ], + + 'isLocalSystemBook' => true, + ], $array); + } } diff --git a/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php b/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php index f74d12f6658..bbeadf81277 100644 --- a/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php +++ b/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php @@ -53,6 +53,9 @@ class CardDavBackendTest extends TestCase { /** @var Principal | \PHPUnit_Framework_MockObject_MockObject */ private $principal; + /** @var \OCP\IUserManager|\PHPUnit_Framework_MockObject_MockObject */ + private $userManager; + /** @var IDBConnection */ private $db; @@ -69,6 +72,9 @@ class CardDavBackendTest extends TestCase { public function setUp() { parent::setUp(); + $this->userManager = $this->getMockBuilder('OCP\IUserManager') + ->disableOriginalConstructor() + ->getMock(); $this->principal = $this->getMockBuilder('OCA\DAV\Connector\Sabre\Principal') ->disableOriginalConstructor() ->setMethods(['getPrincipalByPath', 'getGroupMembership']) @@ -83,7 +89,7 @@ class CardDavBackendTest extends TestCase { $this->db = \OC::$server->getDatabaseConnection(); - $this->backend = new CardDavBackend($this->db, $this->principal, null); + $this->backend = new CardDavBackend($this->db, $this->principal, $this->userManager, null); // start every test with a empty cards_properties and cards table $query = $this->db->getQueryBuilder(); @@ -161,7 +167,7 @@ class CardDavBackendTest extends TestCase { /** @var CardDavBackend | \PHPUnit_Framework_MockObject_MockObject $backend */ $backend = $this->getMockBuilder('OCA\DAV\CardDAV\CardDavBackend') - ->setConstructorArgs([$this->db, $this->principal, null]) + ->setConstructorArgs([$this->db, $this->principal, $this->userManager, null]) ->setMethods(['updateProperties', 'purgeProperties'])->getMock(); // create a new address book @@ -207,7 +213,7 @@ class CardDavBackendTest extends TestCase { public function testMultiCard() { $this->backend = $this->getMockBuilder('OCA\DAV\CardDAV\CardDavBackend') - ->setConstructorArgs([$this->db, $this->principal, null]) + ->setConstructorArgs([$this->db, $this->principal, $this->userManager, null]) ->setMethods(['updateProperties'])->getMock(); // create a new address book @@ -254,7 +260,7 @@ class CardDavBackendTest extends TestCase { public function testDeleteWithoutCard() { $this->backend = $this->getMockBuilder('OCA\DAV\CardDAV\CardDavBackend') - ->setConstructorArgs([$this->db, $this->principal, null]) + ->setConstructorArgs([$this->db, $this->principal, $this->userManager, null]) ->setMethods([ 'getCardId', 'addChange', @@ -295,7 +301,7 @@ class CardDavBackendTest extends TestCase { public function testSyncSupport() { $this->backend = $this->getMockBuilder('OCA\DAV\CardDAV\CardDavBackend') - ->setConstructorArgs([$this->db, $this->principal, null]) + ->setConstructorArgs([$this->db, $this->principal, $this->userManager, null]) ->setMethods(['updateProperties'])->getMock(); // create a new address book @@ -353,7 +359,7 @@ class CardDavBackendTest extends TestCase { $cardId = 2; $backend = $this->getMockBuilder('OCA\DAV\CardDAV\CardDavBackend') - ->setConstructorArgs([$this->db, $this->principal, null]) + ->setConstructorArgs([$this->db, $this->principal, $this->userManager, null]) ->setMethods(['getCardId'])->getMock(); $backend->expects($this->any())->method('getCardId')->willReturn($cardId); diff --git a/apps/dav/tests/unit/Connector/Sabre/AuthTest.php b/apps/dav/tests/unit/Connector/Sabre/AuthTest.php index 6262407eb95..8d77fc03a8d 100644 --- a/apps/dav/tests/unit/Connector/Sabre/AuthTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/AuthTest.php @@ -374,6 +374,7 @@ class AuthTest extends TestCase { ->willReturn(true); $this->twoFactorManager->expects($this->once()) ->method('needsSecondFactor') + ->with($user) ->will($this->returnValue(true)); $this->auth->check($request, $response); } @@ -658,7 +659,7 @@ class AuthTest extends TestCase { ->method('getUID') ->will($this->returnValue('MyTestUser')); $this->userSession - ->expects($this->exactly(3)) + ->expects($this->exactly(4)) ->method('getUser') ->will($this->returnValue($user)); $response = $this->auth->check($server->httpRequest, $server->httpResponse); diff --git a/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php index 6630c027541..e2d63868af0 100644 --- a/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php @@ -213,7 +213,8 @@ class FilesPluginTest extends TestCase { $this->assertEquals('http://example.com/', $propFind->get(self::DOWNLOADURL_PROPERTYNAME)); $this->assertEquals('foo', $propFind->get(self::OWNER_ID_PROPERTYNAME)); $this->assertEquals('M. Foo', $propFind->get(self::OWNER_DISPLAY_NAME_PROPERTYNAME)); - $this->assertEquals([self::SIZE_PROPERTYNAME, self::DATA_FINGERPRINT_PROPERTYNAME], $propFind->get404Properties()); + $this->assertEquals('my_fingerprint', $propFind->get(self::DATA_FINGERPRINT_PROPERTYNAME)); + $this->assertEquals([self::SIZE_PROPERTYNAME], $propFind->get404Properties()); } public function testGetPropertiesForFileHome() { @@ -357,7 +358,8 @@ class FilesPluginTest extends TestCase { $this->assertEquals(1025, $propFind->get(self::SIZE_PROPERTYNAME)); $this->assertEquals('DWCKMSR', $propFind->get(self::PERMISSIONS_PROPERTYNAME)); $this->assertEquals(null, $propFind->get(self::DOWNLOADURL_PROPERTYNAME)); - $this->assertEquals([self::DOWNLOADURL_PROPERTYNAME, self::DATA_FINGERPRINT_PROPERTYNAME], $propFind->get404Properties()); + $this->assertEquals('my_fingerprint', $propFind->get(self::DATA_FINGERPRINT_PROPERTYNAME)); + $this->assertEquals([self::DOWNLOADURL_PROPERTYNAME], $propFind->get404Properties()); } public function testGetPropertiesForRootDirectory() { diff --git a/apps/dav/tests/unit/Migration/ClassificationTest.php b/apps/dav/tests/unit/Migration/ClassificationTest.php index f19702e9cb2..1960fa031e1 100644 --- a/apps/dav/tests/unit/Migration/ClassificationTest.php +++ b/apps/dav/tests/unit/Migration/ClassificationTest.php @@ -35,17 +35,6 @@ use OCP\IUser; * @package OCA\DAV\Tests\unit\DAV */ class ClassificationTest extends AbstractCalDavBackendTest { - - /** @var \PHPUnit_Framework_MockObject_MockObject | \OCP\IUserManager */ - private $userManager; - - public function setUp() { - parent::setUp(); - - $this->userManager = $this->getMockBuilder('OCP\IUserManager') - ->disableOriginalConstructor()->getMock(); - } - public function test() { // setup data $calendarId = $this->createTestCalendar(); diff --git a/apps/encryption/appinfo/info.xml b/apps/encryption/appinfo/info.xml index 83f4107384d..539f9f116d2 100644 --- a/apps/encryption/appinfo/info.xml +++ b/apps/encryption/appinfo/info.xml @@ -19,7 +19,7 @@ <admin>admin-encryption</admin> </documentation> <rememberlogin>false</rememberlogin> - <version>1.4.0</version> + <version>1.4.1</version> <types> <filesystem/> </types> @@ -27,5 +27,7 @@ <lib>openssl</lib> <owncloud min-version="9.2" max-version="9.2" /> </dependencies> - + <settings> + <admin>OCA\Encryption\Settings\Admin</admin> + </settings> </info> diff --git a/apps/encryption/l10n/cs_CZ.js b/apps/encryption/l10n/cs_CZ.js index 4d73777d6da..faf39706963 100644 --- a/apps/encryption/l10n/cs_CZ.js +++ b/apps/encryption/l10n/cs_CZ.js @@ -22,6 +22,9 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "Současné přihlašovací heslo nebylo zadáno správně, zkuste to prosím znovu.", "Private key password successfully updated." : "Heslo soukromého klíče úspěšně aktualizováno.", "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" : "Musíte přenést své šifrovací klíče ze staré verze šifrování (ownCloud <= 8.0) na novou. Spusťte příkaz 'occ encryption:migrate' nebo kontaktujte svého administrátora.", + "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný soukromý klíč pro šifrovací aplikaci. Aktualizujte prosím heslo svého soukromého klíče v osobním nastavení, abyste znovu získali přístup ke svým zašifrovaným souborům.", + "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale šifrovací klíče ještě nejsou inicializované. Prosím odhlaste se a znovu se přihlaste", + "Encryption app is enabled and ready" : "Aplikace šifrování je již povolena a připravena", "Bad Signature" : "Špatný podpis", "Missing Signature" : "Chybějící podpis", "one-time password for server-side-encryption" : "jednorázové heslo pro šifrování na straně serveru", @@ -43,6 +46,7 @@ OC.L10N.register( "New recovery key password" : "Nové heslo záchranného klíče", "Repeat new recovery key password" : "Zopakujte nové heslo záchranného klíče", "Change Password" : "Změnit heslo", + "Basic encryption module" : "Základní šifrovací modul", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale vaše klíče nejsou inicializované. Prosím odhlaste se a znovu přihlaste", "Your private key password no longer matches your log-in password." : "Heslo vašeho soukromého klíče se již neshoduje s vaším přihlašovacím heslem.", "Set your old private key password to your current log-in password:" : "Změňte své staré heslo soukromého klíče na stejné, jako je vaše současné přihlašovací heslo:", @@ -53,6 +57,12 @@ OC.L10N.register( "Enable password recovery:" : "Povolit obnovu hesla:", "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Zapnutí této volby vám umožní znovu získat přístup k vašim zašifrovaným souborům pokud ztratíte heslo", "Enabled" : "Povoleno", - "Disabled" : "Zakázáno" + "Disabled" : "Zakázáno", + "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Musíte přenést své šifrovací klíče ze staré verze šifrování (Nextcloud <= 8.0) na novou. Spusťte příkaz 'occ encryption:migrate' nebo kontaktujte svého administrátora.", + "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný soukromý klíč pro šifrovací aplikaci. Aktualizujte prosím heslo svého soukromého klíče v osobním nastavení, abyste znovu získali přístup ke svým zašifrovaným souborům.", + "Encryption App is enabled and ready" : "Aplikace šifrování je již povolena a připravena", + "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 'Nextcloud 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" : "Ahoj!\n\nAdministrátor povolil šifrování dat na serveru. Vaše soubory byly zašifrovány za použití hesla '%s'.\n\nPřihlašte se do webového rozhraní, přejděte do nastavení 'základního šifrovacího modulu Nextcloud' a aktualizujte šifrovací heslo zadáním hesla výše do pole 'původní přihlašovací heslo' a svého aktuálního přihlašovacího hesla.\n\n", + "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 \"Nextcloud 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>" : "Ahoj!<br><br>Administrátor povolil šifrování dat na serveru. Vaše soubory byly zašifrovány za použití hesla <strong>%s<strong>.<br><br>Přihlašte se do webového rozhraní, přejděte do nastavení \"základního šifrovacího modulu Nextcloud\" a aktualizujte šifrovací heslo zadáním hesla výše do pole \"původní přihlašovací heslo\" a svého aktuálního přihlašovacího hesla.<br><br>", + "Nextcloud basic encryption module" : "Základní šifrovací modul Nextcloud" }, "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/apps/encryption/l10n/cs_CZ.json b/apps/encryption/l10n/cs_CZ.json index f911f993af5..fd6f414fd63 100644 --- a/apps/encryption/l10n/cs_CZ.json +++ b/apps/encryption/l10n/cs_CZ.json @@ -20,6 +20,9 @@ "The current log-in password was not correct, please try again." : "Současné přihlašovací heslo nebylo zadáno správně, zkuste to prosím znovu.", "Private key password successfully updated." : "Heslo soukromého klíče úspěšně aktualizováno.", "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" : "Musíte přenést své šifrovací klíče ze staré verze šifrování (ownCloud <= 8.0) na novou. Spusťte příkaz 'occ encryption:migrate' nebo kontaktujte svého administrátora.", + "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný soukromý klíč pro šifrovací aplikaci. Aktualizujte prosím heslo svého soukromého klíče v osobním nastavení, abyste znovu získali přístup ke svým zašifrovaným souborům.", + "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale šifrovací klíče ještě nejsou inicializované. Prosím odhlaste se a znovu se přihlaste", + "Encryption app is enabled and ready" : "Aplikace šifrování je již povolena a připravena", "Bad Signature" : "Špatný podpis", "Missing Signature" : "Chybějící podpis", "one-time password for server-side-encryption" : "jednorázové heslo pro šifrování na straně serveru", @@ -41,6 +44,7 @@ "New recovery key password" : "Nové heslo záchranného klíče", "Repeat new recovery key password" : "Zopakujte nové heslo záchranného klíče", "Change Password" : "Změnit heslo", + "Basic encryption module" : "Základní šifrovací modul", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale vaše klíče nejsou inicializované. Prosím odhlaste se a znovu přihlaste", "Your private key password no longer matches your log-in password." : "Heslo vašeho soukromého klíče se již neshoduje s vaším přihlašovacím heslem.", "Set your old private key password to your current log-in password:" : "Změňte své staré heslo soukromého klíče na stejné, jako je vaše současné přihlašovací heslo:", @@ -51,6 +55,12 @@ "Enable password recovery:" : "Povolit obnovu hesla:", "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Zapnutí této volby vám umožní znovu získat přístup k vašim zašifrovaným souborům pokud ztratíte heslo", "Enabled" : "Povoleno", - "Disabled" : "Zakázáno" + "Disabled" : "Zakázáno", + "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Musíte přenést své šifrovací klíče ze staré verze šifrování (Nextcloud <= 8.0) na novou. Spusťte příkaz 'occ encryption:migrate' nebo kontaktujte svého administrátora.", + "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný soukromý klíč pro šifrovací aplikaci. Aktualizujte prosím heslo svého soukromého klíče v osobním nastavení, abyste znovu získali přístup ke svým zašifrovaným souborům.", + "Encryption App is enabled and ready" : "Aplikace šifrování je již povolena a připravena", + "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 'Nextcloud 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" : "Ahoj!\n\nAdministrátor povolil šifrování dat na serveru. Vaše soubory byly zašifrovány za použití hesla '%s'.\n\nPřihlašte se do webového rozhraní, přejděte do nastavení 'základního šifrovacího modulu Nextcloud' a aktualizujte šifrovací heslo zadáním hesla výše do pole 'původní přihlašovací heslo' a svého aktuálního přihlašovacího hesla.\n\n", + "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 \"Nextcloud 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>" : "Ahoj!<br><br>Administrátor povolil šifrování dat na serveru. Vaše soubory byly zašifrovány za použití hesla <strong>%s<strong>.<br><br>Přihlašte se do webového rozhraní, přejděte do nastavení \"základního šifrovacího modulu Nextcloud\" a aktualizujte šifrovací heslo zadáním hesla výše do pole \"původní přihlašovací heslo\" a svého aktuálního přihlašovacího hesla.<br><br>", + "Nextcloud basic encryption module" : "Základní šifrovací modul Nextcloud" },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/encryption/l10n/de.js b/apps/encryption/l10n/de.js index eef2d32be1d..a7ce086f0c0 100644 --- a/apps/encryption/l10n/de.js +++ b/apps/encryption/l10n/de.js @@ -22,6 +22,9 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "Das aktuelle Anmeldepasswort war nicht korrekt, bitte versuche es noch einmal.", "Private key password successfully updated." : "Passwort des privaten Schlüssels erfolgreich aktualisiert", "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" : "Verschlüsselungsschlüssel müssen von der alten Verschlüsselung (ownCloud <= 8.0) zur neuen migriert werden. Bitte 'occ encryption:migrate' ausführen oder Ihren Administrator kontaktieren.", + "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Falscher privater Schlüssel für die Verschlüsselungs-app. Bitte aktualisiere Deinen privaten Schlüssel in Deinen persönlichen Einstellungen um wieder Zugriff auf die verschlüsselten Dateien zu erhalten.", + "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-app ist aktiviert, aber die Schlüssel sind noch nicht initialisiert. Bitte logge Dich aus und wieder ein", + "Encryption app is enabled and ready" : "Verschlüsselungs-app ist aktiviert und bereit", "Bad Signature" : "Ungültige Signatur", "Missing Signature" : "Fehlende Signatur", "one-time password for server-side-encryption" : "Einmal-Passwort für serverseitige Verschlüsselung", @@ -31,6 +34,7 @@ OC.L10N.register( "The share will expire on %s." : "Die Freigabe wird am %s ablaufen.", "Cheers!" : "Noch einen schönen Tag!", "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>" : "Hallo,<br><br>der Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort <strong>%s</strong> verschlüsselt.<br><br>Bitte melde dich im Web-Interface an, gehe in deine persönlichen Einstellungen. Dort findest du die Option 'Basisverschlüsselungsmodul' und aktualisiere dort dein Verschlüsselungspasswort indem du das Passwort in das 'alte Log - in Passwort' und in das 'aktuellen Login - Passwort' Feld eingibst.<br><br>", + "Default encryption module" : "Standard Verschlüsselungsmodul", "Encrypt the home storage" : "Verschlüssle den Speicher", "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Die Aktivierung dieser Option verschlüsselt alle Dateien die auf dem Hauptspeicher gespeichert sind, ansonsten werden nur Dateien auf dem externen Speicher verschlüsselt", "Enable recovery key" : "Wiederherstellungsschlüssel aktivieren", @@ -43,6 +47,7 @@ OC.L10N.register( "New recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel", "Repeat new recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel wiederholen", "Change Password" : "Passwort ändern", + "Basic encryption module" : "Basisverschlüsselungsmodul", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Die Verschlüsselung-App ist aktiviert, aber deine Schlüssel sind nicht initialisiert. Bitte erneut ab- und wieder anmelden.", "Your private key password no longer matches your log-in password." : "Dein Passwort für Deinen privaten Schlüssel stimmt nicht mehr mit Deinem Loginpasswort überein.", "Set your old private key password to your current log-in password:" : "Dein altes Passwort für Deinen privaten Schlüssel auf Dein aktuelles Anmeldepasswort einstellen:", @@ -53,6 +58,12 @@ OC.L10N.register( "Enable password recovery:" : "Passwortwiederherstellung aktivieren:", "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Wenn Du diese Option aktivierst, kannst Du Deine verschlüsselten Dateien wiederherstellen, falls Du Dein Passwort vergisst", "Enabled" : "Aktiviert", - "Disabled" : "Deaktiviert" + "Disabled" : "Deaktiviert", + "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Du musst Deine Verschlüsselungs-Schlüssel von der Alten Vershlüsselung (ownCloud <= 8.0) zur neuen migrieren. Bitte führe 'occ encryption:migrate' aus oder kontaktiere den Administrator", + "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ungültiger privater Schlüssel für die Verschlüsselung-App. Bitte Ihr privates Schlüssel-Passwort aktualisieren, um den Zugriff auf Ihre verschlüsselten Dateien wiederherzustellen.", + "Encryption App is enabled and ready" : "Verschlüsselungs-App ist aktiviert und bereit.", + "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 'Nextcloud 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" : "Hey,\n\nder Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort '%s' verschlüsselt.\n\nBitte über die Web-Oberfläche anmelden und die persönlichen Einstellungen aufrufen. Dort findet sich die Option 'Nextcloud-Basisverschlüsselungsmodul' und das Verschlüsselungspasswort kann aktualisiert werden, indem das Passwort in das Feld 'altes Login Passwort' und in das 'aktuelles Login - Passwort'-Feld eingegeben wird.\n\n", + "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 \"Nextcloud 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>" : "Hey,<br><br>der Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort <strong>%s</strong> verschlüsselt.<br><br>Bitte melde dich im Web-Interface an, gehe in deine persönlichen Einstellungen. Dort findest du die Option 'Nextcloud-Basisverschlüsselungsmodul' und aktualisiere dort dein Verschlüsselungspasswort indem du das Passwort in das 'alte Log - in Passwort' und in das 'aktuellen Login - Passwort' Feld eingibst.<br><br>", + "Nextcloud basic encryption module" : "Nextcloud-Basisverschlüsselungsmodul" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/encryption/l10n/de.json b/apps/encryption/l10n/de.json index 278e899aa5e..1a23a9fb603 100644 --- a/apps/encryption/l10n/de.json +++ b/apps/encryption/l10n/de.json @@ -20,6 +20,9 @@ "The current log-in password was not correct, please try again." : "Das aktuelle Anmeldepasswort war nicht korrekt, bitte versuche es noch einmal.", "Private key password successfully updated." : "Passwort des privaten Schlüssels erfolgreich aktualisiert", "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" : "Verschlüsselungsschlüssel müssen von der alten Verschlüsselung (ownCloud <= 8.0) zur neuen migriert werden. Bitte 'occ encryption:migrate' ausführen oder Ihren Administrator kontaktieren.", + "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Falscher privater Schlüssel für die Verschlüsselungs-app. Bitte aktualisiere Deinen privaten Schlüssel in Deinen persönlichen Einstellungen um wieder Zugriff auf die verschlüsselten Dateien zu erhalten.", + "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-app ist aktiviert, aber die Schlüssel sind noch nicht initialisiert. Bitte logge Dich aus und wieder ein", + "Encryption app is enabled and ready" : "Verschlüsselungs-app ist aktiviert und bereit", "Bad Signature" : "Ungültige Signatur", "Missing Signature" : "Fehlende Signatur", "one-time password for server-side-encryption" : "Einmal-Passwort für serverseitige Verschlüsselung", @@ -29,6 +32,7 @@ "The share will expire on %s." : "Die Freigabe wird am %s ablaufen.", "Cheers!" : "Noch einen schönen Tag!", "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>" : "Hallo,<br><br>der Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort <strong>%s</strong> verschlüsselt.<br><br>Bitte melde dich im Web-Interface an, gehe in deine persönlichen Einstellungen. Dort findest du die Option 'Basisverschlüsselungsmodul' und aktualisiere dort dein Verschlüsselungspasswort indem du das Passwort in das 'alte Log - in Passwort' und in das 'aktuellen Login - Passwort' Feld eingibst.<br><br>", + "Default encryption module" : "Standard Verschlüsselungsmodul", "Encrypt the home storage" : "Verschlüssle den Speicher", "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Die Aktivierung dieser Option verschlüsselt alle Dateien die auf dem Hauptspeicher gespeichert sind, ansonsten werden nur Dateien auf dem externen Speicher verschlüsselt", "Enable recovery key" : "Wiederherstellungsschlüssel aktivieren", @@ -41,6 +45,7 @@ "New recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel", "Repeat new recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel wiederholen", "Change Password" : "Passwort ändern", + "Basic encryption module" : "Basisverschlüsselungsmodul", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Die Verschlüsselung-App ist aktiviert, aber deine Schlüssel sind nicht initialisiert. Bitte erneut ab- und wieder anmelden.", "Your private key password no longer matches your log-in password." : "Dein Passwort für Deinen privaten Schlüssel stimmt nicht mehr mit Deinem Loginpasswort überein.", "Set your old private key password to your current log-in password:" : "Dein altes Passwort für Deinen privaten Schlüssel auf Dein aktuelles Anmeldepasswort einstellen:", @@ -51,6 +56,12 @@ "Enable password recovery:" : "Passwortwiederherstellung aktivieren:", "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Wenn Du diese Option aktivierst, kannst Du Deine verschlüsselten Dateien wiederherstellen, falls Du Dein Passwort vergisst", "Enabled" : "Aktiviert", - "Disabled" : "Deaktiviert" + "Disabled" : "Deaktiviert", + "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Du musst Deine Verschlüsselungs-Schlüssel von der Alten Vershlüsselung (ownCloud <= 8.0) zur neuen migrieren. Bitte führe 'occ encryption:migrate' aus oder kontaktiere den Administrator", + "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ungültiger privater Schlüssel für die Verschlüsselung-App. Bitte Ihr privates Schlüssel-Passwort aktualisieren, um den Zugriff auf Ihre verschlüsselten Dateien wiederherzustellen.", + "Encryption App is enabled and ready" : "Verschlüsselungs-App ist aktiviert und bereit.", + "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 'Nextcloud 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" : "Hey,\n\nder Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort '%s' verschlüsselt.\n\nBitte über die Web-Oberfläche anmelden und die persönlichen Einstellungen aufrufen. Dort findet sich die Option 'Nextcloud-Basisverschlüsselungsmodul' und das Verschlüsselungspasswort kann aktualisiert werden, indem das Passwort in das Feld 'altes Login Passwort' und in das 'aktuelles Login - Passwort'-Feld eingegeben wird.\n\n", + "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 \"Nextcloud 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>" : "Hey,<br><br>der Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort <strong>%s</strong> verschlüsselt.<br><br>Bitte melde dich im Web-Interface an, gehe in deine persönlichen Einstellungen. Dort findest du die Option 'Nextcloud-Basisverschlüsselungsmodul' und aktualisiere dort dein Verschlüsselungspasswort indem du das Passwort in das 'alte Log - in Passwort' und in das 'aktuellen Login - Passwort' Feld eingibst.<br><br>", + "Nextcloud basic encryption module" : "Nextcloud-Basisverschlüsselungsmodul" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/encryption/l10n/de_DE.js b/apps/encryption/l10n/de_DE.js index e2f71ae861d..5dfa8ee0095 100644 --- a/apps/encryption/l10n/de_DE.js +++ b/apps/encryption/l10n/de_DE.js @@ -22,6 +22,9 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "Das aktuelle Anmeldepasswort war nicht korrekt, bitte versuchen Sie es noch einmal.", "Private key password successfully updated." : "Das Passwort des privaten Schlüssels wurde erfolgreich aktualisiert.", "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" : "Sie müssen Ihre Verschlüsselungsschlüssel von der alten Verschlüsselung (ownCloud <= 8.0) zur neuen migrieren. Bitte führen Sie 'occ encryption:migrate' aus oder kontaktieren Sie Ihren Administrator.", + "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Falscher privater Schlüssel für die Verschlüsselungs-app. Bitte aktualisieren Sie Ihren privaten Schlüssel in Ihren persönlichen Einstellungen um wieder Zugriff auf die verschlüsselten Dateien zu erhalten.", + "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-app ist aktiviert, aber die Schlüssel sind noch nicht initialisiert. Bitte loggen Sie sich aus und wieder ein", + "Encryption app is enabled and ready" : "Verschlüsselungs-app ist aktiviert und bereit", "Bad Signature" : "Falsche Signatur", "Missing Signature" : "Fehlende Signatur", "one-time password for server-side-encryption" : "Einmalpasswort für Serverseitige Verschlüsselung", @@ -31,6 +34,7 @@ OC.L10N.register( "The share will expire on %s." : "Die Freigabe wird am %s ablaufen.", "Cheers!" : "Noch einen schönen Tag!", "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>" : "Hey,<br><br>der Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort <strong>%s</strong> verschlüsselt.<br><br>Bitte melden Sie sich im Web-Interface an, gehe Sie in ihre persönlichen Einstellungen. Dort finden Sie die Option 'Basisverschlüsselungsmodul' und aktualisieren Sie dort Ihr Verschlüsselungspasswort indem Sie das Passwort in das 'alte Log - in Passwort' und in das 'aktuellen Login - Passwort' Feld eingeben.<br><br>", + "Default encryption module" : "Standard Verschlüsselungsmodul", "Encrypt the home storage" : "Benutzerverzeichnis verschlüsslen", "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Die Aktivierung dieser Option verschlüsselt alle Dateien die auf dem Hauptspeicher gespeichert sind, ansonsten werden nur Dateien auf dem externen Speicher verschlüsselt", "Enable recovery key" : "Wiederherstellungsschlüssel aktivieren", @@ -43,6 +47,7 @@ OC.L10N.register( "New recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel", "Repeat new recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel wiederholen", "Change Password" : "Passwort ändern", + "Basic encryption module" : "Basisverschlüsselungsmodul", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselung-App ist aktiviert, aber Ihre Schlüssel sind nicht initialisiert. Bitte nochmals ab- und wieder anmelden.", "Your private key password no longer matches your log-in password." : "Das Privatschlüsselpasswort stimmt nicht länger mit dem Anmeldepasswort überein.", "Set your old private key password to your current log-in password:" : "Ihr altes Privatschlüsselpasswort auf Ihr aktuelles Anmeldepasswort stellen:", @@ -53,6 +58,12 @@ OC.L10N.register( "Enable password recovery:" : "Die Passwort-Wiederherstellung aktivieren:", "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Durch die Aktivierung dieser Option haben Sie die Möglichkeit, wieder auf Ihre verschlüsselten Dateien zugreifen zu können, wenn Sie Ihr Passwort verloren haben.", "Enabled" : "Aktiviert", - "Disabled" : "Deaktiviert" + "Disabled" : "Deaktiviert", + "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Sie müssen Ihre Verschlüsselungsschlüssel von der alten Verschlüsselung (ownCloud <= 8.0) zur neuen migrieren. Bitte führen Sie 'occ encryption:migrate' aus oder kontaktieren Sie Ihren Administrator. ", + "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ungültiger privater Schlüssel für die Verschlüsselungs-App. Bitte aktualisieren Sie Ihr privates Schlüsselpasswort, um den Zugriff auf Ihre verschlüsselten Dateien wiederherzustellen.", + "Encryption App is enabled and ready" : "Verschlüsselungs-App ist aktiviert und bereit", + "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 'Nextcloud 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" : "Hey,\n\nder Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort '%s' verschlüsselt.\n\nBitte über die Web-Oberfläche anmelden und die persönlichen Einstellungen aufrufen. Dort findet sich die Option 'Nextcloud-Basisverschlüsselungsmodul' und das Verschlüsselungspasswort kann aktualisiert werden, indem das Passwort in das Feld 'altes Login Passwort' und in das 'aktuelles Login - Passwort'-Feld eingegeben wird.\n", + "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 \"Nextcloud 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>" : "Hey,<br><br>der Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort <strong>%s</strong> verschlüsselt.<br><br>Bitte melden Sie sich im Web-Interface an, gehe Sie in ihre persönlichen Einstellungen. Dort finden Sie die Option 'Nextcloud-Basisverschlüsselungsmodul' und aktualisieren Sie dort Ihr Verschlüsselungspasswort indem Sie das Passwort in das 'alte Log - in Passwort' und in das 'aktuellen Login - Passwort' Feld eingeben.<br><br>", + "Nextcloud basic encryption module" : "Nextcloud Basisverschlüsselungsmodul" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/encryption/l10n/de_DE.json b/apps/encryption/l10n/de_DE.json index 3c5a50dfadb..06174e22464 100644 --- a/apps/encryption/l10n/de_DE.json +++ b/apps/encryption/l10n/de_DE.json @@ -20,6 +20,9 @@ "The current log-in password was not correct, please try again." : "Das aktuelle Anmeldepasswort war nicht korrekt, bitte versuchen Sie es noch einmal.", "Private key password successfully updated." : "Das Passwort des privaten Schlüssels wurde erfolgreich aktualisiert.", "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" : "Sie müssen Ihre Verschlüsselungsschlüssel von der alten Verschlüsselung (ownCloud <= 8.0) zur neuen migrieren. Bitte führen Sie 'occ encryption:migrate' aus oder kontaktieren Sie Ihren Administrator.", + "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Falscher privater Schlüssel für die Verschlüsselungs-app. Bitte aktualisieren Sie Ihren privaten Schlüssel in Ihren persönlichen Einstellungen um wieder Zugriff auf die verschlüsselten Dateien zu erhalten.", + "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-app ist aktiviert, aber die Schlüssel sind noch nicht initialisiert. Bitte loggen Sie sich aus und wieder ein", + "Encryption app is enabled and ready" : "Verschlüsselungs-app ist aktiviert und bereit", "Bad Signature" : "Falsche Signatur", "Missing Signature" : "Fehlende Signatur", "one-time password for server-side-encryption" : "Einmalpasswort für Serverseitige Verschlüsselung", @@ -29,6 +32,7 @@ "The share will expire on %s." : "Die Freigabe wird am %s ablaufen.", "Cheers!" : "Noch einen schönen Tag!", "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>" : "Hey,<br><br>der Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort <strong>%s</strong> verschlüsselt.<br><br>Bitte melden Sie sich im Web-Interface an, gehe Sie in ihre persönlichen Einstellungen. Dort finden Sie die Option 'Basisverschlüsselungsmodul' und aktualisieren Sie dort Ihr Verschlüsselungspasswort indem Sie das Passwort in das 'alte Log - in Passwort' und in das 'aktuellen Login - Passwort' Feld eingeben.<br><br>", + "Default encryption module" : "Standard Verschlüsselungsmodul", "Encrypt the home storage" : "Benutzerverzeichnis verschlüsslen", "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Die Aktivierung dieser Option verschlüsselt alle Dateien die auf dem Hauptspeicher gespeichert sind, ansonsten werden nur Dateien auf dem externen Speicher verschlüsselt", "Enable recovery key" : "Wiederherstellungsschlüssel aktivieren", @@ -41,6 +45,7 @@ "New recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel", "Repeat new recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel wiederholen", "Change Password" : "Passwort ändern", + "Basic encryption module" : "Basisverschlüsselungsmodul", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselung-App ist aktiviert, aber Ihre Schlüssel sind nicht initialisiert. Bitte nochmals ab- und wieder anmelden.", "Your private key password no longer matches your log-in password." : "Das Privatschlüsselpasswort stimmt nicht länger mit dem Anmeldepasswort überein.", "Set your old private key password to your current log-in password:" : "Ihr altes Privatschlüsselpasswort auf Ihr aktuelles Anmeldepasswort stellen:", @@ -51,6 +56,12 @@ "Enable password recovery:" : "Die Passwort-Wiederherstellung aktivieren:", "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Durch die Aktivierung dieser Option haben Sie die Möglichkeit, wieder auf Ihre verschlüsselten Dateien zugreifen zu können, wenn Sie Ihr Passwort verloren haben.", "Enabled" : "Aktiviert", - "Disabled" : "Deaktiviert" + "Disabled" : "Deaktiviert", + "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Sie müssen Ihre Verschlüsselungsschlüssel von der alten Verschlüsselung (ownCloud <= 8.0) zur neuen migrieren. Bitte führen Sie 'occ encryption:migrate' aus oder kontaktieren Sie Ihren Administrator. ", + "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ungültiger privater Schlüssel für die Verschlüsselungs-App. Bitte aktualisieren Sie Ihr privates Schlüsselpasswort, um den Zugriff auf Ihre verschlüsselten Dateien wiederherzustellen.", + "Encryption App is enabled and ready" : "Verschlüsselungs-App ist aktiviert und bereit", + "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 'Nextcloud 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" : "Hey,\n\nder Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort '%s' verschlüsselt.\n\nBitte über die Web-Oberfläche anmelden und die persönlichen Einstellungen aufrufen. Dort findet sich die Option 'Nextcloud-Basisverschlüsselungsmodul' und das Verschlüsselungspasswort kann aktualisiert werden, indem das Passwort in das Feld 'altes Login Passwort' und in das 'aktuelles Login - Passwort'-Feld eingegeben wird.\n", + "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 \"Nextcloud 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>" : "Hey,<br><br>der Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort <strong>%s</strong> verschlüsselt.<br><br>Bitte melden Sie sich im Web-Interface an, gehe Sie in ihre persönlichen Einstellungen. Dort finden Sie die Option 'Nextcloud-Basisverschlüsselungsmodul' und aktualisieren Sie dort Ihr Verschlüsselungspasswort indem Sie das Passwort in das 'alte Log - in Passwort' und in das 'aktuellen Login - Passwort' Feld eingeben.<br><br>", + "Nextcloud basic encryption module" : "Nextcloud Basisverschlüsselungsmodul" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/encryption/l10n/fr.js b/apps/encryption/l10n/fr.js index 68fc6196d6f..2d9904ab9b8 100644 --- a/apps/encryption/l10n/fr.js +++ b/apps/encryption/l10n/fr.js @@ -22,6 +22,8 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "Le mot de passe de connexion actuel n'est pas correct, veuillez réessayer.", "Private key password successfully updated." : "Mot de passe de la clef privée mis à jour avec succès.", "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" : "Vous devez migrer vos clés de chiffrement de l'ancienne version (ownCloud <= 8.0) vers la nouvelle. Veuillez exécuter 'occ encryption:migrate' ou contacter votre administrateur", + "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "L'application de chiffrement est activée mais vos clefs ne sont pas initialisées. Veuillez vous déconnecter et ensuite vous reconnecter.", + "Encryption app is enabled and ready" : "L'application de chiffrement est activée et prête", "Bad Signature" : "Mauvaise signature", "Missing Signature" : "Signature manquante", "one-time password for server-side-encryption" : "Mot de passe à usage unique pour le chiffrement côté serveur", diff --git a/apps/encryption/l10n/fr.json b/apps/encryption/l10n/fr.json index 71367d3beaf..c1353ddb7eb 100644 --- a/apps/encryption/l10n/fr.json +++ b/apps/encryption/l10n/fr.json @@ -20,6 +20,8 @@ "The current log-in password was not correct, please try again." : "Le mot de passe de connexion actuel n'est pas correct, veuillez réessayer.", "Private key password successfully updated." : "Mot de passe de la clef privée mis à jour avec succès.", "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" : "Vous devez migrer vos clés de chiffrement de l'ancienne version (ownCloud <= 8.0) vers la nouvelle. Veuillez exécuter 'occ encryption:migrate' ou contacter votre administrateur", + "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "L'application de chiffrement est activée mais vos clefs ne sont pas initialisées. Veuillez vous déconnecter et ensuite vous reconnecter.", + "Encryption app is enabled and ready" : "L'application de chiffrement est activée et prête", "Bad Signature" : "Mauvaise signature", "Missing Signature" : "Signature manquante", "one-time password for server-side-encryption" : "Mot de passe à usage unique pour le chiffrement côté serveur", diff --git a/apps/encryption/l10n/id.js b/apps/encryption/l10n/id.js index da4bd12078f..3a8a7369397 100644 --- a/apps/encryption/l10n/id.js +++ b/apps/encryption/l10n/id.js @@ -22,6 +22,9 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "Sandi masuk saat ini salah, mohon coba lagi.", "Private key password successfully updated." : "Sandi kunci privat berhasil diperbarui.", "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" : "Anda perlu mengganti kunci enkripsi Anda dari enkripsi lama (ownCloud <= 8.0) ke yang baru. Mohon jalankan 'occ encryption:migrate' atau hubungi administrator Anda", + "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Kunci privat tidak sah untuk aplikasi enkripsi. Silakan perbarui sandi kunci privat anda pada pengaturan pribadi untuk memulihkan akses ke berkas anda yang dienkripsi.", + "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikasi enkripsi telah diaktifkan tetapi kunci tidak terinisialisasi, silakan log-out dan log-in lagi", + "Encryption app is enabled and ready" : "Apl enkripsi aktif dan siap", "Bad Signature" : "Tanda salah", "Missing Signature" : "Tanda hilang", "one-time password for server-side-encryption" : "Sandi sekali pakai untuk server-side-encryption", @@ -43,6 +46,7 @@ OC.L10N.register( "New recovery key password" : "Sandi kunci pemulihan baru", "Repeat new recovery key password" : "Ulangi sandi kunci pemulihan baru", "Change Password" : "Ubah Sandi", + "Basic encryption module" : "Modul enkripsi dasar", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikasi Enskripsi telah diaktifkan tetapi kunci tidak diinisialisasi, silakan log-out dan log-in lagi", "Your private key password no longer matches your log-in password." : "Sandi kunci private Anda tidak lagi cocok dengan sandi masuk Anda.", "Set your old private key password to your current log-in password:" : "Setel sandi kunci private Anda untuk sandi masuk Anda saat ini:", @@ -53,6 +57,12 @@ OC.L10N.register( "Enable password recovery:" : "Aktifkan sandi pemulihan:", "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Mengaktifkan opsi ini memungkinkan Anda untuk mendapatkan kembali akses ke berkas terenkripsi Anda dalam kasus kehilangan sandi", "Enabled" : "Diaktifkan", - "Disabled" : "Dinonaktifkan" + "Disabled" : "Dinonaktifkan", + "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Anda perlu mengganti kunci enkripsi Anda dari enkripsi lama (Nextcloud <= 8.0) ke yang baru. Mohon jalankan 'occ encryption:migrate' atau hubungi administrator Anda", + "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Kunci privat tidak sah untuk aplikasi enkripsi. Silakan perbarui sandi kunci privat anda pada pengaturan pribadi untuk memulihkan akses ke berkas anda yang dienkripsi.", + "Encryption App is enabled and ready" : "Apl enkripsi aktif dan siap", + "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 'Nextcloud 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" : "Hai,\n\nadmin telah mengaktifkan enkripsi server-side. Berkas Anda dienkripsi dengan menggunakan sandi '%s'.\n\nMogon log masuk ke tampilan web, masuk ke bagian 'modul enkripsi dasar Nextcloud' dalam pengaturan pribadi Anda dan perbarui sandi enkripsi Anda dengan memasukkan sandi ini ke 'sandi masuk yang lama' dan sandi masuk yang sekarang.\n\n", + "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 \"Nextcloud 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>" : "Hai,<br><br>admin mengaktifkan server-side-encryption. Berkas-berkas Anda dienkripsi menggunakan sandi <strong>%s</strong>.<br><br>Silakan masuk di antarmuka web, pergi ke bagian 'modul enkripsi dasar Nextcloud' pada pengaturan pribadi Anda dan perbarui sandi enkripsi Anda dengan memasukkan sandi ini kedalam kolom 'sandi masuk yang lama' dan sandi masuk yang baru.<br><br>", + "Nextcloud basic encryption module" : "Modul enkripsi dasar Nextcloud" }, "nplurals=1; plural=0;"); diff --git a/apps/encryption/l10n/id.json b/apps/encryption/l10n/id.json index c1a2f35670f..be04544f582 100644 --- a/apps/encryption/l10n/id.json +++ b/apps/encryption/l10n/id.json @@ -20,6 +20,9 @@ "The current log-in password was not correct, please try again." : "Sandi masuk saat ini salah, mohon coba lagi.", "Private key password successfully updated." : "Sandi kunci privat berhasil diperbarui.", "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" : "Anda perlu mengganti kunci enkripsi Anda dari enkripsi lama (ownCloud <= 8.0) ke yang baru. Mohon jalankan 'occ encryption:migrate' atau hubungi administrator Anda", + "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Kunci privat tidak sah untuk aplikasi enkripsi. Silakan perbarui sandi kunci privat anda pada pengaturan pribadi untuk memulihkan akses ke berkas anda yang dienkripsi.", + "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikasi enkripsi telah diaktifkan tetapi kunci tidak terinisialisasi, silakan log-out dan log-in lagi", + "Encryption app is enabled and ready" : "Apl enkripsi aktif dan siap", "Bad Signature" : "Tanda salah", "Missing Signature" : "Tanda hilang", "one-time password for server-side-encryption" : "Sandi sekali pakai untuk server-side-encryption", @@ -41,6 +44,7 @@ "New recovery key password" : "Sandi kunci pemulihan baru", "Repeat new recovery key password" : "Ulangi sandi kunci pemulihan baru", "Change Password" : "Ubah Sandi", + "Basic encryption module" : "Modul enkripsi dasar", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikasi Enskripsi telah diaktifkan tetapi kunci tidak diinisialisasi, silakan log-out dan log-in lagi", "Your private key password no longer matches your log-in password." : "Sandi kunci private Anda tidak lagi cocok dengan sandi masuk Anda.", "Set your old private key password to your current log-in password:" : "Setel sandi kunci private Anda untuk sandi masuk Anda saat ini:", @@ -51,6 +55,12 @@ "Enable password recovery:" : "Aktifkan sandi pemulihan:", "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Mengaktifkan opsi ini memungkinkan Anda untuk mendapatkan kembali akses ke berkas terenkripsi Anda dalam kasus kehilangan sandi", "Enabled" : "Diaktifkan", - "Disabled" : "Dinonaktifkan" + "Disabled" : "Dinonaktifkan", + "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Anda perlu mengganti kunci enkripsi Anda dari enkripsi lama (Nextcloud <= 8.0) ke yang baru. Mohon jalankan 'occ encryption:migrate' atau hubungi administrator Anda", + "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Kunci privat tidak sah untuk aplikasi enkripsi. Silakan perbarui sandi kunci privat anda pada pengaturan pribadi untuk memulihkan akses ke berkas anda yang dienkripsi.", + "Encryption App is enabled and ready" : "Apl enkripsi aktif dan siap", + "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 'Nextcloud 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" : "Hai,\n\nadmin telah mengaktifkan enkripsi server-side. Berkas Anda dienkripsi dengan menggunakan sandi '%s'.\n\nMogon log masuk ke tampilan web, masuk ke bagian 'modul enkripsi dasar Nextcloud' dalam pengaturan pribadi Anda dan perbarui sandi enkripsi Anda dengan memasukkan sandi ini ke 'sandi masuk yang lama' dan sandi masuk yang sekarang.\n\n", + "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 \"Nextcloud 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>" : "Hai,<br><br>admin mengaktifkan server-side-encryption. Berkas-berkas Anda dienkripsi menggunakan sandi <strong>%s</strong>.<br><br>Silakan masuk di antarmuka web, pergi ke bagian 'modul enkripsi dasar Nextcloud' pada pengaturan pribadi Anda dan perbarui sandi enkripsi Anda dengan memasukkan sandi ini kedalam kolom 'sandi masuk yang lama' dan sandi masuk yang baru.<br><br>", + "Nextcloud basic encryption module" : "Modul enkripsi dasar Nextcloud" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/encryption/l10n/it.js b/apps/encryption/l10n/it.js index e13e4e333d0..cd02be2476e 100644 --- a/apps/encryption/l10n/it.js +++ b/apps/encryption/l10n/it.js @@ -22,6 +22,9 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "La password di accesso attuale non era corretta, prova ancora.", "Private key password successfully updated." : "Password della chiave privata aggiornata correttamente.", "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" : "Devi migrare le tue chiavi di cifratura dalla vecchia cifratura (ownCloud <= 8.0) alla nuova. Esegui 'occ encryption:migrate' o contatta il tuo amministratore", + "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chiave privata non valida per l'applicazione di cifratura. Aggiorna la password della chiave privata nelle impostazioni personali per ripristinare l'accesso ai tuoi file cifrati.", + "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "L'applicazione di cifratura è abilitata, ma le chiavi non sono state inizializzate, disconnettiti ed effettua nuovamente l'accesso", + "Encryption app is enabled and ready" : "L'applicazione Cifratura è abilitata e pronta", "Bad Signature" : "Firma non valida", "Missing Signature" : "Firma mancante", "one-time password for server-side-encryption" : "password monouso per la cifratura lato server", @@ -43,6 +46,7 @@ OC.L10N.register( "New recovery key password" : "Nuova password della chiave di ripristino", "Repeat new recovery key password" : "Ripeti la nuova password della chiave di ripristino", "Change Password" : "Modifica password", + "Basic encryption module" : "Modulo di cifratura base", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'applicazione di cifratura è abilitata, ma le chiavi non sono state inizializzate, disconnettiti ed effettua nuovamente l'accesso", "Your private key password no longer matches your log-in password." : "La password della chiave privata non corrisponde più alla password di accesso.", "Set your old private key password to your current log-in password:" : "Imposta la vecchia password della chiave privata sull'attuale password di accesso:", @@ -53,6 +57,8 @@ OC.L10N.register( "Enable password recovery:" : "Abilita il ripristino della password:", "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "L'abilitazione di questa opzione ti consentirà di accedere nuovamente ai file cifrati in caso di perdita della password", "Enabled" : "Abilitata", - "Disabled" : "Disabilitata" + "Disabled" : "Disabilitata", + "Encryption App is enabled and ready" : "L'applicazione Cifratura è abilitata e pronta", + "Nextcloud basic encryption module" : "Modulo di cifratura base di Nextcloud" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/encryption/l10n/it.json b/apps/encryption/l10n/it.json index f4f9ab423c9..2dfb7d07e6a 100644 --- a/apps/encryption/l10n/it.json +++ b/apps/encryption/l10n/it.json @@ -20,6 +20,9 @@ "The current log-in password was not correct, please try again." : "La password di accesso attuale non era corretta, prova ancora.", "Private key password successfully updated." : "Password della chiave privata aggiornata correttamente.", "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" : "Devi migrare le tue chiavi di cifratura dalla vecchia cifratura (ownCloud <= 8.0) alla nuova. Esegui 'occ encryption:migrate' o contatta il tuo amministratore", + "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chiave privata non valida per l'applicazione di cifratura. Aggiorna la password della chiave privata nelle impostazioni personali per ripristinare l'accesso ai tuoi file cifrati.", + "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "L'applicazione di cifratura è abilitata, ma le chiavi non sono state inizializzate, disconnettiti ed effettua nuovamente l'accesso", + "Encryption app is enabled and ready" : "L'applicazione Cifratura è abilitata e pronta", "Bad Signature" : "Firma non valida", "Missing Signature" : "Firma mancante", "one-time password for server-side-encryption" : "password monouso per la cifratura lato server", @@ -41,6 +44,7 @@ "New recovery key password" : "Nuova password della chiave di ripristino", "Repeat new recovery key password" : "Ripeti la nuova password della chiave di ripristino", "Change Password" : "Modifica password", + "Basic encryption module" : "Modulo di cifratura base", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'applicazione di cifratura è abilitata, ma le chiavi non sono state inizializzate, disconnettiti ed effettua nuovamente l'accesso", "Your private key password no longer matches your log-in password." : "La password della chiave privata non corrisponde più alla password di accesso.", "Set your old private key password to your current log-in password:" : "Imposta la vecchia password della chiave privata sull'attuale password di accesso:", @@ -51,6 +55,8 @@ "Enable password recovery:" : "Abilita il ripristino della password:", "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "L'abilitazione di questa opzione ti consentirà di accedere nuovamente ai file cifrati in caso di perdita della password", "Enabled" : "Abilitata", - "Disabled" : "Disabilitata" + "Disabled" : "Disabilitata", + "Encryption App is enabled and ready" : "L'applicazione Cifratura è abilitata e pronta", + "Nextcloud basic encryption module" : "Modulo di cifratura base di Nextcloud" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/encryption/l10n/nl.js b/apps/encryption/l10n/nl.js index 236d1aa3840..b9fd3b0b010 100644 --- a/apps/encryption/l10n/nl.js +++ b/apps/encryption/l10n/nl.js @@ -22,6 +22,9 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "Het huidige inlogwachtwoord was niet juist, probeer het opnieuw.", "Private key password successfully updated." : "Privésleutel succesvol bijgewerkt.", "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" : "Je moet je cryptosleutels van de oude versleuteling (ownCloud <= 8.0) migreren naar de nieuwe. Start 'occ encryption:migrate' of neem contact op met je beheerder", + "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ongeldige privésleutel voor de crypto app. Werk het privésleutel wachtwoord bij in je persoonlijke instellingen om opnieuw toegang te krijgen tot je versleutelde bestanden.", + "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Crypto app is geactiveerd, maar je sleutels werden niet geïnitialiseerd. Log uit en log daarna opnieuw in.", + "Encryption app is enabled and ready" : "Encryptie app is geactiveerd en gereed", "Bad Signature" : "Verkeerde handtekening", "Missing Signature" : "Missende ondertekening", "one-time password for server-side-encryption" : "eenmalig wachtwoord voor server-side versleuteling", @@ -43,6 +46,7 @@ OC.L10N.register( "New recovery key password" : "Nieuwe wachtwoord herstelsleutel", "Repeat new recovery key password" : "Herhaal nieuwe wachtwoord herstelsleutel", "Change Password" : "Wijzigen wachtwoord", + "Basic encryption module" : "Basis versleutelingsmodule", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Crypto app is geactiveerd, maar je sleutels werden niet geïnitialiseerd. Log uit en log daarna opnieuw in.", "Your private key password no longer matches your log-in password." : "Het wachtwoord van je privésleutel komt niet meer overeen met je inlogwachtwoord.", "Set your old private key password to your current log-in password:" : "Stel het wachtwoord van je oude privésleutel in op je huidige inlogwachtwoord.", diff --git a/apps/encryption/l10n/nl.json b/apps/encryption/l10n/nl.json index 7cdce86a492..92c9271e9dc 100644 --- a/apps/encryption/l10n/nl.json +++ b/apps/encryption/l10n/nl.json @@ -20,6 +20,9 @@ "The current log-in password was not correct, please try again." : "Het huidige inlogwachtwoord was niet juist, probeer het opnieuw.", "Private key password successfully updated." : "Privésleutel succesvol bijgewerkt.", "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" : "Je moet je cryptosleutels van de oude versleuteling (ownCloud <= 8.0) migreren naar de nieuwe. Start 'occ encryption:migrate' of neem contact op met je beheerder", + "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ongeldige privésleutel voor de crypto app. Werk het privésleutel wachtwoord bij in je persoonlijke instellingen om opnieuw toegang te krijgen tot je versleutelde bestanden.", + "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Crypto app is geactiveerd, maar je sleutels werden niet geïnitialiseerd. Log uit en log daarna opnieuw in.", + "Encryption app is enabled and ready" : "Encryptie app is geactiveerd en gereed", "Bad Signature" : "Verkeerde handtekening", "Missing Signature" : "Missende ondertekening", "one-time password for server-side-encryption" : "eenmalig wachtwoord voor server-side versleuteling", @@ -41,6 +44,7 @@ "New recovery key password" : "Nieuwe wachtwoord herstelsleutel", "Repeat new recovery key password" : "Herhaal nieuwe wachtwoord herstelsleutel", "Change Password" : "Wijzigen wachtwoord", + "Basic encryption module" : "Basis versleutelingsmodule", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Crypto app is geactiveerd, maar je sleutels werden niet geïnitialiseerd. Log uit en log daarna opnieuw in.", "Your private key password no longer matches your log-in password." : "Het wachtwoord van je privésleutel komt niet meer overeen met je inlogwachtwoord.", "Set your old private key password to your current log-in password:" : "Stel het wachtwoord van je oude privésleutel in op je huidige inlogwachtwoord.", diff --git a/apps/encryption/l10n/pt_BR.js b/apps/encryption/l10n/pt_BR.js index 205bd04489d..125961b79a8 100644 --- a/apps/encryption/l10n/pt_BR.js +++ b/apps/encryption/l10n/pt_BR.js @@ -22,6 +22,9 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "A senha atual do log-in não estava correta, por favor, tente novamente.", "Private key password successfully updated." : "Senha de chave privada atualizada com sucesso.", "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" : "Você precisa migrar suas chaves de criptografia a partir da antiga criptografia (ownCloud <= 8,0) para a nova. Por favor, execute 'occ encryption:migrate' ou contate o seu administrador", + "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chave privada inválida para o aplicativo de criptografia. Atualize a senha da sua chave privada nas configurações pessoais para recuperar o acesso aos seus arquivos criptografados.", + "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "O aplicativo de criptografia está ativo, mas suas chaves não foram inicializadas. Autentique-se novamente.", + "Encryption app is enabled and ready" : "O aplicativo de criptografia está ativo e pronto", "Bad Signature" : "Assinatura ruim", "Missing Signature" : "Faltando assinatura", "one-time password for server-side-encryption" : "senha de uso único para criptografia-lado-servidor", @@ -43,6 +46,7 @@ OC.L10N.register( "New recovery key password" : "Nova senha da chave de recuperação", "Repeat new recovery key password" : "Repita a nova senha da chave de recuperação", "Change Password" : "Trocar senha", + "Basic encryption module" : "Módulo de criptografia básico", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App de criptografia está ativado, mas as chaves não estão inicializadas, por favor log-out e faça login novamente", "Your private key password no longer matches your log-in password." : "A sua senha de chave privada não corresponde a sua senha de login.", "Set your old private key password to your current log-in password:" : "Defina a sua antiga senha da chave privada para sua senha de login atual:", diff --git a/apps/encryption/l10n/pt_BR.json b/apps/encryption/l10n/pt_BR.json index a5bb9a9e0e4..49fe8bb58f1 100644 --- a/apps/encryption/l10n/pt_BR.json +++ b/apps/encryption/l10n/pt_BR.json @@ -20,6 +20,9 @@ "The current log-in password was not correct, please try again." : "A senha atual do log-in não estava correta, por favor, tente novamente.", "Private key password successfully updated." : "Senha de chave privada atualizada com sucesso.", "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" : "Você precisa migrar suas chaves de criptografia a partir da antiga criptografia (ownCloud <= 8,0) para a nova. Por favor, execute 'occ encryption:migrate' ou contate o seu administrador", + "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chave privada inválida para o aplicativo de criptografia. Atualize a senha da sua chave privada nas configurações pessoais para recuperar o acesso aos seus arquivos criptografados.", + "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "O aplicativo de criptografia está ativo, mas suas chaves não foram inicializadas. Autentique-se novamente.", + "Encryption app is enabled and ready" : "O aplicativo de criptografia está ativo e pronto", "Bad Signature" : "Assinatura ruim", "Missing Signature" : "Faltando assinatura", "one-time password for server-side-encryption" : "senha de uso único para criptografia-lado-servidor", @@ -41,6 +44,7 @@ "New recovery key password" : "Nova senha da chave de recuperação", "Repeat new recovery key password" : "Repita a nova senha da chave de recuperação", "Change Password" : "Trocar senha", + "Basic encryption module" : "Módulo de criptografia básico", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App de criptografia está ativado, mas as chaves não estão inicializadas, por favor log-out e faça login novamente", "Your private key password no longer matches your log-in password." : "A sua senha de chave privada não corresponde a sua senha de login.", "Set your old private key password to your current log-in password:" : "Defina a sua antiga senha da chave privada para sua senha de login atual:", diff --git a/apps/encryption/l10n/ru.js b/apps/encryption/l10n/ru.js index cc511fbcb05..6b45d2f00a2 100644 --- a/apps/encryption/l10n/ru.js +++ b/apps/encryption/l10n/ru.js @@ -22,6 +22,9 @@ OC.L10N.register( "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' или обратитесь к администратору.", + "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" : "Подпись отсутствует", "one-time password for server-side-encryption" : "одноразовый пароль для шифрования на стороне сервера", @@ -43,6 +46,7 @@ OC.L10N.register( "New recovery key password" : "Новый пароль ключа восстановления", "Repeat new recovery key password" : "Повторите новый пароль ключа восстановления", "Change Password" : "Изменить пароль", + "Basic encryption module" : "Базовый модуль шифрования", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Приложение шифрования активно, но ваши ключи не инициализированы, выйдите из системы и войдите заново", "Your private key password no longer matches your log-in password." : "Пароль закрытого ключа больше не соответствует паролю вашей учетной записи.", "Set your old private key password to your current log-in password:" : "Замените старый пароль закрытого ключа на текущий пароль учётной записи.", diff --git a/apps/encryption/l10n/ru.json b/apps/encryption/l10n/ru.json index 26bcfacd730..e70741afa47 100644 --- a/apps/encryption/l10n/ru.json +++ b/apps/encryption/l10n/ru.json @@ -20,6 +20,9 @@ "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' или обратитесь к администратору.", + "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" : "Подпись отсутствует", "one-time password for server-side-encryption" : "одноразовый пароль для шифрования на стороне сервера", @@ -41,6 +44,7 @@ "New recovery key password" : "Новый пароль ключа восстановления", "Repeat new recovery key password" : "Повторите новый пароль ключа восстановления", "Change Password" : "Изменить пароль", + "Basic encryption module" : "Базовый модуль шифрования", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Приложение шифрования активно, но ваши ключи не инициализированы, выйдите из системы и войдите заново", "Your private key password no longer matches your log-in password." : "Пароль закрытого ключа больше не соответствует паролю вашей учетной записи.", "Set your old private key password to your current log-in password:" : "Замените старый пароль закрытого ключа на текущий пароль учётной записи.", diff --git a/apps/encryption/lib/AppInfo/Application.php b/apps/encryption/lib/AppInfo/Application.php index bba522fbc8c..a43646d86d9 100644 --- a/apps/encryption/lib/AppInfo/Application.php +++ b/apps/encryption/lib/AppInfo/Application.php @@ -269,7 +269,6 @@ class Application extends \OCP\AppFramework\App { public function registerSettings() { // Register settings scripts - App::registerAdmin('encryption', 'settings/settings-admin'); App::registerPersonal('encryption', 'settings/settings-personal'); } } diff --git a/apps/encryption/lib/Settings/Admin.php b/apps/encryption/lib/Settings/Admin.php new file mode 100644 index 00000000000..2faa118e2a2 --- /dev/null +++ b/apps/encryption/lib/Settings/Admin.php @@ -0,0 +1,127 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\Encryption\Settings; + +use OC\Files\View; +use OCA\Encryption\Crypto\Crypt; +use OCA\Encryption\Session; +use OCA\Encryption\Util; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\IL10N; +use OCP\ILogger; +use OCP\ISession; +use OCP\IUserManager; +use OCP\IUserSession; +use OCP\Settings\ISettings; +use OCP\IConfig; + +class Admin implements ISettings { + + /** @var IL10N */ + private $l; + + /** @var ILogger */ + private $logger; + + /** @var IUserSession */ + private $userSession; + + /** @var IConfig */ + private $config; + + /** @var IUserManager */ + private $userManager; + + /** @var ISession */ + private $session; + + public function __construct( + IL10N $l, + ILogger $logger, + IUserSession $userSession, + IConfig $config, + IUserManager $userManager, + ISession $session + ) { + $this->l = $l; + $this->logger = $logger; + $this->userSession = $userSession; + $this->config = $config; + $this->userManager = $userManager; + $this->session = $session; + } + + /** + * @return TemplateResponse + */ + public function getForm() { + $crypt = new Crypt( + $this->logger, + $this->userSession, + $this->config, + $this->l); + + $util = new Util( + new View(), + $crypt, + $this->logger, + $this->userSession, + $this->config, + $this->userManager); + + // Check if an adminRecovery account is enabled for recovering files after lost pwd + $recoveryAdminEnabled = $this->config->getAppValue('encryption', 'recoveryAdminEnabled', '0'); + $session = new Session($this->session); + + $encryptHomeStorage = $util->shouldEncryptHomeStorage(); + + $parameters = [ + 'recoveryEnabled' => $recoveryAdminEnabled, + 'initStatus' => $session->getStatus(), + 'encryptHomeStorage' => $encryptHomeStorage, + 'masterKeyEnabled' => $util->isMasterKeyEnabled(), + ]; + + return new TemplateResponse('encryption', 'settings-admin', $parameters, ''); + } + + /** + * @return string the section ID, e.g. 'sharing' + */ + public function getSection() { + return 'encryption'; + } + + /** + * @return int whether the form should be rather on the top or bottom of + * the admin section. The forms are arranged in ascending order of the + * priority values. It is required to return a value between 0 and 100. + * + * E.g.: 70 + */ + public function getPriority() { + return 5; + } + +} diff --git a/apps/encryption/settings/settings-admin.php b/apps/encryption/settings/settings-admin.php deleted file mode 100644 index a424ea03874..00000000000 --- a/apps/encryption/settings/settings-admin.php +++ /dev/null @@ -1,53 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Björn Schießle <bjoern@schiessle.org> - * @author Clark Tomlinson <fallen013@gmail.com> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -$tmpl = new OCP\Template('encryption', 'settings-admin'); - -$crypt = new \OCA\Encryption\Crypto\Crypt( - \OC::$server->getLogger(), - \OC::$server->getUserSession(), - \OC::$server->getConfig(), - \OC::$server->getL10N('encryption')); - -$util = new \OCA\Encryption\Util( - new \OC\Files\View(), - $crypt, - \OC::$server->getLogger(), - \OC::$server->getUserSession(), - \OC::$server->getConfig(), - \OC::$server->getUserManager()); - -// Check if an adminRecovery account is enabled for recovering files after lost pwd -$recoveryAdminEnabled = \OC::$server->getConfig()->getAppValue('encryption', 'recoveryAdminEnabled', '0'); -$session = new \OCA\Encryption\Session(\OC::$server->getSession()); - -$encryptHomeStorage = $util->shouldEncryptHomeStorage(); - -$tmpl->assign('recoveryEnabled', $recoveryAdminEnabled); -$tmpl->assign('initStatus', $session->getStatus()); -$tmpl->assign('encryptHomeStorage', $encryptHomeStorage); -$tmpl->assign('masterKeyEnabled', $util->isMasterKeyEnabled()); - -return $tmpl->fetchPage(); diff --git a/apps/encryption/templates/settings-admin.php b/apps/encryption/templates/settings-admin.php index 5c551267ff5..405dbaf703f 100644 --- a/apps/encryption/templates/settings-admin.php +++ b/apps/encryption/templates/settings-admin.php @@ -6,6 +6,7 @@ script('core', 'multiselect'); style('encryption', 'settings-admin'); ?> <form id="ocDefaultEncryptionModule" class="sub-section"> + <h3><?php p($l->t("Default encryption module")); ?></h3> <?php if(!$_["initStatus"]): ?> <?php p($l->t("Encryption app is enabled but your keys are not initialized, please log-out and log-in again")); ?> <?php else: ?> diff --git a/apps/encryption/tests/Settings/AdminTest.php b/apps/encryption/tests/Settings/AdminTest.php new file mode 100644 index 00000000000..93896585dad --- /dev/null +++ b/apps/encryption/tests/Settings/AdminTest.php @@ -0,0 +1,100 @@ +<?php +/** + * @copyright Copyright (c) 2016 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 OCA\Encryption\Tests\Settings; + +use OCA\Encryption\Settings\Admin; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\IConfig; +use OCP\ISession; +use OCP\IUserManager; +use OCP\IUserSession; +use OCP\IL10N; +use OCP\ILogger; +use Test\TestCase; + +class AdminTest extends TestCase { + /** @var Admin */ + private $admin; + /** @var IL10N */ + private $l; + /** @var ILogger */ + private $logger; + /** @var IUserSession */ + private $userSession; + /** @var IConfig */ + private $config; + /** @var IUserManager */ + private $userManager; + /** @var ISession */ + private $session; + + public function setUp() { + parent::setUp(); + + $this->l = $this->getMockBuilder('\OCP\IL10N')->getMock(); + $this->logger = $this->getMockBuilder('\OCP\ILogger')->getMock(); + $this->userSession = $this->getMockBuilder('\OCP\IUserSession')->getMock(); + $this->config = $this->getMockBuilder('\OCP\IConfig')->getMock(); + $this->userManager = $this->getMockBuilder('\OCP\IUserManager')->getMock(); + $this->session = $this->getMockBuilder('\OCP\ISession')->getMock(); + + $this->admin = new Admin( + $this->l, + $this->logger, + $this->userSession, + $this->config, + $this->userManager, + $this->session + ); + } + + public function testGetForm() { + $this->config + ->expects($this->at(0)) + ->method('getAppValue') + ->with('encryption', 'recoveryAdminEnabled', '0') + ->willReturn(1); + $this->config + ->expects($this->at(1)) + ->method('getAppValue') + ->with('encryption', 'encryptHomeStorage', '1') + ->willReturn(1); + $params = [ + 'recoveryEnabled' => 1, + 'initStatus' => '0', + 'encryptHomeStorage' => false, + 'masterKeyEnabled' => false + ]; + $expected = new TemplateResponse('encryption', 'settings-admin', $params, ''); + $this->assertEquals($expected, $this->admin->getForm()); + } + + public function testGetSection() { + $this->assertSame('encryption', $this->admin->getSection()); + } + + public function testGetPriority() { + $this->assertSame(5, $this->admin->getPriority()); + } +} diff --git a/apps/federatedfilesharing/appinfo/info.xml b/apps/federatedfilesharing/appinfo/info.xml index 2a80bd54da3..984235f0851 100644 --- a/apps/federatedfilesharing/appinfo/info.xml +++ b/apps/federatedfilesharing/appinfo/info.xml @@ -5,10 +5,13 @@ <description>Provide federated file sharing across servers</description> <licence>AGPL</licence> <author>Bjoern Schiessle, Roeland Jago Douma</author> - <version>1.1.0</version> + <version>1.1.1</version> <namespace>FederatedFileSharing</namespace> <category>other</category> <dependencies> <owncloud min-version="9.2" max-version="9.2" /> </dependencies> + <settings> + <admin>OCA\FederatedFileSharing\Settings\Admin</admin> + </settings> </info> diff --git a/apps/federatedfilesharing/appinfo/routes.php b/apps/federatedfilesharing/appinfo/routes.php index a4f56e372c9..9caaa939348 100644 --- a/apps/federatedfilesharing/appinfo/routes.php +++ b/apps/federatedfilesharing/appinfo/routes.php @@ -26,5 +26,14 @@ return [ 'routes' => [ ['name' => 'MountPublicLink#createFederatedShare', 'url' => '/createFederatedShare', 'verb' => 'POST'], ['name' => 'MountPublicLink#askForFederatedShare', 'url' => '/askForFederatedShare', 'verb' => 'POST'], - ] + ], + 'ocs' => [ + ['root' => '/cloud', 'name' => 'RequestHandler#createShare', 'url' => '/shares', 'verb' => 'POST'], + ['root' => '/cloud', 'name' => 'RequestHandler#reShare', 'url' => '/shares/{id}/reshare', 'verb' => 'POST'], + ['root' => '/cloud', 'name' => 'RequestHandler#updatePermissions', 'url' => '/shares/{id}/permissions', 'verb' => 'POST'], + ['root' => '/cloud', 'name' => 'RequestHandler#acceptShare', 'url' => '/shares/{id}/accept', 'verb' => 'POST'], + ['root' => '/cloud', 'name' => 'RequestHandler#declineShare', 'url' => '/shares/{id}/decline', 'verb' => 'POST'], + ['root' => '/cloud', 'name' => 'RequestHandler#unshare', 'url' => '/shares/{id}/unshare', 'verb' => 'POST'], + ['root' => '/cloud', 'name' => 'RequestHandler#revoke', 'url' => '/shares/{id}/revoke', 'verb' => 'POST'], + ], ]; diff --git a/apps/federatedfilesharing/css/3rdparty/gs-share/style.css b/apps/federatedfilesharing/css/3rdparty/gs-share/style.css deleted file mode 100644 index c699ddb3db5..00000000000 --- a/apps/federatedfilesharing/css/3rdparty/gs-share/style.css +++ /dev/null @@ -1,49 +0,0 @@ -.js-gs-share, .gs-share [aria-hidden="true"], .gs-share-form[aria-hidden="true"] { - display: none; -} - -.js-gs-share-enabled .js-gs-share { - display: inline; - float: left; -} - -.gs-share .js-gs-share[href] { - display: inline; -} - -.gs-share [aria-hidden="false"], .gs-share-form[aria-hidden="false"] { - display: block; - margin-top: 40px; -} - -.gs-share { - position: relative; -} - -.gs-share-form { - background: #FFF; - border: 1px solid #000; - border-radius: 5px; - padding: 5px; - position: absolute; - z-index: 1; -} - -.gs-share [for="gs-account"], .gs-share [type="text"] { - display: block; - margin-bottom: 8px; -} - -.gs-share [type="submit"] { - display: block; - margin-top: 8px; -} - -.gs-share--icon { - border: none; - cursor: pointer; - min-height: 32px; - padding: 0; - padding-left: 33px; - background: transparent url('../../../img/gs-share.png') no-repeat left center; -} diff --git a/apps/federatedfilesharing/img/social-gnu.svg b/apps/federatedfilesharing/img/social-gnu.svg deleted file mode 100644 index 24556aaa024..00000000000 --- a/apps/federatedfilesharing/img/social-gnu.svg +++ /dev/null @@ -1,79 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> - -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="32" - height="32" - id="svg2880" - version="1.1" - inkscape:version="0.91 r13725" - sodipodi:docname="social-gnu.svg" - inkscape:export-filename="/home/robmyers/Desktop/social_logo_competition/gnu-social-logo.png" - inkscape:export-xdpi="90" - inkscape:export-ydpi="90"> - <defs - id="defs2882"> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 526.18109 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="744.09448 : 526.18109 : 1" - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" - id="perspective2888" /> - <inkscape:perspective - id="perspective2859" - inkscape:persp3d-origin="0.5 : 0.33333333 : 1" - inkscape:vp_z="1 : 0.5 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_x="0 : 0.5 : 1" - sodipodi:type="inkscape:persp3d" /> - </defs> - <sodipodi:namedview - id="base" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - inkscape:pageopacity="0.0" - inkscape:pageshadow="2" - inkscape:zoom="17.21204" - inkscape:cx="13.854211" - inkscape:cy="18.472465" - inkscape:document-units="px" - inkscape:current-layer="layer1" - showgrid="false" - inkscape:window-width="1022" - inkscape:window-height="730" - inkscape:window-x="0" - inkscape:window-y="49" - inkscape:window-maximized="0" /> - <metadata - id="metadata2885"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <g - inkscape:label="Layer 1" - inkscape:groupmode="layer" - id="layer1" - transform="translate(-119.19595,-352.32438)"> - <path - style="opacity:0.5;fill:#000000;fill-opacity:1;stroke:none" - d="m 125.14074,354.32438 c -2.18531,0 -3.94479,1.75948 -3.94479,3.94479 l 0,15.76964 c 0,2.18531 1.75948,3.94419 3.94479,3.94419 l 11.72461,0 c -0.0131,4.46851 -6.05322,6.34138 -6.05322,6.34138 0,0 10.21217,-0.0335 11.65719,-6.34138 l 2.12751,0 c 2.18532,0 3.94479,-1.75888 3.94479,-3.94419 l 0,-15.76964 c 0,-2.18531 -1.75947,-3.94479 -3.94479,-3.94479 l -19.45609,0 z m 5.66602,3.16145 c 0.042,-0.007 0.0803,-0.007 0.11455,0 0.0366,0.007 0.0681,0.022 0.0943,0.0454 0.41895,0.37367 -0.69461,0.73954 -0.60497,2.57737 0.0394,0.80713 -0.2017,1.43484 1.34476,1.43484 1.03195,0 0.60505,-0.91938 1.90498,-0.91938 0.77317,0 1.0581,0.49786 1.16578,0.90268 0.10769,-0.40482 0.39265,-0.90268 1.16577,-0.90268 1.29994,0 0.87304,0.91938 1.90498,0.91938 1.54648,0 1.3054,-0.62771 1.34477,-1.43484 0.0896,-1.83783 -1.02452,-2.2037 -0.60556,-2.57737 0.41895,-0.37366 2.21932,1.81578 2.26414,2.66745 0.0469,0.89057 0.0697,2.29462 -1.25467,3.02244 1.47777,1.45682 1.67588,3.38756 1.67588,3.38756 l -2.55469,-0.0447 c 0,0 -0.58278,-2.64503 -3.67572,-2.51054 -3.09293,0.13447 -3.49614,0.67255 -3.49614,3.94479 0,3.27223 1.43378,4.39676 3.63037,4.48234 3.45154,0.13448 3.13818,-1.79282 3.13818,-1.79282 l -1.61383,0.0895 -0.89671,-2.42045 5.51329,0 c 0,2.64468 -1.12011,6.76843 -6.36465,6.49949 -5.24455,-0.26896 -6.41052,-4.39271 -6.45534,-7.17187 -0.0246,-1.52551 0.22386,-3.24602 1.47363,-4.46265 -1.31045,-0.72721 -1.2678,-2.13094 -1.2678,-3.02303 0,-1.10312 1.42517,-2.61621 2.05473,-2.71279 z" - id="path4639" - inkscape:connector-curvature="0" /> - </g> -</svg> diff --git a/apps/federatedfilesharing/js/3rdparty/gs-share/gs-share.js b/apps/federatedfilesharing/js/3rdparty/gs-share/gs-share.js deleted file mode 100644 index fd4442708a4..00000000000 --- a/apps/federatedfilesharing/js/3rdparty/gs-share/gs-share.js +++ /dev/null @@ -1,206 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -// @license magnet:?xt=urn:btih:3877d6d54b3accd4bc32f8a48bf32ebc0901502a&dn=mpl-2.0.txt MPL 2.0 -document.addEventListener('DOMContentLoaded', function () { - 'use strict'; - /** - * 'Share' widget for GNU social - * http://code.chromic.org/project/view/2/ - * - * We make a few assumptions about the target instance: - * 1) The API root is in the default location - * 2) Fancy URLs are enabled - * 3) CORS is allowed - * 4) The Bookmark plugin is enabled - * - * If 1), 3) or 4) are wrong, we fall back to a regular - * notice (instead of a bookmark notice) - * - * If 2) is wrong the user will be directed to a 404 :( - */ - - // TODO: input sanitation [1], [2] - // TODO: server-side fallback if JS is disabled - - var createForm, - bindClicks, - frm, - shareAsNotice, - shareAsBookmark, - extractURLParams, - shareURL, - shareTitle, - closest, - i18n = window.i18n; - - /** - * Internationalization - */ - if (i18n === undefined) { - i18n = { - invalidId: 'The account id provided is invalid', - yourAcctId: 'Your account ID:', - idPlaceholder: 'user@example.org', - shareAsBookmark: 'Share as a bookmark' - }; - } - - shareAsNotice = function (title, url, domain) { - window.open('http://' + domain + '/notice/new?status_textarea=' + title + ' ' + url); // [1] - }; - - shareAsBookmark = function (title, url, domain) { - window.open('http://' + domain + '/main/bookmark/new?url=' + url + '&title=' + title); // [2] - }; - - /** - * Extract parameters from query string - * - * ex: - * ?foo=bar&baz=test - * will return: - * {foo: 'bar', baz: 'test'} - */ - extractURLParams = function (queryStr) { - var parts = queryStr.substr(1).split('&'), - i, len, keyVal, params = {}; - - for (i = 0, len = parts.length; i < len; i += 1) { - keyVal = parts[i].split('='); - params[keyVal[0]] = keyVal[1]; - } - - return params; - }; - - // Create the form that we'll re-use throughout the page - createForm = function () { - var err = document.createElement('div'); - err.setAttribute('class', 'gs-share-err'); - err.setAttribute('tabindex', '-1'); - err.setAttribute('aria-hidden', 'true'); - err.textContent = i18n.invalidId; - - frm = document.createElement('form'); - - frm.setAttribute('class', 'gs-share-form'); - frm.setAttribute('tabindex', '-1'); - frm.setAttribute('aria-hidden', 'true'); - - frm.innerHTML = '<label for="gs-account">' + i18n.yourAcctId + '</label>' + - '<input type="text" id="gs-account" placeholder="' + i18n.idPlaceholder + '" />' + - '<input type="checkbox" id="gs-bookmark" /> <label for="gs-bookmark">' + i18n.shareAsBookmark + '</label>' + - '<input type="submit" value="Share"/>'; - frm.insertBefore(err, frm.firstChild); - - // Submit handler - frm.addEventListener('submit', function (e) { - e.preventDefault(); - - var accountParts = document.getElementById('gs-account').value.split('@'), - username, domain, xhr, bookmarkURL; - - if (accountParts.length === 2) { - err.setAttribute('aria-hidden', 'true'); - - username = accountParts[0]; - domain = accountParts[1]; - bookmarkURL = 'http://' + domain + '/api/bookmarks/' + username + '.json'; - - // Try bookmark - if (document.getElementById('gs-bookmark').checked) { - xhr = new XMLHttpRequest(); - - xhr.onreadystatechange = function () { - if (xhr.readyState === 4) { - if (xhr.status === 200) { // Success - shareAsBookmark(shareTitle, shareURL, domain); - } else { // Failure, fallback to regular notice - shareAsNotice(shareTitle, shareURL, domain); - } - } - }; - - xhr.open('GET', bookmarkURL, true); - xhr.send(); - } else { // Regular notice - shareAsNotice(shareTitle, shareURL, domain); - } - } else { // Invalid account id - err.setAttribute('aria-hidden', 'false'); - err.focus(); - } - }); - - // Keydown handler - frm.addEventListener('keydown', function (e) { - if (e.keyCode === 27) { // Escape key closes the dialog - frm.parentElement.getElementsByClassName('js-gs-share')[0].focus(); - frm.setAttribute('aria-hidden', 'true'); - } - }); - - document.body.appendChild(frm); - }; - - /** - * Something similar to jQuery.closest - * - * Given `elm`, return the closest parent with class `cls` - * or false if there is no matching ancestor. - */ - closest = function (elm, cls) { - while (elm !== document) { - if (elm.classList.contains(cls)) { - return elm; - } - - elm = elm.parentNode; - } - - return false; - }; - - bindClicks = function () { - document.addEventListener('click', function (e) { - var target = e.target, - urlParams, - lnk = closest(target, 'js-gs-share'); - - // Don't do anything on right/middle click or if ctrl or shift was pressed while left-clicking - if (!e.button && !e.ctrlKey && !e.shiftKey && lnk) { - e.preventDefault(); - - // Check for submission information in href first - if (lnk.search !== undefined) { - urlParams = extractURLParams(lnk.search); - shareURL = urlParams.url; - shareTitle = urlParams.title; - } else { // If it's not there, try data-* attributes. If not, use current document url and title - shareURL = lnk.getAttribute('data-url') || window.location.href; - shareTitle = lnk.getAttribute('data-title') || document.title; - } - - // Move form after the clicked link - lnk.parentNode.appendChild(frm); - - // Show form - frm.setAttribute('aria-hidden', 'false'); - - // Focus on form - frm.focus(); - } else if (!frm.contains(target)) { - frm.setAttribute('aria-hidden', 'true'); - } - }); - }; - - // Flag that js is enabled - document.body.classList.add('js-gs-share-enabled'); - - createForm(); - bindClicks(); -}); -// @license-end diff --git a/apps/federatedfilesharing/l10n/cs_CZ.js b/apps/federatedfilesharing/l10n/cs_CZ.js index 0a6ba02eeac..c51add4747e 100644 --- a/apps/federatedfilesharing/l10n/cs_CZ.js +++ b/apps/federatedfilesharing/l10n/cs_CZ.js @@ -7,6 +7,10 @@ OC.L10N.register( "Remote share password" : "Heslo vzdáleného sdílení", "Cancel" : "Zrušit", "Add remote share" : "Přidat propojené sdílení", + "Copied!" : "Zkopírováno!", + "Not supported!" : "Nepodporováno!", + "Press ⌘-C to copy." : "Zmáčknout ⌘-C pro kopírování.", + "Press Ctrl-C to copy." : "Zmáčknout Ctrl-C pro kopírování.", "Invalid Federated Cloud ID" : "Neplatné sdružené cloud ID", "Server to server sharing is not enabled on this server" : "Sdílení ze serveru na server není na tomto serveru povoleno", "Couldn't establish a federated share." : "Nepodařilo se ustavit spojené sdílení.", diff --git a/apps/federatedfilesharing/l10n/cs_CZ.json b/apps/federatedfilesharing/l10n/cs_CZ.json index 26c8dd38be7..1c079650d46 100644 --- a/apps/federatedfilesharing/l10n/cs_CZ.json +++ b/apps/federatedfilesharing/l10n/cs_CZ.json @@ -5,6 +5,10 @@ "Remote share password" : "Heslo vzdáleného sdílení", "Cancel" : "Zrušit", "Add remote share" : "Přidat propojené sdílení", + "Copied!" : "Zkopírováno!", + "Not supported!" : "Nepodporováno!", + "Press ⌘-C to copy." : "Zmáčknout ⌘-C pro kopírování.", + "Press Ctrl-C to copy." : "Zmáčknout Ctrl-C pro kopírování.", "Invalid Federated Cloud ID" : "Neplatné sdružené cloud ID", "Server to server sharing is not enabled on this server" : "Sdílení ze serveru na server není na tomto serveru povoleno", "Couldn't establish a federated share." : "Nepodařilo se ustavit spojené sdílení.", diff --git a/apps/federatedfilesharing/l10n/de.js b/apps/federatedfilesharing/l10n/de.js index 67870087289..9c6b86d8b02 100644 --- a/apps/federatedfilesharing/l10n/de.js +++ b/apps/federatedfilesharing/l10n/de.js @@ -7,6 +7,10 @@ OC.L10N.register( "Remote share password" : "Passwort für die entfernte Freigabe", "Cancel" : "Abbrechen", "Add remote share" : "Entfernte Freigabe hinzufügen", + "Copied!" : "Kopiert!", + "Not supported!" : "Nicht unterstützt!", + "Press ⌘-C to copy." : "⌘-C zum Kopieren drücken.", + "Press Ctrl-C to copy." : "Ctrl-C zum Kopieren drücken.", "Invalid Federated Cloud ID" : "Ungültige Federated-Cloud-ID", "Server to server sharing is not enabled on this server" : "Das Server-zu-Server-Teilen ist auf diesem Server nicht aktiviert", "Couldn't establish a federated share." : "Federated-Share konnte nicht aufgebaut werden", @@ -18,10 +22,10 @@ OC.L10N.register( "Could not authenticate to remote share, password might be wrong" : "Die Authentifizierung an der entfernten Freigabe konnte nicht erfolgen, das Passwort könnte falsch sein", "Storage not valid" : "Speicher ungültig", "Federated Share successfully added" : "Federated-Share erfolgreich hinzugefügt", - "Couldn't add remote share" : "Remotefreigabe kann nicht hinzu gefügt werden", + "Couldn't add remote share" : "Remotefreigabe konnte nicht hinzu gefügt werden", "Sharing %s failed, because this item is already shared with %s" : "Freigabe von %s fehlgeschlagen, da dieses Objekt schon mit %s geteilt wird", "Not allowed to create a federated share with the same user" : "Das Erstellen einer Federated Cloud Freigabe mit dem gleichen Benutzer ist nicht erlaubt", - "File is already shared with %s" : "Datei wird bereits geteilt mit %s", + "File is already shared with %s" : "Datei wird bereits mit %s geteilt", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Freigabe von %s fehlgeschlagen, da %s nicht gefunden wurde. Möglicherweise ist der Server nicht erreichbar.", "Could not find share" : "Freigabe konnte nicht gefunden werden", "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Du hast \"/%3$s\" als Remotefreigabe von %1$s (als Teil von %2$s) erhalten", diff --git a/apps/federatedfilesharing/l10n/de.json b/apps/federatedfilesharing/l10n/de.json index e1ec0c70c2b..b3cd09aeb4d 100644 --- a/apps/federatedfilesharing/l10n/de.json +++ b/apps/federatedfilesharing/l10n/de.json @@ -5,6 +5,10 @@ "Remote share password" : "Passwort für die entfernte Freigabe", "Cancel" : "Abbrechen", "Add remote share" : "Entfernte Freigabe hinzufügen", + "Copied!" : "Kopiert!", + "Not supported!" : "Nicht unterstützt!", + "Press ⌘-C to copy." : "⌘-C zum Kopieren drücken.", + "Press Ctrl-C to copy." : "Ctrl-C zum Kopieren drücken.", "Invalid Federated Cloud ID" : "Ungültige Federated-Cloud-ID", "Server to server sharing is not enabled on this server" : "Das Server-zu-Server-Teilen ist auf diesem Server nicht aktiviert", "Couldn't establish a federated share." : "Federated-Share konnte nicht aufgebaut werden", @@ -16,10 +20,10 @@ "Could not authenticate to remote share, password might be wrong" : "Die Authentifizierung an der entfernten Freigabe konnte nicht erfolgen, das Passwort könnte falsch sein", "Storage not valid" : "Speicher ungültig", "Federated Share successfully added" : "Federated-Share erfolgreich hinzugefügt", - "Couldn't add remote share" : "Remotefreigabe kann nicht hinzu gefügt werden", + "Couldn't add remote share" : "Remotefreigabe konnte nicht hinzu gefügt werden", "Sharing %s failed, because this item is already shared with %s" : "Freigabe von %s fehlgeschlagen, da dieses Objekt schon mit %s geteilt wird", "Not allowed to create a federated share with the same user" : "Das Erstellen einer Federated Cloud Freigabe mit dem gleichen Benutzer ist nicht erlaubt", - "File is already shared with %s" : "Datei wird bereits geteilt mit %s", + "File is already shared with %s" : "Datei wird bereits mit %s geteilt", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Freigabe von %s fehlgeschlagen, da %s nicht gefunden wurde. Möglicherweise ist der Server nicht erreichbar.", "Could not find share" : "Freigabe konnte nicht gefunden werden", "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Du hast \"/%3$s\" als Remotefreigabe von %1$s (als Teil von %2$s) erhalten", diff --git a/apps/federatedfilesharing/l10n/de_DE.js b/apps/federatedfilesharing/l10n/de_DE.js index 4d26d7215ba..24244aa931e 100644 --- a/apps/federatedfilesharing/l10n/de_DE.js +++ b/apps/federatedfilesharing/l10n/de_DE.js @@ -7,18 +7,22 @@ OC.L10N.register( "Remote share password" : "Passwort für die entfernte Freigabe", "Cancel" : "Abbrechen", "Add remote share" : "Entfernte Freigabe hinzufügen", + "Copied!" : "Kopiert!", + "Not supported!" : "Nicht unterstützt!", + "Press ⌘-C to copy." : "⌘-C zum Kopieren drücken.", + "Press Ctrl-C to copy." : "Ctrl-C zum Kopieren drücken.", "Invalid Federated Cloud ID" : "Ungültige Federated-Cloud-ID", "Server to server sharing is not enabled on this server" : "Das Server-zu-Server-Teilen ist auf diesem Server nicht aktiviert", "Couldn't establish a federated share." : "Federated-Share konnte nicht aufgebaut werden", "Couldn't establish a federated share, maybe the password was wrong." : "Federated-Share konnte nicht aufgebaut werden, da eventuell das Passwort falsch ist.", - "Federated Share request was successful, you will receive a invitation. Check your notifications." : "Anfrage zum Federated-Share war erfolgreich. Sier erhalten eine Einladung. Bitte prüfen Sie Ihre Benachrichtigungen.", + "Federated Share request was successful, you will receive a invitation. Check your notifications." : "Anfrage zum Federated-Share war erfolgreich. Sie erhalten eine Einladung. Bitte prüfen Sie Ihre Benachrichtigungen.", "The mountpoint name contains invalid characters." : "Der Name des Einhängepunktes enthält ungültige Zeichen.", "Not allowed to create a federated share with the owner." : "Das Erstellen einer Federated Cloud Freigabe mit dem Benutzer ist nicht erlaubt.", "Invalid or untrusted SSL certificate" : "Ungültiges oder nicht vertrauenswürdiges SSL-Zertifikat", "Could not authenticate to remote share, password might be wrong" : "Die Authentifizierung an der entfernten Freigabe konnte nicht erfolgen, das Passwort könnte falsch sein", "Storage not valid" : "Speicher ungültig", "Federated Share successfully added" : "Federated-Share erfolgreich hinzugefügt", - "Couldn't add remote share" : "Remotefreigabe kann nicht hinzu gefügt werden", + "Couldn't add remote share" : "Remotefreigabe konnte nicht hinzu gefügt werden", "Sharing %s failed, because this item is already shared with %s" : "Die Freigabe von %s ist fehlgeschlagen, da dieses Objekt schon mit %s geteilt wird", "Not allowed to create a federated share with the same user" : "Das Erstellen einer Federated Cloud Freigabe mit dem gleichen Benutzer ist nicht erlaubt", "File is already shared with %s" : "Datei wird bereits geteilt mit %s", diff --git a/apps/federatedfilesharing/l10n/de_DE.json b/apps/federatedfilesharing/l10n/de_DE.json index 7b8fd1fcd28..66cb25b49fe 100644 --- a/apps/federatedfilesharing/l10n/de_DE.json +++ b/apps/federatedfilesharing/l10n/de_DE.json @@ -5,18 +5,22 @@ "Remote share password" : "Passwort für die entfernte Freigabe", "Cancel" : "Abbrechen", "Add remote share" : "Entfernte Freigabe hinzufügen", + "Copied!" : "Kopiert!", + "Not supported!" : "Nicht unterstützt!", + "Press ⌘-C to copy." : "⌘-C zum Kopieren drücken.", + "Press Ctrl-C to copy." : "Ctrl-C zum Kopieren drücken.", "Invalid Federated Cloud ID" : "Ungültige Federated-Cloud-ID", "Server to server sharing is not enabled on this server" : "Das Server-zu-Server-Teilen ist auf diesem Server nicht aktiviert", "Couldn't establish a federated share." : "Federated-Share konnte nicht aufgebaut werden", "Couldn't establish a federated share, maybe the password was wrong." : "Federated-Share konnte nicht aufgebaut werden, da eventuell das Passwort falsch ist.", - "Federated Share request was successful, you will receive a invitation. Check your notifications." : "Anfrage zum Federated-Share war erfolgreich. Sier erhalten eine Einladung. Bitte prüfen Sie Ihre Benachrichtigungen.", + "Federated Share request was successful, you will receive a invitation. Check your notifications." : "Anfrage zum Federated-Share war erfolgreich. Sie erhalten eine Einladung. Bitte prüfen Sie Ihre Benachrichtigungen.", "The mountpoint name contains invalid characters." : "Der Name des Einhängepunktes enthält ungültige Zeichen.", "Not allowed to create a federated share with the owner." : "Das Erstellen einer Federated Cloud Freigabe mit dem Benutzer ist nicht erlaubt.", "Invalid or untrusted SSL certificate" : "Ungültiges oder nicht vertrauenswürdiges SSL-Zertifikat", "Could not authenticate to remote share, password might be wrong" : "Die Authentifizierung an der entfernten Freigabe konnte nicht erfolgen, das Passwort könnte falsch sein", "Storage not valid" : "Speicher ungültig", "Federated Share successfully added" : "Federated-Share erfolgreich hinzugefügt", - "Couldn't add remote share" : "Remotefreigabe kann nicht hinzu gefügt werden", + "Couldn't add remote share" : "Remotefreigabe konnte nicht hinzu gefügt werden", "Sharing %s failed, because this item is already shared with %s" : "Die Freigabe von %s ist fehlgeschlagen, da dieses Objekt schon mit %s geteilt wird", "Not allowed to create a federated share with the same user" : "Das Erstellen einer Federated Cloud Freigabe mit dem gleichen Benutzer ist nicht erlaubt", "File is already shared with %s" : "Datei wird bereits geteilt mit %s", diff --git a/apps/federatedfilesharing/l10n/fr.js b/apps/federatedfilesharing/l10n/fr.js index 6847bdc823c..4dcd4bd202f 100644 --- a/apps/federatedfilesharing/l10n/fr.js +++ b/apps/federatedfilesharing/l10n/fr.js @@ -7,6 +7,10 @@ OC.L10N.register( "Remote share password" : "Mot de passe du partage distant", "Cancel" : "Annuler", "Add remote share" : "Ajouter un partage distant", + "Copied!" : "Copié !", + "Not supported!" : "Non supporté!", + "Press ⌘-C to copy." : "Appuyez sur ⌘-C pour copier.", + "Press Ctrl-C to copy." : "Appuyez sur Ctrl-C pour copier.", "Invalid Federated Cloud ID" : "ID Federated Cloud incorrect", "Server to server sharing is not enabled on this server" : "Le partage de serveur à serveur n'est pas activé sur ce serveur", "Couldn't establish a federated share." : "Impossible d'établir un partage fédéré.", diff --git a/apps/federatedfilesharing/l10n/fr.json b/apps/federatedfilesharing/l10n/fr.json index 6b62f31b3aa..966183c7da4 100644 --- a/apps/federatedfilesharing/l10n/fr.json +++ b/apps/federatedfilesharing/l10n/fr.json @@ -5,6 +5,10 @@ "Remote share password" : "Mot de passe du partage distant", "Cancel" : "Annuler", "Add remote share" : "Ajouter un partage distant", + "Copied!" : "Copié !", + "Not supported!" : "Non supporté!", + "Press ⌘-C to copy." : "Appuyez sur ⌘-C pour copier.", + "Press Ctrl-C to copy." : "Appuyez sur Ctrl-C pour copier.", "Invalid Federated Cloud ID" : "ID Federated Cloud incorrect", "Server to server sharing is not enabled on this server" : "Le partage de serveur à serveur n'est pas activé sur ce serveur", "Couldn't establish a federated share." : "Impossible d'établir un partage fédéré.", diff --git a/apps/federatedfilesharing/l10n/is.js b/apps/federatedfilesharing/l10n/is.js index 58bfa4e8f41..7015934fd1c 100644 --- a/apps/federatedfilesharing/l10n/is.js +++ b/apps/federatedfilesharing/l10n/is.js @@ -1,12 +1,33 @@ OC.L10N.register( "federatedfilesharing", { - "Federated sharing" : "Deiling milli þjóna", + "Federated sharing" : "Deiling milli þjóna (skýjasambandssameign)", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "Viltu bæta við fjartengdri sameign {name} frá {owner}@{remote}?", + "Remote share" : "Fjartengd sameign", + "Remote share password" : "Lykilorð fjartengdrar sameignar", + "Cancel" : "Hætta við", + "Add remote share" : "Bæta við fjartengdri sameign", + "Copied!" : "Afritað!", + "Not supported!" : "Ekki stutt!", + "Press ⌘-C to copy." : "Ýttu á ⌘-C til að afrita.", + "Press Ctrl-C to copy." : "Ýttu á Ctrl-C til að afrita.", "Invalid Federated Cloud ID" : "Ógilt skýjasambandsauðkenni (Federated Cloud ID)", + "Server to server sharing is not enabled on this server" : "Deiling frá þjóni til þjóns er ekki virk á þessum þjóni", + "Couldn't establish a federated share." : "Gat ekki bætt við skýjasambandssameign.", + "Couldn't establish a federated share, maybe the password was wrong." : "Gat ekki bætt við skýjasambandssameign, hugsanlega var lykilorðið ekki rétt.", + "Federated Share request was successful, you will receive a invitation. Check your notifications." : "Beiðni um skýjasambandssameign tókst, þú munt fá boðskort. Athugaður skilaboð til þín.", + "The mountpoint name contains invalid characters." : "Heiti tengipunktsins inniheldur ógilda stafi.", + "Not allowed to create a federated share with the owner." : "Ekki er heimilt að búa til skýjasambandssameign með eigandanum.", + "Invalid or untrusted SSL certificate" : "Ógilt eða vantreyst SSL-skilríki", + "Could not authenticate to remote share, password might be wrong" : "Gat ekki auðkennt á fjartengdri sameign, lykilorð gæti verið rangt", + "Storage not valid" : "Geymslan er ekki gild", + "Federated Share successfully added" : "Tókst að bæta við skýjasambandssameign", + "Couldn't add remote share" : "Gat ekki bætt við fjartengdri sameign", "Sharing %s failed, because this item is already shared with %s" : "Deiling %s mistókst, því þessu atriði er þegar deilt með %s", "Not allowed to create a federated share with the same user" : "Ekki er heimilt að búa til skýjasambandssameign með sama notanda", "File is already shared with %s" : "Skránni er þegar deilt með %s", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Deiling %s mistókst, gat ekki fundið %s, hugsanlega er þjónninn ekki tiltækur í augnablikinu.", + "Could not find share" : "Gat ekki fundið sameign", "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Þú tókst við \"/%3$s\" sem fjartengdri sameign frá %1$s (fyrir hönd %2$s)", "You received \"/%3$s\" as a remote share from %1$s" : "Þú tókst við \"/%3$s\" sem fjartengdri sameign frá %1$s", "Accept" : "Samþykkja", diff --git a/apps/federatedfilesharing/l10n/is.json b/apps/federatedfilesharing/l10n/is.json index dabc08d6005..1d62a8fd345 100644 --- a/apps/federatedfilesharing/l10n/is.json +++ b/apps/federatedfilesharing/l10n/is.json @@ -1,10 +1,31 @@ { "translations": { - "Federated sharing" : "Deiling milli þjóna", + "Federated sharing" : "Deiling milli þjóna (skýjasambandssameign)", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "Viltu bæta við fjartengdri sameign {name} frá {owner}@{remote}?", + "Remote share" : "Fjartengd sameign", + "Remote share password" : "Lykilorð fjartengdrar sameignar", + "Cancel" : "Hætta við", + "Add remote share" : "Bæta við fjartengdri sameign", + "Copied!" : "Afritað!", + "Not supported!" : "Ekki stutt!", + "Press ⌘-C to copy." : "Ýttu á ⌘-C til að afrita.", + "Press Ctrl-C to copy." : "Ýttu á Ctrl-C til að afrita.", "Invalid Federated Cloud ID" : "Ógilt skýjasambandsauðkenni (Federated Cloud ID)", + "Server to server sharing is not enabled on this server" : "Deiling frá þjóni til þjóns er ekki virk á þessum þjóni", + "Couldn't establish a federated share." : "Gat ekki bætt við skýjasambandssameign.", + "Couldn't establish a federated share, maybe the password was wrong." : "Gat ekki bætt við skýjasambandssameign, hugsanlega var lykilorðið ekki rétt.", + "Federated Share request was successful, you will receive a invitation. Check your notifications." : "Beiðni um skýjasambandssameign tókst, þú munt fá boðskort. Athugaður skilaboð til þín.", + "The mountpoint name contains invalid characters." : "Heiti tengipunktsins inniheldur ógilda stafi.", + "Not allowed to create a federated share with the owner." : "Ekki er heimilt að búa til skýjasambandssameign með eigandanum.", + "Invalid or untrusted SSL certificate" : "Ógilt eða vantreyst SSL-skilríki", + "Could not authenticate to remote share, password might be wrong" : "Gat ekki auðkennt á fjartengdri sameign, lykilorð gæti verið rangt", + "Storage not valid" : "Geymslan er ekki gild", + "Federated Share successfully added" : "Tókst að bæta við skýjasambandssameign", + "Couldn't add remote share" : "Gat ekki bætt við fjartengdri sameign", "Sharing %s failed, because this item is already shared with %s" : "Deiling %s mistókst, því þessu atriði er þegar deilt með %s", "Not allowed to create a federated share with the same user" : "Ekki er heimilt að búa til skýjasambandssameign með sama notanda", "File is already shared with %s" : "Skránni er þegar deilt með %s", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Deiling %s mistókst, gat ekki fundið %s, hugsanlega er þjónninn ekki tiltækur í augnablikinu.", + "Could not find share" : "Gat ekki fundið sameign", "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Þú tókst við \"/%3$s\" sem fjartengdri sameign frá %1$s (fyrir hönd %2$s)", "You received \"/%3$s\" as a remote share from %1$s" : "Þú tókst við \"/%3$s\" sem fjartengdri sameign frá %1$s", "Accept" : "Samþykkja", diff --git a/apps/federatedfilesharing/l10n/it.js b/apps/federatedfilesharing/l10n/it.js index fa6c9b9ee4c..9873a708c05 100644 --- a/apps/federatedfilesharing/l10n/it.js +++ b/apps/federatedfilesharing/l10n/it.js @@ -7,6 +7,10 @@ OC.L10N.register( "Remote share password" : "Password della condivisione remota", "Cancel" : "Annulla", "Add remote share" : "Aggiungi condivisione remota", + "Copied!" : "Copiato!", + "Not supported!" : "Non supportato!", + "Press ⌘-C to copy." : "Premi ⌘-C per copiare.", + "Press Ctrl-C to copy." : "Premi Ctrl-C per copiare.", "Invalid Federated Cloud ID" : "ID di cloud federata non valido", "Server to server sharing is not enabled on this server" : "La condivisione tra server non è abilitata su questo server", "Couldn't establish a federated share." : "Impossibile stabilire una condivisione federata", diff --git a/apps/federatedfilesharing/l10n/it.json b/apps/federatedfilesharing/l10n/it.json index 4a0348cc474..dcc83a1fc19 100644 --- a/apps/federatedfilesharing/l10n/it.json +++ b/apps/federatedfilesharing/l10n/it.json @@ -5,6 +5,10 @@ "Remote share password" : "Password della condivisione remota", "Cancel" : "Annulla", "Add remote share" : "Aggiungi condivisione remota", + "Copied!" : "Copiato!", + "Not supported!" : "Non supportato!", + "Press ⌘-C to copy." : "Premi ⌘-C per copiare.", + "Press Ctrl-C to copy." : "Premi Ctrl-C per copiare.", "Invalid Federated Cloud ID" : "ID di cloud federata non valido", "Server to server sharing is not enabled on this server" : "La condivisione tra server non è abilitata su questo server", "Couldn't establish a federated share." : "Impossibile stabilire una condivisione federata", diff --git a/apps/federatedfilesharing/l10n/nl.js b/apps/federatedfilesharing/l10n/nl.js index 9c32f1a4d32..09093f2c5a2 100644 --- a/apps/federatedfilesharing/l10n/nl.js +++ b/apps/federatedfilesharing/l10n/nl.js @@ -7,6 +7,10 @@ OC.L10N.register( "Remote share password" : "Wachtwoord externe share", "Cancel" : "Annuleren", "Add remote share" : "Toevoegen externe share", + "Copied!" : "Gekopieerd!", + "Not supported!" : "Niet ondersteund!", + "Press ⌘-C to copy." : "Druk op ⌘-C om te kopiëren.", + "Press Ctrl-C to copy." : "Druk op Ctrl-C om te kopiëren.", "Invalid Federated Cloud ID" : "Ongeldige Federated Cloud ID", "Server to server sharing is not enabled on this server" : "Server met server delen is op deze server niet geactiveerd", "Couldn't establish a federated share." : "Kon geen gefedereerde share tot stand brengen", diff --git a/apps/federatedfilesharing/l10n/nl.json b/apps/federatedfilesharing/l10n/nl.json index 9b18287db44..99005581fcd 100644 --- a/apps/federatedfilesharing/l10n/nl.json +++ b/apps/federatedfilesharing/l10n/nl.json @@ -5,6 +5,10 @@ "Remote share password" : "Wachtwoord externe share", "Cancel" : "Annuleren", "Add remote share" : "Toevoegen externe share", + "Copied!" : "Gekopieerd!", + "Not supported!" : "Niet ondersteund!", + "Press ⌘-C to copy." : "Druk op ⌘-C om te kopiëren.", + "Press Ctrl-C to copy." : "Druk op Ctrl-C om te kopiëren.", "Invalid Federated Cloud ID" : "Ongeldige Federated Cloud ID", "Server to server sharing is not enabled on this server" : "Server met server delen is op deze server niet geactiveerd", "Couldn't establish a federated share." : "Kon geen gefedereerde share tot stand brengen", diff --git a/apps/federatedfilesharing/l10n/pt_BR.js b/apps/federatedfilesharing/l10n/pt_BR.js index ee19fa11d13..dc3b5cb464b 100644 --- a/apps/federatedfilesharing/l10n/pt_BR.js +++ b/apps/federatedfilesharing/l10n/pt_BR.js @@ -7,6 +7,10 @@ OC.L10N.register( "Remote share password" : "Senha do compartilhamento remoto", "Cancel" : "Cancelar", "Add remote share" : "Adicionar compartilhamento remoto", + "Copied!" : "Copiado!", + "Not supported!" : "Não suportado!", + "Press ⌘-C to copy." : "Pressione ⌘-C para copiar.", + "Press Ctrl-C to copy." : "Pressione Ctrl-C para copiar.", "Invalid Federated Cloud ID" : "Inválida Associação de Nuvem ID", "Server to server sharing is not enabled on this server" : "Servidor para compartilhamento de servidor não está ativo neste servidor", "Couldn't establish a federated share." : "Não foi possível estabelecer um compartilhamento federado.", diff --git a/apps/federatedfilesharing/l10n/pt_BR.json b/apps/federatedfilesharing/l10n/pt_BR.json index 1fffd8a11f2..d727e7c3424 100644 --- a/apps/federatedfilesharing/l10n/pt_BR.json +++ b/apps/federatedfilesharing/l10n/pt_BR.json @@ -5,6 +5,10 @@ "Remote share password" : "Senha do compartilhamento remoto", "Cancel" : "Cancelar", "Add remote share" : "Adicionar compartilhamento remoto", + "Copied!" : "Copiado!", + "Not supported!" : "Não suportado!", + "Press ⌘-C to copy." : "Pressione ⌘-C para copiar.", + "Press Ctrl-C to copy." : "Pressione Ctrl-C para copiar.", "Invalid Federated Cloud ID" : "Inválida Associação de Nuvem ID", "Server to server sharing is not enabled on this server" : "Servidor para compartilhamento de servidor não está ativo neste servidor", "Couldn't establish a federated share." : "Não foi possível estabelecer um compartilhamento federado.", diff --git a/apps/federatedfilesharing/l10n/ru.js b/apps/federatedfilesharing/l10n/ru.js index a0ab14e1e71..6f7ddb0a4ed 100644 --- a/apps/federatedfilesharing/l10n/ru.js +++ b/apps/federatedfilesharing/l10n/ru.js @@ -7,6 +7,10 @@ OC.L10N.register( "Remote share password" : "Пароль для удаленного общего ресурса", "Cancel" : "Отмена", "Add remote share" : "Добавить удалённый общий ресурс", + "Copied!" : "Скопировано!", + "Not supported!" : "Не поддерживается!", + "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." : "Не удаётся установить распределённый общий ресурс.", diff --git a/apps/federatedfilesharing/l10n/ru.json b/apps/federatedfilesharing/l10n/ru.json index a7ba23145bb..905598932c6 100644 --- a/apps/federatedfilesharing/l10n/ru.json +++ b/apps/federatedfilesharing/l10n/ru.json @@ -5,6 +5,10 @@ "Remote share password" : "Пароль для удаленного общего ресурса", "Cancel" : "Отмена", "Add remote share" : "Добавить удалённый общий ресурс", + "Copied!" : "Скопировано!", + "Not supported!" : "Не поддерживается!", + "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." : "Не удаётся установить распределённый общий ресурс.", diff --git a/apps/federatedfilesharing/lib/AppInfo/Application.php b/apps/federatedfilesharing/lib/AppInfo/Application.php index b4ddc6cfe04..b470bb3e584 100644 --- a/apps/federatedfilesharing/lib/AppInfo/Application.php +++ b/apps/federatedfilesharing/lib/AppInfo/Application.php @@ -24,7 +24,12 @@ namespace OCA\FederatedFileSharing\AppInfo; +use OC\AppFramework\Utility\SimpleContainer; +use OCA\FederatedFileSharing\AddressHandler; +use OCA\FederatedFileSharing\Controller\RequestHandlerController; use OCA\FederatedFileSharing\FederatedShareProvider; +use OCA\FederatedFileSharing\Notifications; +use OCA\FederatedFileSharing\RequestHandler; use OCP\AppFramework\App; class Application extends App { @@ -34,13 +39,41 @@ class Application extends App { public function __construct() { parent::__construct('federatedfilesharing'); + + $container = $this->getContainer(); + $server = $container->getServer(); + + $container->registerService('RequestHandlerController', function(SimpleContainer $c) use ($server) { + $addressHandler = new AddressHandler( + $server->getURLGenerator(), + $server->getL10N('federatedfilesharing') + ); + $notification = new Notifications( + $addressHandler, + $server->getHTTPClientService(), + new \OCA\FederatedFileSharing\DiscoveryManager( + $server->getMemCacheFactory(), + $server->getHTTPClientService() + ), + \OC::$server->getJobList() + ); + return new RequestHandlerController( + $c->query('AppName'), + $server->getRequest(), + $this->getFederatedShareProvider(), + $server->getDatabaseConnection(), + $server->getShareManager(), + $notification, + $addressHandler, + $server->getUserManager() + ); + }); } /** * register personal and admin settings page */ public function registerSettings() { - \OCP\App::registerAdmin('federatedfilesharing', 'settings-admin'); \OCP\App::registerPersonal('federatedfilesharing', 'settings-personal'); } diff --git a/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php b/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php index 93ccafb001c..55329338a92 100644 --- a/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php +++ b/apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php @@ -242,7 +242,7 @@ class MountPublicLinkController extends Controller { \OC::$server->getDatabaseConnection(), \OC\Files\Filesystem::getMountManager(), \OC\Files\Filesystem::getLoader(), - \OC::$server->getHTTPHelper(), + \OC::$server->getHTTPClientService(), \OC::$server->getNotificationManager(), $discoveryManager, \OC::$server->getUserSession()->getUser()->getUID() diff --git a/apps/federatedfilesharing/lib/RequestHandler.php b/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php index 1870b03665b..9a41962ee3a 100644 --- a/apps/federatedfilesharing/lib/RequestHandler.php +++ b/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php @@ -24,25 +24,28 @@ * */ -namespace OCA\FederatedFileSharing; +namespace OCA\FederatedFileSharing\Controller; +use OCA\FederatedFileSharing\DiscoveryManager; use OCA\Files_Sharing\Activity; +use OCA\FederatedFileSharing\AddressHandler; +use OCA\FederatedFileSharing\FederatedShareProvider; +use OCA\FederatedFileSharing\Notifications; use OCP\AppFramework\Http; +use OCP\AppFramework\OCS\OCSBadRequestException; +use OCP\AppFramework\OCS\OCSException; +use OCP\AppFramework\OCS\OCSForbiddenException; +use OCP\AppFramework\OCS\OCSNotFoundException; +use OCP\AppFramework\OCSController; use OCP\Constants; use OCP\Files\NotFoundException; use OCP\IDBConnection; use OCP\IRequest; use OCP\IUserManager; use OCP\Share; +use OCP\Share\IShare; -/** - * Class RequestHandler - * - * handles OCS Request to the federated share API - * - * @package OCA\FederatedFileSharing\API - */ -class RequestHandler { +class RequestHandlerController extends OCSController { /** @var FederatedShareProvider */ private $federatedShareProvider; @@ -53,9 +56,6 @@ class RequestHandler { /** @var Share\IManager */ private $shareManager; - /** @var IRequest */ - private $request; - /** @var Notifications */ private $notifications; @@ -71,41 +71,47 @@ class RequestHandler { /** * Server2Server constructor. * + * @param string $appName + * @param IRequest $request * @param FederatedShareProvider $federatedShareProvider * @param IDBConnection $connection * @param Share\IManager $shareManager - * @param IRequest $request * @param Notifications $notifications * @param AddressHandler $addressHandler * @param IUserManager $userManager */ - public function __construct(FederatedShareProvider $federatedShareProvider, + public function __construct($appName, + IRequest $request, + FederatedShareProvider $federatedShareProvider, IDBConnection $connection, Share\IManager $shareManager, - IRequest $request, Notifications $notifications, AddressHandler $addressHandler, IUserManager $userManager ) { + parent::__construct($appName, $request); + $this->federatedShareProvider = $federatedShareProvider; $this->connection = $connection; $this->shareManager = $shareManager; - $this->request = $request; $this->notifications = $notifications; $this->addressHandler = $addressHandler; $this->userManager = $userManager; } /** + * @NoCSRFRequired + * @PublicPage + * * create a new share * - * @param array $params - * @return \OC_OCS_Result + * @return Http\DataResponse + * @throws OCSException */ - public function createShare($params) { + public function createShare() { if (!$this->isS2SEnabled(true)) { - return new \OC_OCS_Result(null, 503, 'Server does not support federated cloud sharing'); + throw new OCSException('Server does not support federated cloud sharing', 503); } $remote = isset($_POST['remote']) ? $_POST['remote'] : null; @@ -121,7 +127,7 @@ class RequestHandler { if ($remote && $token && $name && $owner && $remoteId && $shareWith) { if(!\OCP\Util::isValidFileName($name)) { - return new \OC_OCS_Result(null, 400, 'The mountpoint name contains invalid characters.'); + throw new OCSException('The mountpoint name contains invalid characters.', 400); } // FIXME this should be a method in the user management instead @@ -134,7 +140,7 @@ class RequestHandler { \OCP\Util::writeLog('files_sharing', 'shareWith after, ' . $shareWith, \OCP\Util::DEBUG); if (!\OCP\User::userExists($shareWith)) { - return new \OC_OCS_Result(null, 400, 'User does not exists'); + throw new OCSException('User does not exists', 400); } \OC_Util::setupFS($shareWith); @@ -147,7 +153,7 @@ class RequestHandler { \OC::$server->getDatabaseConnection(), \OC\Files\Filesystem::getMountManager(), \OC\Files\Filesystem::getLoader(), - \OC::$server->getHTTPHelper(), + \OC::$server->getHTTPClientService(), \OC::$server->getNotificationManager(), $discoveryManager, $shareWith @@ -192,25 +198,30 @@ class RequestHandler { $notificationManager->notify($notification); - return new \OC_OCS_Result(); + return new Http\DataResponse(); } catch (\Exception $e) { \OCP\Util::writeLog('files_sharing', 'server can not add remote share, ' . $e->getMessage(), \OCP\Util::ERROR); - return new \OC_OCS_Result(null, 500, 'internal server error, was not able to add share from ' . $remote); + throw new OCSException('internal server error, was not able to add share from ' . $remote, 500); } } - return new \OC_OCS_Result(null, 400, 'server can not add remote share, missing parameter'); + throw new OCSException('server can not add remote share, missing parameter', 400); } /** + * @NoCSRFRequired + * @PublicPage + * * create re-share on behalf of another user * - * @param $params - * @return \OC_OCS_Result + * @param int $id + * @return Http\DataResponse + * @throws OCSBadRequestException + * @throws OCSForbiddenException + * @throws OCSNotFoundException */ - public function reShare($params) { + public function reShare($id) { - $id = isset($params['id']) ? (int)$params['id'] : null; $token = $this->request->getParam('token', null); $shareWith = $this->request->getParam('shareWith', null); $permission = (int)$this->request->getParam('permission', null); @@ -222,13 +233,13 @@ class RequestHandler { $permission === null || $remoteId === null ) { - return new \OC_OCS_Result(null, Http::STATUS_BAD_REQUEST); + throw new OCSBadRequestException(); } try { $share = $this->federatedShareProvider->getShareById($id); } catch (Share\Exceptions\ShareNotFound $e) { - return new \OC_OCS_Result(null, Http::STATUS_NOT_FOUND); + throw new OCSNotFoundException(); } // don't allow to share a file back to the owner @@ -236,7 +247,7 @@ class RequestHandler { $owner = $share->getShareOwner(); $currentServer = $this->addressHandler->generateRemoteURL(); if ($this->addressHandler->compareAddresses($user, $remote,$owner , $currentServer)) { - return new \OC_OCS_Result(null, Http::STATUS_FORBIDDEN); + throw new OCSForbiddenException(); } if ($this->verifyShare($share, $token)) { @@ -250,37 +261,42 @@ class RequestHandler { try { $result = $this->federatedShareProvider->create($share); $this->federatedShareProvider->storeRemoteId((int)$result->getId(), $remoteId); - return new \OC_OCS_Result(['token' => $result->getToken(), 'remoteId' => $result->getId()]); + return new Http\DataResponse([ + 'token' => $result->getToken(), + 'remoteId' => $result->getId() + ]); } catch (\Exception $e) { - return new \OC_OCS_Result(null, Http::STATUS_BAD_REQUEST); + throw new OCSBadRequestException(); } } else { - return new \OC_OCS_Result(null, Http::STATUS_FORBIDDEN); + throw new OCSForbiddenException(); } } - return new \OC_OCS_Result(null, Http::STATUS_BAD_REQUEST); - + throw new OCSBadRequestException(); } /** + * @NoCSRFRequired + * @PublicPage + * * accept server-to-server share * - * @param array $params - * @return \OC_OCS_Result + * @param int $id + * @return Http\DataResponse + * @throws OCSException */ - public function acceptShare($params) { + public function acceptShare($id) { if (!$this->isS2SEnabled()) { - return new \OC_OCS_Result(null, 503, 'Server does not support federated cloud sharing'); + throw new OCSException('Server does not support federated cloud sharing', 503); } - $id = $params['id']; $token = isset($_POST['token']) ? $_POST['token'] : null; try { $share = $this->federatedShareProvider->getShareById($id); } catch (Share\Exceptions\ShareNotFound $e) { - return new \OC_OCS_Result(); + return new Http\DataResponse(); } if ($this->verifyShare($share, $token)) { @@ -292,7 +308,7 @@ class RequestHandler { } } - return new \OC_OCS_Result(); + return new Http\DataResponse(); } protected function executeAcceptShare(Share\IShare $share) { @@ -309,24 +325,27 @@ class RequestHandler { } /** + * @NoCSRFRequired + * @PublicPage + * * decline server-to-server share * - * @param array $params - * @return \OC_OCS_Result + * @param int $id + * @return Http\DataResponse + * @throws OCSException */ - public function declineShare($params) { + public function declineShare($id) { if (!$this->isS2SEnabled()) { - return new \OC_OCS_Result(null, 503, 'Server does not support federated cloud sharing'); + throw new OCSException('Server does not support federated cloud sharing', 503); } - $id = (int)$params['id']; $token = isset($_POST['token']) ? $_POST['token'] : null; try { $share = $this->federatedShareProvider->getShareById($id); } catch (Share\Exceptions\ShareNotFound $e) { - return new \OC_OCS_Result(); + return new Http\DataResponse(); } if($this->verifyShare($share, $token)) { @@ -338,7 +357,7 @@ class RequestHandler { $this->executeDeclineShare($share); } - return new \OC_OCS_Result(); + return new Http\DataResponse(); } /** @@ -376,18 +395,21 @@ class RequestHandler { } /** + * @NoCSRFRequired + * @PublicPage + * * remove server-to-server share if it was unshared by the owner * - * @param array $params - * @return \OC_OCS_Result + * @param int $id + * @return Http\DataResponse + * @throws OCSException */ - public function unshare($params) { + public function unshare($id) { if (!$this->isS2SEnabled()) { - return new \OC_OCS_Result(null, 503, 'Server does not support federated cloud sharing'); + throw new OCSException('Server does not support federated cloud sharing', 503); } - $id = $params['id']; $token = isset($_POST['token']) ? $_POST['token'] : null; $query = \OCP\DB::prepare('SELECT * FROM `*PREFIX*share_external` WHERE `remote_id` = ? AND `share_token` = ?'); @@ -423,7 +445,7 @@ class RequestHandler { '', '', $user, Activity::TYPE_REMOTE_SHARE, Activity::PRIORITY_MEDIUM); } - return new \OC_OCS_Result(); + return new Http\DataResponse(); } private function cleanupRemote($remote) { @@ -434,24 +456,26 @@ class RequestHandler { /** + * @NoCSRFRequired + * @PublicPage + * * federated share was revoked, either by the owner or the re-sharer * - * @param $params - * @return \OC_OCS_Result + * @param int $id + * @return Http\DataResponse + * @throws OCSBadRequestException */ - public function revoke($params) { - $id = (int)$params['id']; + public function revoke($id) { $token = $this->request->getParam('token'); $share = $this->federatedShareProvider->getShareById($id); if ($this->verifyShare($share, $token)) { $this->federatedShareProvider->removeShareFromTable($share); - return new \OC_OCS_Result(); + return new Http\DataResponse(); } - return new \OC_OCS_Result(null, Http::STATUS_BAD_REQUEST); - + throw new OCSBadRequestException(); } /** @@ -537,20 +561,23 @@ class RequestHandler { } /** + * @NoCSRFRequired + * @PublicPage + * * update share information to keep federated re-shares in sync * - * @param array $params - * @return \OC_OCS_Result + * @param int $id + * @return Http\DataResponse + * @throws OCSBadRequestException */ - public function updatePermissions($params) { - $id = (int)$params['id']; + public function updatePermissions($id) { $token = $this->request->getParam('token', null); $permissions = $this->request->getParam('permissions', null); try { $share = $this->federatedShareProvider->getShareById($id); } catch (Share\Exceptions\ShareNotFound $e) { - return new \OC_OCS_Result(null, Http::STATUS_BAD_REQUEST); + throw new OCSBadRequestException(); } $validPermission = ctype_digit($permissions); @@ -558,10 +585,10 @@ class RequestHandler { if ($validPermission && $validToken) { $this->updatePermissionsInDatabase($share, (int)$permissions); } else { - return new \OC_OCS_Result(null, Http::STATUS_BAD_REQUEST); + throw new OCSBadRequestException(); } - return new \OC_OCS_Result(); + return new Http\DataResponse(); } /** diff --git a/apps/federatedfilesharing/lib/Settings/Admin.php b/apps/federatedfilesharing/lib/Settings/Admin.php new file mode 100644 index 00000000000..64619e329f3 --- /dev/null +++ b/apps/federatedfilesharing/lib/Settings/Admin.php @@ -0,0 +1,69 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\FederatedFileSharing\Settings; + +use OCA\FederatedFileSharing\FederatedShareProvider; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\Settings\ISettings; + +class Admin implements ISettings { + + /** @var FederatedShareProvider */ + private $fedShareProvider; + + public function __construct(FederatedShareProvider $fedShareProvider) { + $this->fedShareProvider = $fedShareProvider; + } + + /** + * @return TemplateResponse + */ + public function getForm() { + $parameters = [ + 'outgoingServer2serverShareEnabled' => $this->fedShareProvider->isOutgoingServer2serverShareEnabled(), + 'incomingServer2serverShareEnabled' => $this->fedShareProvider->isIncomingServer2serverShareEnabled(), + ]; + + return new TemplateResponse('federatedfilesharing', 'settings-admin', $parameters, ''); + } + + /** + * @return string the section ID, e.g. 'sharing' + */ + public function getSection() { + return 'sharing'; + } + + /** + * @return int whether the form should be rather on the top or bottom of + * the admin section. The forms are arranged in ascending order of the + * priority values. It is required to return a value between 0 and 100. + * + * E.g.: 70 + */ + public function getPriority() { + return 20; + } + +} diff --git a/apps/federatedfilesharing/settings-admin.php b/apps/federatedfilesharing/settings-admin.php deleted file mode 100644 index 5ccd223b0a3..00000000000 --- a/apps/federatedfilesharing/settings-admin.php +++ /dev/null @@ -1,34 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Bjoern Schiessle <bjoern@schiessle.org> - * @author Björn Schießle <bjoern@schiessle.org> - * @author Morris Jobke <hey@morrisjobke.de> - * - * @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/> - * - */ - -use OCA\FederatedFileSharing\AppInfo\Application; - -$app = new Application(); -$federatedShareProvider = $app->getFederatedShareProvider(); - -$tmpl = new OCP\Template('federatedfilesharing', 'settings-admin'); -$tmpl->assign('outgoingServer2serverShareEnabled', $federatedShareProvider->isOutgoingServer2serverShareEnabled()); -$tmpl->assign('incomingServer2serverShareEnabled', $federatedShareProvider->isIncomingServer2serverShareEnabled()); - -return $tmpl->fetchPage(); diff --git a/apps/federatedfilesharing/settings-personal.php b/apps/federatedfilesharing/settings-personal.php index a937106ce0e..92f96d1ba40 100644 --- a/apps/federatedfilesharing/settings-personal.php +++ b/apps/federatedfilesharing/settings-personal.php @@ -24,6 +24,7 @@ */ use OCA\FederatedFileSharing\AppInfo\Application; +use OCA\Theming\Template; \OC_Util::checkLoggedIn(); @@ -40,15 +41,32 @@ if (count($matches) > 0 && $matches[1] <= 9) { $cloudID = \OC::$server->getUserSession()->getUser()->getCloudId(); $url = 'https://nextcloud.com/federation#' . $cloudID; -$ownCloudLogoPath = \OC::$server->getURLGenerator()->imagePath('core', 'logo-icon.svg'); +$logoPath = \OC::$server->getURLGenerator()->imagePath('core', 'logo-icon.svg'); +$theme = \OC::$server->getThemingDefaults(); +$color = $theme->getMailHeaderColor(); +$textColor = "#ffffff"; +if(\OC::$server->getAppManager()->isEnabledForUser("theming")) { + $logoPath = $theme->getLogo(); + try { + $util = \OC::$server->query("\OCA\Theming\Util"); + if($util->invertTextColor($color)) { + $textColor = "#000000"; + } + } catch (OCP\AppFramework\QueryException $e) { + + } +} + $tmpl = new OCP\Template('federatedfilesharing', 'settings-personal'); $tmpl->assign('outgoingServer2serverShareEnabled', $federatedShareProvider->isOutgoingServer2serverShareEnabled()); $tmpl->assign('message_with_URL', $l->t('Share with me through my #Nextcloud Federated Cloud ID, see %s', [$url])); $tmpl->assign('message_without_URL', $l->t('Share with me through my #Nextcloud Federated Cloud ID', [$cloudID])); -$tmpl->assign('owncloud_logo_path', $ownCloudLogoPath); +$tmpl->assign('logoPath', $logoPath); $tmpl->assign('reference', $url); $tmpl->assign('cloudId', $cloudID); $tmpl->assign('showShareIT', !$isIE8); +$tmpl->assign('color', $color); +$tmpl->assign('textColor', $textColor); return $tmpl->fetchPage(); diff --git a/apps/federatedfilesharing/templates/settings-admin.php b/apps/federatedfilesharing/templates/settings-admin.php index 5d2eb04c170..c454eeba17b 100644 --- a/apps/federatedfilesharing/templates/settings-admin.php +++ b/apps/federatedfilesharing/templates/settings-admin.php @@ -4,7 +4,7 @@ script('federatedfilesharing', 'settings-admin'); ?> -<div id="fileSharingSettings"> +<div id="fileSharingSettings" class="followupsection"> <h3><?php p($l->t('Federated Cloud Sharing'));?></h3> <a target="_blank" rel="noreferrer" class="icon-info svg" title="<?php p($l->t('Open documentation'));?>" diff --git a/apps/federatedfilesharing/templates/settings-personal.php b/apps/federatedfilesharing/templates/settings-personal.php index aad1e385982..6b43f70495f 100644 --- a/apps/federatedfilesharing/templates/settings-personal.php +++ b/apps/federatedfilesharing/templates/settings-personal.php @@ -3,10 +3,6 @@ /** @var array $_ */ script('federatedfilesharing', 'settings-personal'); style('federatedfilesharing', 'settings-personal'); -if ($_['showShareIT']) { - script('federatedfilesharing', '3rdparty/gs-share/gs-share'); - style('federatedfilesharing', '3rdparty/gs-share/style'); -} ?> <?php if ($_['outgoingServer2serverShareEnabled']): ?> @@ -23,30 +19,23 @@ if ($_['showShareIT']) { <?php if ($_['showShareIT']) {?> <p> - <?php p($l->t('Share it:')); ?> - <div class="gs-share"> - <button data-url="<?php p(urlencode($_['reference'])); ?>" - data-title='<?php p(urlencode($_['message_without_URL'])); ?>' - class='js-gs-share social-gnu'> - GNU Social - </button> - </div> - <button class="social-diaspora pop-up" - data-url='https://sharetodiaspora.github.io/?title=<?php p($_['message_without_URL']); ?>&url=<?php p(urlencode($_['reference'])); ?>'> - Diaspora + <?php p($l->t('Share it:')); ?><br> + <button class="social-facebook pop-up" + data-url='https://www.facebook.com/sharer/sharer.php?u=<?php p(urlencode($_['reference'])); ?>'> + Facebook </button> <button class="social-twitter pop-up" data-url='https://twitter.com/intent/tweet?text=<?php p(urlencode($_['message_with_URL'])); ?>'> Twitter </button> - <button class="social-facebook pop-up" - data-url='https://www.facebook.com/sharer/sharer.php?u=<?php p(urlencode($_['reference'])); ?>'> - Facebook - </button> <button class="social-googleplus pop-up" - data-url='https://plus.google.com/share?url=<?php p(urlencode($_['reference'])); ?>'/> + data-url='https://plus.google.com/share?url=<?php p(urlencode($_['reference'])); ?>'> Google+ </button> + <button class="social-diaspora pop-up" + data-url='https://sharetodiaspora.github.io/?title=<?php p($_['message_without_URL']); ?>&url=<?php p(urlencode($_['reference'])); ?>'> + Diaspora + </button> <button id="oca-files-sharing-add-to-your-website"> <?php p($l->t('Add to your website')) ?> </button> @@ -55,22 +44,17 @@ if ($_['showShareIT']) { <div class="hidden" id="oca-files-sharing-add-to-your-website-expanded"> <p style="margin: 10px 0"> <a target="_blank" rel="noreferrer" href="<?php p($_['reference']); ?>" - style="padding:10px;background-color:#0082c9;color:#fff;border-radius:3px;padding-left:4px;"> - <img src="<?php p($_['owncloud_logo_path']); ?>" - style="width:50px;position:relative;top:8px;"> + style="padding:10px;background-color:<?php p($_['color']); ?>;color:<?php p($_['textColor']); ?>;border-radius:3px;padding-left:4px;"> + <span style="background-image:url(<?php p(\OC::$server->getURLGenerator()->getAbsoluteURL($_['logoPath'])); ?>);width:50px;height:30px;position:relative;top:8px;background-size:contain;display:inline-block;background-repeat:no-repeat; background-position: center center;"></span> <?php p($l->t('Share with me via Nextcloud')); ?> </a> </p> <p> <?php p($l->t('HTML Code:')); ?> - <xmp><a target="_blank" rel="noreferrer" href="<?php p($_['reference']); ?>" - style="padding:10px;background-color:#0082c9;color:#fff;border-radius:3px;padding-left:4px;"> - <img src="<?php p(\OC::$server->getURLGenerator()->getAbsoluteURL($_['owncloud_logo_path'])); ?>" - style="width:50px;position:relative;top:8px;"> - <?php p($l->t('Share with me via Nextcloud')); ?> - -</a></xmp> + <xmp><a target="_blank" rel="noreferrer" href="<?php p($_['reference']); ?>" style="padding:10px;background-color:<?php p($_['color']); ?>;color:<?php p($_['textColor']); ?>;border-radius:3px;padding-left:4px;"> +<span style="background-image:url(<?php p(\OC::$server->getURLGenerator()->getAbsoluteURL($_['logoPath'])); ?>);width:50px;height:30px;position:relative;top:8px;background-size:contain;display:inline-block;background-repeat:no-repeat; background-position: center center;"></span> +<?php p($l->t('Share with me via Nextcloud')); ?></a></xmp> </p> </div> <?php } ?> diff --git a/apps/federatedfilesharing/tests/RequestHandlerTest.php b/apps/federatedfilesharing/tests/Controller/RequestHandlerControllerTest.php index 9689716af3d..8e1000fb500 100644 --- a/apps/federatedfilesharing/tests/RequestHandlerTest.php +++ b/apps/federatedfilesharing/tests/Controller/RequestHandlerControllerTest.php @@ -30,7 +30,7 @@ namespace OCA\FederatedFileSharing\Tests; use OC\Files\Filesystem; use OCA\FederatedFileSharing\DiscoveryManager; use OCA\FederatedFileSharing\FederatedShareProvider; -use OCA\FederatedFileSharing\RequestHandler; +use OCA\FederatedFileSharing\Controller\RequestHandlerController; use OCP\IUserManager; use OCP\Share\IShare; @@ -40,7 +40,7 @@ use OCP\Share\IShare; * @package OCA\FederatedFileSharing\Tests * @group DB */ -class RequestHandlerTest extends TestCase { +class RequestHandlerControllerTest extends TestCase { const TEST_FOLDER_NAME = '/folder_share_api_test'; @@ -50,23 +50,23 @@ class RequestHandlerTest extends TestCase { private $connection; /** - * @var RequestHandler + * @var RequestHandlerController */ private $s2s; - /** @var \OCA\FederatedFileSharing\FederatedShareProvider | PHPUnit_Framework_MockObject_MockObject */ + /** @var \OCA\FederatedFileSharing\FederatedShareProvider|\PHPUnit_Framework_MockObject_MockObject */ private $federatedShareProvider; - /** @var \OCA\FederatedFileSharing\Notifications | PHPUnit_Framework_MockObject_MockObject */ + /** @var \OCA\FederatedFileSharing\Notifications|\PHPUnit_Framework_MockObject_MockObject */ private $notifications; - /** @var \OCA\FederatedFileSharing\AddressHandler | PHPUnit_Framework_MockObject_MockObject */ + /** @var \OCA\FederatedFileSharing\AddressHandler|\PHPUnit_Framework_MockObject_MockObject */ private $addressHandler; - /** @var IUserManager | \PHPUnit_Framework_MockObject_MockObject */ + /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */ private $userManager; - /** @var IShare | \PHPUnit_Framework_MockObject_MockObject */ + /** @var IShare|\PHPUnit_Framework_MockObject_MockObject */ private $share; protected function setUp() { @@ -77,12 +77,12 @@ class RequestHandlerTest extends TestCase { $config = $this->getMockBuilder('\OCP\IConfig') ->disableOriginalConstructor()->getMock(); - $clientService = $this->getMock('\OCP\Http\Client\IClientService'); + $clientService = $this->getMockBuilder('\OCP\Http\Client\IClientService')->getMock(); $httpHelperMock = $this->getMockBuilder('\OC\HTTPHelper') ->setConstructorArgs([$config, $clientService]) ->getMock(); $httpHelperMock->expects($this->any())->method('post')->with($this->anything())->will($this->returnValue(true)); - $this->share = $this->getMock('\OCP\Share\IShare'); + $this->share = $this->getMockBuilder('\OCP\Share\IShare')->getMock(); $this->federatedShareProvider = $this->getMockBuilder('OCA\FederatedFileSharing\FederatedShareProvider') ->disableOriginalConstructor()->getMock(); $this->federatedShareProvider->expects($this->any()) @@ -96,15 +96,16 @@ class RequestHandlerTest extends TestCase { ->disableOriginalConstructor()->getMock(); $this->addressHandler = $this->getMockBuilder('OCA\FederatedFileSharing\AddressHandler') ->disableOriginalConstructor()->getMock(); - $this->userManager = $this->getMock('OCP\IUserManager'); + $this->userManager = $this->getMockBuilder('OCP\IUserManager')->getMock(); $this->registerHttpHelper($httpHelperMock); - $this->s2s = new RequestHandler( + $this->s2s = new RequestHandlerController( + 'federatedfilesharing', + \OC::$server->getRequest(), $this->federatedShareProvider, \OC::$server->getDatabaseConnection(), \OC::$server->getShareManager(), - \OC::$server->getRequest(), $this->notifications, $this->addressHandler, $this->userManager @@ -127,7 +128,7 @@ class RequestHandlerTest extends TestCase { /** * Register an http helper mock for testing purposes. - * @param $httpHelper http helper mock + * @param \OC\HTTPHelper $httpHelper helper mock */ private function registerHttpHelper($httpHelper) { $this->oldHttpHelper = \OC::$server->query('HTTPHelper'); @@ -158,9 +159,7 @@ class RequestHandlerTest extends TestCase { $_POST['shareWith'] = self::TEST_FILES_SHARING_API_USER2; $_POST['remoteId'] = 1; - $result = $this->s2s->createShare(null); - - $this->assertTrue($result->succeeded()); + $this->s2s->createShare(null); $query = \OCP\DB::prepare('SELECT * FROM `*PREFIX*share_external` WHERE `remote_id` = ?'); $result = $query->execute(array('1')); @@ -178,13 +177,14 @@ class RequestHandlerTest extends TestCase { function testDeclineShare() { - $this->s2s = $this->getMockBuilder('\OCA\FederatedFileSharing\RequestHandler') + $this->s2s = $this->getMockBuilder('\OCA\FederatedFileSharing\Controller\RequestHandlerController') ->setConstructorArgs( [ + 'federatedfilessharing', + \OC::$server->getRequest(), $this->federatedShareProvider, \OC::$server->getDatabaseConnection(), \OC::$server->getShareManager(), - \OC::$server->getRequest(), $this->notifications, $this->addressHandler, $this->userManager @@ -197,7 +197,7 @@ class RequestHandlerTest extends TestCase { $_POST['token'] = 'token'; - $this->s2s->declineShare(array('id' => 42)); + $this->s2s->declineShare(42); } @@ -250,7 +250,7 @@ class RequestHandlerTest extends TestCase { \OC::$server->getDatabaseConnection(), Filesystem::getMountManager(), Filesystem::getLoader(), - \OC::$server->getHTTPHelper(), + \OC::$server->getHTTPClientService(), \OC::$server->getNotificationManager(), $discoveryManager, $toDelete diff --git a/apps/federatedfilesharing/tests/Settings/AdminTest.php b/apps/federatedfilesharing/tests/Settings/AdminTest.php new file mode 100644 index 00000000000..60fadca7b56 --- /dev/null +++ b/apps/federatedfilesharing/tests/Settings/AdminTest.php @@ -0,0 +1,84 @@ +<?php +/** + * @copyright Copyright (c) 2016 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 OCA\FederatedFileSharing\Tests\Settings; + +use OCA\FederatedFileSharing\Settings\Admin; +use OCP\AppFramework\Http\TemplateResponse; +use Test\TestCase; + +class AdminTest extends TestCase { + /** @var Admin */ + private $admin; + /** @var \OCA\FederatedFileSharing\FederatedShareProvider */ + private $federatedShareProvider; + + public function setUp() { + parent::setUp(); + $this->federatedShareProvider = $this->getMockBuilder('\OCA\FederatedFileSharing\FederatedShareProvider')->disableOriginalConstructor()->getMock(); + $this->admin = new Admin( + $this->federatedShareProvider + ); + } + + public function sharingStateProvider() { + return [ + [ + true, + ], + [ + false, + ] + ]; + } + + /** + * @dataProvider sharingStateProvider + * @param bool $state + */ + public function testGetForm($state) { + $this->federatedShareProvider + ->expects($this->once()) + ->method('isOutgoingServer2serverShareEnabled') + ->willReturn($state); + $this->federatedShareProvider + ->expects($this->once()) + ->method('isIncomingServer2serverShareEnabled') + ->willReturn($state); + + $params = [ + 'outgoingServer2serverShareEnabled' => $state, + 'incomingServer2serverShareEnabled' => $state, + ]; + $expected = new TemplateResponse('federatedfilesharing', 'settings-admin', $params, ''); + $this->assertEquals($expected, $this->admin->getForm()); + } + + public function testGetSection() { + $this->assertSame('sharing', $this->admin->getSection()); + } + + public function testGetPriority() { + $this->assertSame(20, $this->admin->getPriority()); + } +} diff --git a/apps/federation/appinfo/app.php b/apps/federation/appinfo/app.php index 92b64b9c058..6c53810dd2c 100644 --- a/apps/federation/appinfo/app.php +++ b/apps/federation/appinfo/app.php @@ -23,5 +23,4 @@ namespace OCA\Federation\AppInfo; $app = new Application(); -$app->registerSettings(); $app->registerHooks(); diff --git a/apps/federation/appinfo/info.xml b/apps/federation/appinfo/info.xml index b8d697a4db2..da65fef2446 100644 --- a/apps/federation/appinfo/info.xml +++ b/apps/federation/appinfo/info.xml @@ -5,7 +5,7 @@ <description>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.</description> <licence>AGPL</licence> <author>Bjoern Schiessle</author> - <version>1.1.0</version> + <version>1.1.1</version> <namespace>Federation</namespace> <category>other</category> <dependencies> @@ -19,4 +19,8 @@ <background-jobs> <job>OCA\Federation\SyncJob</job> </background-jobs> + + <settings> + <admin>OCA\Federation\Settings\Admin</admin> + </settings> </info> diff --git a/apps/federation/appinfo/routes.php b/apps/federation/appinfo/routes.php index 03acc60c682..b9515812a01 100644 --- a/apps/federation/appinfo/routes.php +++ b/apps/federation/appinfo/routes.php @@ -41,8 +41,18 @@ $application->registerRoutes( 'url' => '/auto-add-servers', 'verb' => 'POST' ], - ] + ], + 'ocs' => [ + [ + 'name' => 'OCSAuthAPI#getSharedSecret', + 'url' => '/api/v1/shared-secret', + 'verb' => 'GET', + ], + [ + 'name' => 'OCSAuthAPI#requestSharedSecret', + 'url' => '/api/v1/request-shared-secret', + 'verb' => 'POST', + ], + ], ] ); - -$application->registerOCSApi(); diff --git a/apps/federation/img/app.svg b/apps/federation/img/app.svg index b6ae35211a3..83108e7133e 100644 --- a/apps/federation/img/app.svg +++ b/apps/federation/img/app.svg @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> - <path d="m13.733 0.00064c-0.52991 0-0.93331 0.40337-0.93331 0.93333v2.6666c-1.182 0.3034-2.243 0.7934-3.2668 1.4001l-1.9334-1.9334c-0.3747-0.3747-0.9586-0.3747-1.3333 0l-3.1999 3.2c-0.37473 0.37474-0.37473 0.95859 0 1.3333l1.9334 1.9335c-0.6067 1.0239-1.0967 2.0849-1.4001 3.2669h-2.6666c-0.52994 0-0.9333 0.403-0.9333 0.933v4.5333c2e-8 0.52996 0.40336 0.93333 0.93331 0.93333h2.6666c0.30335 1.1817 0.79332 2.2426 1.4 3.2666l-1.9334 1.9349c-0.37473 0.37474-0.37473 0.95859 0 1.3333l3.1999 3.2c0.37473 0.37474 0.95857 0.37474 1.3333 0l1.9334-1.9349c1.024 0.608 2.0849 1.0965 3.2665 1.3995v2.6667c0 0.53 0.403 0.933 0.933 0.933h4.5332c0.52991 0 0.93331-0.4032 0.93331-0.9344v-2.6667c1.1816-0.30336 2.2425-0.79335 3.2665-1.4l1.9333 1.9333c0.37473 0.37474 0.95857 0.37474 1.3333 0l3.1999-3.2c0.37473-0.37474 0.37473-0.95859 0-1.3333l-1.9327-1.9328c0.60798-1.024 1.0965-2.0845 1.3994-3.2661h2.6666c0.532 0 0.935-0.403 0.935-0.933v-4.534c0-0.53-0.403-0.933-0.934-0.933h-2.667c-0.303-1.182-0.791-2.243-1.399-3.2666l1.932-1.9334c0.37473-0.37474 0.37473-0.95859 0-1.3333l-3.2-3.2c-0.37473-0.37474-0.95857-0.37474-1.3333 0l-1.9327 1.9334c-1.024-0.6067-2.084-1.0967-3.266-1.4001v-2.6667c0-0.52993-0.403-0.9333-0.933-0.9333zm2.2666 8.8689c3.9361 0 7.1309 3.1947 7.1309 7.1311 0 3.9362-3.1946 7.1311-7.1309 7.1311-3.9361 0-7.1309-3.1955-7.1309-7.1317s3.1948-7.1311 7.1309-7.1311z" display="block" fill="#fff"/> +<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1" viewBox="0 0 16 16"> + <path d="m12.228 1c-1.3565 0-2.4592 1.0977-2.4592 2.4542 0 0.075 0.0084 0.1504 0.0149 0.2236l-4.7346 2.4145c-0.4291-0.3667-0.9861-0.5863-1.5947-0.5863-1.3565 0-2.4542 1.0977-2.4542 2.4543 0 1.3565 1.0977 2.4542 2.4542 2.4542 0.54607 0 1.0528-0.1755 1.4606-0.477l4.8637 2.4741c-0.0024 0.044-0.0099 0.089-0.0099 0.1342 0 1.3565 1.1027 2.4542 2.4592 2.4542s2.4542-1.0977 2.4542-2.4542-1.0977-2.4592-2.4542-2.4592c-0.63653 0-1.218 0.2437-1.6544 0.6409l-4.6953-2.4c0.0185-0.1233 0.0344-0.2499 0.0344-0.378 0-0.072-0.0089-0.1437-0.0149-0.2137l4.7395-2.4145c0.42802 0.3627 0.98488 0.5813 1.5898 0.5813 1.3565 0 2.4542-1.1027 2.4542-2.4592s-1.0977-2.4542-2.4542-2.4542z" fill="#fff"/> </svg> diff --git a/apps/federation/l10n/cs_CZ.js b/apps/federation/l10n/cs_CZ.js index 1aa8b18aea7..3fcb48e2983 100644 --- a/apps/federation/l10n/cs_CZ.js +++ b/apps/federation/l10n/cs_CZ.js @@ -3,13 +3,16 @@ OC.L10N.register( { "Added to the list of trusted servers" : "Přidán na seznam důvěryhodných serverů.", "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 found" : "Nenalezen žádný server ke sdružování", + "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í", "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 Nextcloud server" : "+ Přidat Nextcloud server", - "Nextcloud Server" : "Server Nextcloud" + "Nextcloud Server" : "Server Nextcloud", + "Server added to the list of trusted Nextclouds" : "Server přidán do seznamu důvěryhodných serverů Nextcloud", + "No Nextcloud server found" : "Nextcloud server nenalezen", + "Trusted Nextcloud Servers" : "Důvěryhodné Nextcloud servery" }, "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/apps/federation/l10n/cs_CZ.json b/apps/federation/l10n/cs_CZ.json index 36d7726e0e6..0d8bd1b74f3 100644 --- a/apps/federation/l10n/cs_CZ.json +++ b/apps/federation/l10n/cs_CZ.json @@ -1,13 +1,16 @@ { "translations": { "Added to the list of trusted servers" : "Přidán na seznam důvěryhodných serverů.", "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 found" : "Nenalezen žádný server ke sdružování", + "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í", "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 Nextcloud server" : "+ Přidat Nextcloud server", - "Nextcloud Server" : "Server Nextcloud" + "Nextcloud Server" : "Server Nextcloud", + "Server added to the list of trusted Nextclouds" : "Server přidán do seznamu důvěryhodných serverů Nextcloud", + "No Nextcloud server found" : "Nextcloud server nenalezen", + "Trusted Nextcloud Servers" : "Důvěryhodné Nextcloud servery" },"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 f53f4ebd1bd..13496d63987 100644 --- a/apps/federation/l10n/de.js +++ b/apps/federation/l10n/de.js @@ -3,13 +3,17 @@ OC.L10N.register( { "Added to the list of trusted servers" : "Der Liste der vertrauenswürdigen Server hinzugefügt", "Server is already in the list of trusted servers." : "Server ist bereits in der Liste der vertrauenswürdigen Servern.", - "No server to federate found" : "Keinen Server gefunden, der sich verbinden ließe.", + "No server to federate with found" : "Kein server Gebunden, der sich verbinden ließe", "Could not add server" : "Konnte Server nicht hinzufügen", "Federation" : "Federation", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federation erlaubt es Dir, dich mit anderen vertrauenswürdigen Servern zu verbinden um das Benutzerverzeichnis auszutauschen. Diese Funktion wird beispielsweise für die Autovervollständigung externer Benutzer genutzt und ermöglicht das Teilen von Inhalten mit ihnen (\"federated sharing\").", "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 Nextcloud server" : "+ Nextcloud Server hinzufügen", - "Nextcloud Server" : "Nextcloud Server" + "Nextcloud Server" : "Nextcloud Server", + "Server added to the list of trusted Nextclouds" : "Server zur Liste der vertrauenswürdigen Nextclouds hinzugefügt", + "No Nextcloud server found" : "Kein Nextcloud Server gefunden", + "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Nextcloud Federation erlaubt es Dir, mit anderem vertrautem Nextcloud Server in Verbindung zu stehen, um Benutzerverzeichnise auszutauschen. Zum Beispiel wird das verwendet, um eine automatische Vervollständigung der externen Benutzer zu ermöglichen.", + "Trusted Nextcloud Servers" : "Vertrauenswürdige Nextcloud Server" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federation/l10n/de.json b/apps/federation/l10n/de.json index 3b925240fc0..db2f303de01 100644 --- a/apps/federation/l10n/de.json +++ b/apps/federation/l10n/de.json @@ -1,13 +1,17 @@ { "translations": { "Added to the list of trusted servers" : "Der Liste der vertrauenswürdigen Server hinzugefügt", "Server is already in the list of trusted servers." : "Server ist bereits in der Liste der vertrauenswürdigen Servern.", - "No server to federate found" : "Keinen Server gefunden, der sich verbinden ließe.", + "No server to federate with found" : "Kein server Gebunden, der sich verbinden ließe", "Could not add server" : "Konnte Server nicht hinzufügen", "Federation" : "Federation", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federation erlaubt es Dir, dich mit anderen vertrauenswürdigen Servern zu verbinden um das Benutzerverzeichnis auszutauschen. Diese Funktion wird beispielsweise für die Autovervollständigung externer Benutzer genutzt und ermöglicht das Teilen von Inhalten mit ihnen (\"federated sharing\").", "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 Nextcloud server" : "+ Nextcloud Server hinzufügen", - "Nextcloud Server" : "Nextcloud Server" + "Nextcloud Server" : "Nextcloud Server", + "Server added to the list of trusted Nextclouds" : "Server zur Liste der vertrauenswürdigen Nextclouds hinzugefügt", + "No Nextcloud server found" : "Kein Nextcloud Server gefunden", + "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Nextcloud Federation erlaubt es Dir, mit anderem vertrautem Nextcloud Server in Verbindung zu stehen, um Benutzerverzeichnise auszutauschen. Zum Beispiel wird das verwendet, um eine automatische Vervollständigung der externen Benutzer zu ermöglichen.", + "Trusted Nextcloud Servers" : "Vertrauenswürdige Nextcloud Server" },"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 9d175ae2768..c83bdad5868 100644 --- a/apps/federation/l10n/de_DE.js +++ b/apps/federation/l10n/de_DE.js @@ -3,13 +3,17 @@ OC.L10N.register( { "Added to the list of trusted servers" : "Der Liste der vertrauenswürdigen Server hinzugefügt", "Server is already in the list of trusted servers." : "Server ist bereits in der Liste der vertrauenswürdigen Servern.", - "No server to federate found" : "Keinen Server gefunden, der sich verbinden ließe.", + "No server to federate with found" : "Kein server Gebunden, der sich verbinden ließe", "Could not add server" : "Konnte Server nicht hinzufügen", "Federation" : "Federation", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federation erlaubt es Ihnen sich mit anderen vertrauenswürdigen Servern zu verbinden um das Benutzerverzeichnis auszutauschen. Diese Funktion wird beispielsweise für die Autovervollständigung externer Benutzer genutzt und ermöglicht das Teilen von Inhalten mit ihnen (\"federated sharing\").", "Add server automatically once a federated share was created successfully" : "Server automatisch hinzufügen sobale eine federated Freigabe erstellt wurde", "Trusted Servers" : "Vertrauenswürdige Server", "+ Add Nextcloud server" : "+ Nextcloud Server hinzufügen", - "Nextcloud Server" : "Nextcloud Server" + "Nextcloud Server" : "Nextcloud Server", + "Server added to the list of trusted Nextclouds" : "Server zur Liste der vertrauenswürdigen Nextclouds hinzugefügt", + "No Nextcloud server found" : "Kein Nextcloud Server gefunden", + "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Nextcloud Federation erlaubt es Dir, mit anderem vertrautem Nextcloud Server in Verbindung zu stehen, um Benutzerverzeichnise auszutauschen. Zum Beispiel wird das verwendet, um eine automatische Vervollständigung der externen Benutzer zu ermöglichen.", + "Trusted Nextcloud Servers" : "Vertrauenswürdige Nextcloud Server" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federation/l10n/de_DE.json b/apps/federation/l10n/de_DE.json index b18b46c70fb..6ca52a00452 100644 --- a/apps/federation/l10n/de_DE.json +++ b/apps/federation/l10n/de_DE.json @@ -1,13 +1,17 @@ { "translations": { "Added to the list of trusted servers" : "Der Liste der vertrauenswürdigen Server hinzugefügt", "Server is already in the list of trusted servers." : "Server ist bereits in der Liste der vertrauenswürdigen Servern.", - "No server to federate found" : "Keinen Server gefunden, der sich verbinden ließe.", + "No server to federate with found" : "Kein server Gebunden, der sich verbinden ließe", "Could not add server" : "Konnte Server nicht hinzufügen", "Federation" : "Federation", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federation erlaubt es Ihnen sich mit anderen vertrauenswürdigen Servern zu verbinden um das Benutzerverzeichnis auszutauschen. Diese Funktion wird beispielsweise für die Autovervollständigung externer Benutzer genutzt und ermöglicht das Teilen von Inhalten mit ihnen (\"federated sharing\").", "Add server automatically once a federated share was created successfully" : "Server automatisch hinzufügen sobale eine federated Freigabe erstellt wurde", "Trusted Servers" : "Vertrauenswürdige Server", "+ Add Nextcloud server" : "+ Nextcloud Server hinzufügen", - "Nextcloud Server" : "Nextcloud Server" + "Nextcloud Server" : "Nextcloud Server", + "Server added to the list of trusted Nextclouds" : "Server zur Liste der vertrauenswürdigen Nextclouds hinzugefügt", + "No Nextcloud server found" : "Kein Nextcloud Server gefunden", + "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Nextcloud Federation erlaubt es Dir, mit anderem vertrautem Nextcloud Server in Verbindung zu stehen, um Benutzerverzeichnise auszutauschen. Zum Beispiel wird das verwendet, um eine automatische Vervollständigung der externen Benutzer zu ermöglichen.", + "Trusted Nextcloud Servers" : "Vertrauenswürdige Nextcloud Server" },"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 d2b98ba657d..153ada95138 100644 --- a/apps/federation/l10n/es.js +++ b/apps/federation/l10n/es.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Added to the list of trusted servers" : "Añadido a la lista de servidores de confianza", "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 found" : "No se han encontrado servidores para federar", "Could not add server" : "No se ha podido añadir el servidor", "Federation" : "Federación", "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. ", diff --git a/apps/federation/l10n/es.json b/apps/federation/l10n/es.json index b3ddc86e439..d4d474b9273 100644 --- a/apps/federation/l10n/es.json +++ b/apps/federation/l10n/es.json @@ -1,7 +1,6 @@ { "translations": { "Added to the list of trusted servers" : "Añadido a la lista de servidores de confianza", "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 found" : "No se han encontrado servidores para federar", "Could not add server" : "No se ha podido añadir el servidor", "Federation" : "Federación", "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. ", diff --git a/apps/federation/l10n/fi_FI.js b/apps/federation/l10n/fi_FI.js index 3a2d85a51b6..53052a96406 100644 --- a/apps/federation/l10n/fi_FI.js +++ b/apps/federation/l10n/fi_FI.js @@ -1,15 +1,17 @@ OC.L10N.register( "federation", { - "Server added to the list of trusted ownClouds" : "Palvelin lisätty luotettujen ownCloudien luetteloon", + "Added to the list of trusted servers" : "Lisätty luotettujen palvelimien luetteloon", "Server is already in the list of trusted servers." : "Palvelin on jo luotettujen palvelimien luettelossa.", - "No ownCloud server found" : "ownCloud-palvelinta ei löydy", + "No server to federate with found" : "Palvelinta johon liittyä ei löytynyt", "Could not add server" : "Palvelimen lisääminen ei onnistunut", "Federation" : "Federaatio", - "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." : "ownCloudin federaatio mahdollistaa yhdistämisen muihin luotettuihin ownCloudeihin käyttäjähakemistojen vaihtamiseksi. Tätä käytetään muun muassa ulkoisten käyttäjien automaattiseen täydentämiseen federoidussa jakamisessa.", + "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 ownCloud Servers" : "Luotetut ownCloud-palvelimet", - "+ Add ownCloud server" : "+ Lisää ownCloud-palvelin", - "ownCloud Server" : "ownCloud-palvelin" + "Trusted Servers" : "Luotetut palvelimet", + "+ Add Nextcloud server" : "+ Lisää Nextcloud-palvelin", + "Nextcloud Server" : "Nextcloud-palvelin", + "Server added to the list of trusted Nextclouds" : "Palvelin lisätty luotettujen palvelimien luetteloon", + "No Nextcloud server found" : "Nextcloud-palvelinta ei löytynyt" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federation/l10n/fi_FI.json b/apps/federation/l10n/fi_FI.json index 8060a437617..4cc9068a74e 100644 --- a/apps/federation/l10n/fi_FI.json +++ b/apps/federation/l10n/fi_FI.json @@ -1,13 +1,15 @@ { "translations": { - "Server added to the list of trusted ownClouds" : "Palvelin lisätty luotettujen ownCloudien luetteloon", + "Added to the list of trusted servers" : "Lisätty luotettujen palvelimien luetteloon", "Server is already in the list of trusted servers." : "Palvelin on jo luotettujen palvelimien luettelossa.", - "No ownCloud server found" : "ownCloud-palvelinta ei löydy", + "No server to federate with found" : "Palvelinta johon liittyä ei löytynyt", "Could not add server" : "Palvelimen lisääminen ei onnistunut", "Federation" : "Federaatio", - "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." : "ownCloudin federaatio mahdollistaa yhdistämisen muihin luotettuihin ownCloudeihin käyttäjähakemistojen vaihtamiseksi. Tätä käytetään muun muassa ulkoisten käyttäjien automaattiseen täydentämiseen federoidussa jakamisessa.", + "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 ownCloud Servers" : "Luotetut ownCloud-palvelimet", - "+ Add ownCloud server" : "+ Lisää ownCloud-palvelin", - "ownCloud Server" : "ownCloud-palvelin" + "Trusted Servers" : "Luotetut palvelimet", + "+ Add Nextcloud server" : "+ Lisää Nextcloud-palvelin", + "Nextcloud Server" : "Nextcloud-palvelin", + "Server added to the list of trusted Nextclouds" : "Palvelin lisätty luotettujen palvelimien luetteloon", + "No Nextcloud server found" : "Nextcloud-palvelinta ei löytynyt" },"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 9113e44017b..a7c54f43911 100644 --- a/apps/federation/l10n/fr.js +++ b/apps/federation/l10n/fr.js @@ -3,13 +3,17 @@ OC.L10N.register( { "Added to the list of trusted servers" : "Ajouté à la liste des serveurs de confiance", "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 found" : "Aucun serveur à fédérer n'a été trouvé", + "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", "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 Nextcloud server" : "+ Ajouter un serveur Nextcloud", - "Nextcloud Server" : "Serveur Nextcloud" + "Nextcloud Server" : "Serveur Nextcloud", + "Server added to the list of trusted Nextclouds" : "Serveur ajouté à la liste des Nextclouds de confiance", + "No Nextcloud server found" : "Aucun serveur Nextcloud trouvé", + "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La « fédération Nextcloud » vous permet de vous connecter avec d'autres serveurs Nextcloud pour échanger la liste des utilisateurs. Par exemple, ce sera utilisé pour auto-compléter les utilisateurs externes lors du partage fédéré.", + "Trusted Nextcloud Servers" : "Serveurs Nextcloud de confiance" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/federation/l10n/fr.json b/apps/federation/l10n/fr.json index 88667336936..8d9bea105f3 100644 --- a/apps/federation/l10n/fr.json +++ b/apps/federation/l10n/fr.json @@ -1,13 +1,17 @@ { "translations": { "Added to the list of trusted servers" : "Ajouté à la liste des serveurs de confiance", "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 found" : "Aucun serveur à fédérer n'a été trouvé", + "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", "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 Nextcloud server" : "+ Ajouter un serveur Nextcloud", - "Nextcloud Server" : "Serveur Nextcloud" + "Nextcloud Server" : "Serveur Nextcloud", + "Server added to the list of trusted Nextclouds" : "Serveur ajouté à la liste des Nextclouds de confiance", + "No Nextcloud server found" : "Aucun serveur Nextcloud trouvé", + "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La « fédération Nextcloud » vous permet de vous connecter avec d'autres serveurs Nextcloud pour échanger la liste des utilisateurs. Par exemple, ce sera utilisé pour auto-compléter les utilisateurs externes lors du partage fédéré.", + "Trusted Nextcloud Servers" : "Serveurs Nextcloud de confiance" },"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 99c1caa7df6..801cd52ae12 100644 --- a/apps/federation/l10n/id.js +++ b/apps/federation/l10n/id.js @@ -3,13 +3,17 @@ OC.L10N.register( { "Added to the list of trusted servers" : "Server telah ditambahkan pada daftar server terpercaya", "Server is already in the list of trusted servers." : "Server sudah ada pada daftar server terpercaya", - "No server to federate found" : "Tidak ada server yang bisa difederasikan", + "No server to federate with found" : "Tidak ada server yang bisa difederasikan", "Could not add server" : "Tidak dapat menambahkan server", "Federation" : "Federasi", "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 Nextcloud server" : "+ Tambahkan server Nextcloud", - "Nextcloud Server" : "Server Nextcloud" + "Nextcloud Server" : "Server Nextcloud", + "Server added to the list of trusted Nextclouds" : "Server telah ditambahkan pada daftar server Nextcloud terpercaya", + "No Nextcloud server found" : "Tidak ada server Nextcloud ditemukan", + "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federasi Nextcloud memungkinkan Anda untuk terhubung dengan server Nextcloud lainnya yang terpercaya untuk menukar direktori pengguna. Contohnya, ini akan digunakan untuk pengisian-otomatis untuk pengguna eksternal untuk pembagian terfederasi.", + "Trusted Nextcloud Servers" : "Server Nextcloud Terpercaya" }, "nplurals=1; plural=0;"); diff --git a/apps/federation/l10n/id.json b/apps/federation/l10n/id.json index 466396e1901..2ca5efeaf2a 100644 --- a/apps/federation/l10n/id.json +++ b/apps/federation/l10n/id.json @@ -1,13 +1,17 @@ { "translations": { "Added to the list of trusted servers" : "Server telah ditambahkan pada daftar server terpercaya", "Server is already in the list of trusted servers." : "Server sudah ada pada daftar server terpercaya", - "No server to federate found" : "Tidak ada server yang bisa difederasikan", + "No server to federate with found" : "Tidak ada server yang bisa difederasikan", "Could not add server" : "Tidak dapat menambahkan server", "Federation" : "Federasi", "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 Nextcloud server" : "+ Tambahkan server Nextcloud", - "Nextcloud Server" : "Server Nextcloud" + "Nextcloud Server" : "Server Nextcloud", + "Server added to the list of trusted Nextclouds" : "Server telah ditambahkan pada daftar server Nextcloud terpercaya", + "No Nextcloud server found" : "Tidak ada server Nextcloud ditemukan", + "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federasi Nextcloud memungkinkan Anda untuk terhubung dengan server Nextcloud lainnya yang terpercaya untuk menukar direktori pengguna. Contohnya, ini akan digunakan untuk pengisian-otomatis untuk pengguna eksternal untuk pembagian terfederasi.", + "Trusted Nextcloud Servers" : "Server Nextcloud Terpercaya" },"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 e7016e9b154..77695a4a42d 100644 --- a/apps/federation/l10n/is.js +++ b/apps/federation/l10n/is.js @@ -3,13 +3,17 @@ OC.L10N.register( { "Added to the list of trusted servers" : "Bætt á lista yfir treysta þjóna", "Server is already in the list of trusted servers." : "Þjónninn er nú þegar á listanum yfir treysta þjóna.", - "No server to federate found" : "Enginn sambandsþjónn fannst", + "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", "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 öðrumtreystum 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 Nextcloud server" : "+ Bæta við Nextcloud þjóni", - "Nextcloud Server" : "Nextcloud þjónn" + "Nextcloud Server" : "Nextcloud þjónn", + "Server added to the list of trusted Nextclouds" : "Þjóninum bætt við listann yfir treyst Nextcloud-ský", + "No Nextcloud server found" : "Enginn Nextcloud-þjónn fannst", + "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Þjónasamband (federation) gerir þér kleift að tengjast öðrumtreystum 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.", + "Trusted Nextcloud Servers" : "Treystir Nextcloud-þjónar" }, "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/apps/federation/l10n/is.json b/apps/federation/l10n/is.json index 4f61cb1258b..49980207ce3 100644 --- a/apps/federation/l10n/is.json +++ b/apps/federation/l10n/is.json @@ -1,13 +1,17 @@ { "translations": { "Added to the list of trusted servers" : "Bætt á lista yfir treysta þjóna", "Server is already in the list of trusted servers." : "Þjónninn er nú þegar á listanum yfir treysta þjóna.", - "No server to federate found" : "Enginn sambandsþjónn fannst", + "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", "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 öðrumtreystum 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 Nextcloud server" : "+ Bæta við Nextcloud þjóni", - "Nextcloud Server" : "Nextcloud þjónn" + "Nextcloud Server" : "Nextcloud þjónn", + "Server added to the list of trusted Nextclouds" : "Þjóninum bætt við listann yfir treyst Nextcloud-ský", + "No Nextcloud server found" : "Enginn Nextcloud-þjónn fannst", + "Nextcloud Federation allows you to connect with other trusted Nextclouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Þjónasamband (federation) gerir þér kleift að tengjast öðrumtreystum 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.", + "Trusted Nextcloud Servers" : "Treystir Nextcloud-þjónar" },"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 25b63e62ce3..1673361ef76 100644 --- a/apps/federation/l10n/it.js +++ b/apps/federation/l10n/it.js @@ -3,13 +3,16 @@ OC.L10N.register( { "Added to the list of trusted servers" : "Aggiunto alla lista dei server affidabili", "Server is already in the list of trusted servers." : "Il server è già nell'elenco dei server affidabili.", - "No server to federate found" : "Non ho trovato alcun server per la federazione", + "No server to federate with found" : "Non ho trovato alcun server per la federazione", "Could not add server" : "Impossibile aggiungere il server", "Federation" : "Federazione", "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 Nextcloud server" : "+ Aggiungi server Nextcloud", - "Nextcloud Server" : "Server Nextcloud" + "Nextcloud Server" : "Server Nextcloud", + "Server added to the list of trusted Nextclouds" : "Server aggiunto all'elenco dei Nextcloud affidabili", + "No Nextcloud server found" : "Nessun server Nextcloud trovato", + "Trusted Nextcloud Servers" : "Server Nextcloud affidabili" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federation/l10n/it.json b/apps/federation/l10n/it.json index 46f6aaaf3ba..1050007abba 100644 --- a/apps/federation/l10n/it.json +++ b/apps/federation/l10n/it.json @@ -1,13 +1,16 @@ { "translations": { "Added to the list of trusted servers" : "Aggiunto alla lista dei server affidabili", "Server is already in the list of trusted servers." : "Il server è già nell'elenco dei server affidabili.", - "No server to federate found" : "Non ho trovato alcun server per la federazione", + "No server to federate with found" : "Non ho trovato alcun server per la federazione", "Could not add server" : "Impossibile aggiungere il server", "Federation" : "Federazione", "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 Nextcloud server" : "+ Aggiungi server Nextcloud", - "Nextcloud Server" : "Server Nextcloud" + "Nextcloud Server" : "Server Nextcloud", + "Server added to the list of trusted Nextclouds" : "Server aggiunto all'elenco dei Nextcloud affidabili", + "No Nextcloud server found" : "Nessun server Nextcloud trovato", + "Trusted Nextcloud Servers" : "Server Nextcloud affidabili" },"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 1f54a86af01..49732c67f4e 100644 --- a/apps/federation/l10n/nl.js +++ b/apps/federation/l10n/nl.js @@ -3,7 +3,7 @@ OC.L10N.register( { "Added to the list of trusted servers" : "Toegevoegd aan de lijst met vertrouwde servers", "Server is already in the list of trusted servers." : "Server bestaat reeds in de lijst van vertrouwde servers.", - "No server to federate found" : "Geen server gevonden om mee te federeren", + "No server to federate with found" : "Geen server gevonden om mee te federeren", "Could not add server" : "Kon server niet toevoegen", "Federation" : "Federatie", "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.", diff --git a/apps/federation/l10n/nl.json b/apps/federation/l10n/nl.json index a413e8dac04..c407db9ed47 100644 --- a/apps/federation/l10n/nl.json +++ b/apps/federation/l10n/nl.json @@ -1,7 +1,7 @@ { "translations": { "Added to the list of trusted servers" : "Toegevoegd aan de lijst met vertrouwde servers", "Server is already in the list of trusted servers." : "Server bestaat reeds in de lijst van vertrouwde servers.", - "No server to federate found" : "Geen server gevonden om mee te federeren", + "No server to federate with found" : "Geen server gevonden om mee te federeren", "Could not add server" : "Kon server niet toevoegen", "Federation" : "Federatie", "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.", diff --git a/apps/federation/l10n/pt_BR.js b/apps/federation/l10n/pt_BR.js index 3ed5852cd79..683c6f2e182 100644 --- a/apps/federation/l10n/pt_BR.js +++ b/apps/federation/l10n/pt_BR.js @@ -3,13 +3,16 @@ OC.L10N.register( { "Added to the list of trusted servers" : "Adicionado a lista de servidores confiáveis.", "Server is already in the list of trusted servers." : "O servidor já está na lista de servidores confiáveis.", - "No server to federate found" : "Nenhum servidor encontrado para federar", + "No server to federate with found" : "Nenhum servidor para associar com o encontrado", "Could not add server" : "Não foi possível adicionar servidor", "Federation" : "Associação", "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 associado foi criado com êxito", "Trusted Servers" : "Servidores confiáveis", "+ Add Nextcloud server" : "+ Adicionar servidor Nextcloud", - "Nextcloud Server" : "Servidor Nextcloud" + "Nextcloud Server" : "Servidor Nextcloud", + "Server added to the list of trusted Nextclouds" : "Adicionado a lista de servidores confiáveis.", + "No Nextcloud server found" : "Servidor Nextcloud não encontrado", + "Trusted Nextcloud Servers" : "Servidores Nextcloud confiáveis" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/federation/l10n/pt_BR.json b/apps/federation/l10n/pt_BR.json index 1568c942408..b2b9f0271f5 100644 --- a/apps/federation/l10n/pt_BR.json +++ b/apps/federation/l10n/pt_BR.json @@ -1,13 +1,16 @@ { "translations": { "Added to the list of trusted servers" : "Adicionado a lista de servidores confiáveis.", "Server is already in the list of trusted servers." : "O servidor já está na lista de servidores confiáveis.", - "No server to federate found" : "Nenhum servidor encontrado para federar", + "No server to federate with found" : "Nenhum servidor para associar com o encontrado", "Could not add server" : "Não foi possível adicionar servidor", "Federation" : "Associação", "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 associado foi criado com êxito", "Trusted Servers" : "Servidores confiáveis", "+ Add Nextcloud server" : "+ Adicionar servidor Nextcloud", - "Nextcloud Server" : "Servidor Nextcloud" + "Nextcloud Server" : "Servidor Nextcloud", + "Server added to the list of trusted Nextclouds" : "Adicionado a lista de servidores confiáveis.", + "No Nextcloud server found" : "Servidor Nextcloud não encontrado", + "Trusted Nextcloud Servers" : "Servidores Nextcloud confiáveis" },"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 e585cd3c39e..7d94f36e47c 100644 --- a/apps/federation/l10n/ru.js +++ b/apps/federation/l10n/ru.js @@ -3,7 +3,7 @@ OC.L10N.register( { "Added to the list of trusted servers" : "Добавлено в список доверенных серверов", "Server is already in the list of trusted servers." : "Сервер уже в списке доверенных серверов.", - "No server to federate found" : "Сервер для объединения не найден", + "No server to federate with found" : "Сервер для объединения не найден", "Could not add server" : "Не удалось добавить сервер", "Federation" : "Объединение", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Объединение серверов позволит Вам подключиться к другим доверенным серверам для обмена каталогами пользователей. Это будет использовано, например, для автоматического завершения внешних пользователей при объединенном общем доступе.", diff --git a/apps/federation/l10n/ru.json b/apps/federation/l10n/ru.json index bdc9958b44b..6a97b31027b 100644 --- a/apps/federation/l10n/ru.json +++ b/apps/federation/l10n/ru.json @@ -1,7 +1,7 @@ { "translations": { "Added to the list of trusted servers" : "Добавлено в список доверенных серверов", "Server is already in the list of trusted servers." : "Сервер уже в списке доверенных серверов.", - "No server to federate found" : "Сервер для объединения не найден", + "No server to federate with found" : "Сервер для объединения не найден", "Could not add server" : "Не удалось добавить сервер", "Federation" : "Объединение", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Объединение серверов позволит Вам подключиться к другим доверенным серверам для обмена каталогами пользователей. Это будет использовано, например, для автоматического завершения внешних пользователей при объединенном общем доступе.", diff --git a/apps/federation/l10n/tr.js b/apps/federation/l10n/tr.js index 93dbe723dd8..df93aab9e06 100644 --- a/apps/federation/l10n/tr.js +++ b/apps/federation/l10n/tr.js @@ -3,7 +3,6 @@ OC.L10N.register( { "Added to the list of trusted servers" : "Güvenilir sunucular listesine eklendi", "Server is already in the list of trusted servers." : "Sunucu zaten güvenilen sunucu listesine eklenmiş.", - "No server to federate found" : "Birleşim sunucusu bulunamadı", "Could not add server" : "Sunucu eklenemedi", "Federation" : "Birleşim", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Birleşim, diğer güvenilir sunucularla dosya/klasör paylaşımı yapmanıza izin verir. \nÖrneğin, harici kullanıcıların klasörleri, otomatik tamamlama için kullanılacaktır.", diff --git a/apps/federation/l10n/tr.json b/apps/federation/l10n/tr.json index 45072b5c9ed..cf8f55e452d 100644 --- a/apps/federation/l10n/tr.json +++ b/apps/federation/l10n/tr.json @@ -1,7 +1,6 @@ { "translations": { "Added to the list of trusted servers" : "Güvenilir sunucular listesine eklendi", "Server is already in the list of trusted servers." : "Sunucu zaten güvenilen sunucu listesine eklenmiş.", - "No server to federate found" : "Birleşim sunucusu bulunamadı", "Could not add server" : "Sunucu eklenemedi", "Federation" : "Birleşim", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Birleşim, diğer güvenilir sunucularla dosya/klasör paylaşımı yapmanıza izin verir. \nÖrneğin, harici kullanıcıların klasörleri, otomatik tamamlama için kullanılacaktır.", diff --git a/apps/federation/lib/AppInfo/Application.php b/apps/federation/lib/AppInfo/Application.php index 5d8da05c8e1..cdc6145dfb4 100644 --- a/apps/federation/lib/AppInfo/Application.php +++ b/apps/federation/lib/AppInfo/Application.php @@ -51,13 +51,6 @@ class Application extends \OCP\AppFramework\App { $this->registerMiddleware(); } - /** - * register setting scripts - */ - public function registerSettings() { - App::registerAdmin('federation', 'settings/settings-admin'); - } - private function registerService() { $container = $this->getContainer(); diff --git a/apps/federation/lib/API/OCSAuthAPI.php b/apps/federation/lib/Controller/OCSAuthAPIController.php index a22de155d4c..6cd3b1890ef 100644 --- a/apps/federation/lib/API/OCSAuthAPI.php +++ b/apps/federation/lib/Controller/OCSAuthAPIController.php @@ -25,11 +25,13 @@ */ -namespace OCA\Federation\API; +namespace OCA\Federation\Controller; use OCA\Federation\DbHandler; use OCA\Federation\TrustedServers; use OCP\AppFramework\Http; +use OCP\AppFramework\OCS\OCSForbiddenException; +use OCP\AppFramework\OCSController; use OCP\BackgroundJob\IJobList; use OCP\ILogger; use OCP\IRequest; @@ -40,12 +42,9 @@ use OCP\Security\ISecureRandom; * * OCS API end-points to exchange shared secret between two connected ownClouds * - * @package OCA\Federation\API + * @package OCA\Federation\Controller */ -class OCSAuthAPI { - - /** @var IRequest */ - private $request; +class OCSAuthAPIController extends OCSController{ /** @var ISecureRandom */ private $secureRandom; @@ -65,6 +64,7 @@ class OCSAuthAPI { /** * OCSAuthAPI constructor. * + * @param string $appName * @param IRequest $request * @param ISecureRandom $secureRandom * @param IJobList $jobList @@ -73,6 +73,7 @@ class OCSAuthAPI { * @param ILogger $logger */ public function __construct( + $appName, IRequest $request, ISecureRandom $secureRandom, IJobList $jobList, @@ -80,7 +81,8 @@ class OCSAuthAPI { DbHandler $dbHandler, ILogger $logger ) { - $this->request = $request; + parent::__construct($appName, $request); + $this->secureRandom = $secureRandom; $this->jobList = $jobList; $this->trustedServers = $trustedServers; @@ -89,18 +91,20 @@ class OCSAuthAPI { } /** + * @NoCSRFRequired + * @PublicPage + * * request received to ask remote server for a shared secret * - * @return \OC_OCS_Result + * @param string $url + * @param string $token + * @return Http\DataResponse + * @throws OCSForbiddenException */ - public function requestSharedSecret() { - - $url = $this->request->getParam('url'); - $token = $this->request->getParam('token'); - + public function requestSharedSecret($url, $token) { if ($this->trustedServers->isTrustedServer($url) === false) { $this->logger->error('remote server not trusted (' . $url . ') while requesting shared secret', ['app' => 'federation']); - return new \OC_OCS_Result(null, HTTP::STATUS_FORBIDDEN); + throw new OCSForbiddenException(); } // if both server initiated the exchange of the shared secret the greater @@ -111,7 +115,7 @@ class OCSAuthAPI { 'remote server (' . $url . ') presented lower token. We will initiate the exchange of the shared secret.', ['app' => 'federation'] ); - return new \OC_OCS_Result(null, HTTP::STATUS_FORBIDDEN); + throw new OCSForbiddenException(); } // we ask for the shared secret so we no longer have to ask the other server @@ -131,23 +135,24 @@ class OCSAuthAPI { ] ); - return new \OC_OCS_Result(null, Http::STATUS_OK); - + return new Http\DataResponse(); } /** + * @NoCSRFRequired + * @PublicPage + * * create shared secret and return it * - * @return \OC_OCS_Result + * @param string $url + * @param string $token + * @return Http\DataResponse + * @throws OCSForbiddenException */ - public function getSharedSecret() { - - $url = $this->request->getParam('url'); - $token = $this->request->getParam('token'); - + public function getSharedSecret($url, $token) { if ($this->trustedServers->isTrustedServer($url) === false) { $this->logger->error('remote server not trusted (' . $url . ') while getting shared secret', ['app' => 'federation']); - return new \OC_OCS_Result(null, HTTP::STATUS_FORBIDDEN); + throw new OCSForbiddenException(); } if ($this->isValidToken($url, $token) === false) { @@ -156,7 +161,7 @@ class OCSAuthAPI { 'remote server (' . $url . ') didn\'t send a valid token (got "' . $token . '" but expected "'. $expectedToken . '") while getting shared secret', ['app' => 'federation'] ); - return new \OC_OCS_Result(null, HTTP::STATUS_FORBIDDEN); + throw new OCSForbiddenException(); } $sharedSecret = $this->secureRandom->generate(32); @@ -165,8 +170,9 @@ class OCSAuthAPI { // reset token after the exchange of the shared secret was successful $this->dbHandler->addToken($url, ''); - return new \OC_OCS_Result(['sharedSecret' => $sharedSecret], Http::STATUS_OK); - + return new Http\DataResponse([ + 'sharedSecret' => $sharedSecret + ]); } protected function isValidToken($url, $token) { diff --git a/apps/federation/lib/Settings/Admin.php b/apps/federation/lib/Settings/Admin.php new file mode 100644 index 00000000000..eccb3237f7d --- /dev/null +++ b/apps/federation/lib/Settings/Admin.php @@ -0,0 +1,69 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\Federation\Settings; + +use OCA\Federation\TrustedServers; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\Settings\ISettings; + +class Admin implements ISettings { + + /** @var TrustedServers */ + private $trustedServers; + + public function __construct(TrustedServers $trustedServers) { + $this->trustedServers = $trustedServers; + } + + /** + * @return TemplateResponse + */ + public function getForm() { + $parameters = [ + 'trustedServers' => $this->trustedServers->getServers(), + 'autoAddServers' => $this->trustedServers->getAutoAddServers(), + ]; + + return new TemplateResponse('federation', 'settings-admin', $parameters, ''); + } + + /** + * @return string the section ID, e.g. 'sharing' + */ + public function getSection() { + return 'sharing'; + } + + /** + * @return int whether the form should be rather on the top or bottom of + * the admin section. The forms are arranged in ascending order of the + * priority values. It is required to return a value between 0 and 100. + * + * E.g.: 70 + */ + public function getPriority() { + return 30; + } + +} diff --git a/apps/federation/settings/settings-admin.php b/apps/federation/settings/settings-admin.php deleted file mode 100644 index aa21a1e9920..00000000000 --- a/apps/federation/settings/settings-admin.php +++ /dev/null @@ -1,43 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Björn Schießle <bjoern@schiessle.org> - * - * @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/> - * - */ - -$template = new OCP\Template('federation', 'settings-admin'); - -$dbHandler = new \OCA\Federation\DbHandler( - \OC::$server->getDatabaseConnection(), - \OC::$server->getL10N('federation') -); - -$trustedServers = new \OCA\Federation\TrustedServers( - $dbHandler, - \OC::$server->getHTTPClientService(), - \OC::$server->getLogger(), - \OC::$server->getJobList(), - \OC::$server->getSecureRandom(), - \OC::$server->getConfig(), - \OC::$server->getEventDispatcher() -); - -$template->assign('trustedServers', $trustedServers->getServers()); -$template->assign('autoAddServers', $trustedServers->getAutoAddServers()); - -return $template->fetchPage(); diff --git a/apps/federation/tests/API/OCSAuthAPITest.php b/apps/federation/tests/Controller/OCSAuthAPIControllerTest.php index 7861e917ff8..2b231b4fca0 100644 --- a/apps/federation/tests/API/OCSAuthAPITest.php +++ b/apps/federation/tests/Controller/OCSAuthAPIControllerTest.php @@ -22,20 +22,21 @@ */ -namespace OCA\Federation\Tests\API; +namespace OCA\Federation\Tests\Controller; use OC\BackgroundJob\JobList; -use OCA\Federation\API\OCSAuthAPI; +use OCA\Federation\Controller\OCSAuthAPIController; use OCA\Federation\DbHandler; use OCA\Federation\TrustedServers; use OCP\AppFramework\Http; +use OCP\AppFramework\OCS\OCSForbiddenException; use OCP\ILogger; use OCP\IRequest; use OCP\Security\ISecureRandom; use Test\TestCase; -class OCSAuthAPITest extends TestCase { +class OCSAuthAPIControllerTest extends TestCase { /** @var \PHPUnit_Framework_MockObject_MockObject | IRequest */ private $request; @@ -55,14 +56,14 @@ class OCSAuthAPITest extends TestCase { /** @var \PHPUnit_Framework_MockObject_MockObject | ILogger */ private $logger; - /** @var OCSAuthApi */ + /** @var OCSAuthAPIController */ private $ocsAuthApi; public function setUp() { parent::setUp(); - $this->request = $this->getMock('OCP\IRequest'); - $this->secureRandom = $this->getMock('OCP\Security\ISecureRandom'); + $this->request = $this->getMockBuilder('OCP\IRequest')->getMock(); + $this->secureRandom = $this->getMockBuilder('OCP\Security\ISecureRandom')->getMock(); $this->trustedServers = $this->getMockBuilder('OCA\Federation\TrustedServers') ->disableOriginalConstructor()->getMock(); $this->dbHandler = $this->getMockBuilder('OCA\Federation\DbHandler') @@ -72,7 +73,8 @@ class OCSAuthAPITest extends TestCase { $this->logger = $this->getMockBuilder('OCP\ILogger') ->disableOriginalConstructor()->getMock(); - $this->ocsAuthApi = new OCSAuthAPI( + $this->ocsAuthApi = new OCSAuthAPIController( + 'federation', $this->request, $this->secureRandom, $this->jobList, @@ -89,21 +91,19 @@ class OCSAuthAPITest extends TestCase { * @param string $token * @param string $localToken * @param bool $isTrustedServer - * @param int $expected + * @param bool $ok */ - public function testRequestSharedSecret($token, $localToken, $isTrustedServer, $expected) { + public function testRequestSharedSecret($token, $localToken, $isTrustedServer, $ok) { $url = 'url'; - $this->request->expects($this->at(0))->method('getParam')->with('url')->willReturn($url); - $this->request->expects($this->at(1))->method('getParam')->with('token')->willReturn($token); $this->trustedServers ->expects($this->once()) ->method('isTrustedServer')->with($url)->willReturn($isTrustedServer); $this->dbHandler->expects($this->any()) ->method('getToken')->with($url)->willReturn($localToken); - if ($expected === Http::STATUS_OK) { + if ($ok) { $this->jobList->expects($this->once())->method('add') ->with('OCA\Federation\BackgroundJob\GetSharedSecret', ['url' => $url, 'token' => $token]); $this->jobList->expects($this->once())->method('remove') @@ -113,15 +113,19 @@ class OCSAuthAPITest extends TestCase { $this->jobList->expects($this->never())->method('remove'); } - $result = $this->ocsAuthApi->requestSharedSecret(); - $this->assertSame($expected, $result->getStatusCode()); + try { + $this->ocsAuthApi->requestSharedSecret($url, $token); + $this->assertTrue($ok); + } catch (OCSForbiddenException $e) { + $this->assertFalse($ok); + } } public function dataTestRequestSharedSecret() { return [ - ['token2', 'token1', true, Http::STATUS_OK], - ['token1', 'token2', false, Http::STATUS_FORBIDDEN], - ['token1', 'token2', true, Http::STATUS_FORBIDDEN], + ['token2', 'token1', true, true], + ['token1', 'token2', false, false], + ['token1', 'token2', true, false], ]; } @@ -130,20 +134,18 @@ class OCSAuthAPITest extends TestCase { * * @param bool $isTrustedServer * @param bool $isValidToken - * @param int $expected + * @param bool $ok */ - public function testGetSharedSecret($isTrustedServer, $isValidToken, $expected) { + public function testGetSharedSecret($isTrustedServer, $isValidToken, $ok) { $url = 'url'; $token = 'token'; - $this->request->expects($this->at(0))->method('getParam')->with('url')->willReturn($url); - $this->request->expects($this->at(1))->method('getParam')->with('token')->willReturn($token); - - /** @var OCSAuthAPI | \PHPUnit_Framework_MockObject_MockObject $ocsAuthApi */ - $ocsAuthApi = $this->getMockBuilder('OCA\Federation\API\OCSAuthAPI') + /** @var OCSAuthAPIController | \PHPUnit_Framework_MockObject_MockObject $ocsAuthApi */ + $ocsAuthApi = $this->getMockBuilder('OCA\Federation\Controller\OCSAuthAPIController') ->setConstructorArgs( [ + 'federation', $this->request, $this->secureRandom, $this->jobList, @@ -159,7 +161,7 @@ class OCSAuthAPITest extends TestCase { $ocsAuthApi->expects($this->any()) ->method('isValidToken')->with($url, $token)->willReturn($isValidToken); - if($expected === Http::STATUS_OK) { + if($ok) { $this->secureRandom->expects($this->once())->method('generate')->with(32) ->willReturn('secret'); $this->trustedServers->expects($this->once()) @@ -173,22 +175,22 @@ class OCSAuthAPITest extends TestCase { $this->dbHandler->expects($this->never())->method('addToken'); } - $result = $ocsAuthApi->getSharedSecret(); - - $this->assertSame($expected, $result->getStatusCode()); - - if ($expected === Http::STATUS_OK) { + try { + $result = $ocsAuthApi->getSharedSecret($url, $token); + $this->assertTrue($ok); $data = $result->getData(); $this->assertSame('secret', $data['sharedSecret']); + } catch (OCSForbiddenException $e) { + $this->assertFalse($ok); } } public function dataTestGetSharedSecret() { return [ - [true, true, Http::STATUS_OK], - [false, true, Http::STATUS_FORBIDDEN], - [true, false, Http::STATUS_FORBIDDEN], - [false, false, Http::STATUS_FORBIDDEN], + [true, true, true], + [false, true, false], + [true, false, false], + [false, false, false], ]; } diff --git a/apps/federation/tests/Settings/AdminTest.php b/apps/federation/tests/Settings/AdminTest.php new file mode 100644 index 00000000000..758bda6bc5e --- /dev/null +++ b/apps/federation/tests/Settings/AdminTest.php @@ -0,0 +1,70 @@ +<?php +/** + * @copyright Copyright (c) 2016 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 OCA\Federation\Tests\Settings; + +use OCA\Federation\Settings\Admin; +use OCA\Federation\TrustedServers; +use OCP\AppFramework\Http\TemplateResponse; +use Test\TestCase; + +class AdminTest extends TestCase { + /** @var Admin */ + private $admin; + /** @var TrustedServers */ + private $trustedServers; + + public function setUp() { + parent::setUp(); + $this->trustedServers = $this->getMockBuilder('\OCA\Federation\TrustedServers')->disableOriginalConstructor()->getMock(); + $this->admin = new Admin( + $this->trustedServers + ); + } + + public function testGetForm() { + $this->trustedServers + ->expects($this->once()) + ->method('getServers') + ->willReturn(['myserver', 'secondserver']); + $this->trustedServers + ->expects($this->once()) + ->method('getAutoAddServers') + ->willReturn(['autoserver1', 'autoserver2']); + + $params = [ + 'trustedServers' => ['myserver', 'secondserver'], + 'autoAddServers' => ['autoserver1', 'autoserver2'], + ]; + $expected = new TemplateResponse('federation', 'settings-admin', $params, ''); + $this->assertEquals($expected, $this->admin->getForm()); + } + + public function testGetSection() { + $this->assertSame('sharing', $this->admin->getSection()); + } + + public function testGetPriority() { + $this->assertSame(30, $this->admin->getPriority()); + } +} diff --git a/apps/files/admin.php b/apps/files/admin.php deleted file mode 100644 index ad7b16a3a23..00000000000 --- a/apps/files/admin.php +++ /dev/null @@ -1,51 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Clark Tomlinson <fallen013@gmail.com> - * @author Frank Karlitschek <frank@karlitschek.de> - * @author Michael Göhler <somebody.here@gmx.de> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin Appelman <robin@icewind.nl> - * @author Robin McCorkell <robin@mccorkell.me.uk> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -$htaccessWorking=(getenv('htaccessWorking')=='true'); -$upload_max_filesize = OC::$server->getIniWrapper()->getBytes('upload_max_filesize'); -$post_max_size = OC::$server->getIniWrapper()->getBytes('post_max_size'); -$maxUploadFilesize = OCP\Util::humanFileSize(min($upload_max_filesize, $post_max_size)); -if($_POST && \OC::$server->getRequest()->passesCSRFCheck()) { - if(isset($_POST['maxUploadSize'])) { - if(($setMaxSize = OC_Files::setUploadLimit(OCP\Util::computerFileSize($_POST['maxUploadSize']))) !== false) { - $maxUploadFilesize = OCP\Util::humanFileSize($setMaxSize); - } - } -} - -$htaccessWritable=is_writable(OC::$SERVERROOT.'/.htaccess'); -$userIniWritable=is_writable(OC::$SERVERROOT.'/.user.ini'); - -$tmpl = new OCP\Template( 'files', 'admin' ); -$tmpl->assign( 'uploadChangable', ($htaccessWorking and $htaccessWritable) or $userIniWritable ); -$tmpl->assign( 'uploadMaxFilesize', $maxUploadFilesize); -// max possible makes only sense on a 32 bit system -$tmpl->assign( 'displayMaxPossibleUploadSize', PHP_INT_SIZE===4); -$tmpl->assign( 'maxPossibleUploadSize', OCP\Util::humanFileSize(PHP_INT_MAX)); -return $tmpl->fetchPage(); diff --git a/apps/files/appinfo/app.php b/apps/files/appinfo/app.php index 850c335c27d..afb327e24ba 100644 --- a/apps/files/appinfo/app.php +++ b/apps/files/appinfo/app.php @@ -26,8 +26,6 @@ * along with this program. If not, see <http://www.gnu.org/licenses/> * */ -\OCP\App::registerAdmin('files', 'admin'); - $l = \OC::$server->getL10N('files'); \OC::$server->getNavigationManager()->add(function () { diff --git a/apps/files/appinfo/info.xml b/apps/files/appinfo/info.xml index 8b26a6af711..513940f73a9 100644 --- a/apps/files/appinfo/info.xml +++ b/apps/files/appinfo/info.xml @@ -6,7 +6,7 @@ <licence>AGPL</licence> <author>Robin Appelman, Vincent Petry</author> <default_enable/> - <version>1.6.0</version> + <version>1.6.1</version> <types> <filesystem/> </types> @@ -22,4 +22,8 @@ <job>OCA\Files\BackgroundJob\DeleteOrphanedItems</job> <job>OCA\Files\BackgroundJob\CleanupFileLocks</job> </background-jobs> + + <settings> + <admin>OCA\Files\Settings\Admin</admin> + </settings> </info> diff --git a/apps/files/appinfo/routes.php b/apps/files/appinfo/routes.php index 7b5ac63a160..6237e8413ed 100644 --- a/apps/files/appinfo/routes.php +++ b/apps/files/appinfo/routes.php @@ -70,6 +70,11 @@ $application->registerRoutes( 'url' => '/', 'verb' => 'GET', ], + [ + 'name' => 'settings#setMaxUploadSize', + 'url' => '/settings/maxUpload', + 'verb' => 'POST', + ] ) ) ); diff --git a/apps/files/css/files.css b/apps/files/css/files.css index 004a0b9ff50..acd7f4af25d 100644 --- a/apps/files/css/files.css +++ b/apps/files/css/files.css @@ -87,26 +87,26 @@ /* icons for sidebar */ .nav-icon-files { - background-image: url('../img/folder.svg'); + background-image: url('../img/folder.svg?v=1'); } .nav-icon-recent { - background-image: url('../img/recent.svg'); + background-image: url('../img/recent.svg?v=1'); } .nav-icon-favorites { - background-image: url('../img/star.svg'); + background-image: url('../img/star.svg?v=1'); } .nav-icon-sharingin, .nav-icon-sharingout { - background-image: url('../img/share.svg'); + background-image: url('../img/share.svg?v=1'); } .nav-icon-sharinglinks { - background-image: url('../img/public.svg'); + background-image: url('../img/public.svg?v=1'); } .nav-icon-extstoragemounts { - background-image: url('../img/external.svg'); + background-image: url('../img/external.svg?v=1'); } .nav-icon-trashbin { - background-image: url('../img/delete.svg'); + background-image: url('../img/delete.svg?v=1'); } #app-navigation .nav-files a.nav-icon-files { @@ -348,6 +348,21 @@ table td.filename .nametext { margin-right: 50px; } +.hide-hidden-files #fileList tr.hidden-file, +.hide-hidden-files #fileList tr.hidden-file.dragging { + display: none; +} + +#fileList tr.animate-opacity { + -webkit-transition:opacity 250ms; + -moz-transition:opacity 250ms; + -o-transition:opacity 250ms; + transition:opacity 250ms; +} +#fileList tr.dragging { + opacity: 0.2; +} + table td.filename .nametext .innernametext { text-overflow: ellipsis; overflow: hidden; diff --git a/apps/files/js/admin.js b/apps/files/js/admin.js index dcfec824cfe..6afd77eb03e 100644 --- a/apps/files/js/admin.js +++ b/apps/files/js/admin.js @@ -8,6 +8,46 @@ * */ +(function() { + if (!OCA.Files) { + /** + * Namespace for the files app + * @namespace OCA.Files + */ + OCA.Files = {}; + } + + /** + * @namespace OCA.Files.Admin + */ + OCA.Files.Admin = { + initialize: function() { + $('#submitMaxUpload').on('click', _.bind(this._onClickSubmitMaxUpload, this)); + }, + + _onClickSubmitMaxUpload: function () { + OC.msg.startSaving('#maxUploadSizeSettingsMsg'); + + var request = $.ajax({ + url: OC.generateUrl('/apps/files/settings/maxUpload'), + type: 'POST', + data: { + maxUploadSize: $('#maxUploadSize').val() + } + }); + + request.done(function (data) { + $('#maxUploadSize').val(data.maxUploadSize); + OC.msg.finishedSuccess('#maxUploadSizeSettingsMsg', 'Saved'); + }); + + request.fail(function () { + OC.msg.finishedError('#maxUploadSizeSettingsMsg', 'Error'); + }); + } + } +})(); + function switchPublicFolder() { var publicEnable = $('#publicEnable').is(':checked'); // find all radiobuttons of that group @@ -19,6 +59,8 @@ function switchPublicFolder() { } $(document).ready(function() { + OCA.Files.Admin.initialize(); + // Execute the function after loading DOM tree switchPublicFolder(); $('#publicEnable').click(function() { diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index f50322953d2..ca41012764a 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -199,6 +199,7 @@ * @param options.folderDropOptions folder drop options, disabled by default * @param options.scrollTo name of file to scroll to after the first load * @param {OC.Files.Client} [options.filesClient] files API client + * @param {OC.Backbone.Model} [options.filesConfig] files app configuration * @private */ initialize: function($el, options) { @@ -212,11 +213,9 @@ this._filesConfig = options.config; } else if (!_.isUndefined(OCA.Files) && !_.isUndefined(OCA.Files.App)) { this._filesConfig = OCA.Files.App.getFilesConfig(); - } - - if (!_.isUndefined(this._filesConfig)) { - this._filesConfig.on('change:showhidden', function() { - self.setFiles(self.files); + } else { + this._filesConfig = new OC.Backbone.Model({ + 'showhidden': false }); } @@ -241,6 +240,22 @@ this.$table = $el.find('table:first'); this.$fileList = $el.find('#fileList'); + if (!_.isUndefined(this._filesConfig)) { + this._filesConfig.on('change:showhidden', function() { + var showHidden = this.get('showhidden'); + self.$el.toggleClass('hide-hidden-files', !showHidden); + self.updateSelectionSummary(); + + if (!showHidden) { + // hiding files could make the page too small, need to try rendering next page + self._onScroll(); + } + }); + + this.$el.toggleClass('hide-hidden-files', !this._filesConfig.get('showhidden')); + } + + if (_.isUndefined(options.detailsViewEnabled) || options.detailsViewEnabled) { this._detailsView = new OCA.Files.DetailsView(); this._detailsView.$el.insertBefore(this.$el); @@ -255,7 +270,7 @@ this.files = []; this._selectedFiles = {}; - this._selectionSummary = new OCA.Files.FileSummary(); + this._selectionSummary = new OCA.Files.FileSummary(undefined, {config: this._filesConfig}); // dummy root dir info this.dirInfo = new OC.Files.FileInfo({}); @@ -881,10 +896,6 @@ * @return array of DOM elements of the newly added files */ _nextPage: function(animate) { - // Save full files list while rendering - var allFiles = this.files; - this.files = this._filterHiddenFiles(this.files); - var index = this.$fileList.children().length, count = this.pageSize(), hidden, @@ -932,9 +943,6 @@ }, 0); } - // Restore full files list after rendering - this.files = allFiles; - return newTrs; }, @@ -973,8 +981,6 @@ this.$el.find('.select-all').prop('checked', false); // Save full files list while rendering - var allFiles = this.files; - this.files = this._filterHiddenFiles(this.files); this.isEmpty = this.files.length === 0; this._nextPage(); @@ -988,9 +994,6 @@ this.updateSelectionSummary(); $(window).scrollTop(0); - // Restore full files list after rendering - this.files = allFiles; - this.$fileList.trigger(jQuery.Event('updated')); _.defer(function() { self.$el.closest('#app-content').trigger(jQuery.Event('apprendered')); @@ -998,18 +1001,14 @@ }, /** - * Filter hidden files of the given filesArray (dot-files) + * Returns whether the given file info must be hidden * - * @param filesArray files to be filtered - * @returns {array} + * @param {OC.Files.FileInfo} fileInfo file info + * + * @return {boolean} true if the file is a hidden file, false otherwise */ - _filterHiddenFiles: function(files) { - if (_.isUndefined(this._filesConfig) || this._filesConfig.get('showhidden')) { - return files; - } - return _.filter(files, function(file) { - return file.name.indexOf('.') !== 0; - }); + _isHiddenFile: function(file) { + return file.name && file.name.charAt(0) === '.'; }, /** @@ -1334,6 +1333,10 @@ tr.addClass('hidden'); } + if (this._isHiddenFile(fileData)) { + tr.addClass('hidden-file'); + } + // display actions this.fileActions.display(filenameTd, !options.silent, this); @@ -2307,7 +2310,7 @@ var $tr = $('<tr class="summary"></tr>'); this.$el.find('tfoot').append($tr); - return new OCA.Files.FileSummary($tr); + return new OCA.Files.FileSummary($tr, {config: this._filesConfig}); }, updateEmptyContent: function() { var permissions = this.getDirectoryPermissions(); @@ -2454,6 +2457,7 @@ var summary = this._selectionSummary.summary; var selection; + var showHidden = !!this._filesConfig.get('showhidden'); if (summary.totalFiles === 0 && summary.totalDirs === 0) { this.$el.find('#headerName a.name>span:first').text(t('files','Name')); this.$el.find('#headerSize a>span:first').text(t('files','Size')); @@ -2480,6 +2484,11 @@ selection = fileInfo; } + if (!showHidden && summary.totalHidden > 0) { + var hiddenInfo = n('files', 'including %n hidden', 'including %n hidden', summary.totalHidden); + selection += ' (' + hiddenInfo + ')'; + } + this.$el.find('#headerName a.name>span:first').text(selection); this.$el.find('#modified a>span:first').text(''); this.$el.find('table').addClass('multiselect'); diff --git a/apps/files/js/files.js b/apps/files/js/files.js index 8542bd50476..53e07ddb090 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -391,14 +391,18 @@ var dragOptions={ if (!$selectedFiles.length) { $selectedFiles = $(this); } - $selectedFiles.closest('tr').fadeTo(250, 0.2).addClass('dragging'); + $selectedFiles.closest('tr').addClass('animate-opacity dragging'); }, stop: function(event, ui) { var $selectedFiles = $('td.filename input:checkbox:checked'); if (!$selectedFiles.length) { $selectedFiles = $(this); } - $selectedFiles.closest('tr').fadeTo(250, 1).removeClass('dragging'); + var $tr = $selectedFiles.closest('tr'); + $tr.removeClass('dragging'); + setTimeout(function() { + $tr.removeClass('animate-opacity'); + }, 300); }, drag: function(event, ui) { var scrollingArea = FileList.$container; diff --git a/apps/files/js/filesummary.js b/apps/files/js/filesummary.js index a4cefe692a8..519718cfc82 100644 --- a/apps/files/js/filesummary.js +++ b/apps/files/js/filesummary.js @@ -20,6 +20,15 @@ */ (function() { + var INFO_TEMPLATE = + '<span class="info">' + + '<span class="dirinfo"></span>' + + '<span class="connector"> and </span>' + + '<span class="fileinfo"></span>' + + '<span class="hiddeninfo"></span>' + + '<span class="filter"></span>' + + '</span>'; + /** * The FileSummary class encapsulates the file summary values and * the logic to render it in the given container @@ -28,26 +37,51 @@ * @memberof OCA.Files * * @param $tr table row element + * @param {OC.Backbone.Model} [options.filesConfig] files app configuration */ - var FileSummary = function($tr) { + var FileSummary = function($tr, options) { + options = options || {}; + var self = this; this.$el = $tr; + var filesConfig = options.config; + if (filesConfig) { + this._showHidden = !!filesConfig.get('showhidden'); + filesConfig.on('change:showhidden', function() { + self._showHidden = !!this.get('showhidden'); + self.update(); + }); + } this.clear(); this.render(); }; FileSummary.prototype = { + _showHidden: null, + summary: { totalFiles: 0, totalDirs: 0, + totalHidden: 0, totalSize: 0, filter:'', sumIsPending:false }, /** + * Returns whether the given file info must be hidden + * + * @param {OC.Files.FileInfo} fileInfo file info + * + * @return {boolean} true if the file is a hidden file, false otherwise + */ + _isHiddenFile: function(file) { + return file.name && file.name.charAt(0) === '.'; + }, + + /** * Adds file - * @param file file to add - * @param update whether to update the display + * @param {OC.Files.FileInfo} file file to add + * @param {boolean} update whether to update the display */ add: function(file, update) { if (file.name && file.name.toLowerCase().indexOf(this.summary.filter) === -1) { @@ -59,6 +93,10 @@ else { this.summary.totalFiles++; } + if (this._isHiddenFile(file)) { + this.summary.totalHidden++; + } + var size = parseInt(file.size, 10) || 0; if (size >=0) { this.summary.totalSize += size; @@ -71,8 +109,8 @@ }, /** * Removes file - * @param file file to remove - * @param update whether to update the display + * @param {OC.Files.FileInfo} file file to remove + * @param {boolean} update whether to update the display */ remove: function(file, update) { if (file.name && file.name.toLowerCase().indexOf(this.summary.filter) === -1) { @@ -84,6 +122,9 @@ else { this.summary.totalFiles--; } + if (this._isHiddenFile(file)) { + this.summary.totalHidden--; + } var size = parseInt(file.size, 10) || 0; if (size >=0) { this.summary.totalSize -= size; @@ -111,6 +152,7 @@ var summary = { totalDirs: 0, totalFiles: 0, + totalHidden: 0, totalSize: 0, filter: this.summary.filter, sumIsPending: false @@ -127,6 +169,9 @@ else { summary.totalFiles++; } + if (this._isHiddenFile(file)) { + summary.totalHidden++; + } var size = parseInt(file.size, 10) || 0; if (size >=0) { summary.totalSize += size; @@ -154,6 +199,13 @@ this.update(); }, + _infoTemplate: function(data) { + if (!this._infoTemplateCompiled) { + this._infoTemplateCompiled = Handlebars.compile(INFO_TEMPLATE); + } + return this._infoTemplateCompiled(data); + }, + /** * Renders the file summary element */ @@ -171,10 +223,12 @@ var $fileInfo = this.$el.find('.fileinfo'); var $connector = this.$el.find('.connector'); var $filterInfo = this.$el.find('.filter'); + var $hiddenInfo = this.$el.find('.hiddeninfo'); // Substitute old content with new translations $dirInfo.html(n('files', '%n folder', '%n folders', this.summary.totalDirs)); $fileInfo.html(n('files', '%n file', '%n files', this.summary.totalFiles)); + $hiddenInfo.html(' (' + n('files', 'including %n hidden', 'including %n hidden', this.summary.totalHidden) + ')'); var fileSize = this.summary.sumIsPending ? t('files', 'Pending') : OC.Util.humanFileSize(this.summary.totalSize); this.$el.find('.filesize').html(fileSize); @@ -194,6 +248,7 @@ if (this.summary.totalDirs > 0 && this.summary.totalFiles > 0) { $connector.removeClass('hidden'); } + $hiddenInfo.toggleClass('hidden', this.summary.totalHidden === 0 || this._showHidden) if (this.summary.filter === '') { $filterInfo.html(''); $filterInfo.addClass('hidden'); @@ -206,19 +261,7 @@ if (!this.$el) { return; } - // TODO: ideally this should be separate to a template or something var summary = this.summary; - var directoryInfo = n('files', '%n folder', '%n folders', summary.totalDirs); - var fileInfo = n('files', '%n file', '%n files', summary.totalFiles); - var filterInfo = ''; - if (this.summary.filter !== '') { - filterInfo = ' ' + n('files', 'matches \'{filter}\'', 'match \'{filter}\'', summary.totalFiles + summary.totalDirs, {filter: summary.filter}); - } - - var infoVars = { - dirs: '<span class="dirinfo">'+directoryInfo+'</span><span class="connector">', - files: '</span><span class="fileinfo">'+fileInfo+'</span>' - }; // don't show the filesize column, if filesize is NaN (e.g. in trashbin) var fileSize = ''; @@ -227,15 +270,14 @@ fileSize = '<td class="filesize">' + fileSize + '</td>'; } - var info = t('files', '{dirs} and {files}', infoVars, null, {'escape': false}); - - var $summary = $('<td><span class="info">'+info+'<span class="filter">'+filterInfo+'</span></span></td>'+fileSize+'<td class="date"></td>'); - - if (!this.summary.totalFiles && !this.summary.totalDirs) { - this.$el.addClass('hidden'); - } - + var $summary = $( + '<td>' + this._infoTemplate() + '</td>' + + fileSize + + '<td class="date"></td>' + ); + this.$el.addClass('hidden'); this.$el.append($summary); + this.update(); } }; OCA.Files.FileSummary = FileSummary; diff --git a/apps/files/l10n/cs_CZ.js b/apps/files/l10n/cs_CZ.js index 53123735bd7..8d35fb78977 100644 --- a/apps/files/l10n/cs_CZ.js +++ b/apps/files/l10n/cs_CZ.js @@ -132,6 +132,8 @@ OC.L10N.register( "No favorites" : "Žádné oblíbené", "Files and folders you mark as favorite will show up here" : "Soubory a adresáře označené jako oblíbené budou zobrazeny zde", "Text file" : "Textový soubor", - "New text file.txt" : "Nový textový soubor.txt" + "New text file.txt" : "Nový textový soubor.txt", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Použijte tuto adresu pro <a href=\"%s\" target=\"_blank\">přístup ke svým Souborům přes WebDAV</a>", + "Cancel upload" : "Ukončit nahrávání" }, "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/apps/files/l10n/cs_CZ.json b/apps/files/l10n/cs_CZ.json index cdee6637638..496d55f40c5 100644 --- a/apps/files/l10n/cs_CZ.json +++ b/apps/files/l10n/cs_CZ.json @@ -130,6 +130,8 @@ "No favorites" : "Žádné oblíbené", "Files and folders you mark as favorite will show up here" : "Soubory a adresáře označené jako oblíbené budou zobrazeny zde", "Text file" : "Textový soubor", - "New text file.txt" : "Nový textový soubor.txt" + "New text file.txt" : "Nový textový soubor.txt", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Použijte tuto adresu pro <a href=\"%s\" target=\"_blank\">přístup ke svým Souborům přes WebDAV</a>", + "Cancel upload" : "Ukončit nahrávání" },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js index 5e9c8cff6a7..25c25d66ff5 100644 --- a/apps/files/l10n/de.js +++ b/apps/files/l10n/de.js @@ -65,7 +65,7 @@ OC.L10N.register( "Could not create file \"{file}\"" : "Die Datei konnte nicht erstellt werden \"{file}\"", "Could not create file \"{file}\" because it already exists" : "Die Datei konnte nicht erstellt werden \"{file}\", da sie bereits existiert.", "Could not create folder \"{dir}\"" : "Der Ordner konnte nicht erstellt werden \"{dir}\"", - "Could not create folder \"{dir}\" because it already exists" : "Der Ordner konnte nicht erstellt werden \"{dir}\", da dieser bereits existiert", + "Could not create folder \"{dir}\" because it already exists" : "Der Ordner \"{dir}\" konnte nicht erstellt werden , da dieser bereits existiert", "Error deleting file \"{fileName}\"." : "Fehler beim Löschen der Datei \"{fileName}\"", "No entries in this folder match '{filter}'" : "Keine Einträge in diesem Ordner stimmen mit '{filter}' überein", "Name" : "Name", @@ -132,6 +132,8 @@ OC.L10N.register( "No favorites" : "Keine Favoriten", "Files and folders you mark as favorite will show up here" : "Dateien und Ordner, die als Favoriten markiert werden, erscheinen hier", "Text file" : "Textdatei", - "New text file.txt" : "Neue Textdatei.txt" + "New text file.txt" : "Neue Textdatei.txt", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Diese Adresse benutzen, um <a href=\"%s\" target=\"_blank\">über WebDAV auf deine Dateien zuzugreifen</a>", + "Cancel upload" : "Hochladen abbrechen" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json index 12f845fabae..181a64dd0a9 100644 --- a/apps/files/l10n/de.json +++ b/apps/files/l10n/de.json @@ -63,7 +63,7 @@ "Could not create file \"{file}\"" : "Die Datei konnte nicht erstellt werden \"{file}\"", "Could not create file \"{file}\" because it already exists" : "Die Datei konnte nicht erstellt werden \"{file}\", da sie bereits existiert.", "Could not create folder \"{dir}\"" : "Der Ordner konnte nicht erstellt werden \"{dir}\"", - "Could not create folder \"{dir}\" because it already exists" : "Der Ordner konnte nicht erstellt werden \"{dir}\", da dieser bereits existiert", + "Could not create folder \"{dir}\" because it already exists" : "Der Ordner \"{dir}\" konnte nicht erstellt werden , da dieser bereits existiert", "Error deleting file \"{fileName}\"." : "Fehler beim Löschen der Datei \"{fileName}\"", "No entries in this folder match '{filter}'" : "Keine Einträge in diesem Ordner stimmen mit '{filter}' überein", "Name" : "Name", @@ -130,6 +130,8 @@ "No favorites" : "Keine Favoriten", "Files and folders you mark as favorite will show up here" : "Dateien und Ordner, die als Favoriten markiert werden, erscheinen hier", "Text file" : "Textdatei", - "New text file.txt" : "Neue Textdatei.txt" + "New text file.txt" : "Neue Textdatei.txt", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Diese Adresse benutzen, um <a href=\"%s\" target=\"_blank\">über WebDAV auf deine Dateien zuzugreifen</a>", + "Cancel upload" : "Hochladen abbrechen" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js index 90f3f9d1125..075f3156ee5 100644 --- a/apps/files/l10n/de_DE.js +++ b/apps/files/l10n/de_DE.js @@ -132,6 +132,8 @@ OC.L10N.register( "No favorites" : "Keine Favoriten", "Files and folders you mark as favorite will show up here" : "Dateien und Ordner, die Sie als Favoriten kennzeichnen, werden hier erscheinen", "Text file" : "Textdatei", - "New text file.txt" : "Neue Textdatei file.txt" + "New text file.txt" : "Neue Textdatei file.txt", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Benutze diese Adresse, um <a href=\"%s\" target=\"_blank\">via WebDAV auf deine Dateien zuzugreifen</a>", + "Cancel upload" : "Hochladen abbrechen" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json index 58652381a2a..84b3e9393a0 100644 --- a/apps/files/l10n/de_DE.json +++ b/apps/files/l10n/de_DE.json @@ -130,6 +130,8 @@ "No favorites" : "Keine Favoriten", "Files and folders you mark as favorite will show up here" : "Dateien und Ordner, die Sie als Favoriten kennzeichnen, werden hier erscheinen", "Text file" : "Textdatei", - "New text file.txt" : "Neue Textdatei file.txt" + "New text file.txt" : "Neue Textdatei file.txt", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Benutze diese Adresse, um <a href=\"%s\" target=\"_blank\">via WebDAV auf deine Dateien zuzugreifen</a>", + "Cancel upload" : "Hochladen abbrechen" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/id.js b/apps/files/l10n/id.js index 368367bc51e..b840eb59cd8 100644 --- a/apps/files/l10n/id.js +++ b/apps/files/l10n/id.js @@ -132,6 +132,8 @@ OC.L10N.register( "No favorites" : "Tidak ada favorit", "Files and folders you mark as favorite will show up here" : "Berkas dan folder yang Anda tandai sebagai favorit akan ditampilkan disini.", "Text file" : "Berkas teks", - "New text file.txt" : "Teks baru file.txt" + "New text file.txt" : "Teks baru file.txt", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Gunakan alamat ini untuk <a href=\"%s\" target=\"_blank\">mengakses berkas Anda melalui WebDAV</a>", + "Cancel upload" : "Batalkan pengunggahan" }, "nplurals=1; plural=0;"); diff --git a/apps/files/l10n/id.json b/apps/files/l10n/id.json index 6639be657e7..f4bb1cb48e1 100644 --- a/apps/files/l10n/id.json +++ b/apps/files/l10n/id.json @@ -130,6 +130,8 @@ "No favorites" : "Tidak ada favorit", "Files and folders you mark as favorite will show up here" : "Berkas dan folder yang Anda tandai sebagai favorit akan ditampilkan disini.", "Text file" : "Berkas teks", - "New text file.txt" : "Teks baru file.txt" + "New text file.txt" : "Teks baru file.txt", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Gunakan alamat ini untuk <a href=\"%s\" target=\"_blank\">mengakses berkas Anda melalui WebDAV</a>", + "Cancel upload" : "Batalkan pengunggahan" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files/l10n/is.js b/apps/files/l10n/is.js index 989dc468f0c..cce6da5945e 100644 --- a/apps/files/l10n/is.js +++ b/apps/files/l10n/is.js @@ -132,6 +132,8 @@ OC.L10N.register( "No favorites" : "Engin eftirlæti", "Files and folders you mark as favorite will show up here" : "Skrár og möppur sem þú merkir sem uppáhald birtast hér", "Text file" : "Textaskrá", - "New text file.txt" : "Ný textaskrá.txt" + "New text file.txt" : "Ný textaskrá.txt", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Notaðu þetta vistfang til að <a href=\"%s\" target=\"_blank\">nálgast skrárnar þínar með WebDAV</a>", + "Cancel upload" : "Hætta við innsendingu" }, "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/apps/files/l10n/is.json b/apps/files/l10n/is.json index 65da27622f8..7f7dba8bd46 100644 --- a/apps/files/l10n/is.json +++ b/apps/files/l10n/is.json @@ -130,6 +130,8 @@ "No favorites" : "Engin eftirlæti", "Files and folders you mark as favorite will show up here" : "Skrár og möppur sem þú merkir sem uppáhald birtast hér", "Text file" : "Textaskrá", - "New text file.txt" : "Ný textaskrá.txt" + "New text file.txt" : "Ný textaskrá.txt", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Notaðu þetta vistfang til að <a href=\"%s\" target=\"_blank\">nálgast skrárnar þínar með WebDAV</a>", + "Cancel upload" : "Hætta við innsendingu" },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" }
\ No newline at end of file diff --git a/apps/files/l10n/it.js b/apps/files/l10n/it.js index 363419c3643..3865d5861a2 100644 --- a/apps/files/l10n/it.js +++ b/apps/files/l10n/it.js @@ -132,6 +132,8 @@ OC.L10N.register( "No favorites" : "Nessun preferito", "Files and folders you mark as favorite will show up here" : "I file e le cartelle che marchi come preferiti saranno mostrati qui", "Text file" : "File di testo", - "New text file.txt" : "Nuovo file di testo.txt" + "New text file.txt" : "Nuovo file di testo.txt", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilizza questo indirizzo per <a href=\"%s\" target=\"_blank\">accedere ai tuoi file con WebDAV</a>", + "Cancel upload" : "Annulla caricamento" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/it.json b/apps/files/l10n/it.json index 16571b6bd98..a37bc1d5ce7 100644 --- a/apps/files/l10n/it.json +++ b/apps/files/l10n/it.json @@ -130,6 +130,8 @@ "No favorites" : "Nessun preferito", "Files and folders you mark as favorite will show up here" : "I file e le cartelle che marchi come preferiti saranno mostrati qui", "Text file" : "File di testo", - "New text file.txt" : "Nuovo file di testo.txt" + "New text file.txt" : "Nuovo file di testo.txt", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilizza questo indirizzo per <a href=\"%s\" target=\"_blank\">accedere ai tuoi file con WebDAV</a>", + "Cancel upload" : "Annulla caricamento" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js index 13cee46110b..ce548569f27 100644 --- a/apps/files/l10n/pt_BR.js +++ b/apps/files/l10n/pt_BR.js @@ -1,7 +1,7 @@ OC.L10N.register( "files", { - "Storage not available" : "Armazanamento não disponível", + "Storage not available" : "Armazenamento não disponível", "Storage invalid" : "Armazenamento inválido", "Unknown error" : "Erro desconhecido", "Unable to set upload directory." : "Não é possível configurar o diretório de envio.", @@ -132,6 +132,8 @@ OC.L10N.register( "No favorites" : "Sem favoritos", "Files and folders you mark as favorite will show up here" : "Arquivos e pastas que você marcou como favoritos são mostrados aqui", "Text file" : "Arquivo texto", - "New text file.txt" : "Novo texto file.txt" + "New text file.txt" : "Novo texto file.txt", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Use este endereço para <a href=\"%s\" target=\"_blank\">acessar seus arquivos via WebDAV</a>", + "Cancel upload" : "Cancelar envio" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json index 6d50bc793a1..8320e0dd0f4 100644 --- a/apps/files/l10n/pt_BR.json +++ b/apps/files/l10n/pt_BR.json @@ -1,5 +1,5 @@ { "translations": { - "Storage not available" : "Armazanamento não disponível", + "Storage not available" : "Armazenamento não disponível", "Storage invalid" : "Armazenamento inválido", "Unknown error" : "Erro desconhecido", "Unable to set upload directory." : "Não é possível configurar o diretório de envio.", @@ -130,6 +130,8 @@ "No favorites" : "Sem favoritos", "Files and folders you mark as favorite will show up here" : "Arquivos e pastas que você marcou como favoritos são mostrados aqui", "Text file" : "Arquivo texto", - "New text file.txt" : "Novo texto file.txt" + "New text file.txt" : "Novo texto file.txt", + "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Use este endereço para <a href=\"%s\" target=\"_blank\">acessar seus arquivos via WebDAV</a>", + "Cancel upload" : "Cancelar envio" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/files/lib/Command/Scan.php b/apps/files/lib/Command/Scan.php index 25933ae25aa..0234fb435a7 100644 --- a/apps/files/lib/Command/Scan.php +++ b/apps/files/lib/Command/Scan.php @@ -28,9 +28,11 @@ namespace OCA\Files\Command; +use Doctrine\DBAL\Connection; use OC\Core\Command\Base; use OC\ForbiddenException; use OCP\Files\StorageNotAvailableException; +use OCP\IDBConnection; use OCP\IUserManager; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -106,7 +108,8 @@ class Scan extends Base { } protected function scanFiles($user, $path, $verbose, OutputInterface $output, $backgroundScan = false) { - $scanner = new \OC\Files\Utils\Scanner($user, \OC::$server->getDatabaseConnection(), \OC::$server->getLogger()); + $connection = $this->reconnectToDatabase($output); + $scanner = new \OC\Files\Utils\Scanner($user, $connection, \OC::$server->getLogger()); # check on each file/folder if there was a user interrupt (ctrl-c) and throw an exception # printout and count if ($verbose) { @@ -318,4 +321,26 @@ class Scan extends Base { return date('H:i:s', $secs); } + /** + * @return \OCP\IDBConnection + */ + protected function reconnectToDatabase(OutputInterface $output) { + /** @var Connection | IDBConnection $connection*/ + $connection = \OC::$server->getDatabaseConnection(); + try { + $connection->close(); + } catch (\Exception $ex) { + $output->writeln("<info>Error while disconnecting from database: {$ex->getMessage()}</info>"); + } + while (!$connection->isConnected()) { + try { + $connection->connect(); + } catch (\Exception $ex) { + $output->writeln("<info>Error while re-connecting to database: {$ex->getMessage()}</info>"); + sleep(60); + } + } + return $connection; + } + } diff --git a/apps/files/lib/Controller/SettingsController.php b/apps/files/lib/Controller/SettingsController.php new file mode 100644 index 00000000000..0b2dc9c2dd1 --- /dev/null +++ b/apps/files/lib/Controller/SettingsController.php @@ -0,0 +1,51 @@ +<?php +/** + * + * + * @author Roeland Jago Douma <roeland@famdouma.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\Controller; + +use OCP\AppFramework\Controller; +use OCP\AppFramework\Http; +use OCP\AppFramework\Http\JSONResponse; +use OCP\IRequest; +use OCP\Util; + +class SettingsController extends Controller { + public function __construct($appName, IRequest $request) { + parent::__construct($appName, $request); + } + + /** + * @param string $maxUploadSize + * @return JSONResponse + */ + public function setMaxUploadSize($maxUploadSize) { + $setMaxSize = \OC_Files::setUploadLimit(Util::computerFileSize($maxUploadSize)); + + if ($setMaxSize === false) { + return new JSONResponse([], Http::STATUS_BAD_REQUEST); + } else { + return new JSONResponse([ + 'maxUploadSize' => Util::humanFileSize($setMaxSize) + ]); + } + } +} diff --git a/apps/files/lib/Controller/ViewController.php b/apps/files/lib/Controller/ViewController.php index 9dbe06ff789..db8f32ddf73 100644 --- a/apps/files/lib/Controller/ViewController.php +++ b/apps/files/lib/Controller/ViewController.php @@ -27,11 +27,11 @@ namespace OCA\Files\Controller; -use OC\AppFramework\Http\Request; use OCP\AppFramework\Controller; use OCP\AppFramework\Http\ContentSecurityPolicy; use OCP\AppFramework\Http\RedirectResponse; use OCP\AppFramework\Http\TemplateResponse; +use OCP\Files\IRootFolder; use OCP\Files\NotFoundException; use OCP\IConfig; use OCP\IL10N; @@ -67,7 +67,7 @@ class ViewController extends Controller { protected $userSession; /** @var IAppManager */ protected $appManager; - /** @var \OCP\Files\Folder */ + /** @var IRootFolder */ protected $rootFolder; /** @@ -80,7 +80,7 @@ class ViewController extends Controller { * @param EventDispatcherInterface $eventDispatcherInterface * @param IUserSession $userSession * @param IAppManager $appManager - * @param Folder $rootFolder + * @param IRootFolder $rootFolder */ public function __construct($appName, IRequest $request, @@ -91,7 +91,7 @@ class ViewController extends Controller { EventDispatcherInterface $eventDispatcherInterface, IUserSession $userSession, IAppManager $appManager, - Folder $rootFolder + IRootFolder $rootFolder ) { parent::__construct($appName, $request); $this->appName = $appName; @@ -143,15 +143,14 @@ class ViewController extends Controller { * @param string $dir * @param string $view * @param string $fileid - * @return TemplateResponse + * @return TemplateResponse|RedirectResponse */ - public function index($dir = '', $view = '', $fileid = null) { - $fileNotFound = false; + public function index($dir = '', $view = '', $fileid = null, $fileNotFound = false) { if ($fileid !== null) { try { return $this->showFile($fileid); } catch (NotFoundException $e) { - $fileNotFound = true; + return new RedirectResponse($this->urlGenerator->linkToRoute('files.view.index', ['fileNotFound' => true])); } } @@ -195,18 +194,6 @@ class ViewController extends Controller { \OCP\Util::addscript('files', 'keyboardshortcuts'); \OCP\Util::addscript('files', 'navigation'); - // if IE8 and "?dir=path&view=someview" was specified, reformat the URL to use a hash like "#?dir=path&view=someview" - $isIE8 = $this->request->isUserAgent([Request::USER_AGENT_IE_8]); - if ($isIE8 && ($dir !== '' || $view !== '')) { - $dir = !empty($dir) ? $dir : '/'; - $view = !empty($view) ? $view : 'files'; - $hash = '#?dir=' . \OCP\Util::encodePath($dir); - if ($view !== 'files') { - $hash .= '&view=' . urlencode($view); - } - return new RedirectResponse($this->urlGenerator->linkToRoute('files.view.index') . $hash); - } - // mostly for the home storage's free space // FIXME: Make non static $storageInfo = $this->getStorageInfo(); @@ -279,13 +266,10 @@ class ViewController extends Controller { * @param string $fileId file id to show * @return RedirectResponse redirect response or not found response * @throws \OCP\Files\NotFoundException - * - * @NoCSRFRequired - * @NoAdminRequired */ - public function showFile($fileId) { + private function showFile($fileId) { $uid = $this->userSession->getUser()->getUID(); - $baseFolder = $this->rootFolder->get($uid . '/files/'); + $baseFolder = $this->rootFolder->getUserFolder($uid); $files = $baseFolder->getById($fileId); $params = []; diff --git a/apps/files/lib/Settings/Admin.php b/apps/files/lib/Settings/Admin.php new file mode 100644 index 00000000000..da1d5deaf35 --- /dev/null +++ b/apps/files/lib/Settings/Admin.php @@ -0,0 +1,86 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\Files\Settings; + +use bantu\IniGetWrapper\IniGetWrapper; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\IRequest; +use OCP\Settings\ISettings; +use OCP\Util; + +class Admin implements ISettings { + + /** @var IniGetWrapper */ + private $iniWrapper; + + /** @var IRequest */ + private $request; + + public function __construct(IniGetWrapper $iniWrapper, IRequest $request) { + $this->iniWrapper = $iniWrapper; + $this->request = $request; + } + + /** + * @return TemplateResponse + */ + public function getForm() { + $htaccessWorking = (getenv('htaccessWorking') == 'true'); + $htaccessWritable = is_writable(\OC::$SERVERROOT.'/.htaccess'); + $userIniWritable = is_writable(\OC::$SERVERROOT.'/.user.ini'); + + $upload_max_filesize = $this->iniWrapper->getBytes('upload_max_filesize'); + $post_max_size = $this->iniWrapper->getBytes('post_max_size'); + $maxUploadFilesize = Util::humanFileSize(min($upload_max_filesize, $post_max_size)); + + $parameters = [ + 'uploadChangable' => (($htaccessWorking and $htaccessWritable) or $userIniWritable ), + 'uploadMaxFilesize' => $maxUploadFilesize, + // max possible makes only sense on a 32 bit system + 'displayMaxPossibleUploadSize' => PHP_INT_SIZE === 4, + 'maxPossibleUploadSize' => Util::humanFileSize(PHP_INT_MAX), + ]; + + return new TemplateResponse('files', 'admin', $parameters, ''); + } + + /** + * @return string the section ID, e.g. 'sharing' + */ + public function getSection() { + return 'additional'; + } + + /** + * @return int whether the form should be rather on the top or bottom of + * the admin section. The forms are arranged in ascending order of the + * priority values. It is required to return a value between 0 and 100. + * + * E.g.: 70 + */ + public function getPriority() { + return 5; + } + +} diff --git a/apps/files/templates/admin.php b/apps/files/templates/admin.php index e5a6ecfc96e..ef357245df7 100644 --- a/apps/files/templates/admin.php +++ b/apps/files/templates/admin.php @@ -1,18 +1,20 @@ <?php OCP\Util::addscript('files', 'admin'); ?> - <form name="filesForm" class="section" action="#" method="post"> + <div class="section"> <h2><?php p($l->t('File handling')); ?></h2> <label for="maxUploadSize"><?php p($l->t( 'Maximum upload size' )); ?> </label> + <span id="maxUploadSizeSettingsMsg" class="msg"></span> + <br /> <input type="text" name='maxUploadSize' id="maxUploadSize" value='<?php p($_['uploadMaxFilesize']) ?>' <?php if(!$_['uploadChangable']) { p('disabled'); } ?> /> <?php if($_['displayMaxPossibleUploadSize']):?> (<?php p($l->t('max. possible: ')); p($_['maxPossibleUploadSize']) ?>) <?php endif;?> <input type="hidden" value="<?php p($_['requesttoken']); ?>" name="requesttoken" /> <?php if($_['uploadChangable']): ?> - <input type="submit" name="submitFilesAdminSettings" id="submitFilesAdminSettings" + <input type="submit" id="submitMaxUpload" value="<?php p($l->t( 'Save' )); ?>"/> <p><em><?php p($l->t('With PHP-FPM it might take 5 minutes for changes to be applied.')); ?></em></p> <?php else: ?> <p><em><?php p($l->t('Missing permissions to edit from here.')); ?></em></p> <?php endif; ?> - </form> + </div> diff --git a/apps/files/tests/Controller/ViewControllerTest.php b/apps/files/tests/Controller/ViewControllerTest.php index 373f8c25152..b4b4bfa92fc 100644 --- a/apps/files/tests/Controller/ViewControllerTest.php +++ b/apps/files/tests/Controller/ViewControllerTest.php @@ -27,7 +27,7 @@ namespace OCA\Files\Tests\Controller; use OCA\Files\Controller\ViewController; use OCP\AppFramework\Http; -use OCP\Files\NotFoundException; +use OCP\Files\IRootFolder; use OCP\IUser; use OCP\Template; use Test\TestCase; @@ -39,7 +39,6 @@ use OCP\IL10N; use OCP\IConfig; use OCP\IUserSession; use Symfony\Component\EventDispatcher\EventDispatcherInterface; -use OCP\Files\Folder; use OCP\App\IAppManager; /** @@ -48,47 +47,47 @@ use OCP\App\IAppManager; * @package OCA\Files\Tests\Controller */ class ViewControllerTest extends TestCase { - /** @var IRequest */ + /** @var IRequest|\PHPUnit_Framework_MockObject_MockObject */ private $request; - /** @var IURLGenerator */ + /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */ private $urlGenerator; /** @var INavigationManager */ private $navigationManager; /** @var IL10N */ private $l10n; - /** @var IConfig */ + /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */ private $config; /** @var EventDispatcherInterface */ private $eventDispatcher; - /** @var ViewController */ + /** @var ViewController|\PHPUnit_Framework_MockObject_MockObject */ private $viewController; /** @var IUser */ private $user; /** @var IUserSession */ private $userSession; - /** @var IAppManager */ + /** @var IAppManager|\PHPUnit_Framework_MockObject_MockObject */ private $appManager; - /** @var Folder */ + /** @var IRootFolder|\PHPUnit_Framework_MockObject_MockObject */ private $rootFolder; public function setUp() { parent::setUp(); - $this->request = $this->getMock('\OCP\IRequest'); - $this->urlGenerator = $this->getMock('\OCP\IURLGenerator'); - $this->navigationManager = $this->getMock('\OCP\INavigationManager'); - $this->l10n = $this->getMock('\OCP\IL10N'); - $this->config = $this->getMock('\OCP\IConfig'); - $this->eventDispatcher = $this->getMock('\Symfony\Component\EventDispatcher\EventDispatcherInterface'); - $this->userSession = $this->getMock('\OCP\IUserSession'); - $this->appManager = $this->getMock('\OCP\App\IAppManager'); - $this->user = $this->getMock('\OCP\IUser'); + $this->request = $this->getMockBuilder('\OCP\IRequest')->getMock(); + $this->urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')->getMock(); + $this->navigationManager = $this->getMockBuilder('\OCP\INavigationManager')->getMock(); + $this->l10n = $this->getMockBuilder('\OCP\IL10N')->getMock(); + $this->config = $this->getMockBuilder('\OCP\IConfig')->getMock(); + $this->eventDispatcher = $this->getMockBuilder('\Symfony\Component\EventDispatcher\EventDispatcherInterface')->getMock(); + $this->userSession = $this->getMockBuilder('\OCP\IUserSession')->getMock(); + $this->appManager = $this->getMockBuilder('\OCP\App\IAppManager')->getMock(); + $this->user = $this->getMockBuilder('\OCP\IUser')->getMock(); $this->user->expects($this->any()) ->method('getUID') ->will($this->returnValue('testuser1')); $this->userSession->expects($this->any()) ->method('getUser') ->will($this->returnValue($this->user)); - $this->rootFolder = $this->getMock('\OCP\Files\Folder'); + $this->rootFolder = $this->getMockBuilder('\OCP\Files\IRootFolder')->getMock(); $this->viewController = $this->getMockBuilder('\OCA\Files\Controller\ViewController') ->setConstructorArgs([ 'files', @@ -109,60 +108,7 @@ class ViewControllerTest extends TestCase { ->getMock(); } - public function testIndexWithIE8RedirectAndDirDefined() { - $this->request - ->expects($this->once()) - ->method('isUserAgent') - ->with(['/MSIE 8.0/']) - ->will($this->returnValue(true)); - $this->urlGenerator - ->expects($this->once()) - ->method('linkToRoute') - ->with('files.view.index') - ->will($this->returnValue('/apps/files/')); - - $expected = new Http\RedirectResponse('/apps/files/#?dir=MyDir'); - $this->assertEquals($expected, $this->viewController->index('MyDir')); - } - - public function testIndexWithIE8RedirectAndViewDefined() { - $this->request - ->expects($this->once()) - ->method('isUserAgent') - ->with(['/MSIE 8.0/']) - ->will($this->returnValue(true)); - $this->urlGenerator - ->expects($this->once()) - ->method('linkToRoute') - ->with('files.view.index') - ->will($this->returnValue('/apps/files/')); - - $expected = new Http\RedirectResponse('/apps/files/#?dir=/&view=MyView'); - $this->assertEquals($expected, $this->viewController->index('', 'MyView')); - } - - public function testIndexWithIE8RedirectAndViewAndDirDefined() { - $this->request - ->expects($this->once()) - ->method('isUserAgent') - ->with(['/MSIE 8.0/']) - ->will($this->returnValue(true)); - $this->urlGenerator - ->expects($this->once()) - ->method('linkToRoute') - ->with('files.view.index') - ->will($this->returnValue('/apps/files/')); - - $expected = new RedirectResponse('/apps/files/#?dir=MyDir&view=MyView'); - $this->assertEquals($expected, $this->viewController->index('MyDir', 'MyView')); - } - public function testIndexWithRegularBrowser() { - $this->request - ->expects($this->once()) - ->method('isUserAgent') - ->with(['/MSIE 8.0/']) - ->will($this->returnValue(false)); $this->viewController ->expects($this->once()) ->method('getStorageInfo') @@ -318,27 +264,17 @@ class ViewControllerTest extends TestCase { $this->assertEquals($expected, $this->viewController->index('MyDir', 'MyView')); } - public function showFileMethodProvider() { - return [ - [true], - [false], - ]; - } - - /** - * @dataProvider showFileMethodProvider - */ - public function testShowFileRouteWithFolder($useShowFile) { - $node = $this->getMock('\OCP\Files\Folder'); + public function testShowFileRouteWithFolder() { + $node = $this->getMockBuilder('\OCP\Files\Folder')->getMock(); $node->expects($this->once()) ->method('getPath') ->will($this->returnValue('/testuser1/files/test/sub')); - $baseFolder = $this->getMock('\OCP\Files\Folder'); + $baseFolder = $this->getMockBuilder('\OCP\Files\Folder')->getMock(); $this->rootFolder->expects($this->once()) - ->method('get') - ->with('testuser1/files/') + ->method('getUserFolder') + ->with('testuser1') ->will($this->returnValue($baseFolder)); $baseFolder->expects($this->at(0)) @@ -357,30 +293,23 @@ class ViewControllerTest extends TestCase { ->will($this->returnValue('/apps/files/?dir=/test/sub')); $expected = new Http\RedirectResponse('/apps/files/?dir=/test/sub'); - if ($useShowFile) { - $this->assertEquals($expected, $this->viewController->showFile(123)); - } else { - $this->assertEquals($expected, $this->viewController->index('/whatever', '', '123')); - } + $this->assertEquals($expected, $this->viewController->index('/whatever', '', '123')); } - /** - * @dataProvider showFileMethodProvider - */ - public function testShowFileRouteWithFile($useShowFile) { - $parentNode = $this->getMock('\OCP\Files\Folder'); + public function testShowFileRouteWithFile() { + $parentNode = $this->getMockBuilder('\OCP\Files\Folder')->getMock(); $parentNode->expects($this->once()) ->method('getPath') ->will($this->returnValue('testuser1/files/test')); - $baseFolder = $this->getMock('\OCP\Files\Folder'); + $baseFolder = $this->getMockBuilder('\OCP\Files\Folder')->getMock(); $this->rootFolder->expects($this->once()) - ->method('get') - ->with('testuser1/files/') + ->method('getUserFolder') + ->with('testuser1') ->will($this->returnValue($baseFolder)); - $node = $this->getMock('\OCP\Files\File'); + $node = $this->getMockBuilder('\OCP\Files\File')->getMock(); $node->expects($this->once()) ->method('getParent') ->will($this->returnValue($parentNode)); @@ -404,21 +333,14 @@ class ViewControllerTest extends TestCase { ->will($this->returnValue('/apps/files/?dir=/test/sub&scrollto=somefile.txt')); $expected = new Http\RedirectResponse('/apps/files/?dir=/test/sub&scrollto=somefile.txt'); - if ($useShowFile) { - $this->assertEquals($expected, $this->viewController->showFile(123)); - } else { - $this->assertEquals($expected, $this->viewController->index('/whatever', '', '123')); - } + $this->assertEquals($expected, $this->viewController->index('/whatever', '', '123')); } - /** - * @dataProvider showFileMethodProvider - */ - public function testShowFileRouteWithInvalidFileId($useShowFile) { - $baseFolder = $this->getMock('\OCP\Files\Folder'); + public function testShowFileRouteWithInvalidFileId() { + $baseFolder = $this->getMockBuilder('\OCP\Files\Folder')->getMock(); $this->rootFolder->expects($this->once()) - ->method('get') - ->with('testuser1/files/') + ->method('getUserFolder') + ->with('testuser1') ->will($this->returnValue($baseFolder)); $baseFolder->expects($this->at(0)) @@ -426,37 +348,33 @@ class ViewControllerTest extends TestCase { ->with(123) ->will($this->returnValue([])); - if ($useShowFile) { - $this->setExpectedException('OCP\Files\NotFoundException'); - $this->viewController->showFile(123); - } else { - $response = $this->viewController->index('MyDir', 'MyView', '123'); - $this->assertInstanceOf('OCP\AppFramework\Http\TemplateResponse', $response); - $params = $response->getParams(); - $this->assertEquals(1, $params['fileNotFound']); - } + $this->urlGenerator->expects($this->once()) + ->method('linkToRoute') + ->with('files.view.index', ['fileNotFound' => true]) + ->willReturn('redirect.url'); + + $response = $this->viewController->index('MyDir', 'MyView', '123'); + $this->assertInstanceOf('OCP\AppFramework\Http\RedirectResponse', $response); + $this->assertEquals('redirect.url', $response->getRedirectURL()); } - /** - * @dataProvider showFileMethodProvider - */ - public function testShowFileRouteWithTrashedFile($useShowFile) { + public function testShowFileRouteWithTrashedFile() { $this->appManager->expects($this->once()) ->method('isEnabledForUser') ->with('files_trashbin') ->will($this->returnValue(true)); - $parentNode = $this->getMock('\OCP\Files\Folder'); + $parentNode = $this->getMockBuilder('\OCP\Files\Folder')->getMock(); $parentNode->expects($this->once()) ->method('getPath') ->will($this->returnValue('testuser1/files_trashbin/files/test.d1462861890/sub')); - $baseFolderFiles = $this->getMock('\OCP\Files\Folder'); - $baseFolderTrash = $this->getMock('\OCP\Files\Folder'); + $baseFolderFiles = $this->getMockBuilder('\OCP\Files\Folder')->getMock(); + $baseFolderTrash = $this->getMockBuilder('\OCP\Files\Folder')->getMock(); $this->rootFolder->expects($this->at(0)) - ->method('get') - ->with('testuser1/files/') + ->method('getUserFolder') + ->with('testuser1') ->will($this->returnValue($baseFolderFiles)); $this->rootFolder->expects($this->at(1)) ->method('get') @@ -468,7 +386,7 @@ class ViewControllerTest extends TestCase { ->with(123) ->will($this->returnValue([])); - $node = $this->getMock('\OCP\Files\File'); + $node = $this->getMockBuilder('\OCP\Files\File')->getMock(); $node->expects($this->once()) ->method('getParent') ->will($this->returnValue($parentNode)); @@ -492,10 +410,6 @@ class ViewControllerTest extends TestCase { ->will($this->returnValue('/apps/files/?view=trashbin&dir=/test.d1462861890/sub&scrollto=somefile.txt')); $expected = new Http\RedirectResponse('/apps/files/?view=trashbin&dir=/test.d1462861890/sub&scrollto=somefile.txt'); - if ($useShowFile) { - $this->assertEquals($expected, $this->viewController->showFile(123)); - } else { - $this->assertEquals($expected, $this->viewController->index('/whatever', '', '123')); - } + $this->assertEquals($expected, $this->viewController->index('/whatever', '', '123')); } } diff --git a/apps/files/tests/Settings/AdminTest.php b/apps/files/tests/Settings/AdminTest.php new file mode 100644 index 00000000000..1ab8a992879 --- /dev/null +++ b/apps/files/tests/Settings/AdminTest.php @@ -0,0 +1,83 @@ +<?php +/** + * @copyright Copyright (c) 2016 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 OCA\Files\Tests\Settings; + +use bantu\IniGetWrapper\IniGetWrapper; +use OCA\Files\Settings\Admin; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\IRequest; +use OCP\Util; +use Test\TestCase; + +class AdminTest extends TestCase { + /** @var Admin */ + private $admin; + /** @var IniGetWrapper */ + private $iniGetWrapper; + /** @var IRequest */ + private $request; + + public function setUp() { + parent::setUp(); + $this->iniGetWrapper = $this->getMockBuilder('\bantu\IniGetWrapper\IniGetWrapper')->disableOriginalConstructor()->getMock(); + $this->request = $this->getMockBuilder('\OCP\IRequest')->getMock(); + $this->admin = new Admin( + $this->iniGetWrapper, + $this->request + ); + } + + public function testGetForm() { + $htaccessWorking = (getenv('htaccessWorking') == 'true'); + $htaccessWritable = is_writable(\OC::$SERVERROOT.'/.htaccess'); + $userIniWritable = is_writable(\OC::$SERVERROOT.'/.user.ini'); + + $this->iniGetWrapper + ->expects($this->at(0)) + ->method('getBytes') + ->with('upload_max_filesize') + ->willReturn(1234); + $this->iniGetWrapper + ->expects($this->at(1)) + ->method('getBytes') + ->with('post_max_size') + ->willReturn(1234); + $params = [ + 'uploadChangable' => (($htaccessWorking and $htaccessWritable) or $userIniWritable ), + 'uploadMaxFilesize' => '1 KB', + 'displayMaxPossibleUploadSize' => PHP_INT_SIZE === 4, + 'maxPossibleUploadSize' => Util::humanFileSize(PHP_INT_MAX), + ]; + $expected = new TemplateResponse('files', 'admin', $params, ''); + $this->assertEquals($expected, $this->admin->getForm()); + } + + public function testGetSection() { + $this->assertSame('additional', $this->admin->getSection()); + } + + public function testGetPriority() { + $this->assertSame(5, $this->admin->getPriority()); + } +} diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js index 651ba6eef1e..0a4812f3a81 100644 --- a/apps/files/tests/js/filelistSpec.js +++ b/apps/files/tests/js/filelistSpec.js @@ -24,6 +24,7 @@ describe('OCA.Files.FileList tests', function() { var testFiles, testRoot, notificationStub, fileList, pageSizeStub; var bcResizeStub; var filesClient; + var filesConfig; var redirectStub; /** @@ -54,6 +55,10 @@ describe('OCA.Files.FileList tests', function() { } beforeEach(function() { + filesConfig = new OC.Backbone.Model({ + showhidden: true + }); + filesClient = new OC.Files.Client({ host: 'localhost', port: 80, @@ -153,7 +158,8 @@ describe('OCA.Files.FileList tests', function() { })]; pageSizeStub = sinon.stub(OCA.Files.FileList.prototype, 'pageSize').returns(20); fileList = new OCA.Files.FileList($('#app-content-files'), { - filesClient: filesClient + filesClient: filesClient, + config: filesConfig }); }); afterEach(function() { @@ -379,8 +385,9 @@ describe('OCA.Files.FileList tests', function() { $summary = $('#filestable .summary'); expect($summary.hasClass('hidden')).toEqual(false); // yes, ugly... - expect($summary.find('.info').text()).toEqual('0 folders and 1 file'); + expect($summary.find('.fileinfo').text()).toEqual('1 file'); expect($summary.find('.dirinfo').hasClass('hidden')).toEqual(true); + expect($summary.find('.connector').hasClass('hidden')).toEqual(true); expect($summary.find('.fileinfo').hasClass('hidden')).toEqual(false); expect($summary.find('.filesize').text()).toEqual('12 B'); expect($('#filestable thead th').hasClass('hidden')).toEqual(false); @@ -407,6 +414,35 @@ describe('OCA.Files.FileList tests', function() { } }); }); + describe('Hidden files', function() { + it('sets the class hidden-file for hidden files', function() { + var fileData = { + type: 'dir', + name: '.testFolder' + }; + var $tr = fileList.add(fileData); + + expect($tr).toBeDefined(); + expect($tr.hasClass('hidden-file')).toEqual(true); + }); + it('does not set the class hidden-file for visible files', function() { + var fileData = { + type: 'dir', + name: 'testFolder' + }; + var $tr = fileList.add(fileData); + + expect($tr).toBeDefined(); + expect($tr.hasClass('hidden-file')).toEqual(false); + }); + it('toggles the list\'s class when toggling hidden files', function() { + expect(fileList.$el.hasClass('hide-hidden-files')).toEqual(false); + filesConfig.set('showhidden', false); + expect(fileList.$el.hasClass('hide-hidden-files')).toEqual(true); + filesConfig.set('showhidden', true); + expect(fileList.$el.hasClass('hide-hidden-files')).toEqual(false); + }); + }); describe('Removing files from the list', function() { it('Removes file from list when calling remove() and updates summary', function() { var $summary; @@ -421,7 +457,8 @@ describe('OCA.Files.FileList tests', function() { $summary = $('#filestable .summary'); expect($summary.hasClass('hidden')).toEqual(false); - expect($summary.find('.info').text()).toEqual('1 folder and 2 files'); + expect($summary.find('.dirinfo').text()).toEqual('1 folder'); + expect($summary.find('.fileinfo').text()).toEqual('2 files'); expect($summary.find('.dirinfo').hasClass('hidden')).toEqual(false); expect($summary.find('.fileinfo').hasClass('hidden')).toEqual(false); expect($summary.find('.filesize').text()).toEqual('69 KB'); @@ -476,7 +513,8 @@ describe('OCA.Files.FileList tests', function() { $summary = $('#filestable .summary'); expect($summary.hasClass('hidden')).toEqual(false); - expect($summary.find('.info').text()).toEqual('1 folder and 1 file'); + expect($summary.find('.dirinfo').text()).toEqual('1 folder'); + expect($summary.find('.fileinfo').text()).toEqual('1 file'); expect($summary.find('.dirinfo').hasClass('hidden')).toEqual(false); expect($summary.find('.fileinfo').hasClass('hidden')).toEqual(false); expect($summary.find('.filesize').text()).toEqual('57 KB'); @@ -642,12 +680,14 @@ describe('OCA.Files.FileList tests', function() { deferredRename.resolve(201); - expect($summary.find('.info').text()).toEqual('1 folder and 3 files'); + expect($summary.find('.dirinfo').text()).toEqual('1 folder'); + expect($summary.find('.fileinfo').text()).toEqual('3 files'); }); it('Leaves the summary alone when cancel renaming', function() { var $summary = $('#filestable .summary'); doCancelRename(); - expect($summary.find('.info').text()).toEqual('1 folder and 3 files'); + expect($summary.find('.dirinfo').text()).toEqual('1 folder'); + expect($summary.find('.fileinfo').text()).toEqual('3 files'); }); it('Shows busy state while rename in progress', function() { var $tr; @@ -821,11 +861,14 @@ describe('OCA.Files.FileList tests', function() { }); var $tr = fileList.add(fileData); - expect($summary.find('.info').text()).toEqual('0 folders and 1 file'); + expect($summary.find('.dirinfo').hasClass('hidden')).toEqual(true); + expect($summary.find('.fileinfo').text()).toEqual('1 file'); var model = fileList.getModelForFile('test file'); model.set({size: '100'}); - expect($summary.find('.info').text()).toEqual('0 folders and 1 file'); + + expect($summary.find('.dirinfo').hasClass('hidden')).toEqual(true); + expect($summary.find('.fileinfo').text()).toEqual('1 file'); }); }) describe('List rendering', function() { @@ -842,7 +885,8 @@ describe('OCA.Files.FileList tests', function() { fileList.setFiles(testFiles); $summary = $('#filestable .summary'); expect($summary.hasClass('hidden')).toEqual(false); - expect($summary.find('.info').text()).toEqual('1 folder and 3 files'); + expect($summary.find('.dirinfo').text()).toEqual('1 folder'); + expect($summary.find('.fileinfo').text()).toEqual('3 files'); expect($summary.find('.filesize').text()).toEqual('69 KB'); }); it('shows headers, summary and hide empty content message after setting files', function(){ @@ -927,10 +971,12 @@ describe('OCA.Files.FileList tests', function() { fileList.setFiles([testFiles[0]]); $summary = $('#filestable .summary'); expect($summary.hasClass('hidden')).toEqual(false); - expect($summary.find('.info').text()).toEqual('0 folders and 1 file'); + expect($summary.find('.dirinfo').hasClass('hidden')).toEqual(true); + expect($summary.find('.fileinfo').text()).toEqual('1 file'); fileList.remove('unexist.txt'); expect($summary.hasClass('hidden')).toEqual(false); - expect($summary.find('.info').text()).toEqual('0 folders and 1 file'); + expect($summary.find('.dirinfo').hasClass('hidden')).toEqual(true); + expect($summary.find('.fileinfo').text()).toEqual('1 file'); }); }); describe('Filtered list rendering', function() { @@ -952,14 +998,18 @@ describe('OCA.Files.FileList tests', function() { expect($('#fileList tr:not(.hidden)').length).toEqual(3); expect(fileList.files.length).toEqual(4); expect($summary.hasClass('hidden')).toEqual(false); - expect($summary.find('.info').text()).toEqual("1 folder and 2 files match 'e'"); + expect($summary.find('.dirinfo').text()).toEqual('1 folder'); + expect($summary.find('.fileinfo').text()).toEqual('2 files'); + expect($summary.find('.filter').text()).toEqual(" match 'e'"); expect($nofilterresults.hasClass('hidden')).toEqual(true); fileList.setFilter('ee'); expect($('#fileList tr:not(.hidden)').length).toEqual(1); expect(fileList.files.length).toEqual(4); expect($summary.hasClass('hidden')).toEqual(false); - expect($summary.find('.info').text()).toEqual("0 folders and 1 file matches 'ee'"); + expect($summary.find('.dirinfo').hasClass('hidden')).toEqual(true); + expect($summary.find('.fileinfo').text()).toEqual('1 file'); + expect($summary.find('.filter').text()).toEqual(" matches 'ee'"); expect($nofilterresults.hasClass('hidden')).toEqual(true); fileList.setFilter('eee'); @@ -972,21 +1022,26 @@ describe('OCA.Files.FileList tests', function() { expect($('#fileList tr:not(.hidden)').length).toEqual(1); expect(fileList.files.length).toEqual(4); expect($summary.hasClass('hidden')).toEqual(false); - expect($summary.find('.info').text()).toEqual("0 folders and 1 file matches 'ee'"); + expect($summary.find('.dirinfo').hasClass('hidden')).toEqual(true); + expect($summary.find('.fileinfo').text()).toEqual('1 file'); + expect($summary.find('.filter').text()).toEqual(" matches 'ee'"); expect($nofilterresults.hasClass('hidden')).toEqual(true); fileList.setFilter('e'); expect($('#fileList tr:not(.hidden)').length).toEqual(3); expect(fileList.files.length).toEqual(4); expect($summary.hasClass('hidden')).toEqual(false); - expect($summary.find('.info').text()).toEqual("1 folder and 2 files match 'e'"); + expect($summary.find('.dirinfo').text()).toEqual('1 folder'); + expect($summary.find('.fileinfo').text()).toEqual('2 files'); + expect($summary.find('.filter').text()).toEqual(" match 'e'"); expect($nofilterresults.hasClass('hidden')).toEqual(true); fileList.setFilter(''); expect($('#fileList tr:not(.hidden)').length).toEqual(4); expect(fileList.files.length).toEqual(4); expect($summary.hasClass('hidden')).toEqual(false); - expect($summary.find('.info').text()).toEqual("1 folder and 3 files"); + expect($summary.find('.dirinfo').text()).toEqual('1 folder'); + expect($summary.find('.fileinfo').text()).toEqual('3 files'); expect($nofilterresults.hasClass('hidden')).toEqual(true); }); it('filters the list of non-rendered rows using filter()', function() { @@ -997,7 +1052,9 @@ describe('OCA.Files.FileList tests', function() { fileList.setFilter('63'); expect($('#fileList tr:not(.hidden)').length).toEqual(1); expect($summary.hasClass('hidden')).toEqual(false); - expect($summary.find('.info').text()).toEqual("0 folders and 1 file matches '63'"); + expect($summary.find('.dirinfo').hasClass('hidden')).toEqual(true); + expect($summary.find('.fileinfo').text()).toEqual('1 file'); + expect($summary.find('.filter').text()).toEqual(" matches '63'"); expect($nofilterresults.hasClass('hidden')).toEqual(true); }); it('hides the emptyfiles notice when using filter()', function() { @@ -1619,6 +1676,18 @@ describe('OCA.Files.FileList tests', function() { $('#fileList tr td.filename input:checkbox').click(); expect($('.select-all').prop('checked')).toEqual(false); }); + it('Selecting all files also selects hidden files when invisible', function() { + filesConfig.set('showhidden', false); + var $tr = fileList.add(new FileInfo({ + name: '.hidden', + type: 'dir', + mimetype: 'httpd/unix-directory', + size: 150 + })); + $('.select-all').click(); + expect($tr.find('td.filename input:checkbox').prop('checked')).toEqual(true); + expect(_.pluck(fileList.getSelectedFiles(), 'name')).toContain('.hidden'); + }); it('Clicking "select all" will select/deselect all files', function() { fileList.setFiles(generateFiles(0, 41)); $('.select-all').click(); @@ -1696,6 +1765,44 @@ describe('OCA.Files.FileList tests', function() { fileList.findFileEl('One.txt').find('input:checkbox').click().click(); expect($summary.text()).toEqual('Name'); }); + it('Displays the number of hidden files in selection summary if hidden files are invisible', function() { + filesConfig.set('showhidden', false); + var $tr = fileList.add(new FileInfo({ + name: '.hidden', + type: 'dir', + mimetype: 'httpd/unix-directory', + size: 150 + })); + $('.select-all').click(); + var $summary = $('#headerName a.name>span:first'); + expect($summary.text()).toEqual('2 folders and 3 files (including 1 hidden)'); + }); + it('Does not displays the number of hidden files in selection summary if hidden files are visible', function() { + filesConfig.set('showhidden', true); + var $tr = fileList.add(new FileInfo({ + name: '.hidden', + type: 'dir', + mimetype: 'httpd/unix-directory', + size: 150 + })); + $('.select-all').click(); + var $summary = $('#headerName a.name>span:first'); + expect($summary.text()).toEqual('2 folders and 3 files'); + }); + it('Toggling hidden file visibility updates selection summary', function() { + filesConfig.set('showhidden', false); + var $tr = fileList.add(new FileInfo({ + name: '.hidden', + type: 'dir', + mimetype: 'httpd/unix-directory', + size: 150 + })); + $('.select-all').click(); + var $summary = $('#headerName a.name>span:first'); + expect($summary.text()).toEqual('2 folders and 3 files (including 1 hidden)'); + filesConfig.set('showhidden', true); + expect($summary.text()).toEqual('2 folders and 3 files'); + }); it('Select/deselect files shows/hides file actions', function() { var $actions = $('#headerName .selectedActions'); var $checkbox = fileList.findFileEl('One.txt').find('input:checkbox'); diff --git a/apps/files/tests/js/filesummarySpec.js b/apps/files/tests/js/filesummarySpec.js index ec94c28acb6..e3f24d9ad43 100644 --- a/apps/files/tests/js/filesummarySpec.js +++ b/apps/files/tests/js/filesummarySpec.js @@ -39,7 +39,8 @@ describe('OCA.Files.FileSummary tests', function() { totalSize: 256000 }); expect($container.hasClass('hidden')).toEqual(false); - expect($container.find('.info').text()).toEqual('5 folders and 2 files'); + expect($container.find('.dirinfo').text()).toEqual('5 folders'); + expect($container.find('.fileinfo').text()).toEqual('2 files'); expect($container.find('.filesize').text()).toEqual('250 KB'); }); it('hides summary when no files or folders', function() { @@ -62,7 +63,8 @@ describe('OCA.Files.FileSummary tests', function() { s.add({type: 'dir', size: 100}); s.update(); expect($container.hasClass('hidden')).toEqual(false); - expect($container.find('.info').text()).toEqual('6 folders and 3 files'); + expect($container.find('.dirinfo').text()).toEqual('6 folders'); + expect($container.find('.fileinfo').text()).toEqual('3 files'); expect($container.find('.filesize').text()).toEqual('500 KB'); expect(s.summary.totalDirs).toEqual(6); expect(s.summary.totalFiles).toEqual(3); @@ -79,7 +81,8 @@ describe('OCA.Files.FileSummary tests', function() { s.remove({type: 'dir', size: 100}); s.update(); expect($container.hasClass('hidden')).toEqual(false); - expect($container.find('.info').text()).toEqual('4 folders and 1 file'); + expect($container.find('.dirinfo').text()).toEqual('4 folders'); + expect($container.find('.fileinfo').text()).toEqual('1 file'); expect($container.find('.filesize').text()).toEqual('125 KB'); expect(s.summary.totalDirs).toEqual(4); expect(s.summary.totalFiles).toEqual(1); @@ -95,7 +98,9 @@ describe('OCA.Files.FileSummary tests', function() { filter: 'foo' }); expect($container.hasClass('hidden')).toEqual(false); - expect($container.find('.info').text()).toEqual('5 folders and 2 files match \'foo\''); + expect($container.find('.dirinfo').text()).toEqual('5 folders'); + expect($container.find('.fileinfo').text()).toEqual('2 files'); + expect($container.find('.filter').text()).toEqual(' match \'foo\''); expect($container.find('.filesize').text()).toEqual('250 KB'); }); it('hides filtered summary when no files or folders', function() { @@ -122,7 +127,9 @@ describe('OCA.Files.FileSummary tests', function() { s.add({name: 'foo', type: 'dir', size: 102}); s.update(); expect($container.hasClass('hidden')).toEqual(false); - expect($container.find('.info').text()).toEqual('6 folders and 3 files match \'foo\''); + expect($container.find('.dirinfo').text()).toEqual('6 folders'); + expect($container.find('.fileinfo').text()).toEqual('3 files'); + expect($container.find('.filter').text()).toEqual(' match \'foo\''); expect($container.find('.filesize').text()).toEqual('500 KB'); expect(s.summary.totalDirs).toEqual(6); expect(s.summary.totalFiles).toEqual(3); @@ -142,7 +149,9 @@ describe('OCA.Files.FileSummary tests', function() { s.remove({name: 'foo', type: 'dir', size: 98}); s.update(); expect($container.hasClass('hidden')).toEqual(false); - expect($container.find('.info').text()).toEqual('4 folders and 1 file match \'foo\''); + expect($container.find('.dirinfo').text()).toEqual('4 folders'); + expect($container.find('.fileinfo').text()).toEqual('1 file'); + expect($container.find('.filter').text()).toEqual(' match \'foo\''); expect($container.find('.filesize').text()).toEqual('125 KB'); expect(s.summary.totalDirs).toEqual(4); expect(s.summary.totalFiles).toEqual(1); @@ -158,7 +167,8 @@ describe('OCA.Files.FileSummary tests', function() { s.add({type: 'dir', size: -1}); s.update(); expect($container.hasClass('hidden')).toEqual(false); - expect($container.find('.info').text()).toEqual('1 folder and 0 files'); + expect($container.find('.dirinfo').text()).toEqual('1 folder'); + expect($container.find('.fileinfo').hasClass('hidden')).toEqual(true); expect($container.find('.filesize').text()).toEqual('Pending'); expect(s.summary.totalDirs).toEqual(1); expect(s.summary.totalFiles).toEqual(0); @@ -175,10 +185,56 @@ describe('OCA.Files.FileSummary tests', function() { s.remove({type: 'dir', size: -1}); s.update(); expect($container.hasClass('hidden')).toEqual(true); - expect($container.find('.info').text()).toEqual('0 folders and 0 files'); - expect($container.find('.filesize').text()).toEqual('0 B'); expect(s.summary.totalDirs).toEqual(0); expect(s.summary.totalFiles).toEqual(0); expect(s.summary.totalSize).toEqual(0); }); + describe('hidden files', function() { + var config; + var summary; + + beforeEach(function() { + config = new OC.Backbone.Model(); + summary = new FileSummary($container, { + config: config + }); + }); + + it('renders hidden count section when hidden files are hidden', function() { + config.set('showhidden', false); + summary.add({name: 'abc', type: 'file', size: 256000}); + summary.add({name: 'def', type: 'dir', size: 100}); + summary.add({name: '.hidden', type: 'dir', size: 512000}); + summary.update(); + expect($container.hasClass('hidden')).toEqual(false); + expect($container.find('.dirinfo').text()).toEqual('2 folders'); + expect($container.find('.fileinfo').text()).toEqual('1 file'); + expect($container.find('.hiddeninfo').hasClass('hidden')).toEqual(false); + expect($container.find('.hiddeninfo').text()).toEqual(' (including 1 hidden)'); + expect($container.find('.filesize').text()).toEqual('750 KB'); + }); + it('does not render hidden count section when hidden files exist but are visible', function() { + config.set('showhidden', true); + summary.add({name: 'abc', type: 'file', size: 256000}); + summary.add({name: 'def', type: 'dir', size: 100}); + summary.add({name: '.hidden', type: 'dir', size: 512000}); + summary.update(); + expect($container.hasClass('hidden')).toEqual(false); + expect($container.find('.dirinfo').text()).toEqual('2 folders'); + expect($container.find('.fileinfo').text()).toEqual('1 file'); + expect($container.find('.hiddeninfo').hasClass('hidden')).toEqual(true); + expect($container.find('.filesize').text()).toEqual('750 KB'); + }); + it('does not render hidden count section when no hidden files exist', function() { + config.set('showhidden', false); + summary.add({name: 'abc', type: 'file', size: 256000}); + summary.add({name: 'def', type: 'dir', size: 100}); + summary.update(); + expect($container.hasClass('hidden')).toEqual(false); + expect($container.find('.dirinfo').text()).toEqual('1 folder'); + expect($container.find('.fileinfo').text()).toEqual('1 file'); + expect($container.find('.hiddeninfo').hasClass('hidden')).toEqual(true); + expect($container.find('.filesize').text()).toEqual('250 KB'); + }); + }); }); diff --git a/apps/files_external/appinfo/database.xml b/apps/files_external/appinfo/database.xml index 54ee642ead6..e39144931a7 100644 --- a/apps/files_external/appinfo/database.xml +++ b/apps/files_external/appinfo/database.xml @@ -144,7 +144,7 @@ <field> <name>value</name> <type>text</type> - <notnull>true</notnull> + <notnull>false</notnull> <length>4096</length> </field> diff --git a/apps/files_external/appinfo/info.xml b/apps/files_external/appinfo/info.xml index 43f06d60843..f99ef3b6c49 100644 --- a/apps/files_external/appinfo/info.xml +++ b/apps/files_external/appinfo/info.xml @@ -3,9 +3,9 @@ <id>files_external</id> <name>External storage support</name> <description> - This application enables administrators to configure connections to external storage providers, such as FTP servers, S3 or SWIFT object stores, Google Drive, Dropbox, other ownCloud servers, WebDAV servers, and more. Administrators can choose which types of storage to enable and can mount these storage locations for a user, a group, or the entire system. Users will see a new folder appear in their root ownCloud directory, which they can access and use like any other ownCloud folder. External Storage also allows users to share files stored in these external locations. In these cases, the credentials for the owner of the file are used when the recipient requests the file from external storage, thereby ensuring that the recipient can access the shared file. + This application enables administrators to configure connections to external storage providers, such as FTP servers, S3 or SWIFT object stores, Google Drive, Dropbox, other ownCloud servers, WebDAV servers, and more. Administrators can choose which types of storage to enable and can mount these storage locations for a user, a group, or the entire system. Users will see a new folder appear in their root ownCloud directory, which they can access and use like any other ownCloud folder. External storage also allows users to share files stored in these external locations. In these cases, the credentials for the owner of the file are used when the recipient requests the file from external storage, thereby ensuring that the recipient can access the shared file. - External Storage can be configured using the GUI or at the command line. This second option provides the advanced user with more flexibility for configuring bulk external storage mounts and setting mount priorities. More information is available in the External Storage GUI documentation and the External Storage Configuration File documentation. + External storage can be configured using the GUI or at the command line. This second option provides the advanced user with more flexibility for configuring bulk external storage mounts and setting mount priorities. More information is available in the external storage GUI documentation and the external storage Configuration File documentation. </description> <licence>AGPL</licence> <author>Robin Appelman, Michael Gapczynski, Vincent Petry</author> @@ -13,7 +13,7 @@ <admin>admin-external-storage</admin> </documentation> <rememberlogin>false</rememberlogin> - <version>1.1.0</version> + <version>1.1.2</version> <types> <filesystem/> </types> @@ -24,4 +24,9 @@ <dependencies> <owncloud min-version="9.2" max-version="9.2" /> </dependencies> + + <settings> + <admin>OCA\Files_External\Settings\Admin</admin> + <admin-section>OCA\Files_External\Settings\Section</admin-section> + </settings> </info> diff --git a/apps/files_external/css/settings.css b/apps/files_external/css/settings.css index 4d5dc69a4e7..38e497eebe6 100644 --- a/apps/files_external/css/settings.css +++ b/apps/files_external/css/settings.css @@ -1,3 +1,16 @@ +#global_credentials { + padding: 0 30px; + margin-bottom: 0px; +} + +#files_external { + margin-bottom: 0px; +} + +#externalStorage { + margin: 15px 0 20px 0; +} + #externalStorage td.status { /* overwrite conflicting core styles */ display: table-cell; diff --git a/apps/files_external/img/app.svg b/apps/files_external/img/app.svg index 6cafe174f60..f1fd591ca70 100644 --- a/apps/files_external/img/app.svg +++ b/apps/files_external/img/app.svg @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32px" width="32px" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> +<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32px" width="32px" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 32 32"> <path d="m14.903 3.2373 4.7612 4.5146-7.1418 6.772 4.7612 4.5146 7.1418-6.772 4.7612 4.5146v-13.545h-14.283zm-9.5224 2.2573c-1.3189 0-2.3806 1.0068-2.3806 2.2573v18.058c0 1.2506 1.0617 2.2573 2.3806 2.2573h19.044c1.3188 0 2.3806-1.0068 2.3806-2.2573v-6.772l-2.3806-2.2573v9.0293h-19.044v-18.058h9.522l-2.381-2.2574h-7.1414z" fill="#fff"/> </svg> diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js index fc6edefc648..da3e2397b7e 100644 --- a/apps/files_external/js/settings.js +++ b/apps/files_external/js/settings.js @@ -945,6 +945,11 @@ MountConfigListView.prototype = _.extend({ $tr.find('.configuration').text(t('files_external', 'Admin defined')); } }); + var mainForm = $('#files_external'); + if (result.length === 0 && mainForm.attr('data-can-create') === 'false') { + mainForm.hide(); + $('a[href="#external-storage"]').parent().hide(); + } onCompletion.resolve(); } }); diff --git a/apps/files_external/l10n/cs_CZ.js b/apps/files_external/l10n/cs_CZ.js index 388207ca91c..0549a8d1009 100644 --- a/apps/files_external/l10n/cs_CZ.js +++ b/apps/files_external/l10n/cs_CZ.js @@ -65,7 +65,6 @@ OC.L10N.register( "Identity endpoint URL" : "Identifikační koncový bod URL", "Rackspace" : "Rackspace", "API key" : "Klíč API", - "Global Credentials" : "Globální přihlašovací údaje", "Log-in credentials, save in database" : "Přihlašovací údaje, ukládat v databázi", "Username and password" : "Uživatelské jméno a heslo", "Log-in credentials, save in session" : "Přihlašovací údaje, ukládat v sezení", @@ -102,10 +101,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)", - "<b>Note:</b> " : "<b>Poznámka:</b>", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> cURL podpora v PHP není povolena nebo nainstalována. Není možné připojení %s. Prosím požádejte svého správce systému ať ji nainstaluje.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> FTP podpora v PHP není povolena nebo nainstalována. Není možné připojení %s. Prosím požádejte svého správce systému ať ji nainstaluje.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> \"%s\" není instalováno. Není možné připojení %s. Prosím požádejte svého správce systému o instalaci.", "No external storage configured" : "Není nakonfigurováno žádné externí úložiště", "You can add external storages in the personal settings" : "Externí úložiště můžete přidat v osobních nastaveních", "Name" : "Název", @@ -117,7 +112,6 @@ OC.L10N.register( "Check for changes" : "Zkontrolovat změny", "Never" : "Nikdy", "Once every direct access" : "Jednou pro každý přímý přístup", - "External Storage" : "Externí úložiště", "Folder name" : "Název adresáře", "Authentication" : "Ověření", "Configuration" : "Nastavení", @@ -126,6 +120,13 @@ OC.L10N.register( "Advanced settings" : "Pokročilá nastavení", "Delete" : "Smazat", "Allow users to mount external storage" : "Povolit uživatelům připojení externího úložiště", - "Allow users to mount the following external storage" : "Povolit uživatelů připojit následující externí úložiště" + "Allow users to mount the following external storage" : "Povolit uživatelů připojit následující externí úložiště", + "Global Credentials" : "Globální přihlašovací údaje", + "<b>Note:</b> " : "<b>Poznámka:</b>", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> cURL podpora v PHP není povolena nebo nainstalována. Není možné připojení %s. Prosím požádejte svého správce systému ať ji nainstaluje.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> FTP podpora v PHP není povolena nebo nainstalována. Není možné připojení %s. Prosím požádejte svého správce systému ať ji nainstaluje.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> \"%s\" není instalováno. Není možné připojení %s. Prosím požádejte svého správce systému o instalaci.", + "External Storage" : "Externí úložiště", + "Access granted" : "Přístup povolen" }, "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/apps/files_external/l10n/cs_CZ.json b/apps/files_external/l10n/cs_CZ.json index 0b349a5b447..32f625605f7 100644 --- a/apps/files_external/l10n/cs_CZ.json +++ b/apps/files_external/l10n/cs_CZ.json @@ -63,7 +63,6 @@ "Identity endpoint URL" : "Identifikační koncový bod URL", "Rackspace" : "Rackspace", "API key" : "Klíč API", - "Global Credentials" : "Globální přihlašovací údaje", "Log-in credentials, save in database" : "Přihlašovací údaje, ukládat v databázi", "Username and password" : "Uživatelské jméno a heslo", "Log-in credentials, save in session" : "Přihlašovací údaje, ukládat v sezení", @@ -100,10 +99,6 @@ "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Jméno služby", "Request timeout (seconds)" : "Čas vypršení požadavku (sekundy)", - "<b>Note:</b> " : "<b>Poznámka:</b>", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> cURL podpora v PHP není povolena nebo nainstalována. Není možné připojení %s. Prosím požádejte svého správce systému ať ji nainstaluje.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> FTP podpora v PHP není povolena nebo nainstalována. Není možné připojení %s. Prosím požádejte svého správce systému ať ji nainstaluje.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> \"%s\" není instalováno. Není možné připojení %s. Prosím požádejte svého správce systému o instalaci.", "No external storage configured" : "Není nakonfigurováno žádné externí úložiště", "You can add external storages in the personal settings" : "Externí úložiště můžete přidat v osobních nastaveních", "Name" : "Název", @@ -115,7 +110,6 @@ "Check for changes" : "Zkontrolovat změny", "Never" : "Nikdy", "Once every direct access" : "Jednou pro každý přímý přístup", - "External Storage" : "Externí úložiště", "Folder name" : "Název adresáře", "Authentication" : "Ověření", "Configuration" : "Nastavení", @@ -124,6 +118,13 @@ "Advanced settings" : "Pokročilá nastavení", "Delete" : "Smazat", "Allow users to mount external storage" : "Povolit uživatelům připojení externího úložiště", - "Allow users to mount the following external storage" : "Povolit uživatelů připojit následující externí úložiště" + "Allow users to mount the following external storage" : "Povolit uživatelů připojit následující externí úložiště", + "Global Credentials" : "Globální přihlašovací údaje", + "<b>Note:</b> " : "<b>Poznámka:</b>", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> cURL podpora v PHP není povolena nebo nainstalována. Není možné připojení %s. Prosím požádejte svého správce systému ať ji nainstaluje.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> FTP podpora v PHP není povolena nebo nainstalována. Není možné připojení %s. Prosím požádejte svého správce systému ať ji nainstaluje.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> \"%s\" není instalováno. Není možné připojení %s. Prosím požádejte svého správce systému o instalaci.", + "External Storage" : "Externí úložiště", + "Access granted" : "Přístup povolen" },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files_external/l10n/da.js b/apps/files_external/l10n/da.js index da2d45c31e7..a943c841d95 100644 --- a/apps/files_external/l10n/da.js +++ b/apps/files_external/l10n/da.js @@ -82,10 +82,6 @@ OC.L10N.register( "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Tjenestenavn", "Request timeout (seconds)" : "Anmodning timeout (sekunder)", - "<b>Note:</b> " : "<b>Note:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> cURL-understøttelsen i PHP er enten ikke aktiveret eller installeret. Monteringen af %s er ikke mulig. Anmod din systemadministrator om at installere det.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> FTP understøttelsen i PHP er enten ikke aktiveret eller installeret. Montering af %s er ikke muligt. Anmod din systemadministrator om at installere det.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> \"%s\" er ikke installeret. Monteringen af %s er ikke mulig. Anmod din systemadministrator om at installere det.", "No external storage configured" : "Der er ingen konfigurerede eksterne lagre", "You can add external storages in the personal settings" : "Du kan tilføje eksterne lagerenheder i de personlige indstillinger", "Name" : "Navn", @@ -97,7 +93,6 @@ OC.L10N.register( "Check for changes" : "Tjek for ændringer", "Never" : "Aldrig", "Once every direct access" : "Kun ved hver direkte tilgang", - "External Storage" : "Ekstern opbevaring", "Folder name" : "Mappenavn", "Authentication" : "Godkendelse", "Configuration" : "Opsætning", @@ -105,6 +100,11 @@ OC.L10N.register( "Add storage" : "Tilføj lager", "Advanced settings" : "Avancerede indstillinger", "Delete" : "Slet", - "Allow users to mount the following external storage" : "Tillad brugere at montere følgende som eksternt lager" + "Allow users to mount the following external storage" : "Tillad brugere at montere følgende som eksternt lager", + "<b>Note:</b> " : "<b>Note:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> cURL-understøttelsen i PHP er enten ikke aktiveret eller installeret. Monteringen af %s er ikke mulig. Anmod din systemadministrator om at installere det.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> FTP understøttelsen i PHP er enten ikke aktiveret eller installeret. Montering af %s er ikke muligt. Anmod din systemadministrator om at installere det.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> \"%s\" er ikke installeret. Monteringen af %s er ikke mulig. Anmod din systemadministrator om at installere det.", + "External Storage" : "Ekstern opbevaring" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_external/l10n/da.json b/apps/files_external/l10n/da.json index 2db7a378ed0..61b9e461f74 100644 --- a/apps/files_external/l10n/da.json +++ b/apps/files_external/l10n/da.json @@ -80,10 +80,6 @@ "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Tjenestenavn", "Request timeout (seconds)" : "Anmodning timeout (sekunder)", - "<b>Note:</b> " : "<b>Note:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> cURL-understøttelsen i PHP er enten ikke aktiveret eller installeret. Monteringen af %s er ikke mulig. Anmod din systemadministrator om at installere det.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> FTP understøttelsen i PHP er enten ikke aktiveret eller installeret. Montering af %s er ikke muligt. Anmod din systemadministrator om at installere det.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> \"%s\" er ikke installeret. Monteringen af %s er ikke mulig. Anmod din systemadministrator om at installere det.", "No external storage configured" : "Der er ingen konfigurerede eksterne lagre", "You can add external storages in the personal settings" : "Du kan tilføje eksterne lagerenheder i de personlige indstillinger", "Name" : "Navn", @@ -95,7 +91,6 @@ "Check for changes" : "Tjek for ændringer", "Never" : "Aldrig", "Once every direct access" : "Kun ved hver direkte tilgang", - "External Storage" : "Ekstern opbevaring", "Folder name" : "Mappenavn", "Authentication" : "Godkendelse", "Configuration" : "Opsætning", @@ -103,6 +98,11 @@ "Add storage" : "Tilføj lager", "Advanced settings" : "Avancerede indstillinger", "Delete" : "Slet", - "Allow users to mount the following external storage" : "Tillad brugere at montere følgende som eksternt lager" + "Allow users to mount the following external storage" : "Tillad brugere at montere følgende som eksternt lager", + "<b>Note:</b> " : "<b>Note:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> cURL-understøttelsen i PHP er enten ikke aktiveret eller installeret. Monteringen af %s er ikke mulig. Anmod din systemadministrator om at installere det.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> FTP understøttelsen i PHP er enten ikke aktiveret eller installeret. Montering af %s er ikke muligt. Anmod din systemadministrator om at installere det.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> \"%s\" er ikke installeret. Monteringen af %s er ikke mulig. Anmod din systemadministrator om at installere det.", + "External Storage" : "Ekstern opbevaring" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_external/l10n/de.js b/apps/files_external/l10n/de.js index 615cde01d3f..b93f5be9226 100644 --- a/apps/files_external/l10n/de.js +++ b/apps/files_external/l10n/de.js @@ -21,14 +21,14 @@ OC.L10N.register( "Compatibility with Mac NFD encoding (slow)" : "Kompatibilität mit MAC NFD-Kodierung (langsam)", "Admin defined" : "Administrator festlegen", "Saved" : "Gespeichert", - "Saving..." : "Speichern…", + "Saving..." : "Speichere…", "Save" : "Speichern", "Empty response from the server" : "leere Antwort vom Server", "Couldn't access. Please logout and login to activate this mount point" : "Anmeldung nicht möglich. Bitte abmelden und erneut anmelden, damit von diesem Endpunkt zugegriffen werden kann.", "Couldn't get the information from the ownCloud server: {code} {type}" : "Es konnten keine Informationen aus dem ownCloud -Server gelesen werden: {code} {type}", "Couldn't get the list of external mount points: {type}" : "Die Liste der externen Endpunkte konnte nicht empfangen werden: {type}", "There was an error with message: " : "Es ist ein Fehler mit folgender Meldung aufgetreten:", - "External mount error" : "Fehler beim einbinden des externen Speichers", + "External mount error" : "Fehler beim Einbinden des externen Speichers", "external-storage" : "Externer Speicher", "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Es konnte keine Liste der Windows-Netzlaufwerke erstellt werden: leer Antwort vom Server", "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Einige der konfigurierten externen Bereitstellungspunkte sind nicht angeschlossen. Bitte klicke auf die roten Zeile(n) für weitere Informationen", @@ -65,7 +65,6 @@ OC.L10N.register( "Identity endpoint URL" : "Identität Endpunkt-URL", "Rackspace" : "Rackspace", "API key" : "API-Schlüssel", - "Global Credentials" : "Globale Anmeldeinformationen", "Log-in credentials, save in database" : "Anmeldedaten in Datenbank speichern", "Username and password" : "Benutzername und Passwort", "Log-in credentials, save in session" : "Anmeldedaten in Sitzung speichern", @@ -102,10 +101,7 @@ OC.L10N.register( "OpenStack Object Storage" : "Openstack-Objektspeicher", "Service name" : "Service Name", "Request timeout (seconds)" : "Anfrage -Timeout ( Sekunden)", - "<b>Note:</b> " : "<b>Hinweis:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die cURL-Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich zur Installation an Deinen Systemadministrator.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die FTP Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich sich zur Installation an Deinen Systemadministrator.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> \"%s\" ist nicht installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich sich zur Installation an Deinen Systemadministrator.", + "External storages" : "Externer Speicher", "No external storage configured" : "Kein externer Speicher konfiguriert", "You can add external storages in the personal settings" : "Externe Speicher können in den persönlichen Einstellungen hinzugefügt werden", "Name" : "Name", @@ -117,7 +113,6 @@ OC.L10N.register( "Check for changes" : "Auf Änderungen überprüfen", "Never" : "Nie", "Once every direct access" : "Einmal bei jedem Direktzugriff", - "External Storage" : "Externer Speicher", "Folder name" : "Ordnername", "Authentication" : "Authentifizierung", "Configuration" : "Konfiguration", @@ -126,6 +121,13 @@ OC.L10N.register( "Advanced settings" : "Erweiterte Einstellungen", "Delete" : "Löschen", "Allow users to mount external storage" : "Benutzern erlauben, externen Speicher einzubinden", - "Allow users to mount the following external storage" : "Benutzern erlauben, den oder die folgenden externen Speicher einzubinden:" + "Allow users to mount the following external storage" : "Benutzern erlauben, den oder die folgenden externen Speicher einzubinden:", + "Global Credentials" : "Globale Anmeldeinformationen", + "<b>Note:</b> " : "<b>Hinweis:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die cURL-Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich zur Installation an Deinen Systemadministrator.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die FTP Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich sich zur Installation an Deinen Systemadministrator.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> \"%s\" ist nicht installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich sich zur Installation an Deinen Systemadministrator.", + "External Storage" : "Externer Speicher", + "Access granted" : "Zugriff gewährt" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_external/l10n/de.json b/apps/files_external/l10n/de.json index 19ae5d01301..646b008e8ca 100644 --- a/apps/files_external/l10n/de.json +++ b/apps/files_external/l10n/de.json @@ -19,14 +19,14 @@ "Compatibility with Mac NFD encoding (slow)" : "Kompatibilität mit MAC NFD-Kodierung (langsam)", "Admin defined" : "Administrator festlegen", "Saved" : "Gespeichert", - "Saving..." : "Speichern…", + "Saving..." : "Speichere…", "Save" : "Speichern", "Empty response from the server" : "leere Antwort vom Server", "Couldn't access. Please logout and login to activate this mount point" : "Anmeldung nicht möglich. Bitte abmelden und erneut anmelden, damit von diesem Endpunkt zugegriffen werden kann.", "Couldn't get the information from the ownCloud server: {code} {type}" : "Es konnten keine Informationen aus dem ownCloud -Server gelesen werden: {code} {type}", "Couldn't get the list of external mount points: {type}" : "Die Liste der externen Endpunkte konnte nicht empfangen werden: {type}", "There was an error with message: " : "Es ist ein Fehler mit folgender Meldung aufgetreten:", - "External mount error" : "Fehler beim einbinden des externen Speichers", + "External mount error" : "Fehler beim Einbinden des externen Speichers", "external-storage" : "Externer Speicher", "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Es konnte keine Liste der Windows-Netzlaufwerke erstellt werden: leer Antwort vom Server", "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Einige der konfigurierten externen Bereitstellungspunkte sind nicht angeschlossen. Bitte klicke auf die roten Zeile(n) für weitere Informationen", @@ -63,7 +63,6 @@ "Identity endpoint URL" : "Identität Endpunkt-URL", "Rackspace" : "Rackspace", "API key" : "API-Schlüssel", - "Global Credentials" : "Globale Anmeldeinformationen", "Log-in credentials, save in database" : "Anmeldedaten in Datenbank speichern", "Username and password" : "Benutzername und Passwort", "Log-in credentials, save in session" : "Anmeldedaten in Sitzung speichern", @@ -100,10 +99,7 @@ "OpenStack Object Storage" : "Openstack-Objektspeicher", "Service name" : "Service Name", "Request timeout (seconds)" : "Anfrage -Timeout ( Sekunden)", - "<b>Note:</b> " : "<b>Hinweis:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die cURL-Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich zur Installation an Deinen Systemadministrator.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die FTP Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich sich zur Installation an Deinen Systemadministrator.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> \"%s\" ist nicht installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich sich zur Installation an Deinen Systemadministrator.", + "External storages" : "Externer Speicher", "No external storage configured" : "Kein externer Speicher konfiguriert", "You can add external storages in the personal settings" : "Externe Speicher können in den persönlichen Einstellungen hinzugefügt werden", "Name" : "Name", @@ -115,7 +111,6 @@ "Check for changes" : "Auf Änderungen überprüfen", "Never" : "Nie", "Once every direct access" : "Einmal bei jedem Direktzugriff", - "External Storage" : "Externer Speicher", "Folder name" : "Ordnername", "Authentication" : "Authentifizierung", "Configuration" : "Konfiguration", @@ -124,6 +119,13 @@ "Advanced settings" : "Erweiterte Einstellungen", "Delete" : "Löschen", "Allow users to mount external storage" : "Benutzern erlauben, externen Speicher einzubinden", - "Allow users to mount the following external storage" : "Benutzern erlauben, den oder die folgenden externen Speicher einzubinden:" + "Allow users to mount the following external storage" : "Benutzern erlauben, den oder die folgenden externen Speicher einzubinden:", + "Global Credentials" : "Globale Anmeldeinformationen", + "<b>Note:</b> " : "<b>Hinweis:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die cURL-Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich zur Installation an Deinen Systemadministrator.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die FTP Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich sich zur Installation an Deinen Systemadministrator.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> \"%s\" ist nicht installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wende Dich sich zur Installation an Deinen Systemadministrator.", + "External Storage" : "Externer Speicher", + "Access granted" : "Zugriff gewährt" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_external/l10n/de_DE.js b/apps/files_external/l10n/de_DE.js index 9b864b18293..51dd30133dc 100644 --- a/apps/files_external/l10n/de_DE.js +++ b/apps/files_external/l10n/de_DE.js @@ -21,7 +21,7 @@ OC.L10N.register( "Compatibility with Mac NFD encoding (slow)" : "Kompatibilität mit MAC NFD-Kodierung (langsam)", "Admin defined" : "Administrator definiert", "Saved" : "Gespeichert", - "Saving..." : "Speichern...", + "Saving..." : "Speichere...", "Save" : "Speichern", "Empty response from the server" : "Leere Antwort vom Server erhalten", "Couldn't access. Please logout and login to activate this mount point" : "Anmeldung nicht möglich. Bitte melden Sie sich ab und wieder an, damit Sie von diesem Endpunkt zugreifen können.", @@ -65,7 +65,6 @@ OC.L10N.register( "Identity endpoint URL" : "Identität Endpunkt-URL", "Rackspace" : "Rackspace", "API key" : "API-Schlüssel", - "Global Credentials" : "Globale Anmeldeinformationen", "Log-in credentials, save in database" : "Anmeldedaten in Datenbank speichern", "Username and password" : "Benutzername und Passwort", "Log-in credentials, save in session" : "Anmeldedaten in Sitzung speichern", @@ -102,10 +101,7 @@ OC.L10N.register( "OpenStack Object Storage" : "Openstack-Objektspeicher", "Service name" : "Dienst Name", "Request timeout (seconds)" : "Anfrage-Zeitüberschreitung (Sekunden)", - "<b>Note:</b> " : "<b>Hinweis:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die cURL-Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die FTP Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> \"%s\" ist nicht installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.", + "External storages" : "Externer Speicher", "No external storage configured" : "Kein externer Speicher konfiguriert", "You can add external storages in the personal settings" : "Sie können externe Speicher in den persönlichen Einstellungen hinzufügen", "Name" : "Name", @@ -117,7 +113,6 @@ OC.L10N.register( "Check for changes" : "Auf Änderungen überprüfen", "Never" : "Nie", "Once every direct access" : "Einmal bei jedem Direktzugriff", - "External Storage" : "Externer Speicher", "Folder name" : "Ordnername", "Authentication" : "Authentifizierung", "Configuration" : "Konfiguration", @@ -126,6 +121,13 @@ OC.L10N.register( "Advanced settings" : "Erweiterte Einstellungen", "Delete" : "Löschen", "Allow users to mount external storage" : "Erlauben Sie den Benutzern externen Speicher hinzuzufügen", - "Allow users to mount the following external storage" : "Benutzern erlauben, den oder die folgenden externen Speicher einzubinden:" + "Allow users to mount the following external storage" : "Benutzern erlauben, den oder die folgenden externen Speicher einzubinden:", + "Global Credentials" : "Globale Anmeldeinformationen", + "<b>Note:</b> " : "<b>Hinweis:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die cURL-Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die FTP Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> \"%s\" ist nicht installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.", + "External Storage" : "Externer Speicher", + "Access granted" : "Zugriff gewährt" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_external/l10n/de_DE.json b/apps/files_external/l10n/de_DE.json index 972e91adb4f..2f9f8f63c91 100644 --- a/apps/files_external/l10n/de_DE.json +++ b/apps/files_external/l10n/de_DE.json @@ -19,7 +19,7 @@ "Compatibility with Mac NFD encoding (slow)" : "Kompatibilität mit MAC NFD-Kodierung (langsam)", "Admin defined" : "Administrator definiert", "Saved" : "Gespeichert", - "Saving..." : "Speichern...", + "Saving..." : "Speichere...", "Save" : "Speichern", "Empty response from the server" : "Leere Antwort vom Server erhalten", "Couldn't access. Please logout and login to activate this mount point" : "Anmeldung nicht möglich. Bitte melden Sie sich ab und wieder an, damit Sie von diesem Endpunkt zugreifen können.", @@ -63,7 +63,6 @@ "Identity endpoint URL" : "Identität Endpunkt-URL", "Rackspace" : "Rackspace", "API key" : "API-Schlüssel", - "Global Credentials" : "Globale Anmeldeinformationen", "Log-in credentials, save in database" : "Anmeldedaten in Datenbank speichern", "Username and password" : "Benutzername und Passwort", "Log-in credentials, save in session" : "Anmeldedaten in Sitzung speichern", @@ -100,10 +99,7 @@ "OpenStack Object Storage" : "Openstack-Objektspeicher", "Service name" : "Dienst Name", "Request timeout (seconds)" : "Anfrage-Zeitüberschreitung (Sekunden)", - "<b>Note:</b> " : "<b>Hinweis:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die cURL-Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die FTP Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> \"%s\" ist nicht installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.", + "External storages" : "Externer Speicher", "No external storage configured" : "Kein externer Speicher konfiguriert", "You can add external storages in the personal settings" : "Sie können externe Speicher in den persönlichen Einstellungen hinzufügen", "Name" : "Name", @@ -115,7 +111,6 @@ "Check for changes" : "Auf Änderungen überprüfen", "Never" : "Nie", "Once every direct access" : "Einmal bei jedem Direktzugriff", - "External Storage" : "Externer Speicher", "Folder name" : "Ordnername", "Authentication" : "Authentifizierung", "Configuration" : "Konfiguration", @@ -124,6 +119,13 @@ "Advanced settings" : "Erweiterte Einstellungen", "Delete" : "Löschen", "Allow users to mount external storage" : "Erlauben Sie den Benutzern externen Speicher hinzuzufügen", - "Allow users to mount the following external storage" : "Benutzern erlauben, den oder die folgenden externen Speicher einzubinden:" + "Allow users to mount the following external storage" : "Benutzern erlauben, den oder die folgenden externen Speicher einzubinden:", + "Global Credentials" : "Globale Anmeldeinformationen", + "<b>Note:</b> " : "<b>Hinweis:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die cURL-Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> Die FTP Unterstützung von PHP ist nicht aktiviert oder installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Hinweis:</b> \"%s\" ist nicht installiert. Das Hinzufügen von %s ist nicht möglich. Bitte wenden Sie sich zur Installation an Ihren Systemadministrator.", + "External Storage" : "Externer Speicher", + "Access granted" : "Zugriff gewährt" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_external/l10n/el.js b/apps/files_external/l10n/el.js index 8687f7a8299..2e707a94f7a 100644 --- a/apps/files_external/l10n/el.js +++ b/apps/files_external/l10n/el.js @@ -87,10 +87,6 @@ OC.L10N.register( "OpenStack Object Storage" : "Αποθήκη αντικειμένων OpenStack", "Service name" : "Όνομα υπηρεσίας", "Request timeout (seconds)" : "Χρονικό όριο αιτήματος (δευτερόλεπτα)", - "<b>Note:</b> " : "<b>Σημείωση:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Σημείωση:</b> Η υποστήριξη cURL στην PHP δεν είναι ενεργοποιημένη ή εγκατεστημένη. Η προσάρτηση του %s δεν είναι δυνατή. Παρακαλώ ζητήστε από τον διαχειριστή συστημάτων σας να την εγκαταστήσει.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Σημείωση:</b> Η υποστήριξη FTP στην PHP δεν είναι ενεργοποιημένη ή εγκατεστημένη. Δεν είναι δυνατή η προσάρτηση του %s. Παρακαλώ ζητήστε από τον διαχειριστή συστημάτων σας να την εγκαταστήσει.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Σημείωση:</b> Η επέκταση \"%s\" δεν είναι εγκατεστημένη. Δεν είναι δυνατή η προσάρτηση %s. Παρακαλώ ζητήστε από τον διαχειριστή συστημάτων σας να την εγκαταστήσει.", "No external storage configured" : "Δεν έχει ρυθμιστεί κανένα εξωτερικό μέσο αποθήκευσης", "You can add external storages in the personal settings" : "Μπορείτε να προσθέσετε εξωτερικά μέσα αποθήκευσης στις προσωπικές ρυθμίσεις", "Name" : "Όνομα", @@ -101,7 +97,6 @@ OC.L10N.register( "Check for changes" : "Έλεγχος για αλλαγές", "Never" : "Ποτέ", "Once every direct access" : "Σε κάθε απευθείας πρόσβαση", - "External Storage" : "Εξωτερικό Αποθηκευτικό Μέσο", "Folder name" : "Όνομα φακέλου", "Authentication" : "Πιστοποίηση", "Configuration" : "Ρυθμίσεις", @@ -110,6 +105,11 @@ OC.L10N.register( "Advanced settings" : "Ρυθμίσεις για προχωρημένους", "Delete" : "Διαγραφή", "Allow users to mount external storage" : "Να επιτρέπεται στους χρήστες η σύνδεση εξωτερικού χώρου", - "Allow users to mount the following external storage" : "Χορήγηση άδειας στους χρήστες να συνδέσουν τα παρακάτω εξωτερικά μέσα αποθήκευσης" + "Allow users to mount the following external storage" : "Χορήγηση άδειας στους χρήστες να συνδέσουν τα παρακάτω εξωτερικά μέσα αποθήκευσης", + "<b>Note:</b> " : "<b>Σημείωση:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Σημείωση:</b> Η υποστήριξη cURL στην PHP δεν είναι ενεργοποιημένη ή εγκατεστημένη. Η προσάρτηση του %s δεν είναι δυνατή. Παρακαλώ ζητήστε από τον διαχειριστή συστημάτων σας να την εγκαταστήσει.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Σημείωση:</b> Η υποστήριξη FTP στην PHP δεν είναι ενεργοποιημένη ή εγκατεστημένη. Δεν είναι δυνατή η προσάρτηση του %s. Παρακαλώ ζητήστε από τον διαχειριστή συστημάτων σας να την εγκαταστήσει.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Σημείωση:</b> Η επέκταση \"%s\" δεν είναι εγκατεστημένη. Δεν είναι δυνατή η προσάρτηση %s. Παρακαλώ ζητήστε από τον διαχειριστή συστημάτων σας να την εγκαταστήσει.", + "External Storage" : "Εξωτερικό Αποθηκευτικό Μέσο" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_external/l10n/el.json b/apps/files_external/l10n/el.json index 70373471999..08caf526d26 100644 --- a/apps/files_external/l10n/el.json +++ b/apps/files_external/l10n/el.json @@ -85,10 +85,6 @@ "OpenStack Object Storage" : "Αποθήκη αντικειμένων OpenStack", "Service name" : "Όνομα υπηρεσίας", "Request timeout (seconds)" : "Χρονικό όριο αιτήματος (δευτερόλεπτα)", - "<b>Note:</b> " : "<b>Σημείωση:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Σημείωση:</b> Η υποστήριξη cURL στην PHP δεν είναι ενεργοποιημένη ή εγκατεστημένη. Η προσάρτηση του %s δεν είναι δυνατή. Παρακαλώ ζητήστε από τον διαχειριστή συστημάτων σας να την εγκαταστήσει.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Σημείωση:</b> Η υποστήριξη FTP στην PHP δεν είναι ενεργοποιημένη ή εγκατεστημένη. Δεν είναι δυνατή η προσάρτηση του %s. Παρακαλώ ζητήστε από τον διαχειριστή συστημάτων σας να την εγκαταστήσει.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Σημείωση:</b> Η επέκταση \"%s\" δεν είναι εγκατεστημένη. Δεν είναι δυνατή η προσάρτηση %s. Παρακαλώ ζητήστε από τον διαχειριστή συστημάτων σας να την εγκαταστήσει.", "No external storage configured" : "Δεν έχει ρυθμιστεί κανένα εξωτερικό μέσο αποθήκευσης", "You can add external storages in the personal settings" : "Μπορείτε να προσθέσετε εξωτερικά μέσα αποθήκευσης στις προσωπικές ρυθμίσεις", "Name" : "Όνομα", @@ -99,7 +95,6 @@ "Check for changes" : "Έλεγχος για αλλαγές", "Never" : "Ποτέ", "Once every direct access" : "Σε κάθε απευθείας πρόσβαση", - "External Storage" : "Εξωτερικό Αποθηκευτικό Μέσο", "Folder name" : "Όνομα φακέλου", "Authentication" : "Πιστοποίηση", "Configuration" : "Ρυθμίσεις", @@ -108,6 +103,11 @@ "Advanced settings" : "Ρυθμίσεις για προχωρημένους", "Delete" : "Διαγραφή", "Allow users to mount external storage" : "Να επιτρέπεται στους χρήστες η σύνδεση εξωτερικού χώρου", - "Allow users to mount the following external storage" : "Χορήγηση άδειας στους χρήστες να συνδέσουν τα παρακάτω εξωτερικά μέσα αποθήκευσης" + "Allow users to mount the following external storage" : "Χορήγηση άδειας στους χρήστες να συνδέσουν τα παρακάτω εξωτερικά μέσα αποθήκευσης", + "<b>Note:</b> " : "<b>Σημείωση:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Σημείωση:</b> Η υποστήριξη cURL στην PHP δεν είναι ενεργοποιημένη ή εγκατεστημένη. Η προσάρτηση του %s δεν είναι δυνατή. Παρακαλώ ζητήστε από τον διαχειριστή συστημάτων σας να την εγκαταστήσει.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Σημείωση:</b> Η υποστήριξη FTP στην PHP δεν είναι ενεργοποιημένη ή εγκατεστημένη. Δεν είναι δυνατή η προσάρτηση του %s. Παρακαλώ ζητήστε από τον διαχειριστή συστημάτων σας να την εγκαταστήσει.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Σημείωση:</b> Η επέκταση \"%s\" δεν είναι εγκατεστημένη. Δεν είναι δυνατή η προσάρτηση %s. Παρακαλώ ζητήστε από τον διαχειριστή συστημάτων σας να την εγκαταστήσει.", + "External Storage" : "Εξωτερικό Αποθηκευτικό Μέσο" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_external/l10n/en_GB.js b/apps/files_external/l10n/en_GB.js index 9afbe156ccc..66f7191ee46 100644 --- a/apps/files_external/l10n/en_GB.js +++ b/apps/files_external/l10n/en_GB.js @@ -65,7 +65,6 @@ OC.L10N.register( "Identity endpoint URL" : "Identity endpoint URL", "Rackspace" : "Rackspace", "API key" : "API key", - "Global Credentials" : "Global Credentials", "Log-in credentials, save in database" : "Log-in credentials, save in database", "Username and password" : "Username and password", "Log-in credentials, save in session" : "Log-in credentials, save in session", @@ -102,10 +101,6 @@ OC.L10N.register( "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Service name", "Request timeout (seconds)" : "Request timeout (seconds)", - "<b>Note:</b> " : "<b>Note:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it.", "No external storage configured" : "No external storage configured", "You can add external storages in the personal settings" : "You can add external storages in the personal settings", "Name" : "Name", @@ -117,7 +112,6 @@ OC.L10N.register( "Check for changes" : "Check for changes", "Never" : "Never", "Once every direct access" : "Once every direct access", - "External Storage" : "External Storage", "Folder name" : "Folder name", "Authentication" : "Authentication", "Configuration" : "Configuration", @@ -126,6 +120,12 @@ OC.L10N.register( "Advanced settings" : "Advanced settings", "Delete" : "Delete", "Allow users to mount external storage" : "Allow users to mount external storage", - "Allow users to mount the following external storage" : "Allow users to mount the following external storage" + "Allow users to mount the following external storage" : "Allow users to mount the following external storage", + "Global Credentials" : "Global Credentials", + "<b>Note:</b> " : "<b>Note:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it.", + "External Storage" : "External Storage" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_external/l10n/en_GB.json b/apps/files_external/l10n/en_GB.json index 83d638a7395..48133bd5b2b 100644 --- a/apps/files_external/l10n/en_GB.json +++ b/apps/files_external/l10n/en_GB.json @@ -63,7 +63,6 @@ "Identity endpoint URL" : "Identity endpoint URL", "Rackspace" : "Rackspace", "API key" : "API key", - "Global Credentials" : "Global Credentials", "Log-in credentials, save in database" : "Log-in credentials, save in database", "Username and password" : "Username and password", "Log-in credentials, save in session" : "Log-in credentials, save in session", @@ -100,10 +99,6 @@ "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Service name", "Request timeout (seconds)" : "Request timeout (seconds)", - "<b>Note:</b> " : "<b>Note:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it.", "No external storage configured" : "No external storage configured", "You can add external storages in the personal settings" : "You can add external storages in the personal settings", "Name" : "Name", @@ -115,7 +110,6 @@ "Check for changes" : "Check for changes", "Never" : "Never", "Once every direct access" : "Once every direct access", - "External Storage" : "External Storage", "Folder name" : "Folder name", "Authentication" : "Authentication", "Configuration" : "Configuration", @@ -124,6 +118,12 @@ "Advanced settings" : "Advanced settings", "Delete" : "Delete", "Allow users to mount external storage" : "Allow users to mount external storage", - "Allow users to mount the following external storage" : "Allow users to mount the following external storage" + "Allow users to mount the following external storage" : "Allow users to mount the following external storage", + "Global Credentials" : "Global Credentials", + "<b>Note:</b> " : "<b>Note:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it.", + "External Storage" : "External Storage" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_external/l10n/es.js b/apps/files_external/l10n/es.js index 3dff3557af8..56be4e3d934 100644 --- a/apps/files_external/l10n/es.js +++ b/apps/files_external/l10n/es.js @@ -65,7 +65,6 @@ OC.L10N.register( "Identity endpoint URL" : "Identidad de punto final URL", "Rackspace" : "Espacio de Rack", "API key" : "Clave API", - "Global Credentials" : "Credenciales Globales", "Log-in credentials, save in database" : "Credenciales de inicio de sesión, salvar en la base de datos", "Username and password" : "Nombre de usuario y contraseña", "Log-in credentials, save in session" : "Credenciales de login, guardar en la sesión", @@ -102,10 +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)", - "<b>Note:</b> " : "<b>Nota:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> 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.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El soporte de FTP en PHP no está activado o instalado. No se puede montar %s. Pídale al administrador del sistema que lo instale.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> \"%s\" no está instalado. No se puede montar %s. Pídale al administrador del sistema que lo instale.", "No external storage configured" : "No hay ningún almacenamiento externo configurado", "You can add external storages in the personal settings" : "Puede agregar almacenamientos externos en la configuración personal", "Name" : "Nombre", @@ -117,7 +112,6 @@ OC.L10N.register( "Check for changes" : "Comprobar si hay cambios", "Never" : "Nunca", "Once every direct access" : "Una vez cada acceso directo", - "External Storage" : "Almacenamiento externo", "Folder name" : "Nombre de la carpeta", "Authentication" : "Autentificación", "Configuration" : "Configuración", @@ -126,6 +120,12 @@ OC.L10N.register( "Advanced settings" : "Configuración avanzada", "Delete" : "Eliminar", "Allow users to mount external storage" : "Permitir a los usuarios montar un almacenamiento externo", - "Allow users to mount the following external storage" : "Permitir a los usuarios montar el siguiente almacenamiento externo" + "Allow users to mount the following external storage" : "Permitir a los usuarios montar el siguiente almacenamiento externo", + "Global Credentials" : "Credenciales Globales", + "<b>Note:</b> " : "<b>Nota:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> 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.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El soporte de FTP en PHP no está activado o instalado. No se puede montar %s. Pídale al administrador del sistema que lo instale.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> \"%s\" no está instalado. No se puede montar %s. Pídale al administrador del sistema que lo instale.", + "External Storage" : "Almacenamiento externo" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_external/l10n/es.json b/apps/files_external/l10n/es.json index 55ee9ad1ea8..c367b18f07c 100644 --- a/apps/files_external/l10n/es.json +++ b/apps/files_external/l10n/es.json @@ -63,7 +63,6 @@ "Identity endpoint URL" : "Identidad de punto final URL", "Rackspace" : "Espacio de Rack", "API key" : "Clave API", - "Global Credentials" : "Credenciales Globales", "Log-in credentials, save in database" : "Credenciales de inicio de sesión, salvar en la base de datos", "Username and password" : "Nombre de usuario y contraseña", "Log-in credentials, save in session" : "Credenciales de login, guardar en la sesión", @@ -100,10 +99,6 @@ "OpenStack Object Storage" : "Almacenamiento de objeto OpenStack", "Service name" : "Nombre del servicio", "Request timeout (seconds)" : "Tiempo agotado para petición (segundos)", - "<b>Note:</b> " : "<b>Nota:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> 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.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El soporte de FTP en PHP no está activado o instalado. No se puede montar %s. Pídale al administrador del sistema que lo instale.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> \"%s\" no está instalado. No se puede montar %s. Pídale al administrador del sistema que lo instale.", "No external storage configured" : "No hay ningún almacenamiento externo configurado", "You can add external storages in the personal settings" : "Puede agregar almacenamientos externos en la configuración personal", "Name" : "Nombre", @@ -115,7 +110,6 @@ "Check for changes" : "Comprobar si hay cambios", "Never" : "Nunca", "Once every direct access" : "Una vez cada acceso directo", - "External Storage" : "Almacenamiento externo", "Folder name" : "Nombre de la carpeta", "Authentication" : "Autentificación", "Configuration" : "Configuración", @@ -124,6 +118,12 @@ "Advanced settings" : "Configuración avanzada", "Delete" : "Eliminar", "Allow users to mount external storage" : "Permitir a los usuarios montar un almacenamiento externo", - "Allow users to mount the following external storage" : "Permitir a los usuarios montar el siguiente almacenamiento externo" + "Allow users to mount the following external storage" : "Permitir a los usuarios montar el siguiente almacenamiento externo", + "Global Credentials" : "Credenciales Globales", + "<b>Note:</b> " : "<b>Nota:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> 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.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> El soporte de FTP en PHP no está activado o instalado. No se puede montar %s. Pídale al administrador del sistema que lo instale.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> \"%s\" no está instalado. No se puede montar %s. Pídale al administrador del sistema que lo instale.", + "External Storage" : "Almacenamiento externo" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_external/l10n/fi_FI.js b/apps/files_external/l10n/fi_FI.js index 19e37c94cfd..28c4b5a012a 100644 --- a/apps/files_external/l10n/fi_FI.js +++ b/apps/files_external/l10n/fi_FI.js @@ -1,6 +1,7 @@ OC.L10N.register( "files_external", { + "Fetching request tokens failed. Verify that your app key and secret are correct." : "Pyyntötunnisteen nouto epäonnistui. Tarkista että sovellusavaimesi ja -salaisuutesi ovat oikein.", "Step 1 failed. Exception: %s" : "Vaihe 1 epäonnistui. Poikkeus: %s", "Step 2 failed. Exception: %s" : "Vaihe 2 epäonnistui. Poikkeus: %s", "External storage" : "Ulkoinen tallennustila", @@ -75,10 +76,6 @@ OC.L10N.register( "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Palvelun nimi", "Request timeout (seconds)" : "Pyynnön aikakatkaisu (sekunneissa)", - "<b>Note:</b> " : "<b>Huomio:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> PHP:n cURL-tuki ei ole käytössä tai sitä ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan cURL-tuki käyttöön.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> PHP:n FTP-tuki ei ole käytössä tai sitä ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan FTP-tuki käyttöön.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> \"%s\" ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää asentamaan puuttuva kohde.", "No external storage configured" : "Erillistä tallennustilaa ei ole määritetty", "You can add external storages in the personal settings" : "Voit lisätä erillisiä tallennustiloja henkilökohtaisista asetuksistasi", "Name" : "Nimi", @@ -89,7 +86,6 @@ OC.L10N.register( "Check for changes" : "Tarkista muutokset", "Never" : "Ei koskaan", "Once every direct access" : "Kerran aina suoran käytön yhteydessä", - "External Storage" : "Erillinen tallennusväline", "Folder name" : "Kansion nimi", "Authentication" : "Tunnistautuminen", "Configuration" : "Asetukset", @@ -98,6 +94,11 @@ OC.L10N.register( "Advanced settings" : "Lisäasetukset", "Delete" : "Poista", "Allow users to mount external storage" : "Salli käyttäjien liittää erillisiä tallennustiloja", - "Allow users to mount the following external storage" : "Salli käyttäjien liittää seuraavat erilliset tallennusvälineet" + "Allow users to mount the following external storage" : "Salli käyttäjien liittää seuraavat erilliset tallennusvälineet", + "<b>Note:</b> " : "<b>Huomio:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> PHP:n cURL-tuki ei ole käytössä tai sitä ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan cURL-tuki käyttöön.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> PHP:n FTP-tuki ei ole käytössä tai sitä ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan FTP-tuki käyttöön.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> \"%s\" ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää asentamaan puuttuva kohde.", + "External Storage" : "Erillinen tallennusväline" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_external/l10n/fi_FI.json b/apps/files_external/l10n/fi_FI.json index cc39a8213e4..e7c96f0d826 100644 --- a/apps/files_external/l10n/fi_FI.json +++ b/apps/files_external/l10n/fi_FI.json @@ -1,4 +1,5 @@ { "translations": { + "Fetching request tokens failed. Verify that your app key and secret are correct." : "Pyyntötunnisteen nouto epäonnistui. Tarkista että sovellusavaimesi ja -salaisuutesi ovat oikein.", "Step 1 failed. Exception: %s" : "Vaihe 1 epäonnistui. Poikkeus: %s", "Step 2 failed. Exception: %s" : "Vaihe 2 epäonnistui. Poikkeus: %s", "External storage" : "Ulkoinen tallennustila", @@ -73,10 +74,6 @@ "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Palvelun nimi", "Request timeout (seconds)" : "Pyynnön aikakatkaisu (sekunneissa)", - "<b>Note:</b> " : "<b>Huomio:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> PHP:n cURL-tuki ei ole käytössä tai sitä ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan cURL-tuki käyttöön.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> PHP:n FTP-tuki ei ole käytössä tai sitä ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan FTP-tuki käyttöön.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> \"%s\" ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää asentamaan puuttuva kohde.", "No external storage configured" : "Erillistä tallennustilaa ei ole määritetty", "You can add external storages in the personal settings" : "Voit lisätä erillisiä tallennustiloja henkilökohtaisista asetuksistasi", "Name" : "Nimi", @@ -87,7 +84,6 @@ "Check for changes" : "Tarkista muutokset", "Never" : "Ei koskaan", "Once every direct access" : "Kerran aina suoran käytön yhteydessä", - "External Storage" : "Erillinen tallennusväline", "Folder name" : "Kansion nimi", "Authentication" : "Tunnistautuminen", "Configuration" : "Asetukset", @@ -96,6 +92,11 @@ "Advanced settings" : "Lisäasetukset", "Delete" : "Poista", "Allow users to mount external storage" : "Salli käyttäjien liittää erillisiä tallennustiloja", - "Allow users to mount the following external storage" : "Salli käyttäjien liittää seuraavat erilliset tallennusvälineet" + "Allow users to mount the following external storage" : "Salli käyttäjien liittää seuraavat erilliset tallennusvälineet", + "<b>Note:</b> " : "<b>Huomio:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> PHP:n cURL-tuki ei ole käytössä tai sitä ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan cURL-tuki käyttöön.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> PHP:n FTP-tuki ei ole käytössä tai sitä ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan FTP-tuki käyttöön.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> \"%s\" ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää asentamaan puuttuva kohde.", + "External Storage" : "Erillinen tallennusväline" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_external/l10n/fr.js b/apps/files_external/l10n/fr.js index 486431de5e0..d59f67a85b4 100644 --- a/apps/files_external/l10n/fr.js +++ b/apps/files_external/l10n/fr.js @@ -65,7 +65,6 @@ OC.L10N.register( "Identity endpoint URL" : "Identity endpoint URL", "Rackspace" : "Rackspace", "API key" : "Clé API", - "Global Credentials" : "Informations d'identification globales", "Log-in credentials, save in database" : "Identifiants de connexion, sauvegarder dans la base de données", "Username and password" : "Nom d'utilisateur et mot de passe", "Log-in credentials, save in session" : "Identifiants de connexion, sauvegardés pour la session", @@ -102,10 +101,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)", - "<b>Note:</b> " : "<b>Attention :</b>", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention :</b> La prise en charge de cURL par PHP n'est pas activée ou installée. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention : </b> La prise en charge du FTP par PHP n'est pas activée ou installée. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention : </b> \"%s\" n'est pas installé. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.", "No external storage configured" : "Aucun stockage externe configuré", "You can add external storages in the personal settings" : "Vous pouvez ajouter des stockages externes via vos paramètres personnels", "Name" : "Nom", @@ -117,7 +112,6 @@ OC.L10N.register( "Check for changes" : "Rechercher les modifications", "Never" : "Jamais", "Once every direct access" : "Une fois à chaque accès direct", - "External Storage" : "Stockage externe", "Folder name" : "Nom du dossier", "Authentication" : "Authentification", "Configuration" : "Configuration", @@ -126,6 +120,13 @@ OC.L10N.register( "Advanced settings" : "Paramètres avancés", "Delete" : "Supprimer", "Allow users to mount external storage" : "Autoriser les utilisateurs à monter des espaces de stockage externes", - "Allow users to mount the following external storage" : "Autoriser les utilisateurs à monter les stockages externes suivants" + "Allow users to mount the following external storage" : "Autoriser les utilisateurs à monter les stockages externes suivants", + "Global Credentials" : "Informations d'identification globales", + "<b>Note:</b> " : "<b>Attention :</b>", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention :</b> La prise en charge de cURL par PHP n'est pas activée ou installée. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention : </b> La prise en charge du FTP par PHP n'est pas activée ou installée. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention : </b> \"%s\" n'est pas installé. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.", + "External Storage" : "Stockage externe", + "Access granted" : "Accès autorisé" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/files_external/l10n/fr.json b/apps/files_external/l10n/fr.json index 0ab8b413928..2ff58debcaf 100644 --- a/apps/files_external/l10n/fr.json +++ b/apps/files_external/l10n/fr.json @@ -63,7 +63,6 @@ "Identity endpoint URL" : "Identity endpoint URL", "Rackspace" : "Rackspace", "API key" : "Clé API", - "Global Credentials" : "Informations d'identification globales", "Log-in credentials, save in database" : "Identifiants de connexion, sauvegarder dans la base de données", "Username and password" : "Nom d'utilisateur et mot de passe", "Log-in credentials, save in session" : "Identifiants de connexion, sauvegardés pour la session", @@ -100,10 +99,6 @@ "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Nom du service", "Request timeout (seconds)" : "Délai d'expiration des requêtes (en secondes)", - "<b>Note:</b> " : "<b>Attention :</b>", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention :</b> La prise en charge de cURL par PHP n'est pas activée ou installée. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention : </b> La prise en charge du FTP par PHP n'est pas activée ou installée. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention : </b> \"%s\" n'est pas installé. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.", "No external storage configured" : "Aucun stockage externe configuré", "You can add external storages in the personal settings" : "Vous pouvez ajouter des stockages externes via vos paramètres personnels", "Name" : "Nom", @@ -115,7 +110,6 @@ "Check for changes" : "Rechercher les modifications", "Never" : "Jamais", "Once every direct access" : "Une fois à chaque accès direct", - "External Storage" : "Stockage externe", "Folder name" : "Nom du dossier", "Authentication" : "Authentification", "Configuration" : "Configuration", @@ -124,6 +118,13 @@ "Advanced settings" : "Paramètres avancés", "Delete" : "Supprimer", "Allow users to mount external storage" : "Autoriser les utilisateurs à monter des espaces de stockage externes", - "Allow users to mount the following external storage" : "Autoriser les utilisateurs à monter les stockages externes suivants" + "Allow users to mount the following external storage" : "Autoriser les utilisateurs à monter les stockages externes suivants", + "Global Credentials" : "Informations d'identification globales", + "<b>Note:</b> " : "<b>Attention :</b>", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention :</b> La prise en charge de cURL par PHP n'est pas activée ou installée. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention : </b> La prise en charge du FTP par PHP n'est pas activée ou installée. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Attention : </b> \"%s\" n'est pas installé. Le montage de %s n'est pas possible. Contactez votre administrateur système pour l'installer.", + "External Storage" : "Stockage externe", + "Access granted" : "Accès autorisé" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/files_external/l10n/he.js b/apps/files_external/l10n/he.js index 06c21bf6da4..1219a074aef 100644 --- a/apps/files_external/l10n/he.js +++ b/apps/files_external/l10n/he.js @@ -98,10 +98,6 @@ OC.L10N.register( "OpenStack Object Storage" : "אחסון אובייקט OpenStack", "Service name" : "שם שירות", "Request timeout (seconds)" : "פסק זמן מבוקש (שניות)", - "<b>Note:</b> " : "<b>הערה:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>הערה:</b> תמיכת ה- cURL ב- PHP אינה מופעלת או מותקנת. חיבור של %s אינו אפשרי. יש לבקש ממנהל המערכת להתקין אותה.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>הערה:</b> תמיכת ה- FTP ב- PHP אינה מופעלת או מותקנת. חיבור של %s אינו אפשרי. יש לבקש ממנהל המערכת להתקין אותה.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>הערה:</b> \"%s\" אינו מותקן. חיבור של %s אינו אפשרי. יש לבקש ממנהל המערכת להתקין אותה.", "No external storage configured" : "לא מוגדר אחסון חיצוני", "You can add external storages in the personal settings" : "ניתן להוסיף אחסונים חיצוניים בהגדרות האישיות", "Name" : "שם", @@ -113,7 +109,6 @@ OC.L10N.register( "Check for changes" : "בדיקה אחר שינויים", "Never" : "לעולם לא", "Once every direct access" : "פעם אחת כל כניסה ישירה", - "External Storage" : "אחסון חיצוני", "Folder name" : "שם התיקייה", "Authentication" : "אימות", "Configuration" : "הגדרות", @@ -122,6 +117,11 @@ OC.L10N.register( "Advanced settings" : "הגדרות מתקדמות", "Delete" : "מחיקה", "Allow users to mount external storage" : "מאפשר למשתמשים לחבר אחסון חיצוני", - "Allow users to mount the following external storage" : "מאפשר למשתמשים לחבר אחסון חיצוני הבא" + "Allow users to mount the following external storage" : "מאפשר למשתמשים לחבר אחסון חיצוני הבא", + "<b>Note:</b> " : "<b>הערה:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>הערה:</b> תמיכת ה- cURL ב- PHP אינה מופעלת או מותקנת. חיבור של %s אינו אפשרי. יש לבקש ממנהל המערכת להתקין אותה.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>הערה:</b> תמיכת ה- FTP ב- PHP אינה מופעלת או מותקנת. חיבור של %s אינו אפשרי. יש לבקש ממנהל המערכת להתקין אותה.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>הערה:</b> \"%s\" אינו מותקן. חיבור של %s אינו אפשרי. יש לבקש ממנהל המערכת להתקין אותה.", + "External Storage" : "אחסון חיצוני" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_external/l10n/he.json b/apps/files_external/l10n/he.json index 5d32f179106..90ca9e10365 100644 --- a/apps/files_external/l10n/he.json +++ b/apps/files_external/l10n/he.json @@ -96,10 +96,6 @@ "OpenStack Object Storage" : "אחסון אובייקט OpenStack", "Service name" : "שם שירות", "Request timeout (seconds)" : "פסק זמן מבוקש (שניות)", - "<b>Note:</b> " : "<b>הערה:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>הערה:</b> תמיכת ה- cURL ב- PHP אינה מופעלת או מותקנת. חיבור של %s אינו אפשרי. יש לבקש ממנהל המערכת להתקין אותה.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>הערה:</b> תמיכת ה- FTP ב- PHP אינה מופעלת או מותקנת. חיבור של %s אינו אפשרי. יש לבקש ממנהל המערכת להתקין אותה.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>הערה:</b> \"%s\" אינו מותקן. חיבור של %s אינו אפשרי. יש לבקש ממנהל המערכת להתקין אותה.", "No external storage configured" : "לא מוגדר אחסון חיצוני", "You can add external storages in the personal settings" : "ניתן להוסיף אחסונים חיצוניים בהגדרות האישיות", "Name" : "שם", @@ -111,7 +107,6 @@ "Check for changes" : "בדיקה אחר שינויים", "Never" : "לעולם לא", "Once every direct access" : "פעם אחת כל כניסה ישירה", - "External Storage" : "אחסון חיצוני", "Folder name" : "שם התיקייה", "Authentication" : "אימות", "Configuration" : "הגדרות", @@ -120,6 +115,11 @@ "Advanced settings" : "הגדרות מתקדמות", "Delete" : "מחיקה", "Allow users to mount external storage" : "מאפשר למשתמשים לחבר אחסון חיצוני", - "Allow users to mount the following external storage" : "מאפשר למשתמשים לחבר אחסון חיצוני הבא" + "Allow users to mount the following external storage" : "מאפשר למשתמשים לחבר אחסון חיצוני הבא", + "<b>Note:</b> " : "<b>הערה:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>הערה:</b> תמיכת ה- cURL ב- PHP אינה מופעלת או מותקנת. חיבור של %s אינו אפשרי. יש לבקש ממנהל המערכת להתקין אותה.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>הערה:</b> תמיכת ה- FTP ב- PHP אינה מופעלת או מותקנת. חיבור של %s אינו אפשרי. יש לבקש ממנהל המערכת להתקין אותה.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>הערה:</b> \"%s\" אינו מותקן. חיבור של %s אינו אפשרי. יש לבקש ממנהל המערכת להתקין אותה.", + "External Storage" : "אחסון חיצוני" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_external/l10n/id.js b/apps/files_external/l10n/id.js index 053d4dfe6a0..6077e1815c4 100644 --- a/apps/files_external/l10n/id.js +++ b/apps/files_external/l10n/id.js @@ -65,7 +65,6 @@ OC.L10N.register( "Identity endpoint URL" : "Identitas URL akhir", "Rackspace" : "Rackspace", "API key" : "Kunci API", - "Global Credentials" : "Kredensial Global", "Log-in credentials, save in database" : "Kredensial masuk, simpan di basis data", "Username and password" : "Nama pengguna dan sandi", "Log-in credentials, save in session" : "Kredensial masuk, simpan dalam sesi", @@ -102,10 +101,6 @@ OC.L10N.register( "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Nama layanan", "Request timeout (seconds)" : "Minta waktu habis (detik)", - "<b>Note:</b> " : "<b>Catatan:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> Dukungan cURL di PHP tidak diaktifkan atau belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan minta administrator sistem Anda untuk menginstalnya.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> Dukungan FTP di PHP tidak diaktifkan atau belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan minta administrator sistem Anda untuk menginstalnya.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> \"%s\" belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan minta administrator sistem Anda untuk menginstalnya.", "No external storage configured" : "Penyimpanan eksternal tidak dikonfigurasi", "You can add external storages in the personal settings" : "Anda dapat menambahkan penyimpanan eksternal di pengaturan pribadi", "Name" : "Nama", @@ -117,7 +112,6 @@ OC.L10N.register( "Check for changes" : "Periksa perubahan", "Never" : "Jangan pernah", "Once every direct access" : "Setiap kali akses langsung", - "External Storage" : "Penyimpanan Eksternal", "Folder name" : "Nama folder", "Authentication" : "Otentikasi", "Configuration" : "Konfigurasi", @@ -126,6 +120,13 @@ OC.L10N.register( "Advanced settings" : "Pengaturan Lanjutan", "Delete" : "Hapus", "Allow users to mount external storage" : "Izinkan pengguna untuk mengaitkan penyimpanan eksternal", - "Allow users to mount the following external storage" : "Izinkan pengguna untuk mengaitkan penyimpanan eksternal berikut" + "Allow users to mount the following external storage" : "Izinkan pengguna untuk mengaitkan penyimpanan eksternal berikut", + "Global Credentials" : "Kredensial Global", + "<b>Note:</b> " : "<b>Catatan:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> Dukungan cURL di PHP tidak diaktifkan atau belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan minta administrator sistem Anda untuk menginstalnya.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> Dukungan FTP di PHP tidak diaktifkan atau belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan minta administrator sistem Anda untuk menginstalnya.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> \"%s\" belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan minta administrator sistem Anda untuk menginstalnya.", + "External Storage" : "Penyimpanan Eksternal", + "Access granted" : "Akses diberikan" }, "nplurals=1; plural=0;"); diff --git a/apps/files_external/l10n/id.json b/apps/files_external/l10n/id.json index 4cbb4187cc1..46a3fe7f8f4 100644 --- a/apps/files_external/l10n/id.json +++ b/apps/files_external/l10n/id.json @@ -63,7 +63,6 @@ "Identity endpoint URL" : "Identitas URL akhir", "Rackspace" : "Rackspace", "API key" : "Kunci API", - "Global Credentials" : "Kredensial Global", "Log-in credentials, save in database" : "Kredensial masuk, simpan di basis data", "Username and password" : "Nama pengguna dan sandi", "Log-in credentials, save in session" : "Kredensial masuk, simpan dalam sesi", @@ -100,10 +99,6 @@ "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Nama layanan", "Request timeout (seconds)" : "Minta waktu habis (detik)", - "<b>Note:</b> " : "<b>Catatan:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> Dukungan cURL di PHP tidak diaktifkan atau belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan minta administrator sistem Anda untuk menginstalnya.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> Dukungan FTP di PHP tidak diaktifkan atau belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan minta administrator sistem Anda untuk menginstalnya.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> \"%s\" belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan minta administrator sistem Anda untuk menginstalnya.", "No external storage configured" : "Penyimpanan eksternal tidak dikonfigurasi", "You can add external storages in the personal settings" : "Anda dapat menambahkan penyimpanan eksternal di pengaturan pribadi", "Name" : "Nama", @@ -115,7 +110,6 @@ "Check for changes" : "Periksa perubahan", "Never" : "Jangan pernah", "Once every direct access" : "Setiap kali akses langsung", - "External Storage" : "Penyimpanan Eksternal", "Folder name" : "Nama folder", "Authentication" : "Otentikasi", "Configuration" : "Konfigurasi", @@ -124,6 +118,13 @@ "Advanced settings" : "Pengaturan Lanjutan", "Delete" : "Hapus", "Allow users to mount external storage" : "Izinkan pengguna untuk mengaitkan penyimpanan eksternal", - "Allow users to mount the following external storage" : "Izinkan pengguna untuk mengaitkan penyimpanan eksternal berikut" + "Allow users to mount the following external storage" : "Izinkan pengguna untuk mengaitkan penyimpanan eksternal berikut", + "Global Credentials" : "Kredensial Global", + "<b>Note:</b> " : "<b>Catatan:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> Dukungan cURL di PHP tidak diaktifkan atau belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan minta administrator sistem Anda untuk menginstalnya.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> Dukungan FTP di PHP tidak diaktifkan atau belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan minta administrator sistem Anda untuk menginstalnya.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> \"%s\" belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan minta administrator sistem Anda untuk menginstalnya.", + "External Storage" : "Penyimpanan Eksternal", + "Access granted" : "Akses diberikan" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_external/l10n/is.js b/apps/files_external/l10n/is.js index ab73dbece96..be480fc382e 100644 --- a/apps/files_external/l10n/is.js +++ b/apps/files_external/l10n/is.js @@ -65,7 +65,6 @@ OC.L10N.register( "Identity endpoint URL" : "Endapunktur auðkennisslóðar (identity endpoint URL)", "Rackspace" : "Rackspace", "API key" : "API-lykill", - "Global Credentials" : "Víðvær innskráningarauðkenni", "Log-in credentials, save in database" : "Innskráningarauðkenni, vista í gagnagrunni", "Username and password" : "Notandanafn og lykilorð", "Log-in credentials, save in session" : "Innskráningarauðkenni, vista í setu", @@ -102,10 +101,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)", - "<b>Note:</b> " : "<b>Athugið:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Athugið:</b> Stuðningur við cURL í PHP er ekki virkjaður eða ekki uppsettur. Tenging %s er ekki möguleg. Biddu kerfisstjórann þinn um að setja þetta upp.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Athugið:</b> Stuðningur við FTP í PHP er ekki virkjaður eða ekki uppsettur. Tenging %s er ekki möguleg. Biddu kerfisstjórann þinn um að setja þetta upp.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Athugið:</b> \"%s\" ekki uppsett. Tenging %s er ekki möguleg. Biddu kerfisstjórann þinn um að setja þetta upp.", "No external storage configured" : "Engin ytri-gagnageymsla stillt", "You can add external storages in the personal settings" : "Þú getur bætt við ytri gagnageymslum í einkastillingunum þínum", "Name" : "Nafn", @@ -117,7 +112,6 @@ OC.L10N.register( "Check for changes" : "Fylgjast með breytingum", "Never" : "Aldrei", "Once every direct access" : "Einu sinni við hvern beinan aðgang", - "External Storage" : "Ytri gagnageymsla", "Folder name" : "Nafn möppu", "Authentication" : "Auðkenning", "Configuration" : "Uppsetning", @@ -126,6 +120,13 @@ OC.L10N.register( "Advanced settings" : "Ítarlegri valkostir", "Delete" : "Eyða", "Allow users to mount external storage" : "Leyfa notendum að tengja ytri gagnageymslur í skráakerfi", - "Allow users to mount the following external storage" : "Leyfa notendum að tengja eftirfarandi ytri gagnageymslu í skráakerfi" + "Allow users to mount the following external storage" : "Leyfa notendum að tengja eftirfarandi ytri gagnageymslu í skráakerfi", + "Global Credentials" : "Víðvær innskráningarauðkenni", + "<b>Note:</b> " : "<b>Athugið:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Athugið:</b> Stuðningur við cURL í PHP er ekki virkjaður eða ekki uppsettur. Tenging %s er ekki möguleg. Biddu kerfisstjórann þinn um að setja þetta upp.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Athugið:</b> Stuðningur við FTP í PHP er ekki virkjaður eða ekki uppsettur. Tenging %s er ekki möguleg. Biddu kerfisstjórann þinn um að setja þetta upp.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Athugið:</b> \"%s\" ekki uppsett. Tenging %s er ekki möguleg. Biddu kerfisstjórann þinn um að setja þetta upp.", + "External Storage" : "Ytri gagnageymsla", + "Access granted" : "Aðgangur heimilaður" }, "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/apps/files_external/l10n/is.json b/apps/files_external/l10n/is.json index 5738ff738fb..86069a53c8b 100644 --- a/apps/files_external/l10n/is.json +++ b/apps/files_external/l10n/is.json @@ -63,7 +63,6 @@ "Identity endpoint URL" : "Endapunktur auðkennisslóðar (identity endpoint URL)", "Rackspace" : "Rackspace", "API key" : "API-lykill", - "Global Credentials" : "Víðvær innskráningarauðkenni", "Log-in credentials, save in database" : "Innskráningarauðkenni, vista í gagnagrunni", "Username and password" : "Notandanafn og lykilorð", "Log-in credentials, save in session" : "Innskráningarauðkenni, vista í setu", @@ -100,10 +99,6 @@ "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Heiti á þjónustu", "Request timeout (seconds)" : "Tímamörk á beiðni (sekúndur)", - "<b>Note:</b> " : "<b>Athugið:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Athugið:</b> Stuðningur við cURL í PHP er ekki virkjaður eða ekki uppsettur. Tenging %s er ekki möguleg. Biddu kerfisstjórann þinn um að setja þetta upp.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Athugið:</b> Stuðningur við FTP í PHP er ekki virkjaður eða ekki uppsettur. Tenging %s er ekki möguleg. Biddu kerfisstjórann þinn um að setja þetta upp.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Athugið:</b> \"%s\" ekki uppsett. Tenging %s er ekki möguleg. Biddu kerfisstjórann þinn um að setja þetta upp.", "No external storage configured" : "Engin ytri-gagnageymsla stillt", "You can add external storages in the personal settings" : "Þú getur bætt við ytri gagnageymslum í einkastillingunum þínum", "Name" : "Nafn", @@ -115,7 +110,6 @@ "Check for changes" : "Fylgjast með breytingum", "Never" : "Aldrei", "Once every direct access" : "Einu sinni við hvern beinan aðgang", - "External Storage" : "Ytri gagnageymsla", "Folder name" : "Nafn möppu", "Authentication" : "Auðkenning", "Configuration" : "Uppsetning", @@ -124,6 +118,13 @@ "Advanced settings" : "Ítarlegri valkostir", "Delete" : "Eyða", "Allow users to mount external storage" : "Leyfa notendum að tengja ytri gagnageymslur í skráakerfi", - "Allow users to mount the following external storage" : "Leyfa notendum að tengja eftirfarandi ytri gagnageymslu í skráakerfi" + "Allow users to mount the following external storage" : "Leyfa notendum að tengja eftirfarandi ytri gagnageymslu í skráakerfi", + "Global Credentials" : "Víðvær innskráningarauðkenni", + "<b>Note:</b> " : "<b>Athugið:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Athugið:</b> Stuðningur við cURL í PHP er ekki virkjaður eða ekki uppsettur. Tenging %s er ekki möguleg. Biddu kerfisstjórann þinn um að setja þetta upp.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Athugið:</b> Stuðningur við FTP í PHP er ekki virkjaður eða ekki uppsettur. Tenging %s er ekki möguleg. Biddu kerfisstjórann þinn um að setja þetta upp.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Athugið:</b> \"%s\" ekki uppsett. Tenging %s er ekki möguleg. Biddu kerfisstjórann þinn um að setja þetta upp.", + "External Storage" : "Ytri gagnageymsla", + "Access granted" : "Aðgangur heimilaður" },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" }
\ No newline at end of file diff --git a/apps/files_external/l10n/it.js b/apps/files_external/l10n/it.js index 134e8a6cedf..d5062e4fc4b 100644 --- a/apps/files_external/l10n/it.js +++ b/apps/files_external/l10n/it.js @@ -65,7 +65,6 @@ OC.L10N.register( "Identity endpoint URL" : "URL endpoint delle identità", "Rackspace" : "Rackspace", "API key" : "Chiave API", - "Global Credentials" : "Credenziali globali", "Log-in credentials, save in database" : "Credenziali di accesso, salva nel database", "Username and password" : "Nome utente e password", "Log-in credentials, save in session" : "Credenziali di accesso, salva nella sessione", @@ -102,10 +101,6 @@ OC.L10N.register( "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Nome servizio", "Request timeout (seconds)" : "Tempo massimo della richiesta (secondi)", - "<b>Note:</b> " : "<b>Nota:</b>", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> il supporto a cURL di PHP non è abilitato o installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> il supporto a FTP in PHP non è abilitato o installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> \"%s\" non è installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.", "No external storage configured" : "Nessuna archiviazione esterna configurata", "You can add external storages in the personal settings" : "Puoi aggiungere archiviazioni esterne nelle impostazioni personali", "Name" : "Nome", @@ -117,7 +112,6 @@ OC.L10N.register( "Check for changes" : "Controlla le modifiche", "Never" : "Mai", "Once every direct access" : "Una volta per ogni accesso diretto", - "External Storage" : "Archiviazione esterna", "Folder name" : "Nome della cartella", "Authentication" : "Autenticazione", "Configuration" : "Configurazione", @@ -126,6 +120,12 @@ OC.L10N.register( "Advanced settings" : "Impostazioni avanzate", "Delete" : "Elimina", "Allow users to mount external storage" : "Consenti agli utenti di montare archiviazioni esterne", - "Allow users to mount the following external storage" : "Consenti agli utenti di montare la seguente archiviazione esterna" + "Allow users to mount the following external storage" : "Consenti agli utenti di montare la seguente archiviazione esterna", + "Global Credentials" : "Credenziali globali", + "<b>Note:</b> " : "<b>Nota:</b>", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> il supporto a cURL di PHP non è abilitato o installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> il supporto a FTP in PHP non è abilitato o installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> \"%s\" non è installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.", + "External Storage" : "Archiviazione esterna" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_external/l10n/it.json b/apps/files_external/l10n/it.json index cb59b88e566..41314d7f2bf 100644 --- a/apps/files_external/l10n/it.json +++ b/apps/files_external/l10n/it.json @@ -63,7 +63,6 @@ "Identity endpoint URL" : "URL endpoint delle identità", "Rackspace" : "Rackspace", "API key" : "Chiave API", - "Global Credentials" : "Credenziali globali", "Log-in credentials, save in database" : "Credenziali di accesso, salva nel database", "Username and password" : "Nome utente e password", "Log-in credentials, save in session" : "Credenziali di accesso, salva nella sessione", @@ -100,10 +99,6 @@ "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Nome servizio", "Request timeout (seconds)" : "Tempo massimo della richiesta (secondi)", - "<b>Note:</b> " : "<b>Nota:</b>", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> il supporto a cURL di PHP non è abilitato o installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> il supporto a FTP in PHP non è abilitato o installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> \"%s\" non è installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.", "No external storage configured" : "Nessuna archiviazione esterna configurata", "You can add external storages in the personal settings" : "Puoi aggiungere archiviazioni esterne nelle impostazioni personali", "Name" : "Nome", @@ -115,7 +110,6 @@ "Check for changes" : "Controlla le modifiche", "Never" : "Mai", "Once every direct access" : "Una volta per ogni accesso diretto", - "External Storage" : "Archiviazione esterna", "Folder name" : "Nome della cartella", "Authentication" : "Autenticazione", "Configuration" : "Configurazione", @@ -124,6 +118,12 @@ "Advanced settings" : "Impostazioni avanzate", "Delete" : "Elimina", "Allow users to mount external storage" : "Consenti agli utenti di montare archiviazioni esterne", - "Allow users to mount the following external storage" : "Consenti agli utenti di montare la seguente archiviazione esterna" + "Allow users to mount the following external storage" : "Consenti agli utenti di montare la seguente archiviazione esterna", + "Global Credentials" : "Credenziali globali", + "<b>Note:</b> " : "<b>Nota:</b>", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> il supporto a cURL di PHP non è abilitato o installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> il supporto a FTP in PHP non è abilitato o installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> \"%s\" non è installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.", + "External Storage" : "Archiviazione esterna" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_external/l10n/ja.js b/apps/files_external/l10n/ja.js index 318db1ee79f..a6a38c47065 100644 --- a/apps/files_external/l10n/ja.js +++ b/apps/files_external/l10n/ja.js @@ -65,7 +65,6 @@ OC.L10N.register( "Identity endpoint URL" : "認証エンドポイントURL", "Rackspace" : "Rackspace", "API key" : "APIキー", - "Global Credentials" : "グローバル認証情報", "Log-in credentials, save in database" : "ログイン認証情報は、データベースに保存されます。", "Username and password" : "ユーザー名とパスワード", "Log-in credentials, save in session" : "ログイン認証情報は、セッションに保存されます。", @@ -102,10 +101,6 @@ OC.L10N.register( "OpenStack Object Storage" : "OpenStack ObjectStorage", "Service name" : "サービス名", "Request timeout (seconds)" : "リクエストがタイムアウトするまでの秒数", - "<b>Note:</b> " : "<b>注意:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>注意:</b> PHPにcURLのエクステンションが入っていないか、有効ではありません。%s をマウントすることができません。このシステムの管理者にインストールをお願いしてください。", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>注意:</b> PHPにFTPのエクステンションが入っていないか、有効ではありません。%s をマウントすることができません。このシステムの管理者にインストールをお願いしてください。", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>注意:</b> \"%s\" がインストールされていません。%sをマウントできません。このシステムの管理者にインストールをお願いしてください。", "No external storage configured" : "外部ストレージは設定されていません", "You can add external storages in the personal settings" : "個人設定で外部ストレージを設定することができます。", "Name" : "名前", @@ -117,7 +112,6 @@ OC.L10N.register( "Check for changes" : "変更点を確認", "Never" : "更新無", "Once every direct access" : "直指定時のみ", - "External Storage" : "外部ストレージ", "Folder name" : "フォルダー名", "Authentication" : "認証", "Configuration" : "設定", @@ -126,6 +120,12 @@ OC.L10N.register( "Advanced settings" : "詳細設定", "Delete" : "削除", "Allow users to mount external storage" : "ユーザーに外部ストレージの接続を許可する", - "Allow users to mount the following external storage" : "ユーザーに以下の外部ストレージのマウントを許可する" + "Allow users to mount the following external storage" : "ユーザーに以下の外部ストレージのマウントを許可する", + "Global Credentials" : "グローバル認証情報", + "<b>Note:</b> " : "<b>注意:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>注意:</b> PHPにcURLのエクステンションが入っていないか、有効ではありません。%s をマウントすることができません。このシステムの管理者にインストールをお願いしてください。", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>注意:</b> PHPにFTPのエクステンションが入っていないか、有効ではありません。%s をマウントすることができません。このシステムの管理者にインストールをお願いしてください。", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>注意:</b> \"%s\" がインストールされていません。%sをマウントできません。このシステムの管理者にインストールをお願いしてください。", + "External Storage" : "外部ストレージ" }, "nplurals=1; plural=0;"); diff --git a/apps/files_external/l10n/ja.json b/apps/files_external/l10n/ja.json index 0c4be487cfb..c16d7aba61b 100644 --- a/apps/files_external/l10n/ja.json +++ b/apps/files_external/l10n/ja.json @@ -63,7 +63,6 @@ "Identity endpoint URL" : "認証エンドポイントURL", "Rackspace" : "Rackspace", "API key" : "APIキー", - "Global Credentials" : "グローバル認証情報", "Log-in credentials, save in database" : "ログイン認証情報は、データベースに保存されます。", "Username and password" : "ユーザー名とパスワード", "Log-in credentials, save in session" : "ログイン認証情報は、セッションに保存されます。", @@ -100,10 +99,6 @@ "OpenStack Object Storage" : "OpenStack ObjectStorage", "Service name" : "サービス名", "Request timeout (seconds)" : "リクエストがタイムアウトするまでの秒数", - "<b>Note:</b> " : "<b>注意:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>注意:</b> PHPにcURLのエクステンションが入っていないか、有効ではありません。%s をマウントすることができません。このシステムの管理者にインストールをお願いしてください。", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>注意:</b> PHPにFTPのエクステンションが入っていないか、有効ではありません。%s をマウントすることができません。このシステムの管理者にインストールをお願いしてください。", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>注意:</b> \"%s\" がインストールされていません。%sをマウントできません。このシステムの管理者にインストールをお願いしてください。", "No external storage configured" : "外部ストレージは設定されていません", "You can add external storages in the personal settings" : "個人設定で外部ストレージを設定することができます。", "Name" : "名前", @@ -115,7 +110,6 @@ "Check for changes" : "変更点を確認", "Never" : "更新無", "Once every direct access" : "直指定時のみ", - "External Storage" : "外部ストレージ", "Folder name" : "フォルダー名", "Authentication" : "認証", "Configuration" : "設定", @@ -124,6 +118,12 @@ "Advanced settings" : "詳細設定", "Delete" : "削除", "Allow users to mount external storage" : "ユーザーに外部ストレージの接続を許可する", - "Allow users to mount the following external storage" : "ユーザーに以下の外部ストレージのマウントを許可する" + "Allow users to mount the following external storage" : "ユーザーに以下の外部ストレージのマウントを許可する", + "Global Credentials" : "グローバル認証情報", + "<b>Note:</b> " : "<b>注意:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>注意:</b> PHPにcURLのエクステンションが入っていないか、有効ではありません。%s をマウントすることができません。このシステムの管理者にインストールをお願いしてください。", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>注意:</b> PHPにFTPのエクステンションが入っていないか、有効ではありません。%s をマウントすることができません。このシステムの管理者にインストールをお願いしてください。", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>注意:</b> \"%s\" がインストールされていません。%sをマウントできません。このシステムの管理者にインストールをお願いしてください。", + "External Storage" : "外部ストレージ" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_external/l10n/ko.js b/apps/files_external/l10n/ko.js index 95befb8b229..e72a7f75352 100644 --- a/apps/files_external/l10n/ko.js +++ b/apps/files_external/l10n/ko.js @@ -95,10 +95,6 @@ OC.L10N.register( "OpenStack Object Storage" : "OpenStack 객체 저장소", "Service name" : "서비스 이름", "Request timeout (seconds)" : "요청 시간 제한(초)", - "<b>Note:</b> " : "<b>메모:</b>", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>메모:</b> PHP cURL 모듈이 비활성화되어 있거나 설치되어 있지 않습니다. %s을(를) 마운트할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>메모:</b> PHP FTP 모듈이 비활성화되어 있거나 설치되어 있지 않습니다. %s을(를) 마운트할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>메모:</b> \"%s\"이(가) 설치되어 있지 않습니다. %s을(를) 마운트할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.", "No external storage configured" : "외부 저장소가 설정되지 않았음", "You can add external storages in the personal settings" : "개인 설정에서 외부 저장소를 추가할 수 있습니다", "Name" : "이름", @@ -110,7 +106,6 @@ OC.L10N.register( "Check for changes" : "변경 사항 감시", "Never" : "하지 않음", "Once every direct access" : "한 번 직접 접근할 때마다", - "External Storage" : "외부 저장소", "Folder name" : "폴더 이름", "Authentication" : "인증", "Configuration" : "설정", @@ -119,6 +114,11 @@ OC.L10N.register( "Advanced settings" : "고급 설정", "Delete" : "삭제", "Allow users to mount external storage" : "사용자가 외부 저장소를 마운트하도록 허용", - "Allow users to mount the following external storage" : "사용자가 다음 외부 저장소를 마운트할 수 있도록 허용" + "Allow users to mount the following external storage" : "사용자가 다음 외부 저장소를 마운트할 수 있도록 허용", + "<b>Note:</b> " : "<b>메모:</b>", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>메모:</b> PHP cURL 모듈이 비활성화되어 있거나 설치되어 있지 않습니다. %s을(를) 마운트할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>메모:</b> PHP FTP 모듈이 비활성화되어 있거나 설치되어 있지 않습니다. %s을(를) 마운트할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>메모:</b> \"%s\"이(가) 설치되어 있지 않습니다. %s을(를) 마운트할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.", + "External Storage" : "외부 저장소" }, "nplurals=1; plural=0;"); diff --git a/apps/files_external/l10n/ko.json b/apps/files_external/l10n/ko.json index 14596ea544a..98b287958fa 100644 --- a/apps/files_external/l10n/ko.json +++ b/apps/files_external/l10n/ko.json @@ -93,10 +93,6 @@ "OpenStack Object Storage" : "OpenStack 객체 저장소", "Service name" : "서비스 이름", "Request timeout (seconds)" : "요청 시간 제한(초)", - "<b>Note:</b> " : "<b>메모:</b>", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>메모:</b> PHP cURL 모듈이 비활성화되어 있거나 설치되어 있지 않습니다. %s을(를) 마운트할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>메모:</b> PHP FTP 모듈이 비활성화되어 있거나 설치되어 있지 않습니다. %s을(를) 마운트할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>메모:</b> \"%s\"이(가) 설치되어 있지 않습니다. %s을(를) 마운트할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.", "No external storage configured" : "외부 저장소가 설정되지 않았음", "You can add external storages in the personal settings" : "개인 설정에서 외부 저장소를 추가할 수 있습니다", "Name" : "이름", @@ -108,7 +104,6 @@ "Check for changes" : "변경 사항 감시", "Never" : "하지 않음", "Once every direct access" : "한 번 직접 접근할 때마다", - "External Storage" : "외부 저장소", "Folder name" : "폴더 이름", "Authentication" : "인증", "Configuration" : "설정", @@ -117,6 +112,11 @@ "Advanced settings" : "고급 설정", "Delete" : "삭제", "Allow users to mount external storage" : "사용자가 외부 저장소를 마운트하도록 허용", - "Allow users to mount the following external storage" : "사용자가 다음 외부 저장소를 마운트할 수 있도록 허용" + "Allow users to mount the following external storage" : "사용자가 다음 외부 저장소를 마운트할 수 있도록 허용", + "<b>Note:</b> " : "<b>메모:</b>", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>메모:</b> PHP cURL 모듈이 비활성화되어 있거나 설치되어 있지 않습니다. %s을(를) 마운트할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>메모:</b> PHP FTP 모듈이 비활성화되어 있거나 설치되어 있지 않습니다. %s을(를) 마운트할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>메모:</b> \"%s\"이(가) 설치되어 있지 않습니다. %s을(를) 마운트할 수 없습니다. 시스템 관리자에게 설치를 요청하십시오.", + "External Storage" : "외부 저장소" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_external/l10n/nb_NO.js b/apps/files_external/l10n/nb_NO.js index 97ada915003..d64ad0d28fb 100644 --- a/apps/files_external/l10n/nb_NO.js +++ b/apps/files_external/l10n/nb_NO.js @@ -95,10 +95,6 @@ OC.L10N.register( "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Tjenestenavn", "Request timeout (seconds)" : "Tidsavbrudd for forespørsel (sekunder)", - "<b>Note:</b> " : "<b>Merk:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> Støtte for cURL i PHP er ikke aktivert eller installert. Oppkobling av %s er ikke mulig. Be systemadministratoren om å installere det.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>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.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> \"%s\" er ikke installert. Oppkobling av %s er ikke mulig. Spør systemadministratoren om å installere det.", "No external storage configured" : "Eksternt lager er ikke konfigurert", "You can add external storages in the personal settings" : "Du kan legge til eksterne lagre i personlige innstillinger", "Name" : "Navn", @@ -110,7 +106,6 @@ OC.L10N.register( "Check for changes" : "Se etter endringer", "Never" : "Aldri", "Once every direct access" : "En gang pr. direkte aksess", - "External Storage" : "Ekstern lagring", "Folder name" : "Mappenavn", "Authentication" : "Autentisering", "Configuration" : "Konfigurasjon", @@ -119,6 +114,11 @@ OC.L10N.register( "Advanced settings" : "Avanserte innstillinger", "Delete" : "Slett", "Allow users to mount external storage" : "Tillat at brukere kobler opp eksterne lagre", - "Allow users to mount the following external storage" : "Tillat brukere å koble opp følgende eksterne lagring" + "Allow users to mount the following external storage" : "Tillat brukere å koble opp følgende eksterne lagring", + "<b>Note:</b> " : "<b>Merk:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> Støtte for cURL i PHP er ikke aktivert eller installert. Oppkobling av %s er ikke mulig. Be systemadministratoren om å installere det.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>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.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> \"%s\" er ikke installert. Oppkobling av %s er ikke mulig. Spør systemadministratoren om å installere det.", + "External Storage" : "Ekstern lagring" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_external/l10n/nb_NO.json b/apps/files_external/l10n/nb_NO.json index 35923dd6e74..bc16fe823b4 100644 --- a/apps/files_external/l10n/nb_NO.json +++ b/apps/files_external/l10n/nb_NO.json @@ -93,10 +93,6 @@ "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Tjenestenavn", "Request timeout (seconds)" : "Tidsavbrudd for forespørsel (sekunder)", - "<b>Note:</b> " : "<b>Merk:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> Støtte for cURL i PHP er ikke aktivert eller installert. Oppkobling av %s er ikke mulig. Be systemadministratoren om å installere det.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>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.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> \"%s\" er ikke installert. Oppkobling av %s er ikke mulig. Spør systemadministratoren om å installere det.", "No external storage configured" : "Eksternt lager er ikke konfigurert", "You can add external storages in the personal settings" : "Du kan legge til eksterne lagre i personlige innstillinger", "Name" : "Navn", @@ -108,7 +104,6 @@ "Check for changes" : "Se etter endringer", "Never" : "Aldri", "Once every direct access" : "En gang pr. direkte aksess", - "External Storage" : "Ekstern lagring", "Folder name" : "Mappenavn", "Authentication" : "Autentisering", "Configuration" : "Konfigurasjon", @@ -117,6 +112,11 @@ "Advanced settings" : "Avanserte innstillinger", "Delete" : "Slett", "Allow users to mount external storage" : "Tillat at brukere kobler opp eksterne lagre", - "Allow users to mount the following external storage" : "Tillat brukere å koble opp følgende eksterne lagring" + "Allow users to mount the following external storage" : "Tillat brukere å koble opp følgende eksterne lagring", + "<b>Note:</b> " : "<b>Merk:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> Støtte for cURL i PHP er ikke aktivert eller installert. Oppkobling av %s er ikke mulig. Be systemadministratoren om å installere det.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>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.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> \"%s\" er ikke installert. Oppkobling av %s er ikke mulig. Spør systemadministratoren om å installere det.", + "External Storage" : "Ekstern lagring" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_external/l10n/nl.js b/apps/files_external/l10n/nl.js index 3896323ab35..55a92bc6036 100644 --- a/apps/files_external/l10n/nl.js +++ b/apps/files_external/l10n/nl.js @@ -65,7 +65,6 @@ OC.L10N.register( "Identity endpoint URL" : "Identiteiten endpoint URL", "Rackspace" : "Rackspace", "API key" : "API sleutel", - "Global Credentials" : "Algemene inloggegevens", "Log-in credentials, save in database" : "Inloggegevens, bewaren in de database", "Username and password" : "Gebruikersnaam en wachtwoord", "Log-in credentials, save in session" : "Inloggegevens, opslaan in sessie", @@ -102,10 +101,6 @@ OC.L10N.register( "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Servicenaam", "Request timeout (seconds)" : "Aanvraag time-out (seconds)", - "<b>Note:</b> " : "<b>Let op:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> Curl ondersteuning in PHP is niet geactiveerd of geïnstalleerd. Mounten van %s is niet mogelijk. Vraag je systeembeheerder dit te installeren.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> FTP ondersteuning in PHP is niet geactiveerd of geïnstalleerd. Mounten van %s is niet mogelijk. Vraag je beheerder dit te installeren.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> \"%s\" is niet geïnstalleerd. Mounten van %s is niet mogelijk. Vraag uw beheerder om dit te installeren.", "No external storage configured" : "Geen externe opslag geconfigureerd", "You can add external storages in the personal settings" : "Je kunt externe opslag toevoegen in persoonlijke instellingen", "Name" : "Naam", @@ -117,7 +112,6 @@ OC.L10N.register( "Check for changes" : "Controleren op wijzigingen", "Never" : "Nooit", "Once every direct access" : "Een keer bij elke directe toegang", - "External Storage" : "Externe opslag", "Folder name" : "Mapnaam", "Authentication" : "Authenticatie", "Configuration" : "Configuratie", @@ -126,6 +120,12 @@ OC.L10N.register( "Advanced settings" : "Geavanceerde instellingen", "Delete" : "Verwijder", "Allow users to mount external storage" : "Sta gebruikers toe om een externe opslag aan te koppelen", - "Allow users to mount the following external storage" : "Sta gebruikers toe de volgende externe opslag aan te koppelen" + "Allow users to mount the following external storage" : "Sta gebruikers toe de volgende externe opslag aan te koppelen", + "Global Credentials" : "Algemene inloggegevens", + "<b>Note:</b> " : "<b>Let op:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> Curl ondersteuning in PHP is niet geactiveerd of geïnstalleerd. Mounten van %s is niet mogelijk. Vraag je systeembeheerder dit te installeren.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> FTP ondersteuning in PHP is niet geactiveerd of geïnstalleerd. Mounten van %s is niet mogelijk. Vraag je beheerder dit te installeren.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> \"%s\" is niet geïnstalleerd. Mounten van %s is niet mogelijk. Vraag uw beheerder om dit te installeren.", + "External Storage" : "Externe opslag" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_external/l10n/nl.json b/apps/files_external/l10n/nl.json index b0a249b9680..439fd1e230c 100644 --- a/apps/files_external/l10n/nl.json +++ b/apps/files_external/l10n/nl.json @@ -63,7 +63,6 @@ "Identity endpoint URL" : "Identiteiten endpoint URL", "Rackspace" : "Rackspace", "API key" : "API sleutel", - "Global Credentials" : "Algemene inloggegevens", "Log-in credentials, save in database" : "Inloggegevens, bewaren in de database", "Username and password" : "Gebruikersnaam en wachtwoord", "Log-in credentials, save in session" : "Inloggegevens, opslaan in sessie", @@ -100,10 +99,6 @@ "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Servicenaam", "Request timeout (seconds)" : "Aanvraag time-out (seconds)", - "<b>Note:</b> " : "<b>Let op:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> Curl ondersteuning in PHP is niet geactiveerd of geïnstalleerd. Mounten van %s is niet mogelijk. Vraag je systeembeheerder dit te installeren.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> FTP ondersteuning in PHP is niet geactiveerd of geïnstalleerd. Mounten van %s is niet mogelijk. Vraag je beheerder dit te installeren.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> \"%s\" is niet geïnstalleerd. Mounten van %s is niet mogelijk. Vraag uw beheerder om dit te installeren.", "No external storage configured" : "Geen externe opslag geconfigureerd", "You can add external storages in the personal settings" : "Je kunt externe opslag toevoegen in persoonlijke instellingen", "Name" : "Naam", @@ -115,7 +110,6 @@ "Check for changes" : "Controleren op wijzigingen", "Never" : "Nooit", "Once every direct access" : "Een keer bij elke directe toegang", - "External Storage" : "Externe opslag", "Folder name" : "Mapnaam", "Authentication" : "Authenticatie", "Configuration" : "Configuratie", @@ -124,6 +118,12 @@ "Advanced settings" : "Geavanceerde instellingen", "Delete" : "Verwijder", "Allow users to mount external storage" : "Sta gebruikers toe om een externe opslag aan te koppelen", - "Allow users to mount the following external storage" : "Sta gebruikers toe de volgende externe opslag aan te koppelen" + "Allow users to mount the following external storage" : "Sta gebruikers toe de volgende externe opslag aan te koppelen", + "Global Credentials" : "Algemene inloggegevens", + "<b>Note:</b> " : "<b>Let op:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> Curl ondersteuning in PHP is niet geactiveerd of geïnstalleerd. Mounten van %s is niet mogelijk. Vraag je systeembeheerder dit te installeren.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> FTP ondersteuning in PHP is niet geactiveerd of geïnstalleerd. Mounten van %s is niet mogelijk. Vraag je beheerder dit te installeren.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> \"%s\" is niet geïnstalleerd. Mounten van %s is niet mogelijk. Vraag uw beheerder om dit te installeren.", + "External Storage" : "Externe opslag" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_external/l10n/pt_BR.js b/apps/files_external/l10n/pt_BR.js index 99aa844fb5b..9fc27982127 100644 --- a/apps/files_external/l10n/pt_BR.js +++ b/apps/files_external/l10n/pt_BR.js @@ -65,7 +65,6 @@ OC.L10N.register( "Identity endpoint URL" : "Identidade pontofinal URL", "Rackspace" : "Espaço em rack", "API key" : "Chave API", - "Global Credentials" : "Credenciais Globais", "Log-in credentials, save in database" : "Credenciais de acesso, salvas no banco de dados", "Username and password" : "Nome de Usuário e senha", "Log-in credentials, save in session" : "Credenciais de login, guardados em sessão", @@ -102,10 +101,6 @@ OC.L10N.register( "OpenStack Object Storage" : "Armazenamento de Objetos OpenStack", "Service name" : "Nome do serviço", "Request timeout (seconds)" : "Tempo esgotado requerido (segundos)", - "<b>Note:</b> " : "<b>Nota:</b>", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> O suporte cURL do PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> O suporte FTP no PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> \"%s\" não está instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.", "No external storage configured" : "Nenhum armazendo externo foi configurado", "You can add external storages in the personal settings" : "Você pode adicionar armazenamentos externos nas configurações pessoais", "Name" : "Nome", @@ -117,7 +112,6 @@ OC.L10N.register( "Check for changes" : "Verifique se há alterações", "Never" : "Nunca", "Once every direct access" : "Uma vez a cada acesso direto", - "External Storage" : "Armazenamento Externo", "Folder name" : "Nome da pasta", "Authentication" : "Autenticação", "Configuration" : "Configuração", @@ -126,6 +120,13 @@ OC.L10N.register( "Advanced settings" : "Configurações avançadas", "Delete" : "Excluir", "Allow users to mount external storage" : "Permitir que usuários montem armazenamento externo", - "Allow users to mount the following external storage" : "Permitir que usuários montem o seguinte armazenamento externo" + "Allow users to mount the following external storage" : "Permitir que usuários montem o seguinte armazenamento externo", + "Global Credentials" : "Credenciais Globais", + "<b>Note:</b> " : "<b>Nota:</b>", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> O suporte cURL do PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> O suporte FTP no PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> \"%s\" não está instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.", + "External Storage" : "Armazenamento Externo", + "Access granted" : "Acesso concedido" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/files_external/l10n/pt_BR.json b/apps/files_external/l10n/pt_BR.json index aee79057b4d..9a6f49e16d4 100644 --- a/apps/files_external/l10n/pt_BR.json +++ b/apps/files_external/l10n/pt_BR.json @@ -63,7 +63,6 @@ "Identity endpoint URL" : "Identidade pontofinal URL", "Rackspace" : "Espaço em rack", "API key" : "Chave API", - "Global Credentials" : "Credenciais Globais", "Log-in credentials, save in database" : "Credenciais de acesso, salvas no banco de dados", "Username and password" : "Nome de Usuário e senha", "Log-in credentials, save in session" : "Credenciais de login, guardados em sessão", @@ -100,10 +99,6 @@ "OpenStack Object Storage" : "Armazenamento de Objetos OpenStack", "Service name" : "Nome do serviço", "Request timeout (seconds)" : "Tempo esgotado requerido (segundos)", - "<b>Note:</b> " : "<b>Nota:</b>", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> O suporte cURL do PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> O suporte FTP no PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> \"%s\" não está instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.", "No external storage configured" : "Nenhum armazendo externo foi configurado", "You can add external storages in the personal settings" : "Você pode adicionar armazenamentos externos nas configurações pessoais", "Name" : "Nome", @@ -115,7 +110,6 @@ "Check for changes" : "Verifique se há alterações", "Never" : "Nunca", "Once every direct access" : "Uma vez a cada acesso direto", - "External Storage" : "Armazenamento Externo", "Folder name" : "Nome da pasta", "Authentication" : "Autenticação", "Configuration" : "Configuração", @@ -124,6 +118,13 @@ "Advanced settings" : "Configurações avançadas", "Delete" : "Excluir", "Allow users to mount external storage" : "Permitir que usuários montem armazenamento externo", - "Allow users to mount the following external storage" : "Permitir que usuários montem o seguinte armazenamento externo" + "Allow users to mount the following external storage" : "Permitir que usuários montem o seguinte armazenamento externo", + "Global Credentials" : "Credenciais Globais", + "<b>Note:</b> " : "<b>Nota:</b>", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> O suporte cURL do PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> O suporte FTP no PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> \"%s\" não está instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.", + "External Storage" : "Armazenamento Externo", + "Access granted" : "Acesso concedido" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/files_external/l10n/pt_PT.js b/apps/files_external/l10n/pt_PT.js index 6bb0aad5ed8..c29f8a4a1a6 100644 --- a/apps/files_external/l10n/pt_PT.js +++ b/apps/files_external/l10n/pt_PT.js @@ -98,10 +98,6 @@ OC.L10N.register( "OpenStack Object Storage" : "Armazenamento de Objetos OpenStack", "Service name" : "Nome do serviço", "Request timeout (seconds)" : "Pedido expira (segundos)", - "<b>Note:</b> " : "<b>Nota:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O suporte cURL no PHP não está activo ou instalado. Não é possível montar %s. Peça ao seu administrador para instalar.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O suporte FTP no PHP não está activo ou instalado. Não é possível montar %s. Peça ao seu administrador para instalar.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O cliente\"%s\" não está instalado. Não é possível montar \"%s\" . Peça ao seu administrador para instalar.", "No external storage configured" : "Sem armazenamentos externos configurados", "You can add external storages in the personal settings" : "Pode adicionar armazenamentos externos nas definições pessoais", "Name" : "Nome", @@ -113,7 +109,6 @@ OC.L10N.register( "Check for changes" : "Verificar se há alterações", "Never" : "Nunca", "Once every direct access" : "Uma vez em cada acesso direto", - "External Storage" : "Armazenamento Externo", "Folder name" : "Nome da pasta", "Authentication" : "Autenticação", "Configuration" : "Configuração", @@ -122,6 +117,11 @@ OC.L10N.register( "Advanced settings" : "Definições avançadas", "Delete" : "Apagar", "Allow users to mount external storage" : "Permitir que os utilizadores montem armazenamento externo", - "Allow users to mount the following external storage" : "Permitir que os utilizadores montem o seguinte armazenamento externo" + "Allow users to mount the following external storage" : "Permitir que os utilizadores montem o seguinte armazenamento externo", + "<b>Note:</b> " : "<b>Nota:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O suporte cURL no PHP não está activo ou instalado. Não é possível montar %s. Peça ao seu administrador para instalar.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O suporte FTP no PHP não está activo ou instalado. Não é possível montar %s. Peça ao seu administrador para instalar.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O cliente\"%s\" não está instalado. Não é possível montar \"%s\" . Peça ao seu administrador para instalar.", + "External Storage" : "Armazenamento Externo" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_external/l10n/pt_PT.json b/apps/files_external/l10n/pt_PT.json index a6cc044ef6b..9bb322e5867 100644 --- a/apps/files_external/l10n/pt_PT.json +++ b/apps/files_external/l10n/pt_PT.json @@ -96,10 +96,6 @@ "OpenStack Object Storage" : "Armazenamento de Objetos OpenStack", "Service name" : "Nome do serviço", "Request timeout (seconds)" : "Pedido expira (segundos)", - "<b>Note:</b> " : "<b>Nota:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O suporte cURL no PHP não está activo ou instalado. Não é possível montar %s. Peça ao seu administrador para instalar.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O suporte FTP no PHP não está activo ou instalado. Não é possível montar %s. Peça ao seu administrador para instalar.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O cliente\"%s\" não está instalado. Não é possível montar \"%s\" . Peça ao seu administrador para instalar.", "No external storage configured" : "Sem armazenamentos externos configurados", "You can add external storages in the personal settings" : "Pode adicionar armazenamentos externos nas definições pessoais", "Name" : "Nome", @@ -111,7 +107,6 @@ "Check for changes" : "Verificar se há alterações", "Never" : "Nunca", "Once every direct access" : "Uma vez em cada acesso direto", - "External Storage" : "Armazenamento Externo", "Folder name" : "Nome da pasta", "Authentication" : "Autenticação", "Configuration" : "Configuração", @@ -120,6 +115,11 @@ "Advanced settings" : "Definições avançadas", "Delete" : "Apagar", "Allow users to mount external storage" : "Permitir que os utilizadores montem armazenamento externo", - "Allow users to mount the following external storage" : "Permitir que os utilizadores montem o seguinte armazenamento externo" + "Allow users to mount the following external storage" : "Permitir que os utilizadores montem o seguinte armazenamento externo", + "<b>Note:</b> " : "<b>Nota:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O suporte cURL no PHP não está activo ou instalado. Não é possível montar %s. Peça ao seu administrador para instalar.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O suporte FTP no PHP não está activo ou instalado. Não é possível montar %s. Peça ao seu administrador para instalar.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O cliente\"%s\" não está instalado. Não é possível montar \"%s\" . Peça ao seu administrador para instalar.", + "External Storage" : "Armazenamento Externo" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_external/l10n/ru.js b/apps/files_external/l10n/ru.js index a4cb1b6c04f..f4304f76b09 100644 --- a/apps/files_external/l10n/ru.js +++ b/apps/files_external/l10n/ru.js @@ -65,7 +65,6 @@ OC.L10N.register( "Identity endpoint URL" : "Удостоверение конечной точки URL", "Rackspace" : "Rackspace", "API key" : "Ключ API", - "Global Credentials" : "Глобальные Учетные данные", "Log-in credentials, save in database" : "Учетные данные, хранить в базе данных", "Username and password" : "Имя пользователя и пароль", "Log-in credentials, save in session" : "Учетные данные, хранить в сессии", @@ -102,10 +101,6 @@ OC.L10N.register( "OpenStack Object Storage" : "Хранилище объектов OpenStack", "Service name" : "Название сервиса", "Request timeout (seconds)" : "Таймаут запроса (секунды)", - "<b>Note:</b> " : "<b>Примечание:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> Поддержка cURL в PHP не включена или не установлена. Монтирование %s невозможно. Обратитесь к вашему системному администратору.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> Поддержка FTP в PHP не включена или не установлена. Монтирование %s невозможно. Пожалуйста, обратитесь к системному администратору.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> \"%s\" не установлен. Монтирование %s невозможно. Пожалуйста, обратитесь к системному администратору.", "No external storage configured" : "Нет внешних хранилищ", "You can add external storages in the personal settings" : "Вы можете добавить внешние накопители в личных настройках", "Name" : "Имя", @@ -117,7 +112,6 @@ OC.L10N.register( "Check for changes" : "Проверять изменения", "Never" : "Никогда", "Once every direct access" : "Один раз при прямом доступе", - "External Storage" : "Внешнее хранилище", "Folder name" : "Имя каталога", "Authentication" : "Авторизация", "Configuration" : "Конфигурация", @@ -126,6 +120,12 @@ OC.L10N.register( "Advanced settings" : "Расширенные настройки", "Delete" : "Удалить", "Allow users to mount external storage" : "Разрешить пользователями монтировать внешние накопители", - "Allow users to mount the following external storage" : "Разрешить пользователям монтировать следующие сервисы хранения данных" + "Allow users to mount the following external storage" : "Разрешить пользователям монтировать следующие сервисы хранения данных", + "Global Credentials" : "Глобальные Учетные данные", + "<b>Note:</b> " : "<b>Примечание:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> Поддержка cURL в PHP не включена или не установлена. Монтирование %s невозможно. Обратитесь к вашему системному администратору.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> Поддержка FTP в PHP не включена или не установлена. Монтирование %s невозможно. Пожалуйста, обратитесь к системному администратору.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> \"%s\" не установлен. Монтирование %s невозможно. Пожалуйста, обратитесь к системному администратору.", + "External Storage" : "Внешнее хранилище" }, "nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"); diff --git a/apps/files_external/l10n/ru.json b/apps/files_external/l10n/ru.json index f4d1edb1f5a..612fccc6e8d 100644 --- a/apps/files_external/l10n/ru.json +++ b/apps/files_external/l10n/ru.json @@ -63,7 +63,6 @@ "Identity endpoint URL" : "Удостоверение конечной точки URL", "Rackspace" : "Rackspace", "API key" : "Ключ API", - "Global Credentials" : "Глобальные Учетные данные", "Log-in credentials, save in database" : "Учетные данные, хранить в базе данных", "Username and password" : "Имя пользователя и пароль", "Log-in credentials, save in session" : "Учетные данные, хранить в сессии", @@ -100,10 +99,6 @@ "OpenStack Object Storage" : "Хранилище объектов OpenStack", "Service name" : "Название сервиса", "Request timeout (seconds)" : "Таймаут запроса (секунды)", - "<b>Note:</b> " : "<b>Примечание:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> Поддержка cURL в PHP не включена или не установлена. Монтирование %s невозможно. Обратитесь к вашему системному администратору.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> Поддержка FTP в PHP не включена или не установлена. Монтирование %s невозможно. Пожалуйста, обратитесь к системному администратору.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> \"%s\" не установлен. Монтирование %s невозможно. Пожалуйста, обратитесь к системному администратору.", "No external storage configured" : "Нет внешних хранилищ", "You can add external storages in the personal settings" : "Вы можете добавить внешние накопители в личных настройках", "Name" : "Имя", @@ -115,7 +110,6 @@ "Check for changes" : "Проверять изменения", "Never" : "Никогда", "Once every direct access" : "Один раз при прямом доступе", - "External Storage" : "Внешнее хранилище", "Folder name" : "Имя каталога", "Authentication" : "Авторизация", "Configuration" : "Конфигурация", @@ -124,6 +118,12 @@ "Advanced settings" : "Расширенные настройки", "Delete" : "Удалить", "Allow users to mount external storage" : "Разрешить пользователями монтировать внешние накопители", - "Allow users to mount the following external storage" : "Разрешить пользователям монтировать следующие сервисы хранения данных" + "Allow users to mount the following external storage" : "Разрешить пользователям монтировать следующие сервисы хранения данных", + "Global Credentials" : "Глобальные Учетные данные", + "<b>Note:</b> " : "<b>Примечание:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> Поддержка cURL в PHP не включена или не установлена. Монтирование %s невозможно. Обратитесь к вашему системному администратору.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> Поддержка FTP в PHP не включена или не установлена. Монтирование %s невозможно. Пожалуйста, обратитесь к системному администратору.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Примечание:</b> \"%s\" не установлен. Монтирование %s невозможно. Пожалуйста, обратитесь к системному администратору.", + "External Storage" : "Внешнее хранилище" },"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/files_external/l10n/sl.js b/apps/files_external/l10n/sl.js index 6568c8b2526..b77cece05ce 100644 --- a/apps/files_external/l10n/sl.js +++ b/apps/files_external/l10n/sl.js @@ -65,7 +65,6 @@ OC.L10N.register( "Identity endpoint URL" : "Naslov URL končne točke istovetnosti", "Rackspace" : "Rackspace", "API key" : "Ključ API", - "Global Credentials" : "Globalne poverilnice", "Log-in credentials, save in database" : "Prijavne poverilnice, shrani v bazo", "Username and password" : "Uporabniško ime in geslo", "Log-in credentials, save in session" : "Prijavna poverila, shrani v seji", @@ -102,10 +101,6 @@ OC.L10N.register( "OpenStack Object Storage" : "Shramba predmeta OpenStack", "Service name" : "Ime storitve", "Request timeout (seconds)" : "Zahtevan časovni zamik (sekunde)", - "<b>Note:</b> " : "<b>Opomba:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Podpora za naslove cURL v PHP ni omogočena, ali pa ni ustrezno nameščenih programov. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Podpora za protokol FTP v PHP ni omogočena, ali pa ni ustrezno nameščenih programov. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Program \"%s\" ni nameščen. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.", "No external storage configured" : "Ni določene zunanje shrambe", "You can add external storages in the personal settings" : "Med nastavitvami je mogoče dodati tudi zunanjo shrambo.", "Name" : "Ime", @@ -117,7 +112,6 @@ OC.L10N.register( "Check for changes" : "Preveri za spremembe", "Never" : "Nikoli", "Once every direct access" : "Enkrat ob neposrednem dostopu", - "External Storage" : "Zunanja podatkovna shramba", "Folder name" : "Ime mape", "Authentication" : "Overitev", "Configuration" : "Nastavitve", @@ -126,6 +120,12 @@ OC.L10N.register( "Advanced settings" : "Napredne nastavitve", "Delete" : "Izbriši", "Allow users to mount external storage" : "Dovoli uporabnikom priklapljanje zunanje shrambe", - "Allow users to mount the following external storage" : "Dovoli uporabnikom priklapljanje navedenih zunanjih shramb." + "Allow users to mount the following external storage" : "Dovoli uporabnikom priklapljanje navedenih zunanjih shramb.", + "Global Credentials" : "Globalne poverilnice", + "<b>Note:</b> " : "<b>Opomba:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Podpora za naslove cURL v PHP ni omogočena, ali pa ni ustrezno nameščenih programov. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Podpora za protokol FTP v PHP ni omogočena, ali pa ni ustrezno nameščenih programov. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Program \"%s\" ni nameščen. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.", + "External Storage" : "Zunanja podatkovna shramba" }, "nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"); diff --git a/apps/files_external/l10n/sl.json b/apps/files_external/l10n/sl.json index f332aedb51c..e89236a13e2 100644 --- a/apps/files_external/l10n/sl.json +++ b/apps/files_external/l10n/sl.json @@ -63,7 +63,6 @@ "Identity endpoint URL" : "Naslov URL končne točke istovetnosti", "Rackspace" : "Rackspace", "API key" : "Ključ API", - "Global Credentials" : "Globalne poverilnice", "Log-in credentials, save in database" : "Prijavne poverilnice, shrani v bazo", "Username and password" : "Uporabniško ime in geslo", "Log-in credentials, save in session" : "Prijavna poverila, shrani v seji", @@ -100,10 +99,6 @@ "OpenStack Object Storage" : "Shramba predmeta OpenStack", "Service name" : "Ime storitve", "Request timeout (seconds)" : "Zahtevan časovni zamik (sekunde)", - "<b>Note:</b> " : "<b>Opomba:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Podpora za naslove cURL v PHP ni omogočena, ali pa ni ustrezno nameščenih programov. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Podpora za protokol FTP v PHP ni omogočena, ali pa ni ustrezno nameščenih programov. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Program \"%s\" ni nameščen. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.", "No external storage configured" : "Ni določene zunanje shrambe", "You can add external storages in the personal settings" : "Med nastavitvami je mogoče dodati tudi zunanjo shrambo.", "Name" : "Ime", @@ -115,7 +110,6 @@ "Check for changes" : "Preveri za spremembe", "Never" : "Nikoli", "Once every direct access" : "Enkrat ob neposrednem dostopu", - "External Storage" : "Zunanja podatkovna shramba", "Folder name" : "Ime mape", "Authentication" : "Overitev", "Configuration" : "Nastavitve", @@ -124,6 +118,12 @@ "Advanced settings" : "Napredne nastavitve", "Delete" : "Izbriši", "Allow users to mount external storage" : "Dovoli uporabnikom priklapljanje zunanje shrambe", - "Allow users to mount the following external storage" : "Dovoli uporabnikom priklapljanje navedenih zunanjih shramb." + "Allow users to mount the following external storage" : "Dovoli uporabnikom priklapljanje navedenih zunanjih shramb.", + "Global Credentials" : "Globalne poverilnice", + "<b>Note:</b> " : "<b>Opomba:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Podpora za naslove cURL v PHP ni omogočena, ali pa ni ustrezno nameščenih programov. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Podpora za protokol FTP v PHP ni omogočena, ali pa ni ustrezno nameščenih programov. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Opomba:</b> Program \"%s\" ni nameščen. Priklapljanje %s ni mogoče. Za pomoč pri namestitvi se obrnite na sistemskega skrbnika.", + "External Storage" : "Zunanja podatkovna shramba" },"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/files_external/l10n/sq.js b/apps/files_external/l10n/sq.js index fa0179cfa28..9ce890e1da2 100644 --- a/apps/files_external/l10n/sq.js +++ b/apps/files_external/l10n/sq.js @@ -98,10 +98,6 @@ OC.L10N.register( "OpenStack Object Storage" : "Depozitë OpenStack Object", "Service name" : "Emër shërbimi", "Request timeout (seconds)" : "Kohë skadimi kërkese (sekonda)", - "<b>Note:</b> " : "<b>Shënim:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Shënim:</b> S’është aktivizuar ose instaluar mbulimi i cURL-ve në PHP. Montimi i %s s’është i mundur. Ju lutemi, kërkojini përgjegjësit të sistemit tuaj ta instalojë.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Shënim:</b> S’është aktivizuar ose instaluar mbulimi i FTP-së në PHP. Montimi i %s s’është i mundur. Ju lutemi, kërkojini përgjegjësit të sistemit tuaj ta instalojë.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Shënim:</b> S’është instaluar \"%s\". Montimi i %s s’është i mundur. Ju lutemi, kërkojini përgjegjësit të sistemit tuaj ta instalojë.", "No external storage configured" : "Pa depozita të jashtme të formësuara", "You can add external storages in the personal settings" : "Depozita të jashtme mund të shtoni që prej rregullimeve personale", "Name" : "Emër", @@ -113,7 +109,6 @@ OC.L10N.register( "Check for changes" : "Kontrollo për ndryshime", "Never" : "Kurrë", "Once every direct access" : "Çdo herë pas hyrjesh të drejtpërdrejta", - "External Storage" : "Depozitë e Jashtme", "Folder name" : "Emër dosjeje", "Authentication" : "Mirëfilltësim", "Configuration" : "Formësim", @@ -122,6 +117,11 @@ OC.L10N.register( "Advanced settings" : "Rregullime të mëtejshme", "Delete" : "Fshije", "Allow users to mount external storage" : "Lejoju përdoruesve të montojnë depozita të jashtme", - "Allow users to mount the following external storage" : "Lejoju përdoruesve të montojnë depozitën e jashtme vijuese" + "Allow users to mount the following external storage" : "Lejoju përdoruesve të montojnë depozitën e jashtme vijuese", + "<b>Note:</b> " : "<b>Shënim:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Shënim:</b> S’është aktivizuar ose instaluar mbulimi i cURL-ve në PHP. Montimi i %s s’është i mundur. Ju lutemi, kërkojini përgjegjësit të sistemit tuaj ta instalojë.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Shënim:</b> S’është aktivizuar ose instaluar mbulimi i FTP-së në PHP. Montimi i %s s’është i mundur. Ju lutemi, kërkojini përgjegjësit të sistemit tuaj ta instalojë.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Shënim:</b> S’është instaluar \"%s\". Montimi i %s s’është i mundur. Ju lutemi, kërkojini përgjegjësit të sistemit tuaj ta instalojë.", + "External Storage" : "Depozitë e Jashtme" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_external/l10n/sq.json b/apps/files_external/l10n/sq.json index baa13edaf5c..f8632f2ddbb 100644 --- a/apps/files_external/l10n/sq.json +++ b/apps/files_external/l10n/sq.json @@ -96,10 +96,6 @@ "OpenStack Object Storage" : "Depozitë OpenStack Object", "Service name" : "Emër shërbimi", "Request timeout (seconds)" : "Kohë skadimi kërkese (sekonda)", - "<b>Note:</b> " : "<b>Shënim:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Shënim:</b> S’është aktivizuar ose instaluar mbulimi i cURL-ve në PHP. Montimi i %s s’është i mundur. Ju lutemi, kërkojini përgjegjësit të sistemit tuaj ta instalojë.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Shënim:</b> S’është aktivizuar ose instaluar mbulimi i FTP-së në PHP. Montimi i %s s’është i mundur. Ju lutemi, kërkojini përgjegjësit të sistemit tuaj ta instalojë.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Shënim:</b> S’është instaluar \"%s\". Montimi i %s s’është i mundur. Ju lutemi, kërkojini përgjegjësit të sistemit tuaj ta instalojë.", "No external storage configured" : "Pa depozita të jashtme të formësuara", "You can add external storages in the personal settings" : "Depozita të jashtme mund të shtoni që prej rregullimeve personale", "Name" : "Emër", @@ -111,7 +107,6 @@ "Check for changes" : "Kontrollo për ndryshime", "Never" : "Kurrë", "Once every direct access" : "Çdo herë pas hyrjesh të drejtpërdrejta", - "External Storage" : "Depozitë e Jashtme", "Folder name" : "Emër dosjeje", "Authentication" : "Mirëfilltësim", "Configuration" : "Formësim", @@ -120,6 +115,11 @@ "Advanced settings" : "Rregullime të mëtejshme", "Delete" : "Fshije", "Allow users to mount external storage" : "Lejoju përdoruesve të montojnë depozita të jashtme", - "Allow users to mount the following external storage" : "Lejoju përdoruesve të montojnë depozitën e jashtme vijuese" + "Allow users to mount the following external storage" : "Lejoju përdoruesve të montojnë depozitën e jashtme vijuese", + "<b>Note:</b> " : "<b>Shënim:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Shënim:</b> S’është aktivizuar ose instaluar mbulimi i cURL-ve në PHP. Montimi i %s s’është i mundur. Ju lutemi, kërkojini përgjegjësit të sistemit tuaj ta instalojë.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Shënim:</b> S’është aktivizuar ose instaluar mbulimi i FTP-së në PHP. Montimi i %s s’është i mundur. Ju lutemi, kërkojini përgjegjësit të sistemit tuaj ta instalojë.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Shënim:</b> S’është instaluar \"%s\". Montimi i %s s’është i mundur. Ju lutemi, kërkojini përgjegjësit të sistemit tuaj ta instalojë.", + "External Storage" : "Depozitë e Jashtme" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_external/l10n/th_TH.js b/apps/files_external/l10n/th_TH.js index 4915d38c7f1..f8f99f7ae9b 100644 --- a/apps/files_external/l10n/th_TH.js +++ b/apps/files_external/l10n/th_TH.js @@ -95,10 +95,6 @@ OC.L10N.register( "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "ชื่อบริการ", "Request timeout (seconds)" : "หมดเวลาการร้องขอ (วินาที)", - "<b>Note:</b> " : "<b>หมายเหตุ:</b>", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>หมายเหตุ:</b> การสนับสนุน cURL ใน PHP ไม่ได้เปิดใช้งานหรือติดตั้ง %s เป็นไปไม่ได้ กรุณาขอให้ผู้ดูแลระบบของคุณติดตั้งมัน", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>หมายเหตุ:</b> การสนับสนุน FTP ใน PHP ไม่ได้เปิดใช้งานหรือติดตั้ง %s เป็นไปไม่ได้ กรุณาขอให้ผู้ดูแลระบบของคุณติดตั้งมัน", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>หมายเหตุ:</b> %s ไม่ได้ติดตั้ง การติดตั้ง %s เป็นไปไม่ได้ กรุณาขอให้ผู้ดูแลระบบของคุณติดตั้งมัน", "No external storage configured" : "ไม่มีการกำหนดค่าจัดเก็บข้อมูลภายนอก", "You can add external storages in the personal settings" : "คุณสามารถเพิ่มการเก็บรักษาภายนอกในการตั้งค่าส่วนบุคคล", "Name" : "ชื่อ", @@ -110,7 +106,6 @@ OC.L10N.register( "Check for changes" : "ตรวจสอบการเปลี่ยนแปลง", "Never" : "ไม่เคย", "Once every direct access" : "เมื่อทุกคนเข้าถึงโดยตรง", - "External Storage" : "พื้นทีจัดเก็บข้อมูลจากภายนอก", "Folder name" : "ชื่อโฟลเดอร์", "Authentication" : "รับรองความถูกต้อง", "Configuration" : "การกำหนดค่า", @@ -119,6 +114,11 @@ OC.L10N.register( "Advanced settings" : "ตั้งค่าขั้นสูง", "Delete" : "ลบ", "Allow users to mount external storage" : "อนุญาตให้ผู้ใช้ติดตั้งการจัดเก็บข้อมูลภายนอก", - "Allow users to mount the following external storage" : "อนุญาตให้ผู้ใช้ติดตั้งจัดเก็บข้อมูลภายนอกต่อไปนี้" + "Allow users to mount the following external storage" : "อนุญาตให้ผู้ใช้ติดตั้งจัดเก็บข้อมูลภายนอกต่อไปนี้", + "<b>Note:</b> " : "<b>หมายเหตุ:</b>", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>หมายเหตุ:</b> การสนับสนุน cURL ใน PHP ไม่ได้เปิดใช้งานหรือติดตั้ง %s เป็นไปไม่ได้ กรุณาขอให้ผู้ดูแลระบบของคุณติดตั้งมัน", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>หมายเหตุ:</b> การสนับสนุน FTP ใน PHP ไม่ได้เปิดใช้งานหรือติดตั้ง %s เป็นไปไม่ได้ กรุณาขอให้ผู้ดูแลระบบของคุณติดตั้งมัน", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>หมายเหตุ:</b> %s ไม่ได้ติดตั้ง การติดตั้ง %s เป็นไปไม่ได้ กรุณาขอให้ผู้ดูแลระบบของคุณติดตั้งมัน", + "External Storage" : "พื้นทีจัดเก็บข้อมูลจากภายนอก" }, "nplurals=1; plural=0;"); diff --git a/apps/files_external/l10n/th_TH.json b/apps/files_external/l10n/th_TH.json index acb8c261d95..736958d3d04 100644 --- a/apps/files_external/l10n/th_TH.json +++ b/apps/files_external/l10n/th_TH.json @@ -93,10 +93,6 @@ "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "ชื่อบริการ", "Request timeout (seconds)" : "หมดเวลาการร้องขอ (วินาที)", - "<b>Note:</b> " : "<b>หมายเหตุ:</b>", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>หมายเหตุ:</b> การสนับสนุน cURL ใน PHP ไม่ได้เปิดใช้งานหรือติดตั้ง %s เป็นไปไม่ได้ กรุณาขอให้ผู้ดูแลระบบของคุณติดตั้งมัน", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>หมายเหตุ:</b> การสนับสนุน FTP ใน PHP ไม่ได้เปิดใช้งานหรือติดตั้ง %s เป็นไปไม่ได้ กรุณาขอให้ผู้ดูแลระบบของคุณติดตั้งมัน", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>หมายเหตุ:</b> %s ไม่ได้ติดตั้ง การติดตั้ง %s เป็นไปไม่ได้ กรุณาขอให้ผู้ดูแลระบบของคุณติดตั้งมัน", "No external storage configured" : "ไม่มีการกำหนดค่าจัดเก็บข้อมูลภายนอก", "You can add external storages in the personal settings" : "คุณสามารถเพิ่มการเก็บรักษาภายนอกในการตั้งค่าส่วนบุคคล", "Name" : "ชื่อ", @@ -108,7 +104,6 @@ "Check for changes" : "ตรวจสอบการเปลี่ยนแปลง", "Never" : "ไม่เคย", "Once every direct access" : "เมื่อทุกคนเข้าถึงโดยตรง", - "External Storage" : "พื้นทีจัดเก็บข้อมูลจากภายนอก", "Folder name" : "ชื่อโฟลเดอร์", "Authentication" : "รับรองความถูกต้อง", "Configuration" : "การกำหนดค่า", @@ -117,6 +112,11 @@ "Advanced settings" : "ตั้งค่าขั้นสูง", "Delete" : "ลบ", "Allow users to mount external storage" : "อนุญาตให้ผู้ใช้ติดตั้งการจัดเก็บข้อมูลภายนอก", - "Allow users to mount the following external storage" : "อนุญาตให้ผู้ใช้ติดตั้งจัดเก็บข้อมูลภายนอกต่อไปนี้" + "Allow users to mount the following external storage" : "อนุญาตให้ผู้ใช้ติดตั้งจัดเก็บข้อมูลภายนอกต่อไปนี้", + "<b>Note:</b> " : "<b>หมายเหตุ:</b>", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>หมายเหตุ:</b> การสนับสนุน cURL ใน PHP ไม่ได้เปิดใช้งานหรือติดตั้ง %s เป็นไปไม่ได้ กรุณาขอให้ผู้ดูแลระบบของคุณติดตั้งมัน", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>หมายเหตุ:</b> การสนับสนุน FTP ใน PHP ไม่ได้เปิดใช้งานหรือติดตั้ง %s เป็นไปไม่ได้ กรุณาขอให้ผู้ดูแลระบบของคุณติดตั้งมัน", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>หมายเหตุ:</b> %s ไม่ได้ติดตั้ง การติดตั้ง %s เป็นไปไม่ได้ กรุณาขอให้ผู้ดูแลระบบของคุณติดตั้งมัน", + "External Storage" : "พื้นทีจัดเก็บข้อมูลจากภายนอก" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_external/l10n/tr.js b/apps/files_external/l10n/tr.js index 95d8c3923cd..16fbf9fe503 100644 --- a/apps/files_external/l10n/tr.js +++ b/apps/files_external/l10n/tr.js @@ -65,7 +65,6 @@ OC.L10N.register( "Identity endpoint URL" : "Kimlik uç nokta URL'si", "Rackspace" : "Rackspace", "API key" : "API anahtarı", - "Global Credentials" : "Genel Kimlik Bilgileri", "Log-in credentials, save in database" : "Oturum kimlik bilgileri, veritabanında kaydet", "Username and password" : "Kullanıcı adı ve parola", "Log-in credentials, save in session" : "Oturum kimlik bilgileri, oturumda kaydet", @@ -102,10 +101,6 @@ OC.L10N.register( "OpenStack Object Storage" : "OpenStack Nesne Depolama", "Service name" : "Hizmet adı", "Request timeout (seconds)" : "İstek zamanaşımı (saniye)", - "<b>Note:</b> " : "<b>Not:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> PHP'de cURL desteği etkin veya kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> PHP'de FTP desteği etkin veya kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> \"%s\" kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.", "No external storage configured" : "Yapılandırılmış harici depolama yok", "You can add external storages in the personal settings" : "Harici depolamaları kişisel ayarlar içerisinden ekleyebilirsiniz", "Name" : "Ad", @@ -117,7 +112,6 @@ OC.L10N.register( "Check for changes" : "Değişiklikleri denetle", "Never" : "Daha yeni", "Once every direct access" : "Her doğrudan erişimde bir kez", - "External Storage" : "Harici Depolama", "Folder name" : "Klasör ismi", "Authentication" : "Kimlik Doğrulama", "Configuration" : "Yapılandırma", @@ -126,6 +120,12 @@ OC.L10N.register( "Advanced settings" : "Gelişmiş ayarlar", "Delete" : "Sil", "Allow users to mount external storage" : "Kullanıcılara harici depolama bağlamalarına izin ver", - "Allow users to mount the following external storage" : "Kullanıcıların aşağıdaki harici depolamayı bağlamalarına izin ver" + "Allow users to mount the following external storage" : "Kullanıcıların aşağıdaki harici depolamayı bağlamalarına izin ver", + "Global Credentials" : "Genel Kimlik Bilgileri", + "<b>Note:</b> " : "<b>Not:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> PHP'de cURL desteği etkin veya kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> PHP'de FTP desteği etkin veya kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> \"%s\" kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.", + "External Storage" : "Harici Depolama" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/files_external/l10n/tr.json b/apps/files_external/l10n/tr.json index 61796043b4b..9540ee8e97d 100644 --- a/apps/files_external/l10n/tr.json +++ b/apps/files_external/l10n/tr.json @@ -63,7 +63,6 @@ "Identity endpoint URL" : "Kimlik uç nokta URL'si", "Rackspace" : "Rackspace", "API key" : "API anahtarı", - "Global Credentials" : "Genel Kimlik Bilgileri", "Log-in credentials, save in database" : "Oturum kimlik bilgileri, veritabanında kaydet", "Username and password" : "Kullanıcı adı ve parola", "Log-in credentials, save in session" : "Oturum kimlik bilgileri, oturumda kaydet", @@ -100,10 +99,6 @@ "OpenStack Object Storage" : "OpenStack Nesne Depolama", "Service name" : "Hizmet adı", "Request timeout (seconds)" : "İstek zamanaşımı (saniye)", - "<b>Note:</b> " : "<b>Not:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> PHP'de cURL desteği etkin veya kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> PHP'de FTP desteği etkin veya kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> \"%s\" kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.", "No external storage configured" : "Yapılandırılmış harici depolama yok", "You can add external storages in the personal settings" : "Harici depolamaları kişisel ayarlar içerisinden ekleyebilirsiniz", "Name" : "Ad", @@ -115,7 +110,6 @@ "Check for changes" : "Değişiklikleri denetle", "Never" : "Daha yeni", "Once every direct access" : "Her doğrudan erişimde bir kez", - "External Storage" : "Harici Depolama", "Folder name" : "Klasör ismi", "Authentication" : "Kimlik Doğrulama", "Configuration" : "Yapılandırma", @@ -124,6 +118,12 @@ "Advanced settings" : "Gelişmiş ayarlar", "Delete" : "Sil", "Allow users to mount external storage" : "Kullanıcılara harici depolama bağlamalarına izin ver", - "Allow users to mount the following external storage" : "Kullanıcıların aşağıdaki harici depolamayı bağlamalarına izin ver" + "Allow users to mount the following external storage" : "Kullanıcıların aşağıdaki harici depolamayı bağlamalarına izin ver", + "Global Credentials" : "Genel Kimlik Bilgileri", + "<b>Note:</b> " : "<b>Not:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> PHP'de cURL desteği etkin veya kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> PHP'de FTP desteği etkin veya kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> \"%s\" kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.", + "External Storage" : "Harici Depolama" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/files_external/l10n/zh_TW.js b/apps/files_external/l10n/zh_TW.js index f3a188ceebf..7f5d69d478b 100644 --- a/apps/files_external/l10n/zh_TW.js +++ b/apps/files_external/l10n/zh_TW.js @@ -79,10 +79,6 @@ OC.L10N.register( "OpenStack Object Storage" : "OpenStack 物件儲存", "Service name" : "服務名稱", "Request timeout (seconds)" : "請求超時 (秒)", - "<b>Note:</b> " : "<b>警告:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>警告:</b> PHP 並未啓用 Curl 的支援,因此無法掛載 %s 。請洽您的系統管理員將其安裝並啓用。", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>警告</b>:PHP 並未啓用 FTP 的支援,因此無法掛載 %s,請洽您的系統管理員將其安裝並啓用。", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>警告</b>並未安裝 \"%s\",因此無法掛載 %s。請洽您的系統管理員將其安裝並啓用。", "No external storage configured" : "目前尚未配置任何外部儲存", "You can add external storages in the personal settings" : "在個人設定裡您可以自行加入外部儲存設定", "Name" : "名稱", @@ -92,7 +88,6 @@ OC.L10N.register( "Enable previews" : "啟動預覽", "Check for changes" : "檢查變動", "Never" : "絕不", - "External Storage" : "外部儲存", "Folder name" : "資料夾名稱", "Authentication" : "驗證", "Configuration" : "設定", @@ -101,6 +96,11 @@ OC.L10N.register( "Advanced settings" : "進階設定", "Delete" : "刪除", "Allow users to mount external storage" : "允許使用者能自行掛載外部儲存", - "Allow users to mount the following external storage" : "允許使用者自行掛載以下的外部儲存" + "Allow users to mount the following external storage" : "允許使用者自行掛載以下的外部儲存", + "<b>Note:</b> " : "<b>警告:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>警告:</b> PHP 並未啓用 Curl 的支援,因此無法掛載 %s 。請洽您的系統管理員將其安裝並啓用。", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>警告</b>:PHP 並未啓用 FTP 的支援,因此無法掛載 %s,請洽您的系統管理員將其安裝並啓用。", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>警告</b>並未安裝 \"%s\",因此無法掛載 %s。請洽您的系統管理員將其安裝並啓用。", + "External Storage" : "外部儲存" }, "nplurals=1; plural=0;"); diff --git a/apps/files_external/l10n/zh_TW.json b/apps/files_external/l10n/zh_TW.json index 42e575d24cd..03e0b148e50 100644 --- a/apps/files_external/l10n/zh_TW.json +++ b/apps/files_external/l10n/zh_TW.json @@ -77,10 +77,6 @@ "OpenStack Object Storage" : "OpenStack 物件儲存", "Service name" : "服務名稱", "Request timeout (seconds)" : "請求超時 (秒)", - "<b>Note:</b> " : "<b>警告:</b> ", - "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>警告:</b> PHP 並未啓用 Curl 的支援,因此無法掛載 %s 。請洽您的系統管理員將其安裝並啓用。", - "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>警告</b>:PHP 並未啓用 FTP 的支援,因此無法掛載 %s,請洽您的系統管理員將其安裝並啓用。", - "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>警告</b>並未安裝 \"%s\",因此無法掛載 %s。請洽您的系統管理員將其安裝並啓用。", "No external storage configured" : "目前尚未配置任何外部儲存", "You can add external storages in the personal settings" : "在個人設定裡您可以自行加入外部儲存設定", "Name" : "名稱", @@ -90,7 +86,6 @@ "Enable previews" : "啟動預覽", "Check for changes" : "檢查變動", "Never" : "絕不", - "External Storage" : "外部儲存", "Folder name" : "資料夾名稱", "Authentication" : "驗證", "Configuration" : "設定", @@ -99,6 +94,11 @@ "Advanced settings" : "進階設定", "Delete" : "刪除", "Allow users to mount external storage" : "允許使用者能自行掛載外部儲存", - "Allow users to mount the following external storage" : "允許使用者自行掛載以下的外部儲存" + "Allow users to mount the following external storage" : "允許使用者自行掛載以下的外部儲存", + "<b>Note:</b> " : "<b>警告:</b> ", + "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>警告:</b> PHP 並未啓用 Curl 的支援,因此無法掛載 %s 。請洽您的系統管理員將其安裝並啓用。", + "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>警告</b>:PHP 並未啓用 FTP 的支援,因此無法掛載 %s,請洽您的系統管理員將其安裝並啓用。", + "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>警告</b>並未安裝 \"%s\",因此無法掛載 %s。請洽您的系統管理員將其安裝並啓用。", + "External Storage" : "外部儲存" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_external/lib/AppInfo/Application.php b/apps/files_external/lib/AppInfo/Application.php index a32a3a26c7f..fcf10adb375 100644 --- a/apps/files_external/lib/AppInfo/Application.php +++ b/apps/files_external/lib/AppInfo/Application.php @@ -69,10 +69,17 @@ class Application extends App implements IBackendProvider, IAuthMechanismProvide */ public function registerSettings() { $container = $this->getContainer(); + $userSession = $container->getServer()->getUserSession(); + if (!$userSession->isLoggedIn()) { + return; + } $backendService = $container->query('OCA\\Files_External\\Service\\BackendService'); - \OCP\App::registerAdmin('files_external', 'settings'); - \OCP\App::registerPersonal('files_external', 'personal'); + /** @var \OCA\Files_External\Service\UserGlobalStoragesService $userGlobalStoragesService */ + $userGlobalStoragesService = $container->query('OCA\Files_External\Service\UserGlobalStoragesService'); + if (count($userGlobalStoragesService->getStorages()) > 0 || $backendService->isUserMountingAllowed()) { + \OCP\App::registerPersonal('files_external', 'personal'); + } } /** diff --git a/apps/files_external/lib/Lib/Auth/Password/GlobalAuth.php b/apps/files_external/lib/Lib/Auth/Password/GlobalAuth.php index 502024be4f2..c0ece745aa4 100644 --- a/apps/files_external/lib/Lib/Auth/Password/GlobalAuth.php +++ b/apps/files_external/lib/Lib/Auth/Password/GlobalAuth.php @@ -48,7 +48,7 @@ class GlobalAuth extends AuthMechanism { ->setIdentifier('password::global') ->setVisibility(BackendService::VISIBILITY_DEFAULT) ->setScheme(self::SCHEME_PASSWORD) - ->setText($l->t('Global Credentials')); + ->setText($l->t('Global credentials')); } public function getAuth($uid) { diff --git a/apps/files_external/lib/Lib/Backend/OwnCloud.php b/apps/files_external/lib/Lib/Backend/OwnCloud.php index 59d1b2cec52..1304b09c87c 100644 --- a/apps/files_external/lib/Lib/Backend/OwnCloud.php +++ b/apps/files_external/lib/Lib/Backend/OwnCloud.php @@ -37,7 +37,7 @@ class OwnCloud extends Backend { ->setIdentifier('owncloud') ->addIdentifierAlias('\OC\Files\Storage\OwnCloud') // legacy compat ->setStorageClass('\OCA\Files_External\Lib\Storage\OwnCloud') - ->setText($l->t('ownCloud')) + ->setText($l->t('Nextcloud')) ->addParameters([ (new DefinitionParameter('host', $l->t('URL'))), (new DefinitionParameter('root', $l->t('Remote subfolder'))) diff --git a/apps/files_external/lib/Service/DBConfigService.php b/apps/files_external/lib/Service/DBConfigService.php index a94b73772e7..61cca9a0224 100644 --- a/apps/files_external/lib/Service/DBConfigService.php +++ b/apps/files_external/lib/Service/DBConfigService.php @@ -208,7 +208,7 @@ class DBConfigService { 'type' => $builder->createNamedParameter($type, IQueryBuilder::PARAM_INT) ]); $query->execute(); - return (int)$this->connection->lastInsertId('external_mounts'); + return (int)$this->connection->lastInsertId('*PREFIX*external_mounts'); } /** diff --git a/apps/files_external/lib/Settings/Admin.php b/apps/files_external/lib/Settings/Admin.php new file mode 100644 index 00000000000..54711443f89 --- /dev/null +++ b/apps/files_external/lib/Settings/Admin.php @@ -0,0 +1,96 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\Files_External\Settings; + +use OCA\Files_External\Lib\Auth\Password\GlobalAuth; +use OCA\Files_External\Service\BackendService; +use OCA\Files_External\Service\GlobalStoragesService; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\Encryption\IManager; +use OCP\Settings\ISettings; + +class Admin implements ISettings { + + /** @var IManager */ + private $encryptionManager; + + /** @var GlobalStoragesService */ + private $globalStoragesService; + + /** @var BackendService */ + private $backendService; + + /** @var GlobalAuth */ + private $globalAuth; + + public function __construct( + IManager $encryptionManager, + GlobalStoragesService $globalStoragesService, + BackendService $backendService, + GlobalAuth $globalAuth + ) { + $this->encryptionManager = $encryptionManager; + $this->globalStoragesService = $globalStoragesService; + $this->backendService = $backendService; + $this->globalAuth = $globalAuth; + } + + /** + * @return TemplateResponse + */ + public function getForm() { + $parameters = [ + 'encryptionEnabled' => $this->encryptionManager->isEnabled(), + 'visibilityType' => BackendService::VISIBILITY_ADMIN, + 'storages' => $this->globalStoragesService->getStorages(), + 'backends' => $this->backendService->getAvailableBackends(), + 'authMechanisms' => $this->backendService->getAuthMechanisms(), + 'dependencies' => \OC_Mount_Config::dependencyMessage($this->backendService->getBackends()), + 'allowUserMounting' => $this->backendService->isUserMountingAllowed(), + 'globalCredentials' => $this->globalAuth->getAuth(''), + 'globalCredentialsUid' => '', + ]; + + return new TemplateResponse('files_external', 'settings', $parameters, ''); + } + + /** + * @return string the section ID, e.g. 'sharing' + */ + public function getSection() { + return 'externalstorages'; + } + + /** + * @return int whether the form should be rather on the top or bottom of + * the admin section. The forms are arranged in ascending order of the + * priority values. It is required to return a value between 0 and 100. + * + * E.g.: 70 + */ + public function getPriority() { + return 40; + } + +} diff --git a/apps/files_external/lib/Settings/Section.php b/apps/files_external/lib/Settings/Section.php new file mode 100644 index 00000000000..4b4bac93d29 --- /dev/null +++ b/apps/files_external/lib/Settings/Section.php @@ -0,0 +1,67 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\Files_External\Settings; + +use OCP\IL10N; +use OCP\Settings\ISection; + +class Section implements ISection { + /** @var IL10N */ + private $l; + + public function __construct(IL10N $l) { + $this->l = $l; + } + + /** + * returns the ID of the section. It is supposed to be a lower case string, + * e.g. 'ldap' + * + * @returns string + */ + public function getID() { + return 'externalstorages'; + } + + /** + * returns the translated name as it should be displayed, e.g. 'LDAP / AD + * integration'. Use the L10N service to translate it. + * + * @return string + */ + public function getName() { + return $this->l->t('External storages'); + } + + /** + * @return int whether the form should be rather on the top or bottom of + * the settings navigation. The sections are arranged in ascending order of + * the priority values. It is required to return a value between 0 and 99. + * + * E.g.: 70 + */ + public function getPriority() { + return 10; + } +} diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php index cd3b4d9f3cb..7a10d4bbc24 100644 --- a/apps/files_external/lib/config.php +++ b/apps/files_external/lib/config.php @@ -285,7 +285,7 @@ class OC_Mount_Config { foreach ($backends as $backend) { foreach ($backend->checkDependencies() as $dependency) { if ($message = $dependency->getMessage()) { - $message .= '<br />' . $l->t('<b>Note:</b> ') . $message; + $message .= '<p>' . $message . '</p>'; } else { $dependencyGroups[$dependency->getDependency()][] = $backend; } @@ -294,9 +294,9 @@ class OC_Mount_Config { foreach ($dependencyGroups as $module => $dependants) { $backends = implode(', ', array_map(function($backend) { - return '<i>' . $backend->getText() . '</i>'; + return '"' . $backend->getText() . '"'; }, $dependants)); - $message .= '<br />' . OC_Mount_Config::getSingleDependencyMessage($l, $module, $backends); + $message .= '<p>' . OC_Mount_Config::getSingleDependencyMessage($l, $module, $backends) . '</p>'; } return $message; @@ -313,11 +313,11 @@ class OC_Mount_Config { private static function getSingleDependencyMessage(\OCP\IL10N $l, $module, $backend) { switch (strtolower($module)) { case 'curl': - return (string)$l->t('<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.', $backend); + return (string)$l->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.', $backend); case 'ftp': - return (string)$l->t('<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.', $backend); + return (string)$l->t('The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it.', $backend); default: - return (string)$l->t('<b>Note:</b> "%s" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it.', array($module, $backend)); + return (string)$l->t('"%s" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it.', array($module, $backend)); } } diff --git a/apps/files_external/settings.php b/apps/files_external/settings.php deleted file mode 100644 index cb9ee5ccde0..00000000000 --- a/apps/files_external/settings.php +++ /dev/null @@ -1,48 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Joas Schilling <coding@schilljs.com> - * @author Michael Gapczynski <GapczynskiM@gmail.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin Appelman <robin@icewind.nl> - * @author Robin McCorkell <robin@mccorkell.me.uk> - * - * @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/> - * - */ - -use \OCA\Files_External\Service\BackendService; - -// we must use the same container -$appContainer = \OC_Mount_Config::$app->getContainer(); -$backendService = $appContainer->query('OCA\Files_External\Service\BackendService'); -$globalStoragesService = $appContainer->query('OCA\Files_External\Service\GlobalStoragesService'); -$globalAuth = $appContainer->query('OCA\Files_External\Lib\Auth\Password\GlobalAuth'); - -\OC_Util::addVendorScript('select2/select2'); -\OC_Util::addVendorStyle('select2/select2'); - -$tmpl = new OCP\Template('files_external', 'settings'); -$tmpl->assign('encryptionEnabled', \OC::$server->getEncryptionManager()->isEnabled()); -$tmpl->assign('visibilityType', BackendService::VISIBILITY_ADMIN); -$tmpl->assign('storages', $globalStoragesService->getStorages()); -$tmpl->assign('backends', $backendService->getAvailableBackends()); -$tmpl->assign('authMechanisms', $backendService->getAuthMechanisms()); -$tmpl->assign('dependencies', OC_Mount_Config::dependencyMessage($backendService->getBackends())); -$tmpl->assign('allowUserMounting', $backendService->isUserMountingAllowed()); -$tmpl->assign('globalCredentials', $globalAuth->getAuth('')); -$tmpl->assign('globalCredentialsUid', ''); -return $tmpl->fetchPage(); diff --git a/apps/files_external/templates/list.php b/apps/files_external/templates/list.php index c2f68b9c5ba..d006514bcde 100644 --- a/apps/files_external/templates/list.php +++ b/apps/files_external/templates/list.php @@ -7,7 +7,7 @@ <div id="emptycontent" class="hidden"> <div class="icon-external"></div> <h2><?php p($l->t('No external storage configured')); ?></h2> - <p><?php p($l->t('You can add external storages in the personal settings')); ?></p> + <p><a href="<?php p(link_to('', 'index.php/settings/personal#files_external' )); ?>"><?php p($l->t('You can add external storages in the personal settings')); ?></a></p> </div> <input type="hidden" name="dir" value="" id="dir"> diff --git a/apps/files_external/templates/settings.php b/apps/files_external/templates/settings.php index 6fb2a018547..53d2412425c 100644 --- a/apps/files_external/templates/settings.php +++ b/apps/files_external/templates/settings.php @@ -4,6 +4,8 @@ use \OCA\Files_External\Lib\DefinitionParameter; use \OCA\Files_External\Service\BackendService; + $canCreateMounts = $_['visibilityType'] === BackendService::VISIBILITY_ADMIN || $_['allowUserMounting']; + $l->t("Enable encryption"); $l->t("Enable previews"); $l->t("Enable sharing"); @@ -84,25 +86,10 @@ } } ?> -<form autocomplete="false" class="section" action="#" - id="global_credentials"> - <h2><?php p($l->t('External Storage')); ?></h2> - <p><?php p($l->t('Global Credentials')); ?></p> - <input type="text" name="username" - autocomplete="false" - value="<?php p($_['globalCredentials']['user']); ?>" - placeholder="<?php p($l->t('Username')) ?>"/> - <input type="password" name="password" - autocomplete="false" - value="<?php p($_['globalCredentials']['password']); ?>" - placeholder="<?php p($l->t('Password')) ?>"/> - <input type="hidden" name="uid" - value="<?php p($_['globalCredentialsUid']); ?>"/> - <input type="submit" value="<?php p($l->t('Save')) ?>"/> -</form> -<form id="files_external" class="section" data-encryption-enabled="<?php echo $_['encryptionEnabled']?'true': 'false'; ?>"> - <?php if (isset($_['dependencies']) and ($_['dependencies']<>'')) print_unescaped(''.$_['dependencies'].''); ?> +<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> + <?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> <tr> @@ -118,7 +105,7 @@ </thead> <tbody> <tr id="addMountPoint" - <?php if ($_['visibilityType'] === BackendService::VISIBILITY_PERSONAL && $_['allowUserMounting'] === false): ?> + <?php if (!$canCreateMounts): ?> style="display: none;" <?php endif; ?> > @@ -173,10 +160,8 @@ </tr> </tbody> </table> - <br /> <?php if ($_['visibilityType'] === BackendService::VISIBILITY_ADMIN): ?> - <br /> <input type="checkbox" name="allowUserMounting" id="allowUserMounting" class="checkbox" value="1" <?php if ($_['allowUserMounting'] == 'yes') print_unescaped(' checked="checked"'); ?> /> <label for="allowUserMounting"><?php p($l->t('Allow users to mount external storage')); ?></label> <span id="userMountingMsg" class="msg"></span> @@ -200,3 +185,21 @@ </p> <?php endif; ?> </form> + +<?php if ($canCreateMounts): ?> + <form autocomplete="false" class="section" action="#" + id="global_credentials"> + <p><?php p($l->t('Global credentials')); ?></p> + <input type="text" name="username" + autocomplete="false" + value="<?php p($_['globalCredentials']['user']); ?>" + placeholder="<?php p($l->t('Username')) ?>"/> + <input type="password" name="password" + autocomplete="false" + value="<?php p($_['globalCredentials']['password']); ?>" + placeholder="<?php p($l->t('Password')) ?>"/> + <input type="hidden" name="uid" + value="<?php p($_['globalCredentialsUid']); ?>"/> + <input type="submit" value="<?php p($l->t('Save')) ?>"/> + </form> +<?php endif; ?> diff --git a/apps/files_external/tests/Settings/AdminTest.php b/apps/files_external/tests/Settings/AdminTest.php new file mode 100644 index 00000000000..fdf9680e7c3 --- /dev/null +++ b/apps/files_external/tests/Settings/AdminTest.php @@ -0,0 +1,109 @@ +<?php +/** + * @copyright Copyright (c) 2016 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 OCA\Files_External\Tests\Settings; + +use OCA\Files_External\Lib\Auth\Password\GlobalAuth; +use OCA\Files_External\Service\BackendService; +use OCA\Files_External\Service\GlobalStoragesService; +use OCA\Files_External\Settings\Admin; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\Encryption\IManager; +use Test\TestCase; + +class AdminTest extends TestCase { + /** @var Admin */ + private $admin; + /** @var IManager */ + private $encryptionManager; + /** @var GlobalStoragesService */ + private $globalStoragesService; + /** @var BackendService */ + private $backendService; + /** @var GlobalAuth */ + private $globalAuth; + + public function setUp() { + parent::setUp(); + $this->encryptionManager = $this->getMockBuilder('\OCP\Encryption\IManager')->getMock(); + $this->globalStoragesService = $this->getMockBuilder('\OCA\Files_External\Service\GlobalStoragesService')->disableOriginalConstructor()->getMock(); + $this->backendService = $this->getMockBuilder('\OCA\Files_External\Service\BackendService')->disableOriginalConstructor()->getMock(); + $this->globalAuth = $this->getMockBuilder('\OCA\Files_External\Lib\Auth\Password\GlobalAuth')->disableOriginalConstructor()->getMock(); + + $this->admin = new Admin( + $this->encryptionManager, + $this->globalStoragesService, + $this->backendService, + $this->globalAuth + ); + } + + public function testGetForm() { + $this->encryptionManager + ->expects($this->once()) + ->method('isEnabled') + ->willReturn(false); + $this->globalStoragesService + ->expects($this->once()) + ->method('getStorages') + ->willReturn(['a', 'b', 'c']); + $this->backendService + ->expects($this->once()) + ->method('getAvailableBackends') + ->willReturn(['d', 'e', 'f']); + $this->backendService + ->expects($this->once()) + ->method('getAuthMechanisms') + ->willReturn(['g', 'h', 'i']); + $this->backendService + ->expects($this->once()) + ->method('isUserMountingAllowed') + ->willReturn(true); + $this->globalAuth + ->expects($this->once()) + ->method('getAuth') + ->with('') + ->willReturn('asdf:asdf'); + $params = [ + 'encryptionEnabled' => false, + 'visibilityType' => BackendService::VISIBILITY_ADMIN, + 'storages' => ['a', 'b', 'c'], + 'backends' => ['d', 'e', 'f'], + 'authMechanisms' => ['g', 'h', 'i'], + 'dependencies' => \OC_Mount_Config::dependencyMessage($this->backendService->getBackends()), + 'allowUserMounting' => true, + 'globalCredentials' => 'asdf:asdf', + 'globalCredentialsUid' => '', + ]; + $expected = new TemplateResponse('files_external', 'settings', $params, ''); + $this->assertEquals($expected, $this->admin->getForm()); + } + + public function testGetSection() { + $this->assertSame('externalstorages', $this->admin->getSection()); + } + + public function testGetPriority() { + $this->assertSame(40, $this->admin->getPriority()); + } +} diff --git a/apps/files_external/tests/Settings/SectionTest.php b/apps/files_external/tests/Settings/SectionTest.php new file mode 100644 index 00000000000..b5dfb28b382 --- /dev/null +++ b/apps/files_external/tests/Settings/SectionTest.php @@ -0,0 +1,62 @@ +<?php +/** + * @copyright Copyright (c) 2016 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 OCA\Files_External\Tests\Settings; + +use OCA\Files_External\Settings\Section; +use OCP\IL10N; +use Test\TestCase; + +class SectionTest extends TestCase { + /** @var IL10N */ + private $l; + /** @var Section */ + private $section; + + public function setUp() { + parent::setUp(); + $this->l = $this->getMockBuilder('\OCP\IL10N')->disableOriginalConstructor()->getMock(); + + $this->section = new Section( + $this->l + ); + } + + public function testGetID() { + $this->assertSame('externalstorages', $this->section->getID()); + } + + public function testGetName() { + $this->l + ->expects($this->once()) + ->method('t') + ->with('External storages') + ->willReturn('External storages'); + + $this->assertSame('External storages', $this->section->getName()); + } + + public function testGetPriority() { + $this->assertSame(10, $this->section->getPriority()); + } +} diff --git a/apps/files_sharing/appinfo/routes.php b/apps/files_sharing/appinfo/routes.php index ee7ea55d506..de6967c7d63 100644 --- a/apps/files_sharing/appinfo/routes.php +++ b/apps/files_sharing/appinfo/routes.php @@ -69,6 +69,14 @@ $application->registerRoutes($this, [ 'url' => '/api/v1/shares/{id}', 'verb' => 'DELETE', ], + /* + * OCS Sharee API + */ + [ + 'name' => 'ShareesAPI#search', + 'url' => '/api/v1/sharees', + 'verb' => 'GET', + ], ], ]); @@ -118,20 +126,3 @@ API::register('delete', '/apps/files_sharing/api/v1/remote_shares/{id}', array('\OCA\Files_Sharing\API\Remote', 'unshare'), 'files_sharing'); - - -$sharees = new \OCA\Files_Sharing\API\Sharees(\OC::$server->getGroupManager(), - \OC::$server->getUserManager(), - \OC::$server->getContactsManager(), - \OC::$server->getConfig(), - \OC::$server->getUserSession(), - \OC::$server->getURLGenerator(), - \OC::$server->getRequest(), - \OC::$server->getLogger(), - \OC::$server->getShareManager()); - -API::register('get', - '/apps/files_sharing/api/v1/sharees', - [$sharees, 'search'], - 'files_sharing', API::USER_AUTH); - diff --git a/apps/files_sharing/img/app.svg b/apps/files_sharing/img/app.svg index d64e44b70b0..11a1a37a299 100644 --- a/apps/files_sharing/img/app.svg +++ b/apps/files_sharing/img/app.svg @@ -9,6 +9,7 @@ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" height="16" width="16" + viewBox="0 0 16 16" version="1.1" id="svg2" inkscape:version="0.48.5 r10040" diff --git a/apps/files_sharing/l10n/cs_CZ.js b/apps/files_sharing/l10n/cs_CZ.js index 569fb884159..9f633339084 100644 --- a/apps/files_sharing/l10n/cs_CZ.js +++ b/apps/files_sharing/l10n/cs_CZ.js @@ -18,9 +18,12 @@ OC.L10N.register( "Shared by" : "Sdílí", "Sharing" : "Sdílení", "Wrong share ID, share doesn't exist" : "Špatné ID sdílení, sdílení neexistuje", + "could not delete share" : "nelze smazat sdílení", "Could not delete share" : "Nelze smazat sdílení", "Please specify a file or folder path" : "Prosím zadejte cestu adresáře nebo souboru", "Wrong path, file/folder doesn't exist" : "Špatná cesta, soubor/adresář neexistuje", + "Could not create share" : "Nelze vytvořit sdílení", + "invalid permissions" : "neplatná oprávnění", "Please specify a valid user" : "Prosím zadejte platného uživatele", "Group sharing is disabled by the administrator" : "Skupinové sdílení bylo zakázáno administrátorem", "Please specify a valid group" : "Prosím zadejte platnou skupinu", @@ -99,6 +102,36 @@ OC.L10N.register( "Upload files to %s" : "Nahrát soubory do %s", "Select or drop files" : "Vyberte nebo přetáhněte soubory", "Uploading files…" : "Probíhá nahrávání souborů...", - "Uploaded files:" : "Nahrané soubory:" + "Uploaded files:" : "Nahrané soubory:", + "Server to server sharing is not enabled on this server" : "Sdílení mezi servery není na tomto serveru povoleno", + "The mountpoint name contains invalid characters." : "Jméno přípojného bodu obsahuje nepovolené znaky.", + "Not allowed to create a federated share with the same user server" : "Není povoleno vytvořit propojené sdílení s tím samým serverem", + "Invalid or untrusted SSL certificate" : "Neplatný nebo nedůvěryhodný SSL certifikát", + "Could not authenticate to remote share, password might be wrong" : "Nezdařilo se přihlášení ke vzdálenému úložišti, nejspíše bylo zadáno chybné heslo", + "Storage not valid" : "Úložiště není platné", + "Couldn't add remote share" : "Nelze přidat vzdálené úložiště", + "Federated sharing" : "Propojené sdílení", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "Chcete přidat vzdálené úložiště {name} uživatele {owner}@{remote}?", + "Remote share" : "Vzdálené úložiště", + "Remote share password" : "Heslo ke vzdálenému úložišti", + "Cancel" : "Zrušit", + "Add remote share" : "Přidat vzdálené úložiště", + "No ownCloud installation (7 or higher) found at {remote}" : "Nebyla nalezena instalace ownCloud (7 nebo vyšší) na {remote}", + "Invalid ownCloud url" : "Neplatná ownCloud url", + "You received \"/%2$s\" as a remote share from %1$s" : "Obdrželi jste \"/%2$s\" jako vzdálené sdílení od %1$s", + "Accept" : "Přijmout", + "Decline" : "Zamítnout", + "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Sdílej se mnou pomocí mého #ownCloud sdruženého cloud ID, více na %s", + "Share with me through my #ownCloud Federated Cloud ID" : "Sdílej se mnou pomocí mého #ownCloud sdruženého cloud ID", + "Federated Cloud Sharing" : "Propojené cloudové sdílení", + "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ů", + "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:" }, "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/apps/files_sharing/l10n/cs_CZ.json b/apps/files_sharing/l10n/cs_CZ.json index 152b5170c8b..9ba295b2831 100644 --- a/apps/files_sharing/l10n/cs_CZ.json +++ b/apps/files_sharing/l10n/cs_CZ.json @@ -16,9 +16,12 @@ "Shared by" : "Sdílí", "Sharing" : "Sdílení", "Wrong share ID, share doesn't exist" : "Špatné ID sdílení, sdílení neexistuje", + "could not delete share" : "nelze smazat sdílení", "Could not delete share" : "Nelze smazat sdílení", "Please specify a file or folder path" : "Prosím zadejte cestu adresáře nebo souboru", "Wrong path, file/folder doesn't exist" : "Špatná cesta, soubor/adresář neexistuje", + "Could not create share" : "Nelze vytvořit sdílení", + "invalid permissions" : "neplatná oprávnění", "Please specify a valid user" : "Prosím zadejte platného uživatele", "Group sharing is disabled by the administrator" : "Skupinové sdílení bylo zakázáno administrátorem", "Please specify a valid group" : "Prosím zadejte platnou skupinu", @@ -97,6 +100,36 @@ "Upload files to %s" : "Nahrát soubory do %s", "Select or drop files" : "Vyberte nebo přetáhněte soubory", "Uploading files…" : "Probíhá nahrávání souborů...", - "Uploaded files:" : "Nahrané soubory:" + "Uploaded files:" : "Nahrané soubory:", + "Server to server sharing is not enabled on this server" : "Sdílení mezi servery není na tomto serveru povoleno", + "The mountpoint name contains invalid characters." : "Jméno přípojného bodu obsahuje nepovolené znaky.", + "Not allowed to create a federated share with the same user server" : "Není povoleno vytvořit propojené sdílení s tím samým serverem", + "Invalid or untrusted SSL certificate" : "Neplatný nebo nedůvěryhodný SSL certifikát", + "Could not authenticate to remote share, password might be wrong" : "Nezdařilo se přihlášení ke vzdálenému úložišti, nejspíše bylo zadáno chybné heslo", + "Storage not valid" : "Úložiště není platné", + "Couldn't add remote share" : "Nelze přidat vzdálené úložiště", + "Federated sharing" : "Propojené sdílení", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "Chcete přidat vzdálené úložiště {name} uživatele {owner}@{remote}?", + "Remote share" : "Vzdálené úložiště", + "Remote share password" : "Heslo ke vzdálenému úložišti", + "Cancel" : "Zrušit", + "Add remote share" : "Přidat vzdálené úložiště", + "No ownCloud installation (7 or higher) found at {remote}" : "Nebyla nalezena instalace ownCloud (7 nebo vyšší) na {remote}", + "Invalid ownCloud url" : "Neplatná ownCloud url", + "You received \"/%2$s\" as a remote share from %1$s" : "Obdrželi jste \"/%2$s\" jako vzdálené sdílení od %1$s", + "Accept" : "Přijmout", + "Decline" : "Zamítnout", + "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Sdílej se mnou pomocí mého #ownCloud sdruženého cloud ID, více na %s", + "Share with me through my #ownCloud Federated Cloud ID" : "Sdílej se mnou pomocí mého #ownCloud sdruženého cloud ID", + "Federated Cloud Sharing" : "Propojené cloudové sdílení", + "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ů", + "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:" },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/de.js b/apps/files_sharing/l10n/de.js index 635bd45626a..42d1e6d7f59 100644 --- a/apps/files_sharing/l10n/de.js +++ b/apps/files_sharing/l10n/de.js @@ -18,9 +18,12 @@ OC.L10N.register( "Shared by" : "Geteilt von ", "Sharing" : "Teilen", "Wrong share ID, share doesn't exist" : "Fehlerhafte Freigabe-ID, Freigabe existiert nicht", + "could not delete share" : "Freigabe konnte nicht gelöscht werden", "Could not delete share" : "Freigabe konnte nicht gelöscht werden", "Please specify a file or folder path" : "Bitte eine Datei oder Verzeichnis definieren", "Wrong path, file/folder doesn't exist" : "Falscher Pfad, Datei/Verzeichnis existiert nicht", + "Could not create share" : "Freigabe konnte nicht erstellt werden", + "invalid permissions" : "Ungültige Berechtigung", "Please specify a valid user" : "Bitte gib einen gültigen Nutzer an", "Group sharing is disabled by the administrator" : "Die Gruppenfreigabe ist durch den Administrator deaktiviert", "Please specify a valid group" : "Bitte gib eine gültige Gruppe an", @@ -61,7 +64,7 @@ OC.L10N.register( "The public link of %2$s for %1$s expired" : "Der öffentliche Link von %2$s für %1$s ist abgelaufen", "%2$s shared %1$s with you" : "%2$s hat %1$s mit dir geteilt", "%2$s removed the share for %1$s" : "%2$s hat die Freigabe für %1$s entfernt", - "Downloaded via public link" : "Runtergeladen mittels öffentlichen Link", + "Downloaded via public link" : "Heruntergeladen mittels öffentlichen Link", "Shared with %2$s" : "Geteilt mit %2$s", "Shared with %3$s by %2$s" : "Geteilt mit %3$s von %2$s", "Removed share for %2$s" : "Freigabe für %2$s entfernt", @@ -71,7 +74,7 @@ OC.L10N.register( "Removed share of group %2$s" : "Freigabe für Gruppe %2$s entfernt", "%2$s removed share of group %3$s" : "%2$s hat die Freigabe für Gruppe %3$s entfernt", "Shared via link by %2$s" : "Geteilt mittels Link von %2$s", - "Shared via public link" : "Geteilt mittels öffentlichen Link", + "Shared via public link" : "Geteilt mittels öffentlichem Link", "Removed public link" : "Öffentlichen Link entfernt", "%2$s removed public link" : "%2$s hat den öffentlichen Link entfernt", "Public link expired" : "öffentlicher Link ist abgelaufen", @@ -80,7 +83,7 @@ OC.L10N.register( "Shares" : "Freigaben", "Share API is disabled" : "Teilen-API ist deaktivert", "This share is password-protected" : "Diese Freigabe ist durch ein Passwort geschützt", - "The password is wrong. Try again." : "Bitte überprüfe Dein Passwort und versuche es erneut.", + "The password is wrong. Try again." : "Das Passwort ist falsch. Versuche es erneut.", "Password" : "Passwort", "No entries found in this folder" : "Keine Einträge in diesem Ordner gefunden", "Name" : "Name", @@ -99,6 +102,36 @@ OC.L10N.register( "Upload files to %s" : "Dateien auf %s hochladen", "Select or drop files" : "Dateien auswählen oder hierher ziehen", "Uploading files…" : "Dateien werden hochgeladen...", - "Uploaded files:" : "Hochgeladene Dateien: " + "Uploaded files:" : "Hochgeladene Dateien: ", + "Server to server sharing is not enabled on this server" : "Das Server-zu-Server-Teilen ist auf diesem Server nicht aktiviert", + "The mountpoint name contains invalid characters." : "Der Name des Einhängepunktes enthält ungültige Zeichen.", + "Not allowed to create a federated share with the same user server" : "Teilen mit Nutzern auf dem selben Server via Federated-Cloud ist nicht erlaubt", + "Invalid or untrusted SSL certificate" : "Ungültiges oder nicht vertrauenswürdiges SSL-Zertifikat", + "Could not authenticate to remote share, password might be wrong" : "Die Authentifizierung an der entfernten Freigabe konnte nicht erfolgen, das Passwort könnte falsch sein", + "Storage not valid" : "Speicher ungültig", + "Couldn't add remote share" : "Entfernte Freigabe kann nicht hinzugefügt werden", + "Federated sharing" : "Federated-Sharing", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "Soll die entfernte Freigabe {name} von {owner}@{remote} hinzugefügt werden?", + "Remote share" : "Entfernte Freigabe", + "Remote share password" : "Passwort für die entfernte Freigabe", + "Cancel" : "Abbrechen", + "Add remote share" : "Entfernte Freigabe hinzufügen", + "No ownCloud installation (7 or higher) found at {remote}" : "Keine OwnCloud-Installation (7 oder höher) auf {remote} gefunden", + "Invalid ownCloud url" : "Ungültige OwnCloud-URL", + "You received \"/%2$s\" as a remote share from %1$s" : "Du hast \"/%2$s\" als entfernte Freigabe von %1$s erhalten", + "Accept" : "Akzeptieren", + "Decline" : "Ablehnen", + "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Teile mit mir über meine #ownCloud Federated-Cloud-ID, siehe %s", + "Share with me through my #ownCloud Federated Cloud ID" : "Teile mit mir über meine #ownCloud Federated-Cloud-ID", + "Federated Cloud Sharing" : "Federated-Cloud-Sharing", + "Open documentation" : "Dokumentation öffnen", + "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", + "Federated Cloud" : "Federated-Cloud", + "Your Federated Cloud ID:" : "Deine Federated-Cloud-ID:", + "Share it:" : "Teilen:", + "Add to your website" : "Zu deiner Webseite hinzufügen", + "Share with me via Nextcloud" : "Teile mit mir über Nextcloud", + "HTML Code:" : "HTML-Code:" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/de.json b/apps/files_sharing/l10n/de.json index 2fcb8699059..e5c310de52f 100644 --- a/apps/files_sharing/l10n/de.json +++ b/apps/files_sharing/l10n/de.json @@ -16,9 +16,12 @@ "Shared by" : "Geteilt von ", "Sharing" : "Teilen", "Wrong share ID, share doesn't exist" : "Fehlerhafte Freigabe-ID, Freigabe existiert nicht", + "could not delete share" : "Freigabe konnte nicht gelöscht werden", "Could not delete share" : "Freigabe konnte nicht gelöscht werden", "Please specify a file or folder path" : "Bitte eine Datei oder Verzeichnis definieren", "Wrong path, file/folder doesn't exist" : "Falscher Pfad, Datei/Verzeichnis existiert nicht", + "Could not create share" : "Freigabe konnte nicht erstellt werden", + "invalid permissions" : "Ungültige Berechtigung", "Please specify a valid user" : "Bitte gib einen gültigen Nutzer an", "Group sharing is disabled by the administrator" : "Die Gruppenfreigabe ist durch den Administrator deaktiviert", "Please specify a valid group" : "Bitte gib eine gültige Gruppe an", @@ -59,7 +62,7 @@ "The public link of %2$s for %1$s expired" : "Der öffentliche Link von %2$s für %1$s ist abgelaufen", "%2$s shared %1$s with you" : "%2$s hat %1$s mit dir geteilt", "%2$s removed the share for %1$s" : "%2$s hat die Freigabe für %1$s entfernt", - "Downloaded via public link" : "Runtergeladen mittels öffentlichen Link", + "Downloaded via public link" : "Heruntergeladen mittels öffentlichen Link", "Shared with %2$s" : "Geteilt mit %2$s", "Shared with %3$s by %2$s" : "Geteilt mit %3$s von %2$s", "Removed share for %2$s" : "Freigabe für %2$s entfernt", @@ -69,7 +72,7 @@ "Removed share of group %2$s" : "Freigabe für Gruppe %2$s entfernt", "%2$s removed share of group %3$s" : "%2$s hat die Freigabe für Gruppe %3$s entfernt", "Shared via link by %2$s" : "Geteilt mittels Link von %2$s", - "Shared via public link" : "Geteilt mittels öffentlichen Link", + "Shared via public link" : "Geteilt mittels öffentlichem Link", "Removed public link" : "Öffentlichen Link entfernt", "%2$s removed public link" : "%2$s hat den öffentlichen Link entfernt", "Public link expired" : "öffentlicher Link ist abgelaufen", @@ -78,7 +81,7 @@ "Shares" : "Freigaben", "Share API is disabled" : "Teilen-API ist deaktivert", "This share is password-protected" : "Diese Freigabe ist durch ein Passwort geschützt", - "The password is wrong. Try again." : "Bitte überprüfe Dein Passwort und versuche es erneut.", + "The password is wrong. Try again." : "Das Passwort ist falsch. Versuche es erneut.", "Password" : "Passwort", "No entries found in this folder" : "Keine Einträge in diesem Ordner gefunden", "Name" : "Name", @@ -97,6 +100,36 @@ "Upload files to %s" : "Dateien auf %s hochladen", "Select or drop files" : "Dateien auswählen oder hierher ziehen", "Uploading files…" : "Dateien werden hochgeladen...", - "Uploaded files:" : "Hochgeladene Dateien: " + "Uploaded files:" : "Hochgeladene Dateien: ", + "Server to server sharing is not enabled on this server" : "Das Server-zu-Server-Teilen ist auf diesem Server nicht aktiviert", + "The mountpoint name contains invalid characters." : "Der Name des Einhängepunktes enthält ungültige Zeichen.", + "Not allowed to create a federated share with the same user server" : "Teilen mit Nutzern auf dem selben Server via Federated-Cloud ist nicht erlaubt", + "Invalid or untrusted SSL certificate" : "Ungültiges oder nicht vertrauenswürdiges SSL-Zertifikat", + "Could not authenticate to remote share, password might be wrong" : "Die Authentifizierung an der entfernten Freigabe konnte nicht erfolgen, das Passwort könnte falsch sein", + "Storage not valid" : "Speicher ungültig", + "Couldn't add remote share" : "Entfernte Freigabe kann nicht hinzugefügt werden", + "Federated sharing" : "Federated-Sharing", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "Soll die entfernte Freigabe {name} von {owner}@{remote} hinzugefügt werden?", + "Remote share" : "Entfernte Freigabe", + "Remote share password" : "Passwort für die entfernte Freigabe", + "Cancel" : "Abbrechen", + "Add remote share" : "Entfernte Freigabe hinzufügen", + "No ownCloud installation (7 or higher) found at {remote}" : "Keine OwnCloud-Installation (7 oder höher) auf {remote} gefunden", + "Invalid ownCloud url" : "Ungültige OwnCloud-URL", + "You received \"/%2$s\" as a remote share from %1$s" : "Du hast \"/%2$s\" als entfernte Freigabe von %1$s erhalten", + "Accept" : "Akzeptieren", + "Decline" : "Ablehnen", + "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Teile mit mir über meine #ownCloud Federated-Cloud-ID, siehe %s", + "Share with me through my #ownCloud Federated Cloud ID" : "Teile mit mir über meine #ownCloud Federated-Cloud-ID", + "Federated Cloud Sharing" : "Federated-Cloud-Sharing", + "Open documentation" : "Dokumentation öffnen", + "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", + "Federated Cloud" : "Federated-Cloud", + "Your Federated Cloud ID:" : "Deine Federated-Cloud-ID:", + "Share it:" : "Teilen:", + "Add to your website" : "Zu deiner Webseite hinzufügen", + "Share with me via Nextcloud" : "Teile mit mir über Nextcloud", + "HTML Code:" : "HTML-Code:" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/de_DE.js b/apps/files_sharing/l10n/de_DE.js index 69e6692b927..3957208073f 100644 --- a/apps/files_sharing/l10n/de_DE.js +++ b/apps/files_sharing/l10n/de_DE.js @@ -18,9 +18,12 @@ OC.L10N.register( "Shared by" : "Geteilt von", "Sharing" : "Teilen", "Wrong share ID, share doesn't exist" : "Fehlerhafte Freigabe-ID, Freigabe existiert nicht", + "could not delete share" : "Freigabe konnte nicht gelöscht werden", "Could not delete share" : "Freigabe konnte nicht gelöscht werden", "Please specify a file or folder path" : "Bitte geben Sie eine Datei oder Ordner an", "Wrong path, file/folder doesn't exist" : "Falscher Pfad, Datei/Verzeichnis existiert nicht", + "Could not create share" : "Freigabe konnte nicht erstellt werden", + "invalid permissions" : "Ungültige Berechtigung", "Please specify a valid user" : "Bitte geben Sie einen gültigen Nutzer an", "Group sharing is disabled by the administrator" : "Die Gruppenfreigabe ist durch den Administrator deaktiviert", "Please specify a valid group" : "Bitte geben Sie eine gültige Gruppe an", @@ -99,6 +102,36 @@ OC.L10N.register( "Upload files to %s" : "Dateien auf %s hochladen", "Select or drop files" : "Dateien auswählen oder hierher ziehen", "Uploading files…" : "Dateien werden hochgeladen...", - "Uploaded files:" : "Hochgeladene Dateien: " + "Uploaded files:" : "Hochgeladene Dateien: ", + "Server to server sharing is not enabled on this server" : "Das Server-zu-Server-Teilen ist auf diesem Server nicht aktiviert", + "The mountpoint name contains invalid characters." : "Der Name des Einhängepunktes enthält ungültige Zeichen.", + "Not allowed to create a federated share with the same user server" : "Das Erstellen einer Federated Cloud Freigabe mit dem gleichen Benutzer-Server ist nicht erlaubt", + "Invalid or untrusted SSL certificate" : "Ungültiges oder nicht vertrauenswürdiges SSL-Zertifikat", + "Could not authenticate to remote share, password might be wrong" : "Die Authentifizierung an der entfernten Freigabe konnte nicht erfolgen, das Passwort könnte falsch sein", + "Storage not valid" : "Speicher ungültig", + "Couldn't add remote share" : "Entfernte Freigabe kann nicht hinzugefügt werden", + "Federated sharing" : "Federated-Sharing", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "Möchten Sie die entfernte Freigabe {name} von {owner}@{remote} hinzufügen? ", + "Remote share" : "Entfernte Freigabe", + "Remote share password" : "Passwort für die entfernte Freigabe", + "Cancel" : "Abbrechen", + "Add remote share" : "Entfernte Freigabe hinzufügen", + "No ownCloud installation (7 or higher) found at {remote}" : "Keine OwnCloud-Installation (7 oder höher) auf {remote} gefunden", + "Invalid ownCloud url" : "Ungültige OwnCloud-Adresse", + "You received \"/%2$s\" as a remote share from %1$s" : "Sie haben \"/%2$s\" als Remotefreigabe von %1$s erhalten", + "Accept" : "Akzeptieren", + "Decline" : "Ablehnen", + "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Teilen Sie mit mir über meine #ownCloud Federated-Cloud-ID, siehe %s", + "Share with me through my #ownCloud Federated Cloud ID" : "Teilen Sie mit mir über meine #ownCloud Federated-Cloud-ID", + "Federated Cloud Sharing" : "Federated-Cloud-Sharing", + "Open documentation" : "Dokumentation öffnen", + "Allow users on this server to send shares to other servers" : "Gestatten Sie Nutzern dieses Servers Freigaben von anderen Servern zu erhalten", + "Allow users on this server to receive shares from other servers" : "Erlauben Sie Nutzern dieses Servers Freigaben von anderen Servern zu erhalten", + "Federated Cloud" : "Federated-Cloud", + "Your Federated Cloud ID:" : "Deine Federated-Cloud-ID:", + "Share it:" : "Teilen:", + "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:" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/de_DE.json b/apps/files_sharing/l10n/de_DE.json index b568c1e5f66..7bb422577a2 100644 --- a/apps/files_sharing/l10n/de_DE.json +++ b/apps/files_sharing/l10n/de_DE.json @@ -16,9 +16,12 @@ "Shared by" : "Geteilt von", "Sharing" : "Teilen", "Wrong share ID, share doesn't exist" : "Fehlerhafte Freigabe-ID, Freigabe existiert nicht", + "could not delete share" : "Freigabe konnte nicht gelöscht werden", "Could not delete share" : "Freigabe konnte nicht gelöscht werden", "Please specify a file or folder path" : "Bitte geben Sie eine Datei oder Ordner an", "Wrong path, file/folder doesn't exist" : "Falscher Pfad, Datei/Verzeichnis existiert nicht", + "Could not create share" : "Freigabe konnte nicht erstellt werden", + "invalid permissions" : "Ungültige Berechtigung", "Please specify a valid user" : "Bitte geben Sie einen gültigen Nutzer an", "Group sharing is disabled by the administrator" : "Die Gruppenfreigabe ist durch den Administrator deaktiviert", "Please specify a valid group" : "Bitte geben Sie eine gültige Gruppe an", @@ -97,6 +100,36 @@ "Upload files to %s" : "Dateien auf %s hochladen", "Select or drop files" : "Dateien auswählen oder hierher ziehen", "Uploading files…" : "Dateien werden hochgeladen...", - "Uploaded files:" : "Hochgeladene Dateien: " + "Uploaded files:" : "Hochgeladene Dateien: ", + "Server to server sharing is not enabled on this server" : "Das Server-zu-Server-Teilen ist auf diesem Server nicht aktiviert", + "The mountpoint name contains invalid characters." : "Der Name des Einhängepunktes enthält ungültige Zeichen.", + "Not allowed to create a federated share with the same user server" : "Das Erstellen einer Federated Cloud Freigabe mit dem gleichen Benutzer-Server ist nicht erlaubt", + "Invalid or untrusted SSL certificate" : "Ungültiges oder nicht vertrauenswürdiges SSL-Zertifikat", + "Could not authenticate to remote share, password might be wrong" : "Die Authentifizierung an der entfernten Freigabe konnte nicht erfolgen, das Passwort könnte falsch sein", + "Storage not valid" : "Speicher ungültig", + "Couldn't add remote share" : "Entfernte Freigabe kann nicht hinzugefügt werden", + "Federated sharing" : "Federated-Sharing", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "Möchten Sie die entfernte Freigabe {name} von {owner}@{remote} hinzufügen? ", + "Remote share" : "Entfernte Freigabe", + "Remote share password" : "Passwort für die entfernte Freigabe", + "Cancel" : "Abbrechen", + "Add remote share" : "Entfernte Freigabe hinzufügen", + "No ownCloud installation (7 or higher) found at {remote}" : "Keine OwnCloud-Installation (7 oder höher) auf {remote} gefunden", + "Invalid ownCloud url" : "Ungültige OwnCloud-Adresse", + "You received \"/%2$s\" as a remote share from %1$s" : "Sie haben \"/%2$s\" als Remotefreigabe von %1$s erhalten", + "Accept" : "Akzeptieren", + "Decline" : "Ablehnen", + "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Teilen Sie mit mir über meine #ownCloud Federated-Cloud-ID, siehe %s", + "Share with me through my #ownCloud Federated Cloud ID" : "Teilen Sie mit mir über meine #ownCloud Federated-Cloud-ID", + "Federated Cloud Sharing" : "Federated-Cloud-Sharing", + "Open documentation" : "Dokumentation öffnen", + "Allow users on this server to send shares to other servers" : "Gestatten Sie Nutzern dieses Servers Freigaben von anderen Servern zu erhalten", + "Allow users on this server to receive shares from other servers" : "Erlauben Sie Nutzern dieses Servers Freigaben von anderen Servern zu erhalten", + "Federated Cloud" : "Federated-Cloud", + "Your Federated Cloud ID:" : "Deine Federated-Cloud-ID:", + "Share it:" : "Teilen:", + "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:" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/fr.js b/apps/files_sharing/l10n/fr.js index 695c9b30525..19c27c76441 100644 --- a/apps/files_sharing/l10n/fr.js +++ b/apps/files_sharing/l10n/fr.js @@ -18,9 +18,12 @@ OC.L10N.register( "Shared by" : "Partagé par", "Sharing" : "Partage", "Wrong share ID, share doesn't exist" : "Mauvais ID de partage, le partage n'existe pas", + "could not delete share" : "impossible de supprimer le partage", "Could not delete share" : "Impossible de supprimer le partage", "Please specify a file or folder path" : "Veuillez spécifier un fichier ou dossier", "Wrong path, file/folder doesn't exist" : "Mauvais chemin, Le fichier/dossier n'existe pas", + "Could not create share" : "Impossible de créer le partage", + "invalid permissions" : "permissions invalides", "Please specify a valid user" : "Veuillez entrer un utilisateur valide", "Group sharing is disabled by the administrator" : "Le partage de groupe a été désactivé par l'administrateur", "Please specify a valid group" : "Veuillez entrer un groupe valide", diff --git a/apps/files_sharing/l10n/fr.json b/apps/files_sharing/l10n/fr.json index 3a63c45100d..7e5a407e892 100644 --- a/apps/files_sharing/l10n/fr.json +++ b/apps/files_sharing/l10n/fr.json @@ -16,9 +16,12 @@ "Shared by" : "Partagé par", "Sharing" : "Partage", "Wrong share ID, share doesn't exist" : "Mauvais ID de partage, le partage n'existe pas", + "could not delete share" : "impossible de supprimer le partage", "Could not delete share" : "Impossible de supprimer le partage", "Please specify a file or folder path" : "Veuillez spécifier un fichier ou dossier", "Wrong path, file/folder doesn't exist" : "Mauvais chemin, Le fichier/dossier n'existe pas", + "Could not create share" : "Impossible de créer le partage", + "invalid permissions" : "permissions invalides", "Please specify a valid user" : "Veuillez entrer un utilisateur valide", "Group sharing is disabled by the administrator" : "Le partage de groupe a été désactivé par l'administrateur", "Please specify a valid group" : "Veuillez entrer un groupe valide", diff --git a/apps/files_sharing/l10n/id.js b/apps/files_sharing/l10n/id.js index 99f58652505..27cdcd910ab 100644 --- a/apps/files_sharing/l10n/id.js +++ b/apps/files_sharing/l10n/id.js @@ -18,9 +18,12 @@ OC.L10N.register( "Shared by" : "Dibagikan oleh", "Sharing" : "Berbagi", "Wrong share ID, share doesn't exist" : "ID pembagian salah, tidak ada yang bisa dibagi", + "could not delete share" : "tidak dapat menghapus pembagian", "Could not delete share" : "Tidak dapat menghapus pembagian", "Please specify a file or folder path" : "Tentukan berkas atau folder", "Wrong path, file/folder doesn't exist" : "Salah path, berkas/folder tidak ada", + "Could not create share" : "Tidak dapat membuat pembagian", + "invalid permissions" : "izin tidak sah", "Please specify a valid user" : "Tentukan pengguna yang valid", "Group sharing is disabled by the administrator" : "Berbagi grup dinonaktifkan oleh administrator", "Please specify a valid group" : "Tentukan grup yang valid", @@ -99,6 +102,36 @@ OC.L10N.register( "Upload files to %s" : "Unggah berkas ke %s", "Select or drop files" : "Pilih atau drop berkas", "Uploading files…" : "Mengunggah berkas...", - "Uploaded files:" : "Berkas terunggah:" + "Uploaded files:" : "Berkas terunggah:", + "Server to server sharing is not enabled on this server" : "Berbagi server ke server tidak diaktifkan pada server ini", + "The mountpoint name contains invalid characters." : "Nama mount point berisi karakter yang tidak sah.", + "Not allowed to create a federated share with the same user server" : "Tidak diizinkan membuat pembagian terfederasi dengan server pengguna yang sama", + "Invalid or untrusted SSL certificate" : "Sertifikat SSL tidak sah atau tidak terpercaya", + "Could not authenticate to remote share, password might be wrong" : "Tidak dapat mengautentikasi berbagi remote, kata sandi mungkin salah", + "Storage not valid" : "Penyimpanan tidak sah", + "Couldn't add remote share" : "Tidak dapat menambahkan berbagi remote", + "Federated sharing" : "Pembagian terfederasi", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "Apakah Anda ingin menambahkan berbagi remote {name} dari {owner}@{remote}?", + "Remote share" : "Berbagi remote", + "Remote share password" : "Sandi berbagi remote", + "Cancel" : "Batalkan", + "Add remote share" : "Tambah berbagi remote", + "No ownCloud installation (7 or higher) found at {remote}" : "Tidak ditemukan instalasi ownCloud (7 atau lebih tinggi) pada {remote}", + "Invalid ownCloud url" : "URL ownCloud tidak sah", + "You received \"/%2$s\" as a remote share from %1$s" : "Anda menerima \"/%2$s\" sebagai berbagi remote dari %1$s", + "Accept" : "Terima", + "Decline" : "Tolak", + "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Bagikan pada saya melalui #ownCloud Federated Cloud ID saya, lihat %s", + "Share with me through my #ownCloud Federated Cloud ID" : "Bagikan pada saya melalui #ownCloud Federated Cloud ID saya", + "Federated Cloud Sharing" : "Pembagian Awan Terfederasi", + "Open documentation" : "Buka dokumentasi", + "Allow users on this server to send shares to other servers" : "Izinkan para pengguna di server ini untuk mengirimkan berbagi ke server lainnya.", + "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" : "Awan Terfederasi", + "Your Federated Cloud ID:" : "ID Awan Terfederasi Anda:", + "Share it:" : "Bagikan:", + "Add to your website" : "Tambahkan pada situs web Anda", + "Share with me via Nextcloud" : "Bagikan pada saya via Nextcloud", + "HTML Code:" : "Kode HTML:" }, "nplurals=1; plural=0;"); diff --git a/apps/files_sharing/l10n/id.json b/apps/files_sharing/l10n/id.json index d51c0eb73bb..71b6500c136 100644 --- a/apps/files_sharing/l10n/id.json +++ b/apps/files_sharing/l10n/id.json @@ -16,9 +16,12 @@ "Shared by" : "Dibagikan oleh", "Sharing" : "Berbagi", "Wrong share ID, share doesn't exist" : "ID pembagian salah, tidak ada yang bisa dibagi", + "could not delete share" : "tidak dapat menghapus pembagian", "Could not delete share" : "Tidak dapat menghapus pembagian", "Please specify a file or folder path" : "Tentukan berkas atau folder", "Wrong path, file/folder doesn't exist" : "Salah path, berkas/folder tidak ada", + "Could not create share" : "Tidak dapat membuat pembagian", + "invalid permissions" : "izin tidak sah", "Please specify a valid user" : "Tentukan pengguna yang valid", "Group sharing is disabled by the administrator" : "Berbagi grup dinonaktifkan oleh administrator", "Please specify a valid group" : "Tentukan grup yang valid", @@ -97,6 +100,36 @@ "Upload files to %s" : "Unggah berkas ke %s", "Select or drop files" : "Pilih atau drop berkas", "Uploading files…" : "Mengunggah berkas...", - "Uploaded files:" : "Berkas terunggah:" + "Uploaded files:" : "Berkas terunggah:", + "Server to server sharing is not enabled on this server" : "Berbagi server ke server tidak diaktifkan pada server ini", + "The mountpoint name contains invalid characters." : "Nama mount point berisi karakter yang tidak sah.", + "Not allowed to create a federated share with the same user server" : "Tidak diizinkan membuat pembagian terfederasi dengan server pengguna yang sama", + "Invalid or untrusted SSL certificate" : "Sertifikat SSL tidak sah atau tidak terpercaya", + "Could not authenticate to remote share, password might be wrong" : "Tidak dapat mengautentikasi berbagi remote, kata sandi mungkin salah", + "Storage not valid" : "Penyimpanan tidak sah", + "Couldn't add remote share" : "Tidak dapat menambahkan berbagi remote", + "Federated sharing" : "Pembagian terfederasi", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "Apakah Anda ingin menambahkan berbagi remote {name} dari {owner}@{remote}?", + "Remote share" : "Berbagi remote", + "Remote share password" : "Sandi berbagi remote", + "Cancel" : "Batalkan", + "Add remote share" : "Tambah berbagi remote", + "No ownCloud installation (7 or higher) found at {remote}" : "Tidak ditemukan instalasi ownCloud (7 atau lebih tinggi) pada {remote}", + "Invalid ownCloud url" : "URL ownCloud tidak sah", + "You received \"/%2$s\" as a remote share from %1$s" : "Anda menerima \"/%2$s\" sebagai berbagi remote dari %1$s", + "Accept" : "Terima", + "Decline" : "Tolak", + "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Bagikan pada saya melalui #ownCloud Federated Cloud ID saya, lihat %s", + "Share with me through my #ownCloud Federated Cloud ID" : "Bagikan pada saya melalui #ownCloud Federated Cloud ID saya", + "Federated Cloud Sharing" : "Pembagian Awan Terfederasi", + "Open documentation" : "Buka dokumentasi", + "Allow users on this server to send shares to other servers" : "Izinkan para pengguna di server ini untuk mengirimkan berbagi ke server lainnya.", + "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" : "Awan Terfederasi", + "Your Federated Cloud ID:" : "ID Awan Terfederasi Anda:", + "Share it:" : "Bagikan:", + "Add to your website" : "Tambahkan pada situs web Anda", + "Share with me via Nextcloud" : "Bagikan pada saya via Nextcloud", + "HTML Code:" : "Kode HTML:" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/is.js b/apps/files_sharing/l10n/is.js index edd18ec47be..27afc0d4c07 100644 --- a/apps/files_sharing/l10n/is.js +++ b/apps/files_sharing/l10n/is.js @@ -11,16 +11,33 @@ OC.L10N.register( "No shared links" : "Engir sameignartenglar", "Files and folders you share by link will show up here" : "Skrár og möppur sem þú deilir með tenglum birtast hér", "You can upload into this folder" : "Þú getur sent inn skrár í þessa möppu", + "No compatible server found at {remote}" : "Enginn samhæfður vefþjónn fannst á {remote}", + "Invalid server URL" : "Ógild URI-slóð vefþjóns", + "Failed to add the public link to your Nextcloud" : "Mistókst að bæta opinberum tengli í þitt eigið Nextcloud", + "No expiration date set" : "Engin dagsetning fyrir gildistíma er sett", "Shared by" : "Deilt af", "Sharing" : "Deiling", + "Wrong share ID, share doesn't exist" : "Rangt auðkenni sameignar, sameign er ekki til", + "could not delete share" : "tókst ekki að eyða sameign", "Could not delete share" : "Tókst ekki að eyða sameign", "Please specify a file or folder path" : "Tiltaktu skrá eða slóð á möppu", + "Wrong path, file/folder doesn't exist" : "Röng slóð, skrá/mappa er ekki til", + "Could not create share" : "Ekki tókst að búa til sameign", + "invalid permissions" : "Ógildar aðgangsheimildir", "Please specify a valid user" : "Settu inn gilt notandanafn", "Group sharing is disabled by the administrator" : "Deiling innan hóps hefur verið gerð óvirk af kerfisstjóra.", "Please specify a valid group" : "Settu inn gildan hóp", + "Public link sharing is disabled by the administrator" : "Deiling opinberra sameignartengla hefur verið gerð óvirk af kerfisstjóra.", + "Public upload disabled by the administrator" : "Opinber innsending hefur verið gerð óvirk af kerfisstjóra.", + "Public upload is only possible for publicly shared folders" : "Opinber innsending er einungis möguleg í möppur sem er deilt opinberlega", "Invalid date, date format must be YYYY-MM-DD" : "Ógild dagsetning, dagsetningasniðið verður að vera ÁÁÁÁ-MM-DD", + "Sharing %s failed because the back end does not allow shares from type %s" : "Deiling %s mistókst, því bakvinnslukerfið leyfir ekki sameignir af gerðinni %s", "Unknown share type" : "Óþekkt tegund sameignar", "Not a directory" : "Er ekki mappa", + "Could not lock path" : "Gat ekki læst slóð", + "Wrong or no update parameter given" : "Rangt eða ekkert uppfærsluviðfang gefið", + "Can't change permissions for public share links" : "Ekki tókst að breyta aðgangsheimildum fyrir opinbera deilingartengla", + "Cannot increase permissions" : "Get ekki aukið aðgangsheimildir", "A file or folder has been <strong>shared</strong>" : "Skjali eða möppu hefur verið <strong>deilt</strong>", "A file or folder was shared from <strong>another server</strong>" : "Skjali eð möppu hefur verið deilt <strong>frá öðrum þjóni</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Skrá eða mappa í almenningsaðgangi var <strong>sótt</strong>", @@ -64,6 +81,7 @@ OC.L10N.register( "Public link of %2$s expired" : "Almenningstengill %2$s er útrunninn", "Shared by %2$s" : "Deilt af %2$s", "Shares" : "Sameignir", + "Share API is disabled" : "Deilingar-API er óvirkt", "This share is password-protected" : "Þessi sameign er varin með lykilorði", "The password is wrong. Try again." : "Lykilorðið er rangt. Reyndu aftur.", "Password" : "Lykilorð", @@ -84,6 +102,36 @@ OC.L10N.register( "Upload files to %s" : "Senda inn skrár á %s", "Select or drop files" : "Veldu eða slepptu skrám", "Uploading files…" : "Sendi inn skrár…", - "Uploaded files:" : "Innsendar skrár:" + "Uploaded files:" : "Innsendar skrár:", + "Server to server sharing is not enabled on this server" : "Deiling frá þjóni til þjóns er ekki virk á þessum þjóni", + "The mountpoint name contains invalid characters." : "Heiti tengipunktsins inniheldur ógilda stafi.", + "Not allowed to create a federated share with the same user server" : "Ekki er heimilt að búa til skýjasambandssameign með sama notendaþjóni", + "Invalid or untrusted SSL certificate" : "Ógilt eða vantreyst SSL-skilríki", + "Could not authenticate to remote share, password might be wrong" : "Gat ekki auðkennt á fjartengdri sameign, lykilorð gæti verið rangt", + "Storage not valid" : "Geymslan er ekki gild", + "Couldn't add remote share" : "Gat ekki bætt við fjartengdri sameign", + "Federated sharing" : "Deiling milli þjóna (skýjasambandssameign)", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "Viltu bæta við fjartengdri sameign {name} frá {owner}@{remote}?", + "Remote share" : "Fjartengd sameign", + "Remote share password" : "Lykilorð fjartengdrar sameignar", + "Cancel" : "Hætta við", + "Add remote share" : "Bæta við fjartengdri sameign", + "No ownCloud installation (7 or higher) found at {remote}" : "Engin ownCloud uppsetning (útgáfa 7 eða nýrri) fannst á {remote}", + "Invalid ownCloud url" : "Ógild ownCloud-slóð", + "You received \"/%2$s\" as a remote share from %1$s" : "Þú tókst við \"/%2$s\" sem fjartengdri sameign frá %1$s", + "Accept" : "Samþykkja", + "Decline" : "Hafna", + "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Deila með mér í gegnum víðværa skýjasambandsauðkennið mitt #ownCloud Federated Cloud ID, sjá %s", + "Share with me through my #ownCloud Federated Cloud ID" : "Deila með mér í gegnum víðværa skýjasambandsauðkennið mitt #ownCloud Federated Cloud ID", + "Federated Cloud Sharing" : "Deiling með skýjasambandi", + "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", + "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:" }, "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/apps/files_sharing/l10n/is.json b/apps/files_sharing/l10n/is.json index 6a64dd5f292..a35988cccb5 100644 --- a/apps/files_sharing/l10n/is.json +++ b/apps/files_sharing/l10n/is.json @@ -9,16 +9,33 @@ "No shared links" : "Engir sameignartenglar", "Files and folders you share by link will show up here" : "Skrár og möppur sem þú deilir með tenglum birtast hér", "You can upload into this folder" : "Þú getur sent inn skrár í þessa möppu", + "No compatible server found at {remote}" : "Enginn samhæfður vefþjónn fannst á {remote}", + "Invalid server URL" : "Ógild URI-slóð vefþjóns", + "Failed to add the public link to your Nextcloud" : "Mistókst að bæta opinberum tengli í þitt eigið Nextcloud", + "No expiration date set" : "Engin dagsetning fyrir gildistíma er sett", "Shared by" : "Deilt af", "Sharing" : "Deiling", + "Wrong share ID, share doesn't exist" : "Rangt auðkenni sameignar, sameign er ekki til", + "could not delete share" : "tókst ekki að eyða sameign", "Could not delete share" : "Tókst ekki að eyða sameign", "Please specify a file or folder path" : "Tiltaktu skrá eða slóð á möppu", + "Wrong path, file/folder doesn't exist" : "Röng slóð, skrá/mappa er ekki til", + "Could not create share" : "Ekki tókst að búa til sameign", + "invalid permissions" : "Ógildar aðgangsheimildir", "Please specify a valid user" : "Settu inn gilt notandanafn", "Group sharing is disabled by the administrator" : "Deiling innan hóps hefur verið gerð óvirk af kerfisstjóra.", "Please specify a valid group" : "Settu inn gildan hóp", + "Public link sharing is disabled by the administrator" : "Deiling opinberra sameignartengla hefur verið gerð óvirk af kerfisstjóra.", + "Public upload disabled by the administrator" : "Opinber innsending hefur verið gerð óvirk af kerfisstjóra.", + "Public upload is only possible for publicly shared folders" : "Opinber innsending er einungis möguleg í möppur sem er deilt opinberlega", "Invalid date, date format must be YYYY-MM-DD" : "Ógild dagsetning, dagsetningasniðið verður að vera ÁÁÁÁ-MM-DD", + "Sharing %s failed because the back end does not allow shares from type %s" : "Deiling %s mistókst, því bakvinnslukerfið leyfir ekki sameignir af gerðinni %s", "Unknown share type" : "Óþekkt tegund sameignar", "Not a directory" : "Er ekki mappa", + "Could not lock path" : "Gat ekki læst slóð", + "Wrong or no update parameter given" : "Rangt eða ekkert uppfærsluviðfang gefið", + "Can't change permissions for public share links" : "Ekki tókst að breyta aðgangsheimildum fyrir opinbera deilingartengla", + "Cannot increase permissions" : "Get ekki aukið aðgangsheimildir", "A file or folder has been <strong>shared</strong>" : "Skjali eða möppu hefur verið <strong>deilt</strong>", "A file or folder was shared from <strong>another server</strong>" : "Skjali eð möppu hefur verið deilt <strong>frá öðrum þjóni</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Skrá eða mappa í almenningsaðgangi var <strong>sótt</strong>", @@ -62,6 +79,7 @@ "Public link of %2$s expired" : "Almenningstengill %2$s er útrunninn", "Shared by %2$s" : "Deilt af %2$s", "Shares" : "Sameignir", + "Share API is disabled" : "Deilingar-API er óvirkt", "This share is password-protected" : "Þessi sameign er varin með lykilorði", "The password is wrong. Try again." : "Lykilorðið er rangt. Reyndu aftur.", "Password" : "Lykilorð", @@ -82,6 +100,36 @@ "Upload files to %s" : "Senda inn skrár á %s", "Select or drop files" : "Veldu eða slepptu skrám", "Uploading files…" : "Sendi inn skrár…", - "Uploaded files:" : "Innsendar skrár:" + "Uploaded files:" : "Innsendar skrár:", + "Server to server sharing is not enabled on this server" : "Deiling frá þjóni til þjóns er ekki virk á þessum þjóni", + "The mountpoint name contains invalid characters." : "Heiti tengipunktsins inniheldur ógilda stafi.", + "Not allowed to create a federated share with the same user server" : "Ekki er heimilt að búa til skýjasambandssameign með sama notendaþjóni", + "Invalid or untrusted SSL certificate" : "Ógilt eða vantreyst SSL-skilríki", + "Could not authenticate to remote share, password might be wrong" : "Gat ekki auðkennt á fjartengdri sameign, lykilorð gæti verið rangt", + "Storage not valid" : "Geymslan er ekki gild", + "Couldn't add remote share" : "Gat ekki bætt við fjartengdri sameign", + "Federated sharing" : "Deiling milli þjóna (skýjasambandssameign)", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "Viltu bæta við fjartengdri sameign {name} frá {owner}@{remote}?", + "Remote share" : "Fjartengd sameign", + "Remote share password" : "Lykilorð fjartengdrar sameignar", + "Cancel" : "Hætta við", + "Add remote share" : "Bæta við fjartengdri sameign", + "No ownCloud installation (7 or higher) found at {remote}" : "Engin ownCloud uppsetning (útgáfa 7 eða nýrri) fannst á {remote}", + "Invalid ownCloud url" : "Ógild ownCloud-slóð", + "You received \"/%2$s\" as a remote share from %1$s" : "Þú tókst við \"/%2$s\" sem fjartengdri sameign frá %1$s", + "Accept" : "Samþykkja", + "Decline" : "Hafna", + "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Deila með mér í gegnum víðværa skýjasambandsauðkennið mitt #ownCloud Federated Cloud ID, sjá %s", + "Share with me through my #ownCloud Federated Cloud ID" : "Deila með mér í gegnum víðværa skýjasambandsauðkennið mitt #ownCloud Federated Cloud ID", + "Federated Cloud Sharing" : "Deiling með skýjasambandi", + "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", + "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:" },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/it.js b/apps/files_sharing/l10n/it.js index 866e9b86705..c228fcce99b 100644 --- a/apps/files_sharing/l10n/it.js +++ b/apps/files_sharing/l10n/it.js @@ -18,9 +18,12 @@ OC.L10N.register( "Shared by" : "Condiviso da", "Sharing" : "Condivisione", "Wrong share ID, share doesn't exist" : "ID di condivisione errato, la condivisione non esiste", + "could not delete share" : "impossibile eliminare la condivisione", "Could not delete share" : "impossibile eliminare la condivisione", "Please specify a file or folder path" : "Specifica un percorso di un file o di una cartella", "Wrong path, file/folder doesn't exist" : "Percorso errato, file/cartella inesistente", + "Could not create share" : "Impossibile creare la condivisione", + "invalid permissions" : "permessi non validi", "Please specify a valid user" : "Specifica un utente valido", "Group sharing is disabled by the administrator" : "La condivisione di gruppo è disabilitata dall'amministratore", "Please specify a valid group" : "Specifica un gruppo valido", @@ -99,6 +102,33 @@ OC.L10N.register( "Upload files to %s" : "Carica file su %s", "Select or drop files" : "Seleziona o deseleziona file", "Uploading files…" : "Caricamento file in corso...", - "Uploaded files:" : "File caricati:" + "Uploaded files:" : "File caricati:", + "Server to server sharing is not enabled on this server" : "La condivisione tra server non è abilitata su questo server", + "The mountpoint name contains invalid characters." : "Il nome del punto di mount contiene caratteri non validi.", + "Not allowed to create a federated share with the same user server" : "Non è consentito creare una condivisione federata con lo stesso server dell'utente", + "Invalid or untrusted SSL certificate" : "Certificato SSL non valido o non attendibile", + "Storage not valid" : "Archiviazione non valida", + "Couldn't add remote share" : "Impossibile aggiungere la condivisione remota", + "Federated sharing" : "Condivisione federata", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "Vuoi aggiungere la condivisione remota {name} da {owner}@{remote}?", + "Remote share" : "Condivisione remota", + "Remote share password" : "Password della condivisione remota", + "Cancel" : "Annulla", + "Add remote share" : "Aggiungi condivisione remota", + "No ownCloud installation (7 or higher) found at {remote}" : "Nessuna installazione di ownCloud (7 o superiore) trovata su {remote}", + "Invalid ownCloud url" : "URL di ownCloud non valido", + "You received \"/%2$s\" as a remote share from %1$s" : "Hai ricevuto \"/%2$s\" come condivisione remota da %1$s", + "Accept" : "Accetta", + "Decline" : "Rifiuta", + "Federated Cloud Sharing" : "Condivisione cloud federata", + "Open documentation" : "Apri la documentazione", + "Allow users on this server to send shares to other servers" : "Consenti agli utenti su questo server di inviare condivisioni ad altri server", + "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:" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/it.json b/apps/files_sharing/l10n/it.json index 733c604bfc5..6c3d17593fe 100644 --- a/apps/files_sharing/l10n/it.json +++ b/apps/files_sharing/l10n/it.json @@ -16,9 +16,12 @@ "Shared by" : "Condiviso da", "Sharing" : "Condivisione", "Wrong share ID, share doesn't exist" : "ID di condivisione errato, la condivisione non esiste", + "could not delete share" : "impossibile eliminare la condivisione", "Could not delete share" : "impossibile eliminare la condivisione", "Please specify a file or folder path" : "Specifica un percorso di un file o di una cartella", "Wrong path, file/folder doesn't exist" : "Percorso errato, file/cartella inesistente", + "Could not create share" : "Impossibile creare la condivisione", + "invalid permissions" : "permessi non validi", "Please specify a valid user" : "Specifica un utente valido", "Group sharing is disabled by the administrator" : "La condivisione di gruppo è disabilitata dall'amministratore", "Please specify a valid group" : "Specifica un gruppo valido", @@ -97,6 +100,33 @@ "Upload files to %s" : "Carica file su %s", "Select or drop files" : "Seleziona o deseleziona file", "Uploading files…" : "Caricamento file in corso...", - "Uploaded files:" : "File caricati:" + "Uploaded files:" : "File caricati:", + "Server to server sharing is not enabled on this server" : "La condivisione tra server non è abilitata su questo server", + "The mountpoint name contains invalid characters." : "Il nome del punto di mount contiene caratteri non validi.", + "Not allowed to create a federated share with the same user server" : "Non è consentito creare una condivisione federata con lo stesso server dell'utente", + "Invalid or untrusted SSL certificate" : "Certificato SSL non valido o non attendibile", + "Storage not valid" : "Archiviazione non valida", + "Couldn't add remote share" : "Impossibile aggiungere la condivisione remota", + "Federated sharing" : "Condivisione federata", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "Vuoi aggiungere la condivisione remota {name} da {owner}@{remote}?", + "Remote share" : "Condivisione remota", + "Remote share password" : "Password della condivisione remota", + "Cancel" : "Annulla", + "Add remote share" : "Aggiungi condivisione remota", + "No ownCloud installation (7 or higher) found at {remote}" : "Nessuna installazione di ownCloud (7 o superiore) trovata su {remote}", + "Invalid ownCloud url" : "URL di ownCloud non valido", + "You received \"/%2$s\" as a remote share from %1$s" : "Hai ricevuto \"/%2$s\" come condivisione remota da %1$s", + "Accept" : "Accetta", + "Decline" : "Rifiuta", + "Federated Cloud Sharing" : "Condivisione cloud federata", + "Open documentation" : "Apri la documentazione", + "Allow users on this server to send shares to other servers" : "Consenti agli utenti su questo server di inviare condivisioni ad altri server", + "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:" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/nl.js b/apps/files_sharing/l10n/nl.js index 05322861217..a14d2f13e17 100644 --- a/apps/files_sharing/l10n/nl.js +++ b/apps/files_sharing/l10n/nl.js @@ -18,9 +18,12 @@ OC.L10N.register( "Shared by" : "Gedeeld door", "Sharing" : "Delen", "Wrong share ID, share doesn't exist" : "Onjuist deel-ID, de share bestaat niet", + "could not delete share" : "Kon share niet verwijderen", "Could not delete share" : "Kon share niet verwijderen", "Please specify a file or folder path" : "Geef een bestand of pad van een map op", "Wrong path, file/folder doesn't exist" : "Onjuist pad, bestand/map bestaat niet", + "Could not create share" : "Kon share niet aanmaken", + "invalid permissions" : "Ongeldige rechten", "Please specify a valid user" : "Geef een geldige gebruiker op", "Group sharing is disabled by the administrator" : "Delen voor groepen is uitgeschakeld door de beheerder", "Please specify a valid group" : "Geef een geldige groep op", diff --git a/apps/files_sharing/l10n/nl.json b/apps/files_sharing/l10n/nl.json index 788feb3fd99..9238fb5ba2a 100644 --- a/apps/files_sharing/l10n/nl.json +++ b/apps/files_sharing/l10n/nl.json @@ -16,9 +16,12 @@ "Shared by" : "Gedeeld door", "Sharing" : "Delen", "Wrong share ID, share doesn't exist" : "Onjuist deel-ID, de share bestaat niet", + "could not delete share" : "Kon share niet verwijderen", "Could not delete share" : "Kon share niet verwijderen", "Please specify a file or folder path" : "Geef een bestand of pad van een map op", "Wrong path, file/folder doesn't exist" : "Onjuist pad, bestand/map bestaat niet", + "Could not create share" : "Kon share niet aanmaken", + "invalid permissions" : "Ongeldige rechten", "Please specify a valid user" : "Geef een geldige gebruiker op", "Group sharing is disabled by the administrator" : "Delen voor groepen is uitgeschakeld door de beheerder", "Please specify a valid group" : "Geef een geldige groep op", diff --git a/apps/files_sharing/l10n/pt_BR.js b/apps/files_sharing/l10n/pt_BR.js index 744595576e4..ec55afbe87d 100644 --- a/apps/files_sharing/l10n/pt_BR.js +++ b/apps/files_sharing/l10n/pt_BR.js @@ -18,9 +18,12 @@ OC.L10N.register( "Shared by" : "Compartilhado por", "Sharing" : "Compartilhamento", "Wrong share ID, share doesn't exist" : "ID de compartilhamento errado, o compartilhamento não existe", + "could not delete share" : "não foi possível excluir o compartilhamento", "Could not delete share" : "Não foi possível eliminar o compartilhamento", "Please specify a file or folder path" : "Por favor especifique um arquivo ou caminho", "Wrong path, file/folder doesn't exist" : "Caminho errado, arquivo/pasta não existe", + "Could not create share" : "Não foi possível criar o compartilhamento", + "invalid permissions" : "permissões inválidas", "Please specify a valid user" : "Por favor especifique um usuário válido", "Group sharing is disabled by the administrator" : "Grupo de compartilhamento foi desabilitado pelo administrador", "Please specify a valid group" : "Por favor especifique um grupo válido", @@ -99,6 +102,11 @@ OC.L10N.register( "Upload files to %s" : "Carregar arquivos para %s", "Select or drop files" : "Selecione e solte arquivos", "Uploading files…" : "Carregando arquivos...", - "Uploaded files:" : "Arquivos carregados:" + "Uploaded files:" : "Arquivos carregados:", + "Storage not valid" : "Armazenamento inválido", + "Remote share" : "Compartilhamento remoto", + "Cancel" : "Cancelar", + "Accept" : "Aceitar", + "Decline" : "Rejeitar" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/files_sharing/l10n/pt_BR.json b/apps/files_sharing/l10n/pt_BR.json index d45445a0adc..921096003d5 100644 --- a/apps/files_sharing/l10n/pt_BR.json +++ b/apps/files_sharing/l10n/pt_BR.json @@ -16,9 +16,12 @@ "Shared by" : "Compartilhado por", "Sharing" : "Compartilhamento", "Wrong share ID, share doesn't exist" : "ID de compartilhamento errado, o compartilhamento não existe", + "could not delete share" : "não foi possível excluir o compartilhamento", "Could not delete share" : "Não foi possível eliminar o compartilhamento", "Please specify a file or folder path" : "Por favor especifique um arquivo ou caminho", "Wrong path, file/folder doesn't exist" : "Caminho errado, arquivo/pasta não existe", + "Could not create share" : "Não foi possível criar o compartilhamento", + "invalid permissions" : "permissões inválidas", "Please specify a valid user" : "Por favor especifique um usuário válido", "Group sharing is disabled by the administrator" : "Grupo de compartilhamento foi desabilitado pelo administrador", "Please specify a valid group" : "Por favor especifique um grupo válido", @@ -97,6 +100,11 @@ "Upload files to %s" : "Carregar arquivos para %s", "Select or drop files" : "Selecione e solte arquivos", "Uploading files…" : "Carregando arquivos...", - "Uploaded files:" : "Arquivos carregados:" + "Uploaded files:" : "Arquivos carregados:", + "Storage not valid" : "Armazenamento inválido", + "Remote share" : "Compartilhamento remoto", + "Cancel" : "Cancelar", + "Accept" : "Aceitar", + "Decline" : "Rejeitar" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/ru.js b/apps/files_sharing/l10n/ru.js index 14d55f598f0..789ad16e840 100644 --- a/apps/files_sharing/l10n/ru.js +++ b/apps/files_sharing/l10n/ru.js @@ -18,9 +18,12 @@ OC.L10N.register( "Shared by" : "Поделился", "Sharing" : "Общий доступ", "Wrong share ID, share doesn't exist" : "Неверный идентификатор публикации, публикация не существует", + "could not delete share" : "Не удалось удалить общий ресурс", "Could not delete share" : "Не удалось удалить публикацию", "Please specify a file or folder path" : "Пожалуйста, укажите путь к файлу или каталогу", "Wrong path, file/folder doesn't exist" : "Неверный путь, файл/каталог не существует", + "Could not create share" : "Не удалось создать общий ресурс", + "invalid permissions" : "Неверные права", "Please specify a valid user" : "Пожалуйста, укажите допустимого пользователя", "Group sharing is disabled by the administrator" : "Общий доступ для групп отключён администратором", "Please specify a valid group" : "Пожалуйста, укажите допустимую группу", diff --git a/apps/files_sharing/l10n/ru.json b/apps/files_sharing/l10n/ru.json index a9dd1314aa1..4ff08682484 100644 --- a/apps/files_sharing/l10n/ru.json +++ b/apps/files_sharing/l10n/ru.json @@ -16,9 +16,12 @@ "Shared by" : "Поделился", "Sharing" : "Общий доступ", "Wrong share ID, share doesn't exist" : "Неверный идентификатор публикации, публикация не существует", + "could not delete share" : "Не удалось удалить общий ресурс", "Could not delete share" : "Не удалось удалить публикацию", "Please specify a file or folder path" : "Пожалуйста, укажите путь к файлу или каталогу", "Wrong path, file/folder doesn't exist" : "Неверный путь, файл/каталог не существует", + "Could not create share" : "Не удалось создать общий ресурс", + "invalid permissions" : "Неверные права", "Please specify a valid user" : "Пожалуйста, укажите допустимого пользователя", "Group sharing is disabled by the administrator" : "Общий доступ для групп отключён администратором", "Please specify a valid group" : "Пожалуйста, укажите допустимую группу", diff --git a/apps/files_sharing/lib/API/Remote.php b/apps/files_sharing/lib/API/Remote.php index c641899da93..a522f923a39 100644 --- a/apps/files_sharing/lib/API/Remote.php +++ b/apps/files_sharing/lib/API/Remote.php @@ -45,7 +45,7 @@ class Remote { \OC::$server->getDatabaseConnection(), Filesystem::getMountManager(), Filesystem::getLoader(), - \OC::$server->getHTTPHelper(), + \OC::$server->getHTTPClientService(), \OC::$server->getNotificationManager(), $discoveryManager, \OC_User::getUser() @@ -69,7 +69,7 @@ class Remote { \OC::$server->getDatabaseConnection(), Filesystem::getMountManager(), Filesystem::getLoader(), - \OC::$server->getHTTPHelper(), + \OC::$server->getHTTPClientService(), \OC::$server->getNotificationManager(), $discoveryManager, \OC_User::getUser() @@ -100,7 +100,7 @@ class Remote { \OC::$server->getDatabaseConnection(), Filesystem::getMountManager(), Filesystem::getLoader(), - \OC::$server->getHTTPHelper(), + \OC::$server->getHTTPClientService(), \OC::$server->getNotificationManager(), $discoveryManager, \OC_User::getUser() @@ -148,7 +148,7 @@ class Remote { \OC::$server->getDatabaseConnection(), Filesystem::getMountManager(), Filesystem::getLoader(), - \OC::$server->getHTTPHelper(), + \OC::$server->getHTTPClientService(), \OC::$server->getNotificationManager(), $discoveryManager, \OC_User::getUser() @@ -176,7 +176,7 @@ class Remote { \OC::$server->getDatabaseConnection(), Filesystem::getMountManager(), Filesystem::getLoader(), - \OC::$server->getHTTPHelper(), + \OC::$server->getHTTPClientService(), \OC::$server->getNotificationManager(), $discoveryManager, \OC_User::getUser() @@ -207,7 +207,7 @@ class Remote { \OC::$server->getDatabaseConnection(), Filesystem::getMountManager(), Filesystem::getLoader(), - \OC::$server->getHTTPHelper(), + \OC::$server->getHTTPClientService(), \OC::$server->getNotificationManager(), $discoveryManager, \OC_User::getUser() diff --git a/apps/files_sharing/lib/API/Share20OCS.php b/apps/files_sharing/lib/API/Share20OCS.php index 0cce05c3b17..3e91da37a7d 100644 --- a/apps/files_sharing/lib/API/Share20OCS.php +++ b/apps/files_sharing/lib/API/Share20OCS.php @@ -203,7 +203,7 @@ class Share20OCS extends OCSController { if ($this->canAccessShare($share)) { try { $share = $this->formatShare($share); - return new DataResponse(['data' => [$share]]); + return new DataResponse([$share]); } catch (NotFoundException $e) { //Fall trough } @@ -246,17 +246,32 @@ class Share20OCS extends OCSController { /** * @NoAdminRequired * + * @param string $path + * @param int $permissions + * @param int $shareType + * @param string $shareWith + * @param string $publicUpload + * @param string $password + * @param string $expireDate + * * @return DataResponse * @throws OCSNotFoundException * @throws OCSForbiddenException * @throws OCSBadRequestException * @throws OCSException */ - public function createShare() { + public function createShare( + $path = null, + $permissions = \OCP\Constants::PERMISSION_ALL, + $shareType = -1, + $shareWith = null, + $publicUpload = 'false', + $password = '', + $expireDate = '' + ) { $share = $this->shareManager->newShare(); // Verify path - $path = $this->request->getParam('path', null); if ($path === null) { throw new OCSNotFoundException($this->l->t('Please specify a file or folder path')); } @@ -276,14 +291,6 @@ class Share20OCS extends OCSController { throw new OCSNotFoundException($this->l->t('Could not create share')); } - // Parse permissions (if available) - $permissions = $this->request->getParam('permissions', null); - if ($permissions === null) { - $permissions = \OCP\Constants::PERMISSION_ALL; - } else { - $permissions = (int)$permissions; - } - if ($permissions < 0 || $permissions > \OCP\Constants::PERMISSION_ALL) { throw new OCSNotFoundException($this->l->t('invalid permissions')); } @@ -306,9 +313,6 @@ class Share20OCS extends OCSController { $permissions &= ~($permissions & ~$path->getPermissions()); } - $shareWith = $this->request->getParam('shareWith', null); - $shareType = (int)$this->request->getParam('shareType', '-1'); - if ($shareType === \OCP\Share::SHARE_TYPE_USER) { // Valid user is required to share if ($shareWith === null || !$this->userManager->userExists($shareWith)) { @@ -339,10 +343,9 @@ class Share20OCS extends OCSController { */ $existingShares = $this->shareManager->getSharesBy($this->currentUser->getUID(), \OCP\Share::SHARE_TYPE_LINK, $path, false, 1, 0); if (!empty($existingShares)) { - return new DataResponse(['data' => $this->formatShare($existingShares[0])]); + return new DataResponse($this->formatShare($existingShares[0])); } - $publicUpload = $this->request->getParam('publicUpload', null); if ($publicUpload === 'true') { // Check if public upload is allowed if (!$this->shareManager->shareApiLinkAllowPublicUpload()) { @@ -365,15 +368,11 @@ class Share20OCS extends OCSController { } // Set password - $password = $this->request->getParam('password', ''); - if ($password !== '') { $share->setPassword($password); } //Expire date - $expireDate = $this->request->getParam('expireDate', ''); - if ($expireDate !== '') { try { $expireDate = $this->parseDate($expireDate); @@ -408,7 +407,7 @@ class Share20OCS extends OCSController { $output = $this->formatShare($share); - return new DataResponse(['data' => $output]); + return new DataResponse($output); } /** @@ -432,7 +431,7 @@ class Share20OCS extends OCSController { } } - return new DataResponse(['data' => $formatted]); + return new DataResponse($formatted); } /** @@ -466,7 +465,7 @@ class Share20OCS extends OCSController { } } - return new DataResponse(['data' => $formatted]); + return new DataResponse($formatted); } /** @@ -474,6 +473,11 @@ class Share20OCS extends OCSController { * * @NoAdminRequired * + * @param string $shared_with_me + * @param string $reshares + * @param string $subfiles + * @param string $path + * * - Get shares by the current user * - Get shares by the current user and reshares (?reshares=true) * - Get shares with the current user (?shared_with_me=true) @@ -483,11 +487,12 @@ class Share20OCS extends OCSController { * @return DataResponse * @throws OCSNotFoundException */ - public function getShares() { - $sharedWithMe = $this->request->getParam('shared_with_me', null); - $reshares = $this->request->getParam('reshares', null); - $subfiles = $this->request->getParam('subfiles'); - $path = $this->request->getParam('path', null); + public function getShares( + $shared_with_me = 'false', + $reshares = 'false', + $subfiles = 'false', + $path = null + ) { if ($path !== null) { $userFolder = $this->rootFolder->getUserFolder($this->currentUser->getUID()); @@ -501,7 +506,7 @@ class Share20OCS extends OCSController { } } - if ($sharedWithMe === 'true') { + if ($shared_with_me === 'true') { $result = $this->getSharedWithMe($path); return $result; } @@ -537,19 +542,29 @@ class Share20OCS extends OCSController { } } - return new DataResponse(['data' => $formatted]); + return new DataResponse($formatted); } /** * @NoAdminRequired * * @param int $id + * @param int $permissions + * @param string $password + * @param string $publicUpload + * @param string $expireDate * @return DataResponse * @throws OCSNotFoundException * @throws OCSBadRequestException * @throws OCSForbiddenException */ - public function updateShare($id) { + public function updateShare( + $id, + $permissions = null, + $password = null, + $publicUpload = null, + $expireDate = null + ) { try { $share = $this->getShareById($id); } catch (ShareNotFound $e) { @@ -562,11 +577,6 @@ class Share20OCS extends OCSController { throw new OCSNotFoundException($this->l->t('Wrong share ID, share doesn\'t exist')); } - $permissions = $this->request->getParam('permissions', null); - $password = $this->request->getParam('password', null); - $publicUpload = $this->request->getParam('publicUpload', null); - $expireDate = $this->request->getParam('expireDate', null); - /* * expirationdate, password and publicUpload only make sense for link shares */ @@ -671,7 +681,7 @@ class Share20OCS extends OCSController { throw new OCSBadRequestException($e->getMessage()); } - return new DataResponse(['data' => $this->formatShare($share)]); + return new DataResponse($this->formatShare($share)); } /** diff --git a/apps/files_sharing/lib/AppInfo/Application.php b/apps/files_sharing/lib/AppInfo/Application.php index b9598bd4a2b..0e70924da40 100644 --- a/apps/files_sharing/lib/AppInfo/Application.php +++ b/apps/files_sharing/lib/AppInfo/Application.php @@ -105,7 +105,7 @@ class Application extends App { $server->getDatabaseConnection(), \OC\Files\Filesystem::getMountManager(), \OC\Files\Filesystem::getLoader(), - $server->getHTTPHelper(), + $server->getHTTPClientService(), $server->getNotificationManager(), $discoveryManager, $uid diff --git a/apps/files_sharing/lib/Capabilities.php b/apps/files_sharing/lib/Capabilities.php index 8dde2dafb0d..9da6dbbc995 100644 --- a/apps/files_sharing/lib/Capabilities.php +++ b/apps/files_sharing/lib/Capabilities.php @@ -69,6 +69,7 @@ class Capabilities implements ICapability { $public['send_mail'] = $this->config->getAppValue('core', 'shareapi_allow_public_notification', 'no') === 'yes'; $public['upload'] = $this->config->getAppValue('core', 'shareapi_allow_public_upload', 'yes') === 'yes'; + $public['upload_files_drop'] = $public['upload']; } $res["public"] = $public; diff --git a/apps/files_sharing/lib/API/Sharees.php b/apps/files_sharing/lib/Controller/ShareesAPIController.php index a7eb13708f3..a2063803450 100644 --- a/apps/files_sharing/lib/API/Sharees.php +++ b/apps/files_sharing/lib/Controller/ShareesAPIController.php @@ -22,9 +22,11 @@ * along with this program. If not, see <http://www.gnu.org/licenses/> * */ -namespace OCA\Files_Sharing\API; +namespace OCA\Files_Sharing\Controller; use OCP\AppFramework\Http; +use OCP\AppFramework\OCS\OCSBadRequestException; +use OCP\AppFramework\OCSController; use OCP\Contacts\IManager; use OCP\IGroup; use OCP\IGroupManager; @@ -37,7 +39,7 @@ use OCP\IUserSession; use OCP\IURLGenerator; use OCP\Share; -class Sharees { +class ShareesAPIController extends OCSController { /** @var IGroupManager */ protected $groupManager; @@ -54,9 +56,6 @@ class Sharees { /** @var IUserSession */ protected $userSession; - /** @var IRequest */ - protected $request; - /** @var IURLGenerator */ protected $urlGenerator; @@ -93,32 +92,35 @@ class Sharees { protected $reachedEndFor = []; /** + * @param string $appName + * @param IRequest $request * @param IGroupManager $groupManager * @param IUserManager $userManager * @param IManager $contactsManager * @param IConfig $config * @param IUserSession $userSession * @param IURLGenerator $urlGenerator - * @param IRequest $request * @param ILogger $logger * @param \OCP\Share\IManager $shareManager */ - public function __construct(IGroupManager $groupManager, + public function __construct($appName, + IRequest $request, + IGroupManager $groupManager, IUserManager $userManager, IManager $contactsManager, IConfig $config, IUserSession $userSession, IURLGenerator $urlGenerator, - IRequest $request, ILogger $logger, \OCP\Share\IManager $shareManager) { + parent::__construct($appName, $request); + $this->groupManager = $groupManager; $this->userManager = $userManager; $this->contactsManager = $contactsManager; $this->config = $config; $this->userSession = $userSession; $this->urlGenerator = $urlGenerator; - $this->request = $request; $this->logger = $logger; $this->shareManager = $shareManager; } @@ -319,7 +321,7 @@ class Sharees { $this->result['remotes'] = []; } - if (!$foundRemoteById && substr_count($search, '@') >= 1 && substr_count($search, ' ') === 0 && $this->offset === 0) { + if (!$foundRemoteById && substr_count($search, '@') >= 1 && $this->offset === 0) { $this->result['exact']['remotes'][] = [ 'label' => $search, 'value' => [ @@ -401,19 +403,22 @@ class Sharees { } /** - * @return \OC_OCS_Result + * @NoAdminRequired + * + * @param string $search + * @param string $itemType + * @param int $page + * @param int $perPage + * @param int|int[] $shareType + * @return Http\DataResponse + * @throws OCSBadRequestException */ - public function search() { - $search = isset($_GET['search']) ? (string) $_GET['search'] : ''; - $itemType = isset($_GET['itemType']) ? (string) $_GET['itemType'] : null; - $page = isset($_GET['page']) ? (int) $_GET['page'] : 1; - $perPage = isset($_GET['perPage']) ? (int) $_GET['perPage'] : 200; - + public function search($search = '', $itemType = null, $page = 1, $perPage = 200, $shareType = null) { if ($perPage <= 0) { - return new \OC_OCS_Result(null, Http::STATUS_BAD_REQUEST, 'Invalid perPage argument'); + throw new OCSBadRequestException('Invalid perPage argument'); } if ($page <= 0) { - return new \OC_OCS_Result(null, Http::STATUS_BAD_REQUEST, 'Invalid page'); + throw new OCSBadRequestException('Invalid page'); } $shareTypes = [ @@ -426,12 +431,11 @@ class Sharees { $shareTypes[] = Share::SHARE_TYPE_REMOTE; - if (isset($_GET['shareType']) && is_array($_GET['shareType'])) { - $shareTypes = array_intersect($shareTypes, $_GET['shareType']); + if (is_array($shareType)) { + $shareTypes = array_intersect($shareTypes, $shareType); sort($shareTypes); - - } else if (isset($_GET['shareType']) && is_numeric($_GET['shareType'])) { - $shareTypes = array_intersect($shareTypes, [(int) $_GET['shareType']]); + } else if (is_numeric($shareType)) { + $shareTypes = array_intersect($shareTypes, [(int) $shareType]); sort($shareTypes); } @@ -471,12 +475,13 @@ class Sharees { * @param array $shareTypes * @param int $page * @param int $perPage - * @return \OC_OCS_Result + * @return Http\DataResponse + * @throws OCSBadRequestException */ protected function searchSharees($search, $itemType, array $shareTypes, $page, $perPage) { // Verify arguments if ($itemType === null) { - return new \OC_OCS_Result(null, Http::STATUS_BAD_REQUEST, 'Missing itemType'); + throw new OCSBadRequestException('Missing itemType'); } // Get users @@ -494,8 +499,7 @@ class Sharees { $this->getRemote($search); } - $response = new \OC_OCS_Result($this->result); - $response->setItemsPerPage($perPage); + $response = new Http\DataResponse($this->result); if (sizeof($this->reachedEndFor) < 3) { $response->addHeader('Link', $this->getPaginationLink($page, [ diff --git a/apps/files_sharing/lib/External/Manager.php b/apps/files_sharing/lib/External/Manager.php index 741428d8e88..0a57324c32f 100644 --- a/apps/files_sharing/lib/External/Manager.php +++ b/apps/files_sharing/lib/External/Manager.php @@ -32,6 +32,7 @@ namespace OCA\Files_Sharing\External; use OC\Files\Filesystem; use OCA\FederatedFileSharing\DiscoveryManager; use OCP\Files; +use OCP\Http\Client\IClientService; use OCP\Notification\IManager; class Manager { @@ -58,9 +59,9 @@ class Manager { private $storageLoader; /** - * @var \OC\HTTPHelper + * @var IClientService */ - private $httpHelper; + private $clientService; /** * @var IManager @@ -73,7 +74,7 @@ class Manager { * @param \OCP\IDBConnection $connection * @param \OC\Files\Mount\Manager $mountManager * @param \OCP\Files\Storage\IStorageFactory $storageLoader - * @param \OC\HTTPHelper $httpHelper + * @param IClientService $clientService * @param IManager $notificationManager * @param DiscoveryManager $discoveryManager * @param string $uid @@ -81,14 +82,14 @@ class Manager { public function __construct(\OCP\IDBConnection $connection, \OC\Files\Mount\Manager $mountManager, \OCP\Files\Storage\IStorageFactory $storageLoader, - \OC\HTTPHelper $httpHelper, + IClientService $clientService, IManager $notificationManager, DiscoveryManager $discoveryManager, $uid) { $this->connection = $connection; $this->mountManager = $mountManager; $this->storageLoader = $storageLoader; - $this->httpHelper = $httpHelper; + $this->clientService = $clientService; $this->uid = $uid; $this->notificationManager = $notificationManager; $this->discoveryManager = $discoveryManager; @@ -262,10 +263,23 @@ class Manager { $url = rtrim($remote, '/') . $this->discoveryManager->getShareEndpoint($remote) . '/' . $remoteId . '/' . $feedback . '?format=' . \OCP\Share::RESPONSE_FORMAT; $fields = array('token' => $token); - $result = $this->httpHelper->post($url, $fields); - $status = json_decode($result['result'], true); + $client = $this->clientService->newClient(); + + try { + $response = $client->post( + $url, + [ + 'body' => $fields, + 'connect_timeout' => 10, + ] + ); + } catch (\Exception $e) { + return false; + } + + $status = json_decode($response->getBody(), true); - return ($result['success'] && ($status['ocs']['meta']['statuscode'] === 100 || $status['ocs']['meta']['statuscode'] === 200)); + return ($status['ocs']['meta']['statuscode'] === 100 || $status['ocs']['meta']['statuscode'] === 200); } /** diff --git a/apps/files_sharing/lib/Hooks.php b/apps/files_sharing/lib/Hooks.php index 237e845bc4e..2029e97d08b 100644 --- a/apps/files_sharing/lib/Hooks.php +++ b/apps/files_sharing/lib/Hooks.php @@ -40,7 +40,7 @@ class Hooks { \OC::$server->getDatabaseConnection(), \OC\Files\Filesystem::getMountManager(), \OC\Files\Filesystem::getLoader(), - \OC::$server->getHTTPHelper(), + \OC::$server->getHTTPClientService(), \OC::$server->getNotificationManager(), $discoveryManager, $params['uid']); diff --git a/apps/files_sharing/lib/SharedMount.php b/apps/files_sharing/lib/SharedMount.php index 57610db9076..13ecd88bfa9 100644 --- a/apps/files_sharing/lib/SharedMount.php +++ b/apps/files_sharing/lib/SharedMount.php @@ -235,4 +235,23 @@ class SharedMount extends MountPoint implements MoveableMount { public function getStorageRootId() { return $this->getShare()->getNodeId(); } + + /** + * @return int + */ + public function getNumericStorageId() { + $builder = \OC::$server->getDatabaseConnection()->getQueryBuilder(); + + $query = $builder->select('storage') + ->from('filecache') + ->where($builder->expr()->eq('fileid', $builder->createNamedParameter($this->getStorageRootId()))); + + $result = $query->execute(); + $row = $result->fetch(); + $result->closeCursor(); + if ($row) { + return $row['storage']; + } + return -1; + } } diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php index 8e9a0f41229..e1875fe2394 100644 --- a/apps/files_sharing/lib/sharedstorage.php +++ b/apps/files_sharing/lib/sharedstorage.php @@ -36,6 +36,7 @@ use OC\Files\Cache\FailedCache; use OCA\Files_Sharing\ISharedStorage; use OCP\Constants; use OCP\Files\Cache\ICacheEntry; +use OCP\Files\NotFoundException; use OCP\Files\Storage\IStorage; use OCP\Lock\ILockingProvider; @@ -61,11 +62,6 @@ class Shared extends \OC\Files\Storage\Wrapper\Jail implements ISharedStorage { */ private $sourceRootInfo; - /** - * @var IStorage - */ - private $sourceStorage; - /** @var string */ private $user; @@ -83,13 +79,9 @@ class Shared extends \OC\Files\Storage\Wrapper\Jail implements ISharedStorage { $this->user = $arguments['user']; - Filesystem::initMountPoints($this->superShare->getShareOwner()); - $sourcePath = $this->ownerView->getPath($this->superShare->getNodeId()); - list($storage, $internalPath) = $this->ownerView->resolvePath($sourcePath); - parent::__construct([ - 'storage' => $storage, - 'root' => $internalPath, + 'storage' => null, + 'root' => null, ]); } @@ -101,14 +93,29 @@ class Shared extends \OC\Files\Storage\Wrapper\Jail implements ISharedStorage { try { Filesystem::initMountPoints($this->superShare->getShareOwner()); $sourcePath = $this->ownerView->getPath($this->superShare->getNodeId()); - list($this->sourceStorage, $sourceInternalPath) = $this->ownerView->resolvePath($sourcePath); - $this->sourceRootInfo = $this->sourceStorage->getCache()->get($sourceInternalPath); + list($this->storage, $this->rootPath) = $this->ownerView->resolvePath($sourcePath); + $this->sourceRootInfo = $this->storage->getCache()->get($this->rootPath); + } catch (NotFoundException $e) { + $this->storage = new FailedStorage(['exception' => $e]); + $this->rootPath = ''; } catch (\Exception $e) { + $this->storage = new FailedStorage(['exception' => $e]); + $this->rootPath = ''; $this->logger->logException($e); } } /** + * @inheritdoc + */ + public function instanceOfStorage($class) { + if (in_array($class, ['\OC\Files\Storage\Home', '\OC\Files\ObjectStore\HomeObjectStoreStorage'])) { + return false; + } + return parent::instanceOfStorage($class); + } + + /** * @return string */ public function getShareId() { @@ -302,13 +309,13 @@ class Shared extends \OC\Files\Storage\Wrapper\Jail implements ISharedStorage { public function getCache($path = '', $storage = null) { $this->init(); - if (is_null($this->sourceStorage)) { + if (is_null($this->storage) || $this->storage instanceof FailedStorage) { return new FailedCache(false); } if (!$storage) { $storage = $this; } - return new \OCA\Files_Sharing\Cache($storage, $this->sourceStorage, $this->sourceRootInfo); + return new \OCA\Files_Sharing\Cache($storage, $this->storage, $this->sourceRootInfo); } public function getScanner($path = '', $storage = null) { @@ -319,10 +326,15 @@ class Shared extends \OC\Files\Storage\Wrapper\Jail implements ISharedStorage { } public function getPropagator($storage = null) { + if (isset($this->propagator)) { + return $this->propagator; + } + if (!$storage) { $storage = $this; } - return new \OCA\Files_Sharing\SharedPropagator($storage, \OC::$server->getDatabaseConnection()); + $this->propagator = new \OCA\Files_Sharing\SharedPropagator($storage, \OC::$server->getDatabaseConnection()); + return $this->propagator; } public function getOwner($path) { @@ -404,7 +416,12 @@ class Shared extends \OC\Files\Storage\Wrapper\Jail implements ISharedStorage { } public function getSourceStorage() { - return $this->sourceStorage; + return $this->getWrapperStorage(); + } + + public function getWrapperStorage() { + $this->init(); + return $this->storage; } public function file_get_contents($path) { diff --git a/apps/files_sharing/tests/API/Share20OCSTest.php b/apps/files_sharing/tests/API/Share20OCSTest.php index b32684ef547..1f0b4855a0d 100644 --- a/apps/files_sharing/tests/API/Share20OCSTest.php +++ b/apps/files_sharing/tests/API/Share20OCSTest.php @@ -24,7 +24,6 @@ namespace OCA\Files_Sharing\Tests\API; use OCP\AppFramework\Http\DataResponse; -use OCP\AppFramework\OCS\OCSNotFoundException; use OCP\IL10N; use OCA\Files_Sharing\API\Share20OCS; use OCP\Files\NotFoundException; @@ -35,7 +34,6 @@ use OCP\IURLGenerator; use OCP\IUser; use OCP\Files\IRootFolder; use OCP\Lock\LockedException; -use Punic\Data; /** * Class Share20OCSTest @@ -48,31 +46,31 @@ class Share20OCSTest extends \Test\TestCase { /** @var string */ private $appName = 'files_sharing'; - /** @var \OC\Share20\Manager | \PHPUnit_Framework_MockObject_MockObject */ + /** @var \OC\Share20\Manager|\PHPUnit_Framework_MockObject_MockObject */ private $shareManager; - /** @var IGroupManager | \PHPUnit_Framework_MockObject_MockObject */ + /** @var IGroupManager|\PHPUnit_Framework_MockObject_MockObject */ private $groupManager; - /** @var IUserManager | \PHPUnit_Framework_MockObject_MockObject */ + /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */ private $userManager; - /** @var IRequest | \PHPUnit_Framework_MockObject_MockObject */ + /** @var IRequest|\PHPUnit_Framework_MockObject_MockObject */ private $request; - /** @var IRootFolder | \PHPUnit_Framework_MockObject_MockObject */ + /** @var IRootFolder|\PHPUnit_Framework_MockObject_MockObject */ private $rootFolder; - /** @var IURLGenerator */ + /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */ private $urlGenerator; - /** @var IUser */ + /** @var IUser|\PHPUnit_Framework_MockObject_MockObject */ private $currentUser; /** @var Share20OCS */ private $ocs; - /** @var IL10N */ + /** @var IL10N|\PHPUnit_Framework_MockObject_MockObject */ private $l; protected function setUp() { @@ -91,8 +89,6 @@ class Share20OCSTest extends \Test\TestCase { $this->currentUser = $this->getMockBuilder('OCP\IUser')->getMock(); $this->currentUser->method('getUID')->willReturn('currentUser'); - $this->userManager->expects($this->any())->method('userExists')->willReturn(true); - $this->l = $this->getMockBuilder('\OCP\IL10N')->getMock(); $this->l->method('t') ->will($this->returnCallback(function($text, $parameters = []) { @@ -485,7 +481,7 @@ class Share20OCSTest extends \Test\TestCase { ['group', $group], ])); - $this->assertEquals($result, $ocs->getShare($share->getId())->getData()['data'][0]); + $this->assertEquals($result, $ocs->getShare($share->getId())->getData()[0]); } /** @@ -567,12 +563,6 @@ class Share20OCSTest extends \Test\TestCase { * @expectedExceptionMessage Wrong path, file/folder doesn't exist */ public function testCreateShareInvalidPath() { - $this->request - ->method('getParam') - ->will($this->returnValueMap([ - ['path', null, 'invalid-path'], - ])); - $userFolder = $this->getMockBuilder('\OCP\Files\Folder')->getMock(); $this->rootFolder->expects($this->once()) ->method('getUserFolder') @@ -584,7 +574,7 @@ class Share20OCSTest extends \Test\TestCase { ->with('invalid-path') ->will($this->throwException(new \OCP\Files\NotFoundException())); - $this->ocs->createShare(); + $this->ocs->createShare('invalid-path'); } /** @@ -595,13 +585,6 @@ class Share20OCSTest extends \Test\TestCase { $share = $this->newShare(); $this->shareManager->method('newShare')->willReturn($share); - $this->request - ->method('getParam') - ->will($this->returnValueMap([ - ['path', null, 'valid-path'], - ['permissions', null, 32], - ])); - $userFolder = $this->getMockBuilder('\OCP\Files\Folder')->getMock(); $this->rootFolder->expects($this->once()) ->method('getUserFolder') @@ -618,7 +601,7 @@ class Share20OCSTest extends \Test\TestCase { ->method('lock') ->with(\OCP\Lock\ILockingProvider::LOCK_SHARED); - $this->ocs->createShare(); + $this->ocs->createShare('valid-path', 32); } /** @@ -629,14 +612,6 @@ class Share20OCSTest extends \Test\TestCase { $share = $this->newShare(); $this->shareManager->method('newShare')->willReturn($share); - $this->request - ->method('getParam') - ->will($this->returnValueMap([ - ['path', null, 'valid-path'], - ['permissions', null, \OCP\Constants::PERMISSION_ALL], - ['shareType', $this->any(), \OCP\Share::SHARE_TYPE_USER], - ])); - $userFolder = $this->getMockBuilder('\OCP\Files\Folder')->getMock(); $this->rootFolder->expects($this->once()) ->method('getUserFolder') @@ -658,7 +633,7 @@ class Share20OCSTest extends \Test\TestCase { ->method('lock') ->with(\OCP\Lock\ILockingProvider::LOCK_SHARED); - $this->ocs->createShare(); + $this->ocs->createShare('valid-path', \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_USER); } /** @@ -669,15 +644,6 @@ class Share20OCSTest extends \Test\TestCase { $share = $this->newShare(); $this->shareManager->method('newShare')->willReturn($share); - $this->request - ->method('getParam') - ->will($this->returnValueMap([ - ['path', null, 'valid-path'], - ['permissions', null, \OCP\Constants::PERMISSION_ALL], - ['shareType', $this->any(), \OCP\Share::SHARE_TYPE_USER], - ['shareWith', $this->any(), 'invalidUser'], - ])); - $userFolder = $this->getMockBuilder('\OCP\Files\Folder')->getMock(); $this->rootFolder->expects($this->once()) ->method('getUserFolder') @@ -694,18 +660,21 @@ class Share20OCSTest extends \Test\TestCase { ->method('get') ->with('valid-path') ->willReturn($path); - $path->expects($this->once()) ->method('lock') ->with(\OCP\Lock\ILockingProvider::LOCK_SHARED); + $this->userManager->method('userExists') + ->with('invalidUser') + ->willReturn(false); - $this->ocs->createShare(); + $this->ocs->createShare('valid-path', \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_USER, 'invalidUser'); } public function testCreateShareUser() { $share = $this->newShare(); $this->shareManager->method('newShare')->willReturn($share); + /** @var \OCA\Files_Sharing\API\Share20OCS $ocs */ $ocs = $this->getMockBuilder('OCA\Files_Sharing\API\Share20OCS') ->setConstructorArgs([ $this->appName, @@ -720,15 +689,6 @@ class Share20OCSTest extends \Test\TestCase { ])->setMethods(['formatShare']) ->getMock(); - $this->request - ->method('getParam') - ->will($this->returnValueMap([ - ['path', null, 'valid-path'], - ['permissions', null, \OCP\Constants::PERMISSION_ALL], - ['shareType', $this->any(), \OCP\Share::SHARE_TYPE_USER], - ['shareWith', null, 'validUser'], - ])); - $userFolder = $this->getMockBuilder('\OCP\Files\Folder')->getMock(); $this->rootFolder->expects($this->once()) ->method('getUserFolder') @@ -766,8 +726,8 @@ class Share20OCSTest extends \Test\TestCase { })) ->will($this->returnArgument(0)); - $expected = new DataResponse(['data' => null]); - $result = $ocs->createShare(); + $expected = new DataResponse(null); + $result = $ocs->createShare('valid-path', \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_USER, 'validUser'); $this->assertInstanceOf(get_class($expected), $result); $this->assertEquals($expected->getData(), $result->getData()); @@ -775,21 +735,13 @@ class Share20OCSTest extends \Test\TestCase { /** * @expectedException \OCP\AppFramework\OCS\OCSNotFoundException - * @expectedExceptionMessage Please specify a valid user + * @expectedExceptionMessage Please specify a valid group */ public function testCreateShareGroupNoValidShareWith() { $share = $this->newShare(); $this->shareManager->method('newShare')->willReturn($share); $this->shareManager->method('createShare')->will($this->returnArgument(0)); - - $this->request - ->method('getParam') - ->will($this->returnValueMap([ - ['path', null, 'valid-path'], - ['permissions', null, \OCP\Constants::PERMISSION_ALL], - ['shareType', $this->any(), \OCP\Share::SHARE_TYPE_GROUP], - ['shareWith', $this->any(), 'invalidGroup'], - ])); + $this->shareManager->method('allowGroupSharing')->willReturn(true); $userFolder = $this->getMockBuilder('\OCP\Files\Folder')->getMock(); $this->rootFolder->expects($this->once()) @@ -812,7 +764,7 @@ class Share20OCSTest extends \Test\TestCase { ->method('lock') ->with(\OCP\Lock\ILockingProvider::LOCK_SHARED); - $this->ocs->createShare(); + $this->ocs->createShare('valid-path', \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_GROUP, 'invalidGroup'); } public function testCreateShareGroup() { @@ -879,8 +831,8 @@ class Share20OCSTest extends \Test\TestCase { })) ->will($this->returnArgument(0)); - $expected = new DataResponse(['data' => null]); - $result = $ocs->createShare(); + $expected = new DataResponse(null); + $result = $ocs->createShare('valid-path', \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_GROUP, 'validGroup'); $this->assertInstanceOf(get_class($expected), $result); $this->assertEquals($expected->getData(), $result->getData()); @@ -894,15 +846,6 @@ class Share20OCSTest extends \Test\TestCase { $share = $this->newShare(); $this->shareManager->method('newShare')->willReturn($share); - $this->request - ->method('getParam') - ->will($this->returnValueMap([ - ['path', null, 'valid-path'], - ['permissions', null, \OCP\Constants::PERMISSION_ALL], - ['shareType', '-1', \OCP\Share::SHARE_TYPE_GROUP], - ['shareWith', null, 'validGroup'], - ])); - $userFolder = $this->getMockBuilder('\OCP\Files\Folder')->getMock(); $this->rootFolder->expects($this->once()) ->method('getUserFolder') @@ -926,7 +869,7 @@ class Share20OCSTest extends \Test\TestCase { ->method('allowGroupSharing') ->willReturn(false); - $this->ocs->createShare(); + $this->ocs->createShare('valid-path', \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_GROUP, 'invalidGroup'); } /** @@ -952,7 +895,7 @@ class Share20OCSTest extends \Test\TestCase { $this->shareManager->method('newShare')->willReturn(\OC::$server->getShareManager()->newShare()); - $this->ocs->createShare(); + $this->ocs->createShare('valid-path', \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_LINK); } /** @@ -960,14 +903,6 @@ class Share20OCSTest extends \Test\TestCase { * @expectedExceptionMessage Public upload disabled by the administrator */ public function testCreateShareLinkNoPublicUpload() { - $this->request - ->method('getParam') - ->will($this->returnValueMap([ - ['path', null, 'valid-path'], - ['shareType', '-1', \OCP\Share::SHARE_TYPE_LINK], - ['publicUpload', null, 'true'], - ])); - $path = $this->getMockBuilder('\OCP\Files\Folder')->getMock(); $storage = $this->getMockBuilder('OCP\Files\Storage')->getMock(); $storage->method('instanceOfStorage') @@ -980,7 +915,7 @@ class Share20OCSTest extends \Test\TestCase { $this->shareManager->method('newShare')->willReturn(\OC::$server->getShareManager()->newShare()); $this->shareManager->method('shareApiAllowLinks')->willReturn(true); - $this->ocs->createShare(); + $this->ocs->createShare('valid-path', \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_LINK, null, 'true'); } /** @@ -988,14 +923,6 @@ class Share20OCSTest extends \Test\TestCase { * @expectedExceptionMessage Public upload is only possible for publicly shared folders */ public function testCreateShareLinkPublicUploadFile() { - $this->request - ->method('getParam') - ->will($this->returnValueMap([ - ['path', null, 'valid-path'], - ['shareType', '-1', \OCP\Share::SHARE_TYPE_LINK], - ['publicUpload', null, 'true'], - ])); - $path = $this->getMockBuilder('\OCP\Files\File')->getMock(); $storage = $this->getMockBuilder('OCP\Files\Storage')->getMock(); $storage->method('instanceOfStorage') @@ -1009,22 +936,12 @@ class Share20OCSTest extends \Test\TestCase { $this->shareManager->method('shareApiAllowLinks')->willReturn(true); $this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true); - $this->ocs->createShare(); + $this->ocs->createShare('valid-path', \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_LINK, null, 'true'); } public function testCreateShareLinkPublicUploadFolder() { $ocs = $this->mockFormatShare(); - $this->request - ->method('getParam') - ->will($this->returnValueMap([ - ['path', null, 'valid-path'], - ['shareType', '-1', \OCP\Share::SHARE_TYPE_LINK], - ['publicUpload', null, 'true'], - ['expireDate', '', ''], - ['password', '', ''], - ])); - $path = $this->getMockBuilder('\OCP\Files\Folder')->getMock(); $storage = $this->getMockBuilder('OCP\Files\Storage')->getMock(); $storage->method('instanceOfStorage') @@ -1049,8 +966,8 @@ class Share20OCSTest extends \Test\TestCase { }) )->will($this->returnArgument(0)); - $expected = new DataResponse(['data' => null]); - $result = $ocs->createShare(); + $expected = new DataResponse(null); + $result = $ocs->createShare('valid-path', \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_LINK, null, 'true', '', ''); $this->assertInstanceOf(get_class($expected), $result); $this->assertEquals($expected->getData(), $result->getData()); @@ -1059,16 +976,6 @@ class Share20OCSTest extends \Test\TestCase { public function testCreateShareLinkPassword() { $ocs = $this->mockFormatShare(); - $this->request - ->method('getParam') - ->will($this->returnValueMap([ - ['path', null, 'valid-path'], - ['shareType', '-1', \OCP\Share::SHARE_TYPE_LINK], - ['publicUpload', null, 'false'], - ['expireDate', '', ''], - ['password', '', 'password'], - ])); - $path = $this->getMockBuilder('\OCP\Files\Folder')->getMock(); $storage = $this->getMockBuilder('OCP\Files\Storage')->getMock(); $storage->method('instanceOfStorage') @@ -1093,8 +1000,8 @@ class Share20OCSTest extends \Test\TestCase { }) )->will($this->returnArgument(0)); - $expected = new DataResponse(['data' => null]); - $result = $ocs->createShare(); + $expected = new DataResponse(null); + $result = $ocs->createShare('valid-path', \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_LINK, null, 'false', 'password', ''); $this->assertInstanceOf(get_class($expected), $result); $this->assertEquals($expected->getData(), $result->getData()); @@ -1140,8 +1047,8 @@ class Share20OCSTest extends \Test\TestCase { }) )->will($this->returnArgument(0)); - $expected = new DataResponse(['data' => null]); - $result = $ocs->createShare(); + $expected = new DataResponse(null); + $result = $ocs->createShare('valid-path', \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_LINK, null, 'false', '', '2000-01-01'); $this->assertInstanceOf(get_class($expected), $result); $this->assertEquals($expected->getData(), $result->getData()); @@ -1154,16 +1061,6 @@ class Share20OCSTest extends \Test\TestCase { public function testCreateShareInvalidExpireDate() { $ocs = $this->mockFormatShare(); - $this->request - ->method('getParam') - ->will($this->returnValueMap([ - ['path', null, 'valid-path'], - ['shareType', '-1', \OCP\Share::SHARE_TYPE_LINK], - ['publicUpload', null, 'false'], - ['expireDate', '', 'a1b2d3'], - ['password', '', ''], - ])); - $path = $this->getMockBuilder('\OCP\Files\Folder')->getMock(); $storage = $this->getMockBuilder('OCP\Files\Storage')->getMock(); $storage->method('instanceOfStorage') @@ -1177,7 +1074,7 @@ class Share20OCSTest extends \Test\TestCase { $this->shareManager->method('shareApiAllowLinks')->willReturn(true); $this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true); - $ocs->createShare(); + $ocs->createShare('valid-path', \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_LINK, null, 'false', '', 'a1b2d3'); } /** @@ -1202,15 +1099,6 @@ class Share20OCSTest extends \Test\TestCase { ])->setMethods(['formatShare']) ->getMock(); - $this->request - ->method('getParam') - ->will($this->returnValueMap([ - ['path', null, 'valid-path'], - ['permissions', null, \OCP\Constants::PERMISSION_ALL], - ['shareType', $this->any(), \OCP\Share::SHARE_TYPE_USER], - ['shareWith', null, 'validUser'], - ])); - $userFolder = $this->getMockBuilder('\OCP\Files\Folder')->getMock(); $this->rootFolder->expects($this->once()) ->method('getUserFolder') @@ -1239,7 +1127,7 @@ class Share20OCSTest extends \Test\TestCase { })) ->will($this->returnArgument(0)); - $ocs->createShare(); + $ocs->createShare('valid-path', \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_USER, 'validUser'); } /** @@ -1319,14 +1207,6 @@ class Share20OCSTest extends \Test\TestCase { ->method('lock') ->with(\OCP\Lock\ILockingProvider::LOCK_SHARED); - $this->request - ->method('getParam') - ->will($this->returnValueMap([ - ['publicUpload', null, 'false'], - ['expireDate', null, ''], - ['password', null, ''], - ])); - $this->shareManager->method('getShareById')->with('ocinternal:42')->willReturn($share); $this->shareManager->expects($this->once())->method('updateShare')->with( @@ -1337,8 +1217,8 @@ class Share20OCSTest extends \Test\TestCase { }) )->will($this->returnArgument(0)); - $expected = new DataResponse(['data' => null]); - $result = $ocs->updateShare(42); + $expected = new DataResponse(null); + $result = $ocs->updateShare(42, null, '', 'false', ''); $this->assertInstanceOf(get_class($expected), $result); $this->assertEquals($expected->getData(), $result->getData()); @@ -1355,14 +1235,6 @@ class Share20OCSTest extends \Test\TestCase { ->setShareType(\OCP\Share::SHARE_TYPE_LINK) ->setNode($folder); - $this->request - ->method('getParam') - ->will($this->returnValueMap([ - ['publicUpload', null, 'true'], - ['expireDate', null, '2000-01-01'], - ['password', null, 'password'], - ])); - $this->shareManager->method('getShareById')->with('ocinternal:42')->willReturn($share); $this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true); @@ -1377,8 +1249,8 @@ class Share20OCSTest extends \Test\TestCase { }) )->will($this->returnArgument(0)); - $expected = new DataResponse(['data' => null]); - $result = $ocs->updateShare(42); + $expected = new DataResponse(null); + $result = $ocs->updateShare(42, null, 'password', 'true', '2000-01-01'); $this->assertInstanceOf(get_class($expected), $result); $this->assertEquals($expected->getData(), $result->getData()); @@ -1387,7 +1259,7 @@ class Share20OCSTest extends \Test\TestCase { /** * @dataProvider publicUploadParamsProvider */ - public function testUpdateLinkShareEnablePublicUpload($params) { + public function testUpdateLinkShareEnablePublicUpload($permissions, $publicUpload, $expireDate, $password) { $ocs = $this->mockFormatShare(); $folder = $this->getMockBuilder('\OCP\Files\Folder')->getMock(); @@ -1399,10 +1271,6 @@ class Share20OCSTest extends \Test\TestCase { ->setPassword('password') ->setNode($folder); - $this->request - ->method('getParam') - ->will($this->returnValueMap($params)); - $this->shareManager->method('getShareById')->with('ocinternal:42')->willReturn($share); $this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true); $this->shareManager->method('getSharedWith')->willReturn([]); @@ -1415,8 +1283,8 @@ class Share20OCSTest extends \Test\TestCase { }) )->will($this->returnArgument(0)); - $expected = new DataResponse(['data' => null]); - $result = $ocs->updateShare(42); + $expected = new DataResponse(null); + $result = $ocs->updateShare(42, $permissions, $password, $publicUpload, $expireDate); $this->assertInstanceOf(get_class($expected), $result); $this->assertEquals($expected->getData(), $result->getData()); @@ -1437,37 +1305,25 @@ class Share20OCSTest extends \Test\TestCase { ->setShareType(\OCP\Share::SHARE_TYPE_LINK) ->setNode($folder); - $this->request - ->method('getParam') - ->will($this->returnValueMap([ - ['publicUpload', null, 'true'], - ['expireDate', null, '2000-01-a'], - ['password', null, 'password'], - ])); - $this->shareManager->method('getShareById')->with('ocinternal:42')->willReturn($share); $this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true); - $ocs->updateShare(42); + $ocs->updateShare(42, null, 'password', 'true', '2000-01-a'); } public function publicUploadParamsProvider() { return [ - [[ - ['publicUpload', null, 'true'], - ['expireDate', '', null], - ['password', '', 'password'], - ]], [[ - // legacy had no delete - ['permissions', null, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE], - ['expireDate', '', null], - ['password', '', 'password'], - ]], [[ - // correct - ['permissions', null, \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE], - ['expireDate', '', null], - ['password', '', 'password'], - ]], + [null, 'true', null, 'password'], + // legacy had no delete + [ + \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE, + null, null, 'password' + ], + // correct + [ + \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE, + null, null, 'password' + ], ]; } @@ -1476,7 +1332,7 @@ class Share20OCSTest extends \Test\TestCase { * @expectedException \OCP\AppFramework\OCS\OCSForbiddenException * @expectedExceptionMessage Public upload disabled by the administrator */ - public function testUpdateLinkSharePublicUploadNotAllowed($params) { + public function testUpdateLinkSharePublicUploadNotAllowed($permissions, $publicUpload, $expireDate, $password) { $ocs = $this->mockFormatShare(); $folder = $this->getMockBuilder('\OCP\Files\Folder')->getMock(); @@ -1487,14 +1343,10 @@ class Share20OCSTest extends \Test\TestCase { ->setShareType(\OCP\Share::SHARE_TYPE_LINK) ->setNode($folder); - $this->request - ->method('getParam') - ->will($this->returnValueMap($params)); - $this->shareManager->method('getShareById')->with('ocinternal:42')->willReturn($share); $this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(false); - $ocs->updateShare(42); + $ocs->updateShare(42, $permissions, $password, $publicUpload, $expireDate); } /** @@ -1512,18 +1364,10 @@ class Share20OCSTest extends \Test\TestCase { ->setShareType(\OCP\Share::SHARE_TYPE_LINK) ->setNode($file); - $this->request - ->method('getParam') - ->will($this->returnValueMap([ - ['publicUpload', null, 'true'], - ['expireDate', '', ''], - ['password', '', 'password'], - ])); - $this->shareManager->method('getShareById')->with('ocinternal:42')->willReturn($share); $this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true); - $ocs->updateShare(42); + $ocs->updateShare(42, null, 'password', 'true', ''); } public function testUpdateLinkSharePasswordDoesNotChangeOther() { @@ -1546,12 +1390,6 @@ class Share20OCSTest extends \Test\TestCase { ->method('lock') ->with(\OCP\Lock\ILockingProvider::LOCK_SHARED); - $this->request - ->method('getParam') - ->will($this->returnValueMap([ - ['password', null, 'newpassword'], - ])); - $this->shareManager->method('getShareById')->with('ocinternal:42')->willReturn($share); $this->shareManager->expects($this->once())->method('updateShare')->with( @@ -1562,8 +1400,8 @@ class Share20OCSTest extends \Test\TestCase { }) )->will($this->returnArgument(0)); - $expected = new DataResponse(['data' => null]); - $result = $ocs->updateShare(42); + $expected = new DataResponse(null); + $result = $ocs->updateShare(42, null, 'newpassword', null, null); $this->assertInstanceOf(get_class($expected), $result); $this->assertEquals($expected->getData(), $result->getData()); @@ -1582,12 +1420,6 @@ class Share20OCSTest extends \Test\TestCase { ->setPermissions(\OCP\Constants::PERMISSION_ALL) ->setNode($node); - $this->request - ->method('getParam') - ->will($this->returnValueMap([ - ['expireDate', null, '2010-12-23'], - ])); - $node->expects($this->once()) ->method('lock') ->with(\OCP\Lock\ILockingProvider::LOCK_SHARED); @@ -1605,8 +1437,8 @@ class Share20OCSTest extends \Test\TestCase { }) )->will($this->returnArgument(0)); - $expected = new DataResponse(['data' => null]); - $result = $ocs->updateShare(42); + $expected = new DataResponse(null); + $result = $ocs->updateShare(42, null, null, null, '2010-12-23'); $this->assertInstanceOf(get_class($expected), $result); $this->assertEquals($expected->getData(), $result->getData()); @@ -1628,12 +1460,6 @@ class Share20OCSTest extends \Test\TestCase { ->setPermissions(\OCP\Constants::PERMISSION_ALL) ->setNode($folder); - $this->request - ->method('getParam') - ->will($this->returnValueMap([ - ['publicUpload', null, 'true'], - ])); - $this->shareManager->method('getShareById')->with('ocinternal:42')->willReturn($share); $this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true); @@ -1645,8 +1471,8 @@ class Share20OCSTest extends \Test\TestCase { }) )->will($this->returnArgument(0)); - $expected = new DataResponse(['data' => null]); - $result = $ocs->updateShare(42); + $expected = new DataResponse(null); + $result = $ocs->updateShare(42, null, null, 'true', null); $this->assertInstanceOf(get_class($expected), $result); $this->assertEquals($expected->getData(), $result->getData()); @@ -1668,12 +1494,6 @@ class Share20OCSTest extends \Test\TestCase { ->setPermissions(\OCP\Constants::PERMISSION_ALL) ->setNode($folder); - $this->request - ->method('getParam') - ->will($this->returnValueMap([ - ['permissions', null, '7'], - ])); - $this->shareManager->method('getShareById')->with('ocinternal:42')->willReturn($share); $this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true); @@ -1687,8 +1507,8 @@ class Share20OCSTest extends \Test\TestCase { $this->shareManager->method('getSharedWith')->willReturn([]); - $expected = new DataResponse(['data' => null]); - $result = $ocs->updateShare(42); + $expected = new DataResponse(null); + $result = $ocs->updateShare(42, 7, null, null, null); $this->assertInstanceOf(get_class($expected), $result); $this->assertEquals($expected->getData(), $result->getData()); @@ -1714,16 +1534,10 @@ class Share20OCSTest extends \Test\TestCase { ->setPermissions(\OCP\Constants::PERMISSION_ALL) ->setNode($folder); - $this->request - ->method('getParam') - ->will($this->returnValueMap([ - ['permissions', null, '31'], - ])); - $this->shareManager->method('getShareById')->with('ocinternal:42')->willReturn($share); $this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true); - $ocs->updateShare(42); + $ocs->updateShare(42, 31); } public function testUpdateOtherPermissions() { @@ -1737,12 +1551,6 @@ class Share20OCSTest extends \Test\TestCase { ->setShareType(\OCP\Share::SHARE_TYPE_USER) ->setNode($file); - $this->request - ->method('getParam') - ->will($this->returnValueMap([ - ['permissions', null, '31'], - ])); - $this->shareManager->method('getShareById')->with('ocinternal:42')->willReturn($share); $this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true); @@ -1754,8 +1562,8 @@ class Share20OCSTest extends \Test\TestCase { $this->shareManager->method('getSharedWith')->willReturn([]); - $expected = new DataResponse(['data' => null]); - $result = $ocs->updateShare(42); + $expected = new DataResponse(null); + $result = $ocs->updateShare(42, 31, null, null, null); $this->assertInstanceOf(get_class($expected), $result); $this->assertEquals($expected->getData(), $result->getData()); diff --git a/apps/files_sharing/tests/ApiTest.php b/apps/files_sharing/tests/ApiTest.php index 5f8b17eb5c6..a62c29c5cad 100644 --- a/apps/files_sharing/tests/ApiTest.php +++ b/apps/files_sharing/tests/ApiTest.php @@ -28,6 +28,7 @@ */ namespace OCA\Files_Sharing\Tests; + use OCP\AppFramework\OCS\OCSBadRequestException; use OCP\AppFramework\OCS\OCSException; use OCP\AppFramework\OCS\OCSForbiddenException; @@ -49,6 +50,9 @@ class ApiTest extends TestCase { /** @var \OCP\Files\Folder */ private $userFolder; + /** @var string */ + private $subsubfolder; + protected function setUp() { parent::setUp(); @@ -84,27 +88,10 @@ class ApiTest extends TestCase { } /** - * @param array $data - * @return \OCP\IRequest - */ - private function createRequest(array $data) { - $request = $this->getMockBuilder('\OCP\IRequest')->getMock(); - $request->method('getParam') - ->will($this->returnCallback(function($param, $default = null) use ($data) { - if (isset($data[$param])) { - return $data[$param]; - } - return $default; - })); - return $request; - } - - /** - * @param \OCP\IRequest $request * @param string $userId The userId of the caller * @return \OCA\Files_Sharing\API\Share20OCS */ - private function createOCS($request, $userId) { + private function createOCS($userId) { $currentUser = \OC::$server->getUserManager()->get($userId); $l = $this->getMockBuilder('\OCP\IL10N')->getMock(); @@ -115,7 +102,7 @@ class ApiTest extends TestCase { return new \OCA\Files_Sharing\API\Share20OCS( self::APP_NAME, - $request, + $this->getMockBuilder('OCP\IRequest')->getMock(), $this->shareManager, \OC::$server->getGroupManager(), \OC::$server->getUserManager(), @@ -130,48 +117,34 @@ class ApiTest extends TestCase { * @medium */ function testCreateShareUserFile() { - // simulate a post request - $data['path'] = $this->filename; - $data['shareWith'] = self::TEST_FILES_SHARING_API_USER2; - $data['shareType'] = \OCP\Share::SHARE_TYPE_USER; - - $request = $this->createRequest($data); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->createShare(); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); + $result = $ocs->createShare($this->filename, \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2); $ocs->cleanup(); - $data = $result->getData()['data']; + $data = $result->getData(); $this->assertEquals(19, $data['permissions']); $this->assertEmpty($data['expiration']); $this->shareManager->getShareById('ocinternal:'.$data['id']); - $request = $this->createRequest([]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); $ocs->deleteShare($data['id']); $ocs->cleanup(); } function testCreateShareUserFolder() { - // simulate a post request - $data['path'] = $this->folder; - $data['shareWith'] = self::TEST_FILES_SHARING_API_USER2; - $data['shareType'] = \OCP\Share::SHARE_TYPE_USER; - - $request = $this->createRequest($data); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->createShare(); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); + $result = $ocs->createShare($this->folder, \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2); $ocs->cleanup(); - $data = $result->getData()['data']; + $data = $result->getData(); $this->assertEquals(31, $data['permissions']); $this->assertEmpty($data['expiration']); $this->shareManager->getShareById('ocinternal:'.$data['id']); - $request = $this->createRequest([]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); $ocs->deleteShare($data['id']); $ocs->cleanup(); @@ -179,63 +152,44 @@ class ApiTest extends TestCase { function testCreateShareGroupFile() { - // simulate a post request - $data['path'] = $this->filename; - $data['shareWith'] = self::TEST_FILES_SHARING_API_GROUP1; - $data['shareType'] = \OCP\Share::SHARE_TYPE_GROUP; - - $request = $this->createRequest($data); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->createShare(); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); + $result = $ocs->createShare($this->filename, \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_GROUP, self::TEST_FILES_SHARING_API_GROUP1); $ocs->cleanup(); - $data = $result->getData()['data']; + $data = $result->getData(); $this->assertEquals(19, $data['permissions']); $this->assertEmpty($data['expiration']); $this->shareManager->getShareById('ocinternal:'.$data['id']); - $request = $this->createRequest([]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); $ocs->deleteShare($data['id']); $ocs->cleanup(); } function testCreateShareGroupFolder() { - // simulate a post request - $data['path'] = $this->folder; - $data['shareWith'] = self::TEST_FILES_SHARING_API_GROUP1; - $data['shareType'] = \OCP\Share::SHARE_TYPE_GROUP; - - $request = $this->createRequest($data); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->createShare(); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); + $result = $ocs->createShare($this->folder, \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_GROUP, self::TEST_FILES_SHARING_API_GROUP1); $ocs->cleanup(); - $data = $result->getData()['data']; + $data = $result->getData(); $this->assertEquals(31, $data['permissions']); $this->assertEmpty($data['expiration']); $this->shareManager->getShareById('ocinternal:'.$data['id']); - $request = $this->createRequest([]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); $ocs->deleteShare($data['id']); $ocs->cleanup(); } public function testCreateShareLink() { - // simulate a post request - $data['path'] = $this->folder; - $data['shareType'] = \OCP\Share::SHARE_TYPE_LINK; - - $request = $this->createRequest($data); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->createShare(); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); + $result = $ocs->createShare($this->folder, \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_LINK); $ocs->cleanup(); - $data = $result->getData()['data']; + $data = $result->getData(); $this->assertEquals(1, $data['permissions']); $this->assertEmpty($data['expiration']); $this->assertTrue(is_string($data['token'])); @@ -246,24 +200,17 @@ class ApiTest extends TestCase { $this->shareManager->getShareById('ocinternal:'.$data['id']); - $request = $this->createRequest([]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); $ocs->deleteShare($data['id']); $ocs->cleanup(); } public function testCreateShareLinkPublicUpload() { - // simulate a post request - $data['path'] = $this->folder; - $data['shareType'] = \OCP\Share::SHARE_TYPE_LINK; - $data['publicUpload'] = 'true'; - - $request = $this->createRequest($data); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->createShare(); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); + $result = $ocs->createShare($this->folder, \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_LINK, null, 'true'); $ocs->cleanup(); - $data = $result->getData()['data']; + $data = $result->getData(); $this->assertEquals( \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | @@ -280,8 +227,7 @@ class ApiTest extends TestCase { $this->shareManager->getShareById('ocinternal:'.$data['id']); - $request = $this->createRequest([]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); $ocs->deleteShare($data['id']); $ocs->cleanup(); } @@ -291,30 +237,18 @@ class ApiTest extends TestCase { $appConfig = \OC::$server->getAppConfig(); $appConfig->setValue('core', 'shareapi_enforce_links_password', 'yes'); - // don't allow to share link without a password - $data['path'] = $this->folder; - $data['shareType'] = \OCP\Share::SHARE_TYPE_LINK; - - $request = $this->createRequest($data); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); try { - $ocs->createShare(); + $ocs->createShare($this->folder, \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_LINK); $this->fail(); } catch (OCSForbiddenException $e) { } $ocs->cleanup(); - // don't allow to share link without a empty password - $data = []; - $data['path'] = $this->folder; - $data['shareType'] = \OCP\Share::SHARE_TYPE_LINK; - $data['password'] = ''; - - $request = $this->createRequest($data); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); try { - $ocs->createShare(); + $ocs->createShare($this->folder, \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_LINK, null, 'false', ''); $this->fail(); } catch (OCSForbiddenException $e) { @@ -322,33 +256,19 @@ class ApiTest extends TestCase { $ocs->cleanup(); // share with password should succeed - $data = []; - $data['path'] = $this->folder; - $data['shareType'] = \OCP\Share::SHARE_TYPE_LINK; - $data['password'] = 'foo'; - - $request = $this->createRequest($data); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->createShare(); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); + $result = $ocs->createShare($this->folder, \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_LINK, null, 'false', 'bar'); $ocs->cleanup(); - $data = $result->getData()['data']; + $data = $result->getData(); // setting new password should succeed - $data2 = [ - 'password' => 'bar', - ]; - $request = $this->createRequest($data2); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->updateShare($data['id']); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); + $ocs->updateShare($data['id'], null, 'bar'); $ocs->cleanup(); // removing password should fail - $data2 = [ - 'password' => '', - ]; - $request = $this->createRequest($data2); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); try { $ocs->updateShare($data['id']); $this->fail(); @@ -358,8 +278,7 @@ class ApiTest extends TestCase { $ocs->cleanup(); // cleanup - $request = $this->createRequest([]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); $ocs->deleteShare($data['id']); $ocs->cleanup(); @@ -373,58 +292,40 @@ class ApiTest extends TestCase { // sharing file to a user should work if shareapi_exclude_groups is set // to no \OC::$server->getAppConfig()->setValue('core', 'shareapi_exclude_groups', 'no'); - $post['path'] = $this->filename; - $post['shareWith'] = self::TEST_FILES_SHARING_API_USER2; - $post['shareType'] = \OCP\Share::SHARE_TYPE_USER; - $request = $this->createRequest($post); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->createShare(); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); + $result = $ocs->createShare($this->filename, \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2); $ocs->cleanup(); - $data = $result->getData()['data']; + $data = $result->getData(); $this->shareManager->getShareById('ocinternal:'.$data['id']); - $request = $this->createRequest([]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->deleteShare($data['id']); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); + $ocs->deleteShare($data['id']); $ocs->cleanup(); // exclude groups, but not the group the user belongs to. Sharing should still work \OC::$server->getAppConfig()->setValue('core', 'shareapi_exclude_groups', 'yes'); \OC::$server->getAppConfig()->setValue('core', 'shareapi_exclude_groups_list', 'admin,group1,group2'); - $post = []; - $post['path'] = $this->filename; - $post['shareWith'] = self::TEST_FILES_SHARING_API_USER2; - $post['shareType'] = \OCP\Share::SHARE_TYPE_USER; - - $request = $this->createRequest($post); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->createShare(); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); + $result = $ocs->createShare($this->filename, \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2); $ocs->cleanup(); - $data = $result->getData()['data']; + $data = $result->getData(); $this->shareManager->getShareById('ocinternal:' . $data['id']); - $request = $this->createRequest([]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->deleteShare($data['id']); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); + $ocs->deleteShare($data['id']); $ocs->cleanup(); // now we exclude the group the user belongs to ('group'), sharing should fail now \OC::$server->getAppConfig()->setValue('core', 'shareapi_exclude_groups_list', 'admin,group'); - $post = []; - $post['path'] = $this->filename; - $post['shareWith'] = self::TEST_FILES_SHARING_API_USER2; - $post['shareType'] = \OCP\Share::SHARE_TYPE_USER; - - $request = $this->createRequest($post); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $ocs->createShare(); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); + $ocs->createShare($this->filename, \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2); $ocs->cleanup(); // cleanup @@ -448,12 +349,11 @@ class ApiTest extends TestCase { $share = $this->shareManager->createShare($share); - $request = $this->createRequest([]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); $result = $ocs->getShares(); $ocs->cleanup(); - $this->assertTrue(count($result->getData()['data']) === 1); + $this->assertTrue(count($result->getData()) === 1); $this->shareManager->deleteShare($share); } @@ -477,12 +377,11 @@ class ApiTest extends TestCase { ->setPermissions(31); $share2 = $this->shareManager->createShare($share2); - $request = $this->createRequest(['shared_with_me' => 'true']); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER2); - $result = $ocs->getShares(); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER2); + $result = $ocs->getShares('true'); $ocs->cleanup(); - $this->assertTrue(count($result->getData()['data']) === 2); + $this->assertCount(2, $result->getData()); $this->shareManager->deleteShare($share1); $this->shareManager->deleteShare($share2); @@ -492,16 +391,11 @@ class ApiTest extends TestCase { * @medium */ function testPublicLinkUrl() { - // simulate a post request - $post['path'] = $this->folder; - $post['shareType'] = \OCP\Share::SHARE_TYPE_LINK; - - $request = $this->createRequest($post); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->createShare(); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); + $result = $ocs->createShare($this->folder, \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_LINK); $ocs->cleanup(); - $data = $result->getData()['data']; + $data = $result->getData(); // check if we have a token $this->assertTrue(is_string($data['token'])); @@ -512,34 +406,30 @@ class ApiTest extends TestCase { $this->assertEquals($url, $data['url']); // check for link in getall shares - $request = $this->createRequest([]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); $result = $ocs->getShares(); $ocs->cleanup(); - $data = $result->getData()['data']; + $data = $result->getData(); $this->assertEquals($url, current($data)['url']); // check for path - $request = $this->createRequest(['path' => $this->folder]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); $result = $ocs->getShares(); $ocs->cleanup(); - $data = $result->getData()['data']; + $data = $result->getData(); $this->assertEquals($url, current($data)['url']); // check in share id - $request = $this->createRequest([]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); $result = $ocs->getShare($id); $ocs->cleanup(); - $data = $result->getData()['data']; + $data = $result->getData(); $this->assertEquals($url, current($data)['url']); - $request = $this->createRequest([]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); $ocs->deleteShare($id); $ocs->cleanup(); } @@ -566,13 +456,12 @@ class ApiTest extends TestCase { ->setPermissions(1); $share2 = $this->shareManager->createShare($share); - $request = $this->createRequest(['path' => $this->filename]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); $result = $ocs->getShares(); $ocs->cleanup(); // test should return one share created from testCreateShare() - $this->assertTrue(count($result->getData()['data']) === 2); + $this->assertTrue(count($result->getData()) === 2); $this->shareManager->deleteShare($share1); $this->shareManager->deleteShare($share2); @@ -601,22 +490,20 @@ class ApiTest extends TestCase { ->setPermissions(19); $share2 = $this->shareManager->createShare($share2); - $request = $this->createRequest(['path' => $this->filename]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); $result = $ocs->getShares(); $ocs->cleanup(); // test should return one share - $this->assertTrue(count($result->getData()['data']) === 1); + $this->assertTrue(count($result->getData()) === 1); // now also ask for the reshares - $request = $this->createRequest(['path' => $this->filename, 'reshares' => 'true']); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->getShares(); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); + $result = $ocs->getShares('false', 'true', 'false', $this->filename); $ocs->cleanup(); // now we should get two shares, the initial share and the reshare - $this->assertCount(2, $result->getData()['data']); + $this->assertCount(2, $result->getData()); $this->shareManager->deleteShare($share1); $this->shareManager->deleteShare($share2); @@ -637,13 +524,12 @@ class ApiTest extends TestCase { $share1 = $this->shareManager->createShare($share1); // call getShare() with share ID - $request = $this->createRequest([]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); $result = $ocs->getShare($share1->getId()); $ocs->cleanup(); // test should return one share created from testCreateShare() - $this->assertEquals(1, count($result->getData()['data'])); + $this->assertEquals(1, count($result->getData())); $this->shareManager->deleteShare($share1); } @@ -670,13 +556,12 @@ class ApiTest extends TestCase { $share2 = $this->shareManager->createShare($share2); - $request = $this->createRequest(['path' => $this->folder, 'subfiles' => 'true']); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->getShares(); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); + $result = $ocs->getShares('false', 'false', 'true', $this->folder); $ocs->cleanup(); // test should return one share within $this->folder - $this->assertTrue(count($result->getData()['data']) === 1); + $this->assertTrue(count($result->getData()) === 1); $this->shareManager->deleteShare($share1); $this->shareManager->deleteShare($share2); @@ -692,10 +577,9 @@ class ApiTest extends TestCase { ->setPermissions(19); $share1 = $this->shareManager->createShare($share1); - $request = $this->createRequest(['path' => $this->filename, 'subfiles' => 'true']); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); try { - $ocs->getShares(); + $ocs->getShares('false', 'false', 'true', $this->filename); $this->fail(); } catch (OCSBadRequestException $e) { $this->assertEquals('Not a directory', $e->getMessage()); @@ -743,13 +627,12 @@ class ApiTest extends TestCase { ); foreach ($testValues as $value) { - $request = $this->createRequest(['path' => $value['query'], 'subfiles' => 'true']); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER2); - $result = $ocs->getShares(); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER2); + $result = $ocs->getShares('false', 'false', 'true', $value['query']); $ocs->cleanup(); // test should return one share within $this->folder - $data = $result->getData()['data']; + $data = $result->getData(); $this->assertEquals($value['expectedResult'], $data[0]['path']); } @@ -782,13 +665,12 @@ class ApiTest extends TestCase { ->setPermissions(1); $share2 = $this->shareManager->createShare($share2); - $request = $this->createRequest(['path' => '/', 'subfiles' => 'true']); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER2); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER2); $result = $ocs->getShares(); $ocs->cleanup(); // test should return one share within $this->folder - $data = $result->getData()['data']; + $data = $result->getData(); // we should get exactly one result $this->assertCount(1, $data); @@ -833,12 +715,12 @@ class ApiTest extends TestCase { * Test as recipient */ $request = $this->createRequest(['path' => '/', 'subfiles' => 'true']); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER3); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER3); $result = $ocs->getShares(); $ocs->cleanup(); // test should return one share within $this->folder - $data = $result->getData()['data']; + $data = $result->getData(); // we should get exactly one result $this->assertCount(1, $data); @@ -847,13 +729,12 @@ class ApiTest extends TestCase { /* * Test for first owner/initiator */ - $request = $this->createRequest([]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); $result = $ocs->getShares(); $ocs->cleanup(); // test should return one share within $this->folder - $data = $result->getData()['data']; + $data = $result->getData(); // we should get exactly one result $this->assertCount(1, $data); @@ -862,13 +743,12 @@ class ApiTest extends TestCase { /* * Test for second initiator */ - $request = $this->createRequest([]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER2); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER2); $result = $ocs->getShares(); $ocs->cleanup(); // test should return one share within $this->folder - $data = $result->getData()['data']; + $data = $result->getData(); // we should get exactly one result $this->assertCount(1, $data); @@ -909,23 +789,21 @@ class ApiTest extends TestCase { ->setPermissions(1); $share3 = $this->shareManager->createShare($share3); - $request = $this->createRequest(['path' => $this->subfolder]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER2); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER2); $result1 = $ocs->getShares(); $ocs->cleanup(); // test should return one share within $this->folder - $data1 = $result1->getData()['data']; + $data1 = $result1->getData(); $this->assertCount(1, $data1); $s1 = reset($data1); - $request = $this->createRequest(['path' => $this->folder.$this->subfolder]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER2); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER2); $result2 = $ocs->getShares(); $ocs->cleanup(); // test should return one share within $this->folder - $data2 = $result2->getData()['data']; + $data2 = $result2->getData(); $this->assertCount(1, $data2); $s2 = reset($data2); @@ -970,13 +848,12 @@ class ApiTest extends TestCase { ->setPermissions(1); $share3 = $this->shareManager->createShare($share3); - $request = $this->createRequest(['path' => '/', 'subfiles' => 'true']); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER3); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER3); $result = $ocs->getShares(); $ocs->cleanup(); // test should return one share within $this->folder - $data = $result->getData()['data']; + $data = $result->getData(); // we should get exactly one result $this->assertCount(1, $data); @@ -992,8 +869,7 @@ class ApiTest extends TestCase { * @medium */ function testGetShareFromUnknownId() { - $request = $this->createRequest(['path' => '/', 'subfiles' => 'true']); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER3); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER3); try { $ocs->getShare(0); $this->fail(); @@ -1026,12 +902,8 @@ class ApiTest extends TestCase { $share2 = $this->shareManager->createShare($share2); // update permissions - $params = array(); - $params['permissions'] = 1; - - $request = $this->createRequest(['permissions' => 1]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->updateShare($share1->getId()); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); + $ocs->updateShare($share1->getId(), 1); $ocs->cleanup(); $share1 = $this->shareManager->getShareById('ocinternal:' . $share1->getId()); @@ -1040,17 +912,15 @@ class ApiTest extends TestCase { // update password for link share $this->assertNull($share2->getPassword()); - $request = $this->createRequest(['password' => 'foo']); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $ocs->updateShare($share2->getId()); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); + $ocs->updateShare($share2->getId(), null, 'foo'); $ocs->cleanup(); $share2 = $this->shareManager->getShareById('ocinternal:' . $share2->getId()); $this->assertNotNull($share2->getPassword()); - $request = $this->createRequest(['password' => '']); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $ocs->updateShare($share2->getId()); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); + $ocs->updateShare($share2->getId(), null, ''); $ocs->cleanup(); $share2 = $this->shareManager->getShareById('ocinternal:' . $share2->getId()); @@ -1074,8 +944,7 @@ class ApiTest extends TestCase { ->setPermissions(19); $share1 = $this->shareManager->createShare($share1); - $request = $this->createRequest(['permissions' => \OCP\Constants::PERMISSION_ALL]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); try { $ocs->updateShare($share1->getId()); $this->fail(); @@ -1104,9 +973,8 @@ class ApiTest extends TestCase { $share1 = $this->shareManager->createShare($share1); // update public upload - $request = $this->createRequest(['publicUpload' => 'true']); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->updateShare($share1->getId()); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); + $ocs->updateShare($share1->getId(), null, null, 'true'); $ocs->cleanup(); $share1 = $this->shareManager->getShareById($share1->getFullId()); @@ -1148,9 +1016,8 @@ class ApiTest extends TestCase { $dateOutOfRange->add(new \DateInterval('P8D')); // update expire date to a valid value - $request = $this->createRequest(['expireDate' => $dateWithinRange->format('Y-m-d')]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->updateShare($share1->getId()); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); + $ocs->updateShare($share1->getId(), null, null, null, $dateWithinRange->format('Y-m-d')); $ocs->cleanup(); $share1 = $this->shareManager->getShareById($share1->getFullId()); @@ -1159,8 +1026,7 @@ class ApiTest extends TestCase { $this->assertEquals($dateWithinRange, $share1->getExpirationDate()); // update expire date to a value out of range - $request = $this->createRequest(['expireDate' => $dateOutOfRange->format('Y-m-d')]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); try { $ocs->updateShare($share1->getId()); $this->fail(); @@ -1175,8 +1041,7 @@ class ApiTest extends TestCase { $this->assertEquals($dateWithinRange, $share1->getExpirationDate()); // Try to remove expire date - $request = $this->createRequest(['expireDate' => '']); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); try { $ocs->updateShare($share1->getId()); $this->fail(); @@ -1217,14 +1082,12 @@ class ApiTest extends TestCase { ->setPermissions(1); $share2 = $this->shareManager->createShare($share1); - $request = $this->createRequest([]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->deleteShare($share1->getId()); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); + $ocs->deleteShare($share1->getId()); $ocs->cleanup(); - $request = $this->createRequest([]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->deleteShare($share2->getId()); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); + $ocs->deleteShare($share2->getId()); $ocs->cleanup(); $this->assertEmpty($this->shareManager->getSharesBy(self::TEST_FILES_SHARING_API_USER2, \OCP\Share::SHARE_TYPE_USER)); @@ -1254,9 +1117,8 @@ class ApiTest extends TestCase { $share2 = $this->shareManager->createShare($share2); // test if we can unshare the link again - $request = $this->createRequest([]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER2); - $result = $ocs->deleteShare($share2->getId()); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER2); + $ocs->deleteShare($share2->getId()); $ocs->cleanup(); $this->shareManager->deleteShare($share1); @@ -1269,8 +1131,6 @@ class ApiTest extends TestCase { // user 1 shares a folder with user2 self::loginHelper(self::TEST_FILES_SHARING_API_USER1); - $fileInfo = $this->view->getFileInfo($this->folder); - $share = $this->share( \OCP\Share::SHARE_TYPE_USER, $this->folder, @@ -1345,8 +1205,6 @@ class ApiTest extends TestCase { // logging in will auto-mount the temp storage for user1 as well self::loginHelper(self::TEST_FILES_SHARING_API_USER1); - $fileInfo = $this->view->getFileInfo($this->folder); - // user 1 shares the mount point folder with user2 $share = $this->share( \OCP\Share::SHARE_TYPE_USER, @@ -1368,7 +1226,8 @@ class ApiTest extends TestCase { $this->shareManager->deleteShare($share); - \OC_Hook::clear('OC_Filesystem', 'post_initMountPoints', '\OCA\Files_Sharing\Tests\ApiTest', 'initTestMountPointsHook'); + \OC_Hook::clear('OC_Filesystem', 'post_initMountPoints'); + \OC_Hook::clear('\OCA\Files_Sharing\Tests\ApiTest', 'initTestMountPointsHook'); } /** * @expectedException \Exception @@ -1473,15 +1332,10 @@ class ApiTest extends TestCase { * @dataProvider datesProvider */ public function testPublicLinkExpireDate($date, $valid) { - $request = $this->createRequest([ - 'path' => $this->folder, - 'shareType' => \OCP\Share::SHARE_TYPE_LINK, - 'expireDate' => $date, - ]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); try { - $result = $ocs->createShare(); + $result = $ocs->createShare($this->folder, \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_LINK, null, 'false', '', $date); $this->assertTrue($valid); } catch (OCSNotFoundException $e) { $this->assertFalse($valid); @@ -1491,7 +1345,7 @@ class ApiTest extends TestCase { } $ocs->cleanup(); - $data = $result->getData()['data']; + $data = $result->getData(); $this->assertTrue(is_string($data['token'])); $this->assertEquals($date, substr($data['expiration'], 0, 10)); @@ -1516,16 +1370,11 @@ class ApiTest extends TestCase { $date = new \DateTime(); $date->add(new \DateInterval('P5D')); - $request = $this->createRequest([ - 'path' => $this->folder, - 'shareType' => \OCP\Share::SHARE_TYPE_LINK, - 'expireDate' => $date->format('Y-m-d'), - ]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->createShare(); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); + $result = $ocs->createShare($this->filename, \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_LINK, null, 'false', '', $date->format('Y-m-d')); $ocs->cleanup(); - $data = $result->getData()['data']; + $data = $result->getData(); $this->assertTrue(is_string($data['token'])); $this->assertEquals($date->format('Y-m-d') . ' 00:00:00', $data['expiration']); @@ -1553,15 +1402,10 @@ class ApiTest extends TestCase { $date = new \DateTime(); $date->add(new \DateInterval('P8D')); - $request = $this->createRequest([ - 'path' => $this->folder, - 'shareType' => \OCP\Share::SHARE_TYPE_LINK, - 'expireDate' => $date->format('Y-m-d'), - ]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); try { - $ocs->createShare(); + $ocs->createShare($this->filename, \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_LINK, null, 'false', '', $date->format('Y-m-d')); $this->fail(); } catch (OCSException $e) { $this->assertEquals(404, $e->getCode()); @@ -1579,15 +1423,10 @@ class ApiTest extends TestCase { $date = new \DateTime(); $date->sub(new \DateInterval('P8D')); - $request = $this->createRequest([ - 'path' => $this->folder, - 'shareType' => \OCP\Share::SHARE_TYPE_LINK, - 'expireDate' => $date->format('Y-m-d'), - ]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); try { - $result = $ocs->createShare(); + $ocs->createShare($this->filename, \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_LINK, null, 'false', '', $date->format('Y-m-d')); $this->fail(); } catch(OCSException $e) { $this->assertEquals(404, $e->getCode()); @@ -1605,39 +1444,26 @@ class ApiTest extends TestCase { */ public function testInvisibleSharesUser() { // simulate a post request - $request = $this->createRequest([ - 'path' => $this->folder, - 'shareWith' => self::TEST_FILES_SHARING_API_USER2, - 'shareType' => \OCP\Share::SHARE_TYPE_USER - ]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->createShare(); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); + $result = $ocs->createShare($this->folder, \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2); $ocs->cleanup(); - $data = $result->getData()['data']; + $data = $result->getData(); $topId = $data['id']; - $request = $this->createRequest([ - 'path' => $this->folder . $this->subfolder, - 'shareType' => \OCP\Share::SHARE_TYPE_LINK, - ]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER2); - $result = $ocs->createShare(); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER2); + $ocs->createShare($this->folder, \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_LINK); $ocs->cleanup(); - $request = $this->createRequest([]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->deleteShare($topId); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); + $ocs->deleteShare($topId); $ocs->cleanup(); - $request = $this->createRequest([ - 'reshares' => 'true', - ]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); $result = $ocs->getShares(); $ocs->cleanup(); - $this->assertEmpty($result->getData()['data']); + $this->assertEmpty($result->getData()); } /** @@ -1646,38 +1472,25 @@ class ApiTest extends TestCase { */ public function testInvisibleSharesGroup() { // simulate a post request - $request = $this->createRequest([ - 'path' => $this->folder, - 'shareWith' => self::TEST_FILES_SHARING_API_GROUP1, - 'shareType' => \OCP\Share::SHARE_TYPE_GROUP - ]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->createShare(); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); + $result = $ocs->createShare($this->folder, \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_GROUP, self::TEST_FILES_SHARING_API_GROUP1); $ocs->cleanup(); - $data = $result->getData()['data']; + $data = $result->getData(); $topId = $data['id']; - $request = $this->createRequest([ - 'path' => $this->folder . $this->subfolder, - 'shareType' => \OCP\Share::SHARE_TYPE_LINK, - ]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER2); - $result = $ocs->createShare(); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER2); + $ocs->createShare($this->folder, \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_LINK); $ocs->cleanup(); - $request = $this->createRequest([]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->deleteShare($topId); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); + $ocs->deleteShare($topId); $ocs->cleanup(); - $request = $this->createRequest([ - 'reshares' => 'true', - ]); - $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); + $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1); $result = $ocs->getShares(); $ocs->cleanup(); - $this->assertEmpty($result->getData()['data']); + $this->assertEmpty($result->getData()); } } diff --git a/apps/files_sharing/tests/CapabilitiesTest.php b/apps/files_sharing/tests/CapabilitiesTest.php index 0c4a68b997c..254f7cdaa7c 100644 --- a/apps/files_sharing/tests/CapabilitiesTest.php +++ b/apps/files_sharing/tests/CapabilitiesTest.php @@ -232,6 +232,7 @@ class CapabilitiesTest extends \Test\TestCase { ]; $result = $this->getResults($map); $this->assertTrue($result['public']['upload']); + $this->assertTrue($result['public']['upload_files_drop']); } public function testLinkNoPublicUpload() { @@ -242,6 +243,7 @@ class CapabilitiesTest extends \Test\TestCase { ]; $result = $this->getResults($map); $this->assertFalse($result['public']['upload']); + $this->assertFalse($result['public']['upload_files_drop']); } public function testNoGroupSharing() { diff --git a/apps/files_sharing/tests/API/ShareesTest.php b/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php index 041b45216af..161cc8a184b 100644 --- a/apps/files_sharing/tests/API/ShareesTest.php +++ b/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php @@ -23,11 +23,12 @@ * */ -namespace OCA\Files_Sharing\Tests\API; +namespace OCA\Files_Sharing\Tests\Controller; -use OCA\Files_Sharing\API\Sharees; +use OCA\Files_Sharing\Controller\ShareesAPIController; use OCA\Files_Sharing\Tests\TestCase; use OCP\AppFramework\Http; +use OCP\AppFramework\OCS\OCSBadRequestException; use OCP\Share; /** @@ -37,7 +38,7 @@ use OCP\Share; * * @package OCA\Files_Sharing\Tests\API */ -class ShareesTest extends TestCase { +class ShareesAPIControllerTest extends TestCase { /** @var Sharees */ protected $sharees; @@ -86,14 +87,15 @@ class ShareesTest extends TestCase { ->disableOriginalConstructor() ->getMock(); - $this->sharees = new Sharees( + $this->sharees = new ShareesAPIController( + 'files_sharing', + $this->request, $this->groupManager, $this->userManager, $this->contactsManager, $this->getMockBuilder('OCP\IConfig')->disableOriginalConstructor()->getMock(), $this->session, $this->getMockBuilder('OCP\IURLGenerator')->disableOriginalConstructor()->getMock(), - $this->request, $this->getMockBuilder('OCP\ILogger')->disableOriginalConstructor()->getMock(), $this->shareManager ); @@ -943,6 +945,58 @@ class ShareesTest extends TestCase { [], true, ], + // contact with space + [ + 'user name@localhost', + [ + [ + 'FN' => 'User3 @ Localhost', + ], + [ + 'FN' => 'User2 @ Localhost', + 'CLOUD' => [ + ], + ], + [ + 'FN' => 'User Name @ Localhost', + 'CLOUD' => [ + 'user name@localhost', + ], + ], + ], + false, + [ + ['label' => 'User Name @ Localhost', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'user name@localhost', 'server' => 'localhost']], + ], + [], + true, + ], + // remote with space, no contact + [ + 'user space@remote', + [ + [ + 'FN' => 'User3 @ Localhost', + ], + [ + 'FN' => 'User2 @ Localhost', + 'CLOUD' => [ + ], + ], + [ + 'FN' => 'User @ Localhost', + 'CLOUD' => [ + 'username@localhost', + ], + ], + ], + false, + [ + ['label' => 'user space@remote', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'user space@remote']], + ], + [], + true, + ], ]; } @@ -1084,8 +1138,11 @@ class ShareesTest extends TestCase { * @param bool $allowGroupSharing */ public function testSearch($getData, $apiSetting, $enumSetting, $remoteSharingEnabled, $search, $itemType, $shareTypes, $page, $perPage, $shareWithGroupOnly, $shareeEnumeration, $allowGroupSharing) { - $oldGet = $_GET; - $_GET = $getData; + $search = isset($getData['search']) ? $getData['search'] : ''; + $itemType = isset($getData['itemType']) ? $getData['itemType'] : null; + $page = isset($getData['page']) ? $getData['page'] : 1; + $perPage = isset($getData['perPage']) ? $getData['perPage'] : 200; + $shareType = isset($getData['shareType']) ? $getData['shareType'] : null; $config = $this->getMockBuilder('OCP\IConfig') ->disableOriginalConstructor() @@ -1102,15 +1159,17 @@ class ShareesTest extends TestCase { ->method('allowGroupSharing') ->willReturn($allowGroupSharing); - $sharees = $this->getMockBuilder('\OCA\Files_Sharing\API\Sharees') + /** @var \PHPUnit_Framework_MockObject_MockObject|\OCA\Files_Sharing\Controller\ShareesAPIController $sharees */ + $sharees = $this->getMockBuilder('\OCA\Files_Sharing\Controller\ShareesAPIController') ->setConstructorArgs([ + 'files_sharing', + $this->getMockBuilder('OCP\IRequest')->disableOriginalConstructor()->getMock(), $this->groupManager, $this->userManager, $this->contactsManager, $config, $this->session, $this->getMockBuilder('OCP\IURLGenerator')->disableOriginalConstructor()->getMock(), - $this->getMockBuilder('OCP\IRequest')->disableOriginalConstructor()->getMock(), $this->getMockBuilder('OCP\ILogger')->disableOriginalConstructor()->getMock(), $this->shareManager ]) @@ -1129,20 +1188,17 @@ class ShareesTest extends TestCase { $this->assertSame($shareTypes, $ishareTypes); $this->assertSame($page, $ipage); $this->assertSame($perPage, $iperPage); - return new \OC_OCS_Result([]); + return new Http\DataResponse(); }); $sharees->expects($this->any()) ->method('isRemoteSharingAllowed') ->with($itemType) ->willReturn($remoteSharingEnabled); - /** @var \PHPUnit_Framework_MockObject_MockObject|\OCA\Files_Sharing\API\Sharees $sharees */ - $this->assertInstanceOf('\OC_OCS_Result', $sharees->search()); + $this->assertInstanceOf('\OCP\AppFramework\Http\DataResponse', $sharees->search($search, $itemType, $page, $perPage, $shareType)); $this->assertSame($shareWithGroupOnly, $this->invokePrivate($sharees, 'shareWithGroupOnly')); $this->assertSame($shareeEnumeration, $this->invokePrivate($sharees, 'shareeEnumeration')); - - $_GET = $oldGet; } public function dataSearchInvalid() { @@ -1178,8 +1234,8 @@ class ShareesTest extends TestCase { * @param string $message */ public function testSearchInvalid($getData, $message) { - $oldGet = $_GET; - $_GET = $getData; + $page = isset($getData['page']) ? $getData['page'] : 1; + $perPage = isset($getData['perPage']) ? $getData['perPage'] : 200; $config = $this->getMockBuilder('OCP\IConfig') ->disableOriginalConstructor() @@ -1187,15 +1243,17 @@ class ShareesTest extends TestCase { $config->expects($this->never()) ->method('getAppValue'); - $sharees = $this->getMockBuilder('\OCA\Files_Sharing\API\Sharees') + /** @var \PHPUnit_Framework_MockObject_MockObject|\OCA\Files_Sharing\Controller\ShareesAPIController $sharees */ + $sharees = $this->getMockBuilder('\OCA\Files_Sharing\Controller\ShareesAPIController') ->setConstructorArgs([ + 'files_sharing', + $this->getMockBuilder('OCP\IRequest')->disableOriginalConstructor()->getMock(), $this->groupManager, $this->userManager, $this->contactsManager, $config, $this->session, $this->getMockBuilder('OCP\IURLGenerator')->disableOriginalConstructor()->getMock(), - $this->getMockBuilder('OCP\IRequest')->disableOriginalConstructor()->getMock(), $this->getMockBuilder('OCP\ILogger')->disableOriginalConstructor()->getMock(), $this->shareManager ]) @@ -1206,13 +1264,12 @@ class ShareesTest extends TestCase { $sharees->expects($this->never()) ->method('isRemoteSharingAllowed'); - /** @var \PHPUnit_Framework_MockObject_MockObject|\OCA\Files_Sharing\API\Sharees $sharees */ - $ocs = $sharees->search(); - $this->assertInstanceOf('\OC_OCS_Result', $ocs); - - $this->assertOCSError($ocs, $message); - - $_GET = $oldGet; + try { + $sharees->search('', null, $page, $perPage, null); + $this->fail(); + } catch (OCSBadRequestException $e) { + $this->assertEquals($message, $e->getMessage()); + } } public function dataIsRemoteSharingAllowed() { @@ -1339,16 +1396,17 @@ class ShareesTest extends TestCase { */ public function testSearchSharees($searchTerm, $itemType, array $shareTypes, $page, $perPage, $shareWithGroupOnly, $mockedUserResult, $mockedGroupsResult, $mockedRemotesResult, $expected, $nextLink) { - /** @var \PHPUnit_Framework_MockObject_MockObject|\OCA\Files_Sharing\API\Sharees $sharees */ - $sharees = $this->getMockBuilder('\OCA\Files_Sharing\API\Sharees') + /** @var \PHPUnit_Framework_MockObject_MockObject|\OCA\Files_Sharing\Controller\ShareesAPIController $sharees */ + $sharees = $this->getMockBuilder('\OCA\Files_Sharing\Controller\ShareesAPIController') ->setConstructorArgs([ + 'files_sharing', + $this->getMockBuilder('OCP\IRequest')->disableOriginalConstructor()->getMock(), $this->groupManager, $this->userManager, $this->contactsManager, $this->getMockBuilder('OCP\IConfig')->disableOriginalConstructor()->getMock(), $this->session, $this->getMockBuilder('OCP\IURLGenerator')->disableOriginalConstructor()->getMock(), - $this->getMockBuilder('OCP\IRequest')->disableOriginalConstructor()->getMock(), $this->getMockBuilder('OCP\ILogger')->disableOriginalConstructor()->getMock(), $this->shareManager ]) @@ -1379,9 +1437,8 @@ class ShareesTest extends TestCase { $this->invokePrivate($sharees, 'result', [$result]); }); - /** @var \OC_OCS_Result $ocs */ $ocs = $this->invokePrivate($sharees, 'searchSharees', [$searchTerm, $itemType, $shareTypes, $page, $perPage, $shareWithGroupOnly]); - $this->assertInstanceOf('\OC_OCS_Result', $ocs); + $this->assertInstanceOf('\OCP\AppFramework\Http\DataResponse', $ocs); $this->assertEquals($expected, $ocs->getData()); // Check if next link is set @@ -1393,12 +1450,12 @@ class ShareesTest extends TestCase { } } + /** + * @expectedException \OCP\AppFramework\OCS\OCSBadRequestException + * @expectedExceptionMessage Missing itemType + */ public function testSearchShareesNoItemType() { - /** @var \OC_OCS_Result $ocs */ - $ocs = $this->invokePrivate($this->sharees, 'searchSharees', ['', null, [], [], 0, 0, false]); - $this->assertInstanceOf('\OC_OCS_Result', $ocs); - - $this->assertOCSError($ocs, 'Missing itemType'); + $this->invokePrivate($this->sharees, 'searchSharees', ['', null, [], [], 0, 0, false]); } public function dataGetPaginationLink() { @@ -1446,20 +1503,6 @@ class ShareesTest extends TestCase { } /** - * @param \OC_OCS_Result $ocs - * @param string $message - */ - protected function assertOCSError(\OC_OCS_Result $ocs, $message) { - $this->assertSame(Http::STATUS_BAD_REQUEST, $ocs->getStatusCode(), 'Expected status code 400'); - $this->assertSame([], $ocs->getData(), 'Expected that no data is send'); - - $meta = $ocs->getMeta(); - $this->assertNotEmpty($meta); - $this->assertArrayHasKey('message', $meta); - $this->assertSame($message, $meta['message']); - } - - /** * @dataProvider dataTestSplitUserRemote * * @param string $remote diff --git a/apps/files_sharing/tests/External/ManagerTest.php b/apps/files_sharing/tests/External/ManagerTest.php index 931c1fed14d..096bbe85776 100644 --- a/apps/files_sharing/tests/External/ManagerTest.php +++ b/apps/files_sharing/tests/External/ManagerTest.php @@ -30,6 +30,7 @@ use OCA\FederatedFileSharing\DiscoveryManager; use OCA\Files_Sharing\External\Manager; use OCA\Files_Sharing\External\MountProvider; use OCA\Files_Sharing\Tests\TestCase; +use OCP\Http\Client\IClientService; use Test\Traits\UserTrait; /** @@ -48,8 +49,8 @@ class ManagerTest extends TestCase { /** @var \OC\Files\Mount\Manager */ private $mountManager; - /** @var \PHPUnit_Framework_MockObject_MockObject */ - private $httpHelper; + /** @var IClientService|\PHPUnit_Framework_MockObject_MockObject */ + private $clientService; private $uid; @@ -66,17 +67,17 @@ class ManagerTest extends TestCase { $this->createUser($this->uid, ''); $this->user = \OC::$server->getUserManager()->get($this->uid); $this->mountManager = new \OC\Files\Mount\Manager(); - $this->httpHelper = $httpHelper = $this->getMockBuilder('\OC\HTTPHelper')->disableOriginalConstructor()->getMock(); + $this->clientService = $this->getMockBuilder('\OCP\Http\Client\IClientService') + ->disableOriginalConstructor()->getMock(); $discoveryManager = new DiscoveryManager( \OC::$server->getMemCacheFactory(), \OC::$server->getHTTPClientService() ); - /** @var \OC\HTTPHelper $httpHelper */ $this->manager = new Manager( \OC::$server->getDatabaseConnection(), $this->mountManager, new StorageFactory(), - $httpHelper, + $this->clientService, \OC::$server->getNotificationManager(), $discoveryManager, $this->uid @@ -132,9 +133,17 @@ class ManagerTest extends TestCase { $this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}'); $this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}-1'); - $this->httpHelper->expects($this->at(0)) + $client = $this->getMockBuilder('OCP\Http\Client\IClient') + ->disableOriginalConstructor()->getMock(); + $this->clientService->expects($this->at(0)) + ->method('newClient') + ->willReturn($client); + $response = $this->getMockBuilder('OCP\Http\Client\IResponse') + ->disableOriginalConstructor()->getMock(); + $client->expects($this->once()) ->method('post') - ->with($this->stringStartsWith('http://localhost/ocs/v1.php/cloud/shares/' . $openShares[0]['remote_id']), $this->anything()); + ->with($this->stringStartsWith('http://localhost/ocs/v1.php/cloud/shares/' . $openShares[0]['remote_id']), $this->anything()) + ->willReturn($response); // Accept the first share $this->manager->acceptShare($openShares[0]['id']); @@ -167,9 +176,17 @@ class ManagerTest extends TestCase { $this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}'); $this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}-1'); - $this->httpHelper->expects($this->at(0)) + $client = $this->getMockBuilder('OCP\Http\Client\IClient') + ->disableOriginalConstructor()->getMock(); + $this->clientService->expects($this->at(0)) + ->method('newClient') + ->willReturn($client); + $response = $this->getMockBuilder('OCP\Http\Client\IResponse') + ->disableOriginalConstructor()->getMock(); + $client->expects($this->once()) ->method('post') - ->with($this->stringStartsWith('http://localhost/ocs/v1.php/cloud/shares/' . $openShares[1]['remote_id'] . '/decline'), $this->anything()); + ->with($this->stringStartsWith('http://localhost/ocs/v1.php/cloud/shares/' . $openShares[1]['remote_id'] . '/decline'), $this->anything()) + ->willReturn($response); // Decline the third share $this->manager->declineShare($openShares[1]['id']); @@ -194,12 +211,26 @@ class ManagerTest extends TestCase { $this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}'); $this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}-1'); - $this->httpHelper->expects($this->at(0)) + $client1 = $this->getMockBuilder('OCP\Http\Client\IClient') + ->disableOriginalConstructor()->getMock(); + $client2 = $this->getMockBuilder('OCP\Http\Client\IClient') + ->disableOriginalConstructor()->getMock(); + $this->clientService->expects($this->at(0)) + ->method('newClient') + ->willReturn($client1); + $this->clientService->expects($this->at(1)) + ->method('newClient') + ->willReturn($client2); + $response = $this->getMockBuilder('OCP\Http\Client\IResponse') + ->disableOriginalConstructor()->getMock(); + $client1->expects($this->once()) ->method('post') - ->with($this->stringStartsWith('http://localhost/ocs/v1.php/cloud/shares/' . $openShares[0]['remote_id'] . '/decline'), $this->anything()); - $this->httpHelper->expects($this->at(1)) + ->with($this->stringStartsWith('http://localhost/ocs/v1.php/cloud/shares/' . $openShares[0]['remote_id'] . '/decline'), $this->anything()) + ->willReturn($response); + $client2->expects($this->once()) ->method('post') - ->with($this->stringStartsWith('http://localhost/ocs/v1.php/cloud/shares/' . $acceptedShares[0]['remote_id'] . '/decline'), $this->anything()); + ->with($this->stringStartsWith('http://localhost/ocs/v1.php/cloud/shares/' . $acceptedShares[0]['remote_id'] . '/decline'), $this->anything()) + ->willReturn($response); $this->manager->removeUserShares($this->uid); $this->assertEmpty(self::invokePrivate($this->manager, 'getShares', [null]), 'Asserting all shares for the user have been deleted'); diff --git a/apps/files_trashbin/appinfo/register_command.php b/apps/files_trashbin/appinfo/register_command.php index 676e3f5891c..e0dafc60cd9 100644 --- a/apps/files_trashbin/appinfo/register_command.php +++ b/apps/files_trashbin/appinfo/register_command.php @@ -21,10 +21,16 @@ */ +use OCA\Files_Trashbin\AppInfo\Application; use OCA\Files_Trashbin\Command\CleanUp; +use OCA\Files_Trashbin\Command\ExpireTrash; +$app = new Application(); +$expiration = $app->getContainer()->query('Expiration'); $userManager = OC::$server->getUserManager(); $rootFolder = \OC::$server->getRootFolder(); $dbConnection = \OC::$server->getDatabaseConnection(); + /** @var Symfony\Component\Console\Application $application */ $application->add(new CleanUp($rootFolder, $userManager, $dbConnection)); +$application->add(new ExpireTrash($userManager, $expiration)); diff --git a/apps/files_trashbin/img/app.svg b/apps/files_trashbin/img/app.svg index b749f9879e6..cd169009e76 100644 --- a/apps/files_trashbin/img/app.svg +++ b/apps/files_trashbin/img/app.svg @@ -9,6 +9,7 @@ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" height="16" width="16" + viewBox="0 0 16 16" version="1.1" id="svg2" inkscape:version="0.48.5 r10040" diff --git a/apps/files_trashbin/lib/BackgroundJob/ExpireTrash.php b/apps/files_trashbin/lib/BackgroundJob/ExpireTrash.php index f2c16843b70..7d481afeb59 100644 --- a/apps/files_trashbin/lib/BackgroundJob/ExpireTrash.php +++ b/apps/files_trashbin/lib/BackgroundJob/ExpireTrash.php @@ -79,7 +79,7 @@ class ExpireTrash extends \OC\BackgroundJob\TimedJob { $this->userManager->callForAllUsers(function(IUser $user) { $uid = $user->getUID(); - if (!$this->setupFS($uid)) { + if ($user->getLastLogin() === 0 || !$this->setupFS($uid)) { return; } $dirContent = Helper::getTrashFiles('/', $uid, 'mtime'); diff --git a/apps/files_trashbin/lib/Command/ExpireTrash.php b/apps/files_trashbin/lib/Command/ExpireTrash.php new file mode 100644 index 00000000000..ff827718885 --- /dev/null +++ b/apps/files_trashbin/lib/Command/ExpireTrash.php @@ -0,0 +1,127 @@ +<?php +/** + * @author Thomas Müller <thomas.mueller@tmit.eu> + * + * @copyright Copyright (c) 2016, 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 OCA\Files_Trashbin\Command; + +use OCP\IUser; +use OCP\IUserManager; +use OCA\Files_Trashbin\Expiration; +use OCA\Files_Trashbin\Helper; +use OCA\Files_Trashbin\Trashbin; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Helper\ProgressBar; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class ExpireTrash extends Command { + + /** + * @var Expiration + */ + private $expiration; + + /** + * @var IUserManager + */ + private $userManager; + + /** + * @param IUserManager|null $userManager + * @param Expiration|null $expiration + */ + public function __construct(IUserManager $userManager = null, + Expiration $expiration = null) { + parent::__construct(); + + $this->userManager = $userManager; + $this->expiration = $expiration; + } + + protected function configure() { + $this + ->setName('trashbin:expire') + ->setDescription('Expires the users trashbin') + ->addArgument( + 'user_id', + InputArgument::OPTIONAL | InputArgument::IS_ARRAY, + 'expires the trashbin of the given user(s), if no user is given the trash for all users will be expired' + ); + } + + protected function execute(InputInterface $input, OutputInterface $output) { + + $maxAge = $this->expiration->getMaxAgeAsTimestamp(); + if (!$maxAge) { + $output->writeln("No expiry configured."); + return; + } + + $users = $input->getArgument('user_id'); + if (!empty($users)) { + foreach ($users as $user) { + if ($this->userManager->userExists($user)) { + $output->writeln("Remove deleted files of <info>$user</info>"); + $userObject = $this->userManager->get($user); + $this->expireTrashForUser($userObject); + } else { + $output->writeln("<error>Unknown user $user</error>"); + } + } + } else { + $p = new ProgressBar($output); + $p->start(); + $this->userManager->callForAllUsers(function(IUser $user) use ($p) { + $p->advance(); + $this->expireTrashForUser($user); + }); + $p->finish(); + $output->writeln(''); + } + } + + function expireTrashForUser(IUser $user) { + $uid = $user->getUID(); + if ($user->getLastLogin() === 0 || !$this->setupFS($uid)) { + return; + } + $dirContent = Helper::getTrashFiles('/', $uid, 'mtime'); + Trashbin::deleteExpiredFiles($dirContent, $uid); + } + + /** + * Act on behalf on trash item owner + * @param string $user + * @return boolean + */ + protected function setupFS($user) { + \OC_Util::tearDownFS(); + \OC_Util::setupFS($user); + + // Check if this user has a trashbin directory + $view = new \OC\Files\View('/' . $user); + if (!$view->is_dir('/files_trashbin/files')) { + return false; + } + + return true; + } +} diff --git a/apps/files_versions/appinfo/register_command.php b/apps/files_versions/appinfo/register_command.php index b991c72b944..bca869075aa 100644 --- a/apps/files_versions/appinfo/register_command.php +++ b/apps/files_versions/appinfo/register_command.php @@ -21,9 +21,14 @@ */ +use OCA\Files_Versions\AppInfo\Application; use OCA\Files_Versions\Command\CleanUp; +use OCA\Files_Versions\Command\ExpireVersions; +$app = new Application(); +$expiration = $app->getContainer()->query('Expiration'); $userManager = OC::$server->getUserManager(); $rootFolder = \OC::$server->getRootFolder(); /** @var Symfony\Component\Console\Application $application */ $application->add(new CleanUp($rootFolder, $userManager)); +$application->add(new ExpireVersions($userManager, $expiration)); diff --git a/apps/files_versions/img/app.svg b/apps/files_versions/img/app.svg index 862b0a6885e..831ef7fedde 100644 --- a/apps/files_versions/img/app.svg +++ b/apps/files_versions/img/app.svg @@ -9,6 +9,7 @@ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" height="16" width="16" + viewBox="0 0 16 16" version="1.0" id="svg2" inkscape:version="0.48.5 r10040" diff --git a/apps/files_versions/lib/BackgroundJob/ExpireVersions.php b/apps/files_versions/lib/BackgroundJob/ExpireVersions.php index a5d3efda77b..8e1f02cdfbf 100644 --- a/apps/files_versions/lib/BackgroundJob/ExpireVersions.php +++ b/apps/files_versions/lib/BackgroundJob/ExpireVersions.php @@ -69,7 +69,7 @@ class ExpireVersions extends \OC\BackgroundJob\TimedJob { $this->userManager->callForAllUsers(function(IUser $user) { $uid = $user->getUID(); - if (!$this->setupFS($uid)) { + if ($user->getLastLogin() === 0 || !$this->setupFS($uid)) { return; } Storage::expireOlderThanMaxForUser($uid); diff --git a/apps/files_versions/lib/Command/ExpireVersions.php b/apps/files_versions/lib/Command/ExpireVersions.php new file mode 100644 index 00000000000..f384420f22f --- /dev/null +++ b/apps/files_versions/lib/Command/ExpireVersions.php @@ -0,0 +1,125 @@ +<?php +/** + * @author Thomas Müller <thomas.mueller@tmit.eu> + * + * @copyright Copyright (c) 2016, 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 OCA\Files_Versions\Command; + +use OCA\Files_Versions\Expiration; +use OCA\Files_Versions\Storage; +use OCP\IUser; +use OCP\IUserManager; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Helper\ProgressBar; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class ExpireVersions extends Command { + + /** + * @var Expiration + */ + private $expiration; + + /** + * @var IUserManager + */ + private $userManager; + + /** + * @param IUserManager|null $userManager + * @param Expiration|null $expiration + */ + public function __construct(IUserManager $userManager = null, + Expiration $expiration = null) { + parent::__construct(); + + $this->userManager = $userManager; + $this->expiration = $expiration; + } + + protected function configure() { + $this + ->setName('versions:expire') + ->setDescription('Expires the users file versions') + ->addArgument( + 'user_id', + InputArgument::OPTIONAL | InputArgument::IS_ARRAY, + 'expire file versions of the given user(s), if no user is given file versions for all users will be expired.' + ); + } + + protected function execute(InputInterface $input, OutputInterface $output) { + + $maxAge = $this->expiration->getMaxAgeAsTimestamp(); + if (!$maxAge) { + $output->writeln("No expiry configured."); + return; + } + + $users = $input->getArgument('user_id'); + if (!empty($users)) { + foreach ($users as $user) { + if ($this->userManager->userExists($user)) { + $output->writeln("Remove deleted files of <info>$user</info>"); + $userObject = $this->userManager->get($user); + $this->expireVersionsForUser($userObject); + } else { + $output->writeln("<error>Unknown user $user</error>"); + } + } + } else { + $p = new ProgressBar($output); + $p->start(); + $this->userManager->callForAllUsers(function(IUser $user) use ($p) { + $p->advance(); + $this->expireVersionsForUser($user); + }); + $p->finish(); + $output->writeln(''); + } + } + + function expireVersionsForUser(IUser $user) { + $uid = $user->getUID(); + if ($user->getLastLogin() === 0 || !$this->setupFS($uid)) { + return; + } + Storage::expireOlderThanMaxForUser($uid); + } + + /** + * Act on behalf on versions item owner + * @param string $user + * @return boolean + */ + protected function setupFS($user) { + \OC_Util::tearDownFS(); + \OC_Util::setupFS($user); + + // Check if this user has a version directory + $view = new \OC\Files\View('/' . $user); + if (!$view->is_dir('/files_versions')) { + return false; + } + + return true; + } +} diff --git a/apps/provisioning_api/appinfo/routes.php b/apps/provisioning_api/appinfo/routes.php index 907e16ebf3c..a7366a32a06 100644 --- a/apps/provisioning_api/appinfo/routes.php +++ b/apps/provisioning_api/appinfo/routes.php @@ -26,53 +26,40 @@ * */ -namespace OCA\Provisioning_API\AppInfo; - use OCA\Provisioning_API\Apps; -use OCA\Provisioning_API\Groups; use OCA\Provisioning_API\Users; use OCP\API; -// Users -$users = new Users( - \OC::$server->getUserManager(), - \OC::$server->getConfig(), - \OC::$server->getGroupManager(), - \OC::$server->getUserSession(), - \OC::$server->getLogger() -); -API::register('get', '/cloud/users', [$users, 'getUsers'], 'provisioning_api', API::SUBADMIN_AUTH); -API::register('post', '/cloud/users', [$users, 'addUser'], 'provisioning_api', API::SUBADMIN_AUTH); -API::register('get', '/cloud/users/{userid}', [$users, 'getUser'], 'provisioning_api', API::USER_AUTH); -API::register('put', '/cloud/users/{userid}', [$users, 'editUser'], 'provisioning_api', API::USER_AUTH); -API::register('delete', '/cloud/users/{userid}', [$users, 'deleteUser'], 'provisioning_api', API::SUBADMIN_AUTH); -API::register('put', '/cloud/users/{userid}/enable', [$users, 'enableUser'], 'provisioning_api', API::SUBADMIN_AUTH); -API::register('put', '/cloud/users/{userid}/disable', [$users, 'disableUser'], 'provisioning_api', API::SUBADMIN_AUTH); -API::register('get', '/cloud/users/{userid}/groups', [$users, 'getUsersGroups'], 'provisioning_api', API::USER_AUTH); -API::register('post', '/cloud/users/{userid}/groups', [$users, 'addToGroup'], 'provisioning_api', API::SUBADMIN_AUTH); -API::register('delete', '/cloud/users/{userid}/groups', [$users, 'removeFromGroup'], 'provisioning_api', API::SUBADMIN_AUTH); -API::register('post', '/cloud/users/{userid}/subadmins', [$users, 'addSubAdmin'], 'provisioning_api', API::ADMIN_AUTH); -API::register('delete', '/cloud/users/{userid}/subadmins', [$users, 'removeSubAdmin'], 'provisioning_api', API::ADMIN_AUTH); -API::register('get', '/cloud/users/{userid}/subadmins', [$users, 'getUserSubAdminGroups'], 'provisioning_api', API::ADMIN_AUTH); +$app = new \OCA\Provisioning_API\AppInfo\Application(); +$app->registerRoutes($this, [ + 'ocs' => [ + // Apps + ['root' => '/cloud', 'name' => 'Apps#getApps', 'url' => '/apps', 'verb' => 'GET'], + ['root' => '/cloud', 'name' => 'Apps#getAppInfo', 'url' => '/apps/{app}', 'verb' => 'GET'], + ['root' => '/cloud', 'name' => 'Apps#enable', 'url' => '/apps/{app}', 'verb' => 'POST'], + ['root' => '/cloud', 'name' => 'Apps#disable', 'url' => '/apps/{app}', 'verb' => 'DELETE'], + + // Groups + ['root' => '/cloud', 'name' => 'Groups#getGroups', 'url' => '/groups', 'verb' => 'GET'], + ['root' => '/cloud', 'name' => 'Groups#getGroup', 'url' => '/groups/{groupId}', 'verb' => 'GET'], + ['root' => '/cloud', 'name' => 'Groups#addGroup', 'url' => '/groups', 'verb' => 'POST'], + ['root' => '/cloud', 'name' => 'Groups#deleteGroup', 'url' => '/groups/{groupId}', 'verb' => 'DELETE'], + ['root' => '/cloud', 'name' => 'Groups#getSubAdminsOfGroup', 'url' => '/groups/{groupId}/subadmins', 'verb' => 'GET'], -// Groups -$groups = new Groups( - \OC::$server->getGroupManager(), - \OC::$server->getUserSession(), - \OC::$server->getRequest() -); -API::register('get', '/cloud/groups', [$groups, 'getGroups'], 'provisioning_api', API::SUBADMIN_AUTH); -API::register('post', '/cloud/groups', [$groups, 'addGroup'], 'provisioning_api', API::SUBADMIN_AUTH); -API::register('get', '/cloud/groups/{groupid}', [$groups, 'getGroup'], 'provisioning_api', API::SUBADMIN_AUTH); -API::register('delete', '/cloud/groups/{groupid}', [$groups, 'deleteGroup'], 'provisioning_api', API::ADMIN_AUTH); -API::register('get', '/cloud/groups/{groupid}/subadmins', [$groups, 'getSubAdminsOfGroup'], 'provisioning_api', API::ADMIN_AUTH); + //Users + ['root' => '/cloud', 'name' => 'Users#getUsers', 'url' => '/users', 'verb' => 'GET'], + ['root' => '/cloud', 'name' => 'Users#addUser', 'url' => '/users', 'verb' => 'POST'], + ['root' => '/cloud', 'name' => 'Users#getUser', 'url' => '/users/{userId}', 'verb' => 'GET'], + ['root' => '/cloud', 'name' => 'Users#editUser', 'url' => '/users/{userId}', 'verb' => 'PUT'], + ['root' => '/cloud', 'name' => 'Users#deleteUser', 'url' => '/users/{userId}', 'verb' => 'DELETE'], + ['root' => '/cloud', 'name' => 'Users#enableUser', 'url' => '/users/{userId}/enable', 'verb' => 'PUT'], + ['root' => '/cloud', 'name' => 'Users#disableUser', 'url' => '/users/{userId}/disable', 'verb' => 'PUT'], + ['root' => '/cloud', 'name' => 'Users#getUsersGroups', 'url' => '/users/{userId}/groups', 'verb' => 'GET'], + ['root' => '/cloud', 'name' => 'Users#addToGroup', 'url' => '/users/{userId}/groups', 'verb' => 'POST'], + ['root' => '/cloud', 'name' => 'Users#removeFromGroup', 'url' => '/users/{userId}/groups', 'verb' => 'DELETE'], + ['root' => '/cloud', 'name' => 'Users#getUserSubAdminGroups', 'url' => '/users/{userId}/subadmins', 'verb' => 'GET'], + ['root' => '/cloud', 'name' => 'Users#addSubAdmin', 'url' => '/users/{userId}/subadmins', 'verb' => 'POST'], + ['root' => '/cloud', 'name' => 'Users#removeSubAdmin', 'url' => '/users/{userId}/subadmins', 'verb' => 'DELETE'], -// Apps -$apps = new Apps( - \OC::$server->getAppManager(), - \OC::$server->getOcsClient() -); -API::register('get', '/cloud/apps', [$apps, 'getApps'], 'provisioning_api', API::ADMIN_AUTH); -API::register('get', '/cloud/apps/{appid}', [$apps, 'getAppInfo'], 'provisioning_api', API::ADMIN_AUTH); -API::register('post', '/cloud/apps/{appid}', [$apps, 'enable'], 'provisioning_api', API::ADMIN_AUTH); -API::register('delete', '/cloud/apps/{appid}', [$apps, 'disable'], 'provisioning_api', API::ADMIN_AUTH); + ], +]); diff --git a/apps/provisioning_api/img/app.svg b/apps/provisioning_api/img/app.svg index b6ae35211a3..beb506303b0 100644 --- a/apps/provisioning_api/img/app.svg +++ b/apps/provisioning_api/img/app.svg @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> +<svg xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.0" viewBox="0 0 32 32"> <path d="m13.733 0.00064c-0.52991 0-0.93331 0.40337-0.93331 0.93333v2.6666c-1.182 0.3034-2.243 0.7934-3.2668 1.4001l-1.9334-1.9334c-0.3747-0.3747-0.9586-0.3747-1.3333 0l-3.1999 3.2c-0.37473 0.37474-0.37473 0.95859 0 1.3333l1.9334 1.9335c-0.6067 1.0239-1.0967 2.0849-1.4001 3.2669h-2.6666c-0.52994 0-0.9333 0.403-0.9333 0.933v4.5333c2e-8 0.52996 0.40336 0.93333 0.93331 0.93333h2.6666c0.30335 1.1817 0.79332 2.2426 1.4 3.2666l-1.9334 1.9349c-0.37473 0.37474-0.37473 0.95859 0 1.3333l3.1999 3.2c0.37473 0.37474 0.95857 0.37474 1.3333 0l1.9334-1.9349c1.024 0.608 2.0849 1.0965 3.2665 1.3995v2.6667c0 0.53 0.403 0.933 0.933 0.933h4.5332c0.52991 0 0.93331-0.4032 0.93331-0.9344v-2.6667c1.1816-0.30336 2.2425-0.79335 3.2665-1.4l1.9333 1.9333c0.37473 0.37474 0.95857 0.37474 1.3333 0l3.1999-3.2c0.37473-0.37474 0.37473-0.95859 0-1.3333l-1.9327-1.9328c0.60798-1.024 1.0965-2.0845 1.3994-3.2661h2.6666c0.532 0 0.935-0.403 0.935-0.933v-4.534c0-0.53-0.403-0.933-0.934-0.933h-2.667c-0.303-1.182-0.791-2.243-1.399-3.2666l1.932-1.9334c0.37473-0.37474 0.37473-0.95859 0-1.3333l-3.2-3.2c-0.37473-0.37474-0.95857-0.37474-1.3333 0l-1.9327 1.9334c-1.024-0.6067-2.084-1.0967-3.266-1.4001v-2.6667c0-0.52993-0.403-0.9333-0.933-0.9333zm2.2666 8.8689c3.9361 0 7.1309 3.1947 7.1309 7.1311 0 3.9362-3.1946 7.1311-7.1309 7.1311-3.9361 0-7.1309-3.1955-7.1309-7.1317s3.1948-7.1311 7.1309-7.1311z" display="block" fill="#fff"/> </svg> diff --git a/apps/provisioning_api/lib/AppInfo/Application.php b/apps/provisioning_api/lib/AppInfo/Application.php new file mode 100644 index 00000000000..2d6a82e2ff9 --- /dev/null +++ b/apps/provisioning_api/lib/AppInfo/Application.php @@ -0,0 +1,28 @@ +<?php + +namespace OCA\Provisioning_API\AppInfo; + +use OC\AppFramework\Utility\SimpleContainer; +use OCA\Provisioning_API\Middleware\ProvisioningApiMiddleware; +use OCP\AppFramework\App; + +class Application extends App { + public function __construct(array $urlParams = array()) { + parent::__construct('provisioning_api', $urlParams); + + $container = $this->getContainer(); + $server = $container->getServer(); + + $container->registerService('ProvisioningApiMiddleware', function(SimpleContainer $c) use ($server) { + $user = $server->getUserManager()->get($c['UserId']); + $isAdmin = $user !== null ? $server->getGroupManager()->isAdmin($user->getUID()) : false; + $isSubAdmin = $user !== null ? $server->getGroupManager()->getSubAdmin()->isSubAdmin($user) : false; + return new ProvisioningApiMiddleware( + $c['ControllerMethodReflector'], + $isAdmin, + $isSubAdmin + ); + }); + $container->registerMiddleWare('ProvisioningApiMiddleware'); + } +} diff --git a/apps/provisioning_api/lib/Apps.php b/apps/provisioning_api/lib/Controller/AppsController.php index f880e41905b..3821fc343ad 100644 --- a/apps/provisioning_api/lib/Apps.php +++ b/apps/provisioning_api/lib/Controller/AppsController.php @@ -23,89 +23,101 @@ * */ -namespace OCA\Provisioning_API; +namespace OCA\Provisioning_API\Controller; use OC\OCSClient; use \OC_App; +use OCP\App\IAppManager; +use OCP\AppFramework\Http\DataResponse; +use OCP\AppFramework\OCS\OCSException; +use OCP\AppFramework\OCS\OCSNotFoundException; +use OCP\AppFramework\OCSController; +use OCP\IRequest; -class Apps { +class AppsController extends OCSController { /** @var \OCP\App\IAppManager */ private $appManager; /** @var OCSClient */ private $ocsClient; /** - * @param \OCP\App\IAppManager $appManager + * @param string $appName + * @param IRequest $request + * @param IAppManager $appManager + * @param OCSClient $ocsClient */ - public function __construct(\OCP\App\IAppManager $appManager, - OCSClient $ocsClient) { + public function __construct( + $appName, + IRequest $request, + IAppManager $appManager, + OCSClient $ocsClient + ) { + parent::__construct($appName, $request); + $this->appManager = $appManager; $this->ocsClient = $ocsClient; } /** - * @param array $parameters - * @return \OC\OCS\Result + * @param string $filter + * @return DataResponse + * @throws OCSException */ - public function getApps($parameters) { + public function getApps($filter = null) { $apps = OC_App::listAllApps(false, true, $this->ocsClient); $list = []; foreach($apps as $app) { $list[] = $app['id']; } - $filter = isset($_GET['filter']) ? $_GET['filter'] : false; if($filter){ switch($filter){ case 'enabled': - return new \OC\OCS\Result(array('apps' => \OC_App::getEnabledApps())); + return new DataResponse(['apps' => \OC_App::getEnabledApps()]); break; case 'disabled': $enabled = OC_App::getEnabledApps(); - return new \OC\OCS\Result(array('apps' => array_diff($list, $enabled))); + return new DataResponse(['apps' => array_diff($list, $enabled)]); break; default: // Invalid filter variable - return new \OC\OCS\Result(null, 101); - break; + throw new OCSException('', 101); } } else { - return new \OC\OCS\Result(array('apps' => $list)); + return new DataResponse(['apps' => $list]); } } /** - * @param array $parameters - * @return \OC\OCS\Result + * @param string $app + * @return DataResponse + * @throws OCSNotFoundException */ - public function getAppInfo($parameters) { - $app = $parameters['appid']; + public function getAppInfo($app) { $info = \OCP\App::getAppInfo($app); if(!is_null($info)) { - return new \OC\OCS\Result(OC_App::getAppInfo($app)); + return new DataResponse(OC_App::getAppInfo($app)); } else { - return new \OC\OCS\Result(null, \OCP\API::RESPOND_NOT_FOUND, 'The request app was not found'); + throw new OCSException('The request app was not found', \OCP\API::RESPOND_NOT_FOUND); } } /** - * @param array $parameters - * @return \OC\OCS\Result + * @param string $app + * @return DataResponse */ - public function enable($parameters) { - $app = $parameters['appid']; + public function enable($app) { $this->appManager->enableApp($app); - return new \OC\OCS\Result(null, 100); + return new DataResponse(); } /** - * @param array $parameters - * @return \OC\OCS\Result + * @param string $app + * @return DataResponse */ - public function disable($parameters) { - $app = $parameters['appid']; + public function disable($app) { $this->appManager->disableApp($app); - return new \OC\OCS\Result(null, 100); + return new DataResponse(); } } diff --git a/apps/provisioning_api/lib/Groups.php b/apps/provisioning_api/lib/Controller/GroupsController.php index 18302595ae9..d36d0de8997 100644 --- a/apps/provisioning_api/lib/Groups.php +++ b/apps/provisioning_api/lib/Controller/GroupsController.php @@ -23,46 +23,54 @@ * */ -namespace OCA\Provisioning_API; +namespace OCA\Provisioning_API\Controller; +use OCP\AppFramework\Http\DataResponse; +use OCP\AppFramework\OCS\OCSException; +use OCP\AppFramework\OCSController; use OCP\IGroup; +use OCP\IGroupManager; +use OCP\IRequest; +use OCP\IUserSession; use OCP\IUser; -class Groups{ - /** @var \OCP\IGroupManager */ +class GroupsController extends OCSController { + + /** @var IGroupManager */ private $groupManager; - /** @var \OCP\IUserSession */ + /** @var IUserSession */ private $userSession; - /** @var \OCP\IRequest */ - private $request; - /** - * @param \OCP\IGroupManager $groupManager - * @param \OCP\IUserSession $userSession - * @param \OCP\IRequest $request + * @param string $appName + * @param IRequest $request + * @param IGroupManager $groupManager + * @param IUserSession $userSession */ - public function __construct(\OCP\IGroupManager $groupManager, - \OCP\IUserSession $userSession, - \OCP\IRequest $request) { + public function __construct( + $appName, + IRequest $request, + IGroupManager $groupManager, + IUserSession $userSession) { + parent::__construct($appName, $request); + $this->groupManager = $groupManager; $this->userSession = $userSession; - $this->request = $request; } /** * returns a list of groups * - * @param array $parameters - * @return \OC\OCS\Result + * @NoAdminRequired + * + * @param string $search + * @param int $limit + * @param int $offset + * @return DataResponse */ - public function getGroups($parameters) { - $search = $this->request->getParam('search', ''); - $limit = $this->request->getParam('limit'); - $offset = $this->request->getParam('offset'); - + public function getGroups($search = '', $limit = null, $offset = null) { if ($limit !== null) { $limit = (int)$limit; } @@ -76,27 +84,24 @@ class Groups{ return $group->getGID(); }, $groups); - return new \OC\OCS\Result(['groups' => $groups]); + return new DataResponse(['groups' => $groups]); } /** * returns an array of users in the group specified * - * @param array $parameters - * @return \OC\OCS\Result + * @NoAdminRequired + * + * @param string $groupId + * @return DataResponse + * @throws OCSException */ - public function getGroup($parameters) { - // Check if user is logged in + public function getGroup($groupId) { $user = $this->userSession->getUser(); - if ($user === null) { - return new \OC\OCS\Result(null, \OCP\API::RESPOND_UNAUTHORISED); - } - - $groupId = $parameters['groupid']; // Check the group exists if(!$this->groupManager->groupExists($groupId)) { - return new \OC\OCS\Result(null, \OCP\API::RESPOND_NOT_FOUND, 'The requested group could not be found'); + throw new OCSException('The requested group could not be found', \OCP\API::RESPOND_NOT_FOUND); } $isSubadminOfGroup = false; @@ -114,59 +119,62 @@ class Groups{ return $user->getUID(); }, $users); $users = array_values($users); - return new \OC\OCS\Result(['users' => $users]); + return new DataResponse(['users' => $users]); } else { - return new \OC\OCS\Result(null, \OCP\API::RESPOND_UNAUTHORISED, 'User does not have access to specified group'); + throw new OCSException('User does not have access to specified group', \OCP\API::RESPOND_UNAUTHORISED); } } /** * creates a new group * - * @param array $parameters - * @return \OC\OCS\Result + * @NoAdminRequired + * + * @param string $groupid + * @return DataResponse + * @throws OCSException */ - public function addGroup($parameters) { + public function addGroup($groupid) { // Validate name - $groupId = $this->request->getParam('groupid', ''); - if(empty($groupId)){ + if(empty($groupid)){ \OCP\Util::writeLog('provisioning_api', 'Group name not supplied', \OCP\Util::ERROR); - return new \OC\OCS\Result(null, 101, 'Invalid group name'); + throw new OCSException('Invalid group name', 101); } // Check if it exists - if($this->groupManager->groupExists($groupId)){ - return new \OC\OCS\Result(null, 102); + if($this->groupManager->groupExists($groupid)){ + throw new OCSException('', 102); } - $this->groupManager->createGroup($groupId); - return new \OC\OCS\Result(null, 100); + $this->groupManager->createGroup($groupid); + return new DataResponse(); } /** - * @param array $parameters - * @return \OC\OCS\Result + * @param string $groupId + * @return DataResponse + * @throws OCSException */ - public function deleteGroup($parameters) { + public function deleteGroup($groupId) { // Check it exists - if(!$this->groupManager->groupExists($parameters['groupid'])){ - return new \OC\OCS\Result(null, 101); - } else if($parameters['groupid'] === 'admin' || !$this->groupManager->get($parameters['groupid'])->delete()){ + if(!$this->groupManager->groupExists($groupId)){ + throw new OCSException('', 101); + } else if($groupId === 'admin' || !$this->groupManager->get($groupId)->delete()){ // Cannot delete admin group - return new \OC\OCS\Result(null, 102); - } else { - return new \OC\OCS\Result(null, 100); + throw new OCSException('', 102); } + + return new DataResponse(null, 100); } /** - * @param array $parameters - * @return \OC\OCS\Result + * @param string $groupId + * @return DataResponse + * @throws OCSException */ - public function getSubAdminsOfGroup($parameters) { - $group = $parameters['groupid']; + public function getSubAdminsOfGroup($groupId) { // Check group exists - $targetGroup = $this->groupManager->get($group); + $targetGroup = $this->groupManager->get($groupId); if($targetGroup === null) { - return new \OC\OCS\Result(null, 101, 'Group does not exist'); + throw new OCSException('Group does not exist', 101); } $subadmins = $this->groupManager->getSubAdmin()->getGroupsSubAdmins($targetGroup); @@ -176,7 +184,7 @@ class Groups{ $uids[] = $user->getUID(); } - return new \OC\OCS\Result($uids); + return new DataResponse($uids); } } diff --git a/apps/provisioning_api/lib/Users.php b/apps/provisioning_api/lib/Controller/UsersController.php index 0e5a8043e8a..8e5975468b1 100644 --- a/apps/provisioning_api/lib/Users.php +++ b/apps/provisioning_api/lib/Controller/UsersController.php @@ -27,17 +27,23 @@ * */ -namespace OCA\Provisioning_API; +namespace OCA\Provisioning_API\Controller; use \OC_Helper; +use OCP\AppFramework\Http\DataResponse; +use OCP\AppFramework\OCS\OCSException; +use OCP\AppFramework\OCS\OCSForbiddenException; +use OCP\AppFramework\OCS\OCSNotFoundException; +use OCP\AppFramework\OCSController; use OCP\Files\NotFoundException; use OCP\IConfig; use OCP\IGroupManager; use OCP\ILogger; +use OCP\IRequest; use OCP\IUserManager; use OCP\IUserSession; -class Users { +class UsersController extends OCSController { /** @var IUserManager */ private $userManager; @@ -51,17 +57,23 @@ class Users { private $logger; /** + * @param string $appName + * @param IRequest $request * @param IUserManager $userManager * @param IConfig $config * @param IGroupManager $groupManager * @param IUserSession $userSession * @param ILogger $logger */ - public function __construct(IUserManager $userManager, + public function __construct($appName, + IRequest $request, + IUserManager $userManager, IConfig $config, IGroupManager $groupManager, IUserSession $userSession, ILogger $logger) { + parent::__construct($appName, $request); + $this->userManager = $userManager; $this->config = $config; $this->groupManager = $groupManager; @@ -70,20 +82,17 @@ class Users { } /** + * @NoAdminRequired + * * returns a list of users * - * @return \OC\OCS\Result + * @param string $search + * @param int $limit + * @param int $offset + * @return DataResponse */ - public function getUsers() { - $search = !empty($_GET['search']) ? $_GET['search'] : ''; - $limit = !empty($_GET['limit']) ? $_GET['limit'] : null; - $offset = !empty($_GET['offset']) ? $_GET['offset'] : null; - - // Check if user is logged in + public function getUsers($search = '', $limit = null, $offset = null) { $user = $this->userSession->getUser(); - if ($user === null) { - return new \OC\OCS\Result(null, \OCP\API::RESPOND_UNAUTHORISED); - } // Admin? Or SubAdmin? $uid = $user->getUID(); @@ -106,89 +115,85 @@ class Users { } $users = array_slice($users, $offset, $limit); - } else { - return new \OC\OCS\Result(null, \OCP\API::RESPOND_UNAUTHORISED); } + $users = array_keys($users); - return new \OC\OCS\Result([ + return new DataResponse([ 'users' => $users ]); } /** - * @return \OC\OCS\Result + * @NoAdminRequired + * + * @param string $userid + * @param string $password + * @param array $groups + * @return DataResponse + * @throws OCSException */ - public function addUser() { - $userId = isset($_POST['userid']) ? $_POST['userid'] : null; - $password = isset($_POST['password']) ? $_POST['password'] : null; - $groups = isset($_POST['groups']) ? $_POST['groups'] : null; + public function addUser($userid, $password, $groups = null) { $user = $this->userSession->getUser(); $isAdmin = $this->groupManager->isAdmin($user->getUID()); $subAdminManager = $this->groupManager->getSubAdmin(); - if (!$isAdmin && !$subAdminManager->isSubAdmin($user)) { - return new \OC\OCS\Result(null, \OCP\API::RESPOND_UNAUTHORISED); - } - - if($this->userManager->userExists($userId)) { + if($this->userManager->userExists($userid)) { $this->logger->error('Failed addUser attempt: User already exists.', ['app' => 'ocs_api']); - return new \OC\OCS\Result(null, 102, 'User already exists'); + throw new OCSException('User already exists', 102); } if(is_array($groups)) { foreach ($groups as $group) { - if(!$this->groupManager->groupExists($group)){ - return new \OC\OCS\Result(null, 104, 'group '.$group.' does not exist'); + if(!$this->groupManager->groupExists($group)) { + throw new OCSException('group '.$group.' does not exist', 104); } if(!$isAdmin && !$subAdminManager->isSubAdminofGroup($user, $this->groupManager->get($group))) { - return new \OC\OCS\Result(null, 105, 'insufficient privileges for group '. $group); + throw new OCSException('insufficient privileges for group '. $group, 105); } } } else { if(!$isAdmin) { - return new \OC\OCS\Result(null, 106, 'no group specified (required for subadmins)'); + throw new OCSException('no group specified (required for subadmins)', 106); } } try { - $newUser = $this->userManager->createUser($userId, $password); - $this->logger->info('Successful addUser call with userid: '.$userId, ['app' => 'ocs_api']); + $newUser = $this->userManager->createUser($userid, $password); + $this->logger->info('Successful addUser call with userid: '.$userid, ['app' => 'ocs_api']); if (is_array($groups)) { foreach ($groups as $group) { $this->groupManager->get($group)->addUser($newUser); - $this->logger->info('Added userid '.$userId.' to group '.$group, ['app' => 'ocs_api']); + $this->logger->info('Added userid '.$userid.' to group '.$group, ['app' => 'ocs_api']); } } - return new \OC\OCS\Result(null, 100); + return new DataResponse(); } catch (\Exception $e) { $this->logger->error('Failed addUser attempt with exception: '.$e->getMessage(), ['app' => 'ocs_api']); - return new \OC\OCS\Result(null, 101, 'Bad request'); + throw new OCSException('Bad request', 101); } } /** + * @NoAdminRequired + * @NoSubAdminRequired + * * gets user info * - * @param array $parameters - * @return \OC\OCS\Result + * @param string $userId + * @return DataResponse + * @throws OCSException */ - public function getUser($parameters) { - $userId = $parameters['userid']; - - // Check if user is logged in + public function getUser($userId) { $currentLoggedInUser = $this->userSession->getUser(); - if ($currentLoggedInUser === null) { - return new \OC\OCS\Result(null, \OCP\API::RESPOND_UNAUTHORISED); - } $data = []; // Check if the target user exists $targetUserObject = $this->userManager->get($userId); if($targetUserObject === null) { - return new \OC\OCS\Result(null, \OCP\API::RESPOND_NOT_FOUND, 'The requested user could not be found'); + throw new OCSException('The requested user could not be found', \OCP\API::RESPOND_NOT_FOUND); } // Admin? Or SubAdmin? @@ -198,7 +203,7 @@ class Users { } else { // Check they are looking up themselves if($currentLoggedInUser->getUID() !== $userId) { - return new \OC\OCS\Result(null, \OCP\API::RESPOND_UNAUTHORISED); + throw new OCSException('', \OCP\API::RESPOND_UNAUTHORISED); } } @@ -207,32 +212,32 @@ class Users { $data['email'] = $targetUserObject->getEMailAddress(); $data['displayname'] = $targetUserObject->getDisplayName(); - return new \OC\OCS\Result($data); + return new DataResponse($data); } - /** + /** + * @NoAdminRequired + * @NoSubAdminRequired + * * edit users * - * @param array $parameters - * @return \OC\OCS\Result + * @param string $userId + * @param string $key + * @param string $value + * @return DataResponse + * @throws OCSException + * @throws OCSForbiddenException */ - public function editUser($parameters) { - /** @var string $targetUserId */ - $targetUserId = $parameters['userid']; - - // Check if user is logged in + public function editUser($userId, $key, $value) { $currentLoggedInUser = $this->userSession->getUser(); - if ($currentLoggedInUser === null) { - return new \OC\OCS\Result(null, \OCP\API::RESPOND_UNAUTHORISED); - } - $targetUser = $this->userManager->get($targetUserId); + $targetUser = $this->userManager->get($userId); if($targetUser === null) { - return new \OC\OCS\Result(null, 997); + throw new OCSException('', \OCP\API::RESPOND_UNAUTHORISED); } $permittedFields = []; - if($targetUserId === $currentLoggedInUser->getUID()) { + if($userId === $currentLoggedInUser->getUID()) { // Editing self (display, email) $permittedFields[] = 'display'; $permittedFields[] = 'email'; @@ -253,20 +258,20 @@ class Users { $permittedFields[] = 'email'; } else { // No rights - return new \OC\OCS\Result(null, 997); + throw new OCSException('', \OCP\API::RESPOND_UNAUTHORISED); } } // Check if permitted to edit this field - if(!in_array($parameters['_put']['key'], $permittedFields)) { - return new \OC\OCS\Result(null, 997); + if(!in_array($key, $permittedFields)) { + throw new OCSException('', \OCP\API::RESPOND_UNAUTHORISED); } // Process the edit - switch($parameters['_put']['key']) { + switch($key) { case 'display': - $targetUser->setDisplayName($parameters['_put']['value']); + $targetUser->setDisplayName($value); break; case 'quota': - $quota = $parameters['_put']['value']; + $quota = $value; if($quota !== 'none' and $quota !== 'default') { if (is_numeric($quota)) { $quota = floatval($quota); @@ -274,7 +279,7 @@ class Users { $quota = \OCP\Util::computerFileSize($quota); } if ($quota === false) { - return new \OC\OCS\Result(null, 103, "Invalid quota value {$parameters['_put']['value']}"); + throw new OCSException('Invalid quota value '.$value, 103); } if($quota === 0) { $quota = 'default'; @@ -287,115 +292,118 @@ class Users { $targetUser->setQuota($quota); break; case 'password': - $targetUser->setPassword($parameters['_put']['value']); + $targetUser->setPassword($value); break; case 'email': - if(filter_var($parameters['_put']['value'], FILTER_VALIDATE_EMAIL)) { - $targetUser->setEMailAddress($parameters['_put']['value']); + if(filter_var($value, FILTER_VALIDATE_EMAIL)) { + $targetUser->setEMailAddress($value); } else { - return new \OC\OCS\Result(null, 102); + throw new OCSException('', 102); } break; default: - return new \OC\OCS\Result(null, 103); + throw new OCSException('', 103); } - return new \OC\OCS\Result(null, 100); + return new DataResponse(); } /** - * @param array $parameters - * @return \OC\OCS\Result + * @NoAdminRequired + * + * @param string $userId + * @return DataResponse + * @throws OCSException + * @throws OCSForbiddenException */ - public function deleteUser($parameters) { - // Check if user is logged in + public function deleteUser($userId) { $currentLoggedInUser = $this->userSession->getUser(); - if ($currentLoggedInUser === null) { - return new \OC\OCS\Result(null, \OCP\API::RESPOND_UNAUTHORISED); - } - $targetUser = $this->userManager->get($parameters['userid']); + $targetUser = $this->userManager->get($userId); if($targetUser === null || $targetUser->getUID() === $currentLoggedInUser->getUID()) { - return new \OC\OCS\Result(null, 101); + throw new OCSException('', 101); } // If not permitted $subAdminManager = $this->groupManager->getSubAdmin(); if(!$this->groupManager->isAdmin($currentLoggedInUser->getUID()) && !$subAdminManager->isUserAccessible($currentLoggedInUser, $targetUser)) { - return new \OC\OCS\Result(null, 997); + throw new OCSException('', \OCP\API::RESPOND_UNAUTHORISED); } // Go ahead with the delete if($targetUser->delete()) { - return new \OC\OCS\Result(null, 100); + return new DataResponse(); } else { - return new \OC\OCS\Result(null, 101); + throw new OCSException('', 101); } } /** - * @param array $parameters - * @return \OC\OCS\Result + * @NoAdminRequired + * + * @param string $userId + * @return DataResponse */ - public function disableUser($parameters) { - return $this->setEnabled($parameters, false); + public function disableUser($userId) { + return $this->setEnabled($userId, false); } /** - * @param array $parameters - * @return \OC\OCS\Result + * @NoAdminRequired + * + * @param string $userId + * @return DataResponse */ - public function enableUser($parameters) { - return $this->setEnabled($parameters, true); + public function enableUser($userId) { + return $this->setEnabled($userId, true); } /** - * @param array $parameters + * @param string $userId * @param bool $value - * @return \OC\OCS\Result + * @return DataResponse + * @throws OCSException + * @throws OCSForbiddenException */ - private function setEnabled($parameters, $value) { - // Check if user is logged in + private function setEnabled($userId, $value) { $currentLoggedInUser = $this->userSession->getUser(); - if ($currentLoggedInUser === null) { - return new \OC\OCS\Result(null, \OCP\API::RESPOND_UNAUTHORISED); - } - $targetUser = $this->userManager->get($parameters['userid']); + $targetUser = $this->userManager->get($userId); if($targetUser === null || $targetUser->getUID() === $currentLoggedInUser->getUID()) { - return new \OC\OCS\Result(null, 101); + throw new OCSException('', 101); } // If not permitted $subAdminManager = $this->groupManager->getSubAdmin(); if(!$this->groupManager->isAdmin($currentLoggedInUser->getUID()) && !$subAdminManager->isUserAccessible($currentLoggedInUser, $targetUser)) { - return new \OC\OCS\Result(null, 997); + throw new OCSException('', \OCP\API::RESPOND_UNAUTHORISED); } // enable/disable the user now $targetUser->setEnabled($value); - return new \OC\OCS\Result(null, 100); + return new DataResponse(); } /** - * @param array $parameters - * @return \OC\OCS\Result + * @NoAdminRequired + * @NoSubAdminRequired + * + * @param string $userId + * @return DataResponse + * @throws OCSForbiddenException + * @throws OCSNotFoundException */ - public function getUsersGroups($parameters) { - // Check if user is logged in + public function getUsersGroups($userId) { $loggedInUser = $this->userSession->getUser(); - if ($loggedInUser === null) { - return new \OC\OCS\Result(null, \OCP\API::RESPOND_UNAUTHORISED); - } - $targetUser = $this->userManager->get($parameters['userid']); + $targetUser = $this->userManager->get($userId); if($targetUser === null) { - return new \OC\OCS\Result(null, \OCP\API::RESPOND_NOT_FOUND); + throw new OCSException('', \OCP\API::RESPOND_NOT_FOUND); } if($targetUser->getUID() === $loggedInUser->getUID() || $this->groupManager->isAdmin($loggedInUser->getUID())) { // Self lookup or admin lookup - return new \OC\OCS\Result([ + return new DataResponse([ 'groups' => $this->groupManager->getUserGroupIds($targetUser) ]); } else { @@ -412,87 +420,75 @@ class Users { $getSubAdminsGroups, $this->groupManager->getUserGroupIds($targetUser) ); - return new \OC\OCS\Result(array('groups' => $groups)); + return new DataResponse(['groups' => $groups]); } else { // Not permitted - return new \OC\OCS\Result(null, 997); + throw new OCSException('', \OCP\API::RESPOND_UNAUTHORISED); } } } /** - * @param array $parameters - * @return \OC\OCS\Result + * @param string $userId + * @param string $groupid + * @return DataResponse + * @throws OCSException */ - public function addToGroup($parameters) { - // Check if user is logged in - $user = $this->userSession->getUser(); - if ($user === null) { - return new \OC\OCS\Result(null, \OCP\API::RESPOND_UNAUTHORISED); + public function addToGroup($userId, $groupid = '') { + if($groupid === '') { + throw new OCSException('', 101); } - // Check they're an admin - if(!$this->groupManager->isAdmin($user->getUID())) { - // This user doesn't have rights to add a user to this group - return new \OC\OCS\Result(null, \OCP\API::RESPOND_UNAUTHORISED); - } - - $groupId = !empty($_POST['groupid']) ? $_POST['groupid'] : null; - if($groupId === null) { - return new \OC\OCS\Result(null, 101); - } - - $group = $this->groupManager->get($groupId); - $targetUser = $this->userManager->get($parameters['userid']); + $group = $this->groupManager->get($groupid); + $targetUser = $this->userManager->get($userId); if($group === null) { - return new \OC\OCS\Result(null, 102); + throw new OCSException('', 102); } if($targetUser === null) { - return new \OC\OCS\Result(null, 103); + throw new OCSException('', 103); } // Add user to group $group->addUser($targetUser); - return new \OC\OCS\Result(null, 100); + return new DataResponse(); } /** - * @param array $parameters - * @return \OC\OCS\Result + * @NoAdminRequired + * + * @param string userId + * @param string $groupid + * @return DataResponse + * @throws OCSException */ - public function removeFromGroup($parameters) { - // Check if user is logged in + public function removeFromGroup($userId, $groupid) { $loggedInUser = $this->userSession->getUser(); - if ($loggedInUser === null) { - return new \OC\OCS\Result(null, \OCP\API::RESPOND_UNAUTHORISED); - } - $group = !empty($parameters['_delete']['groupid']) ? $parameters['_delete']['groupid'] : null; - if($group === null) { - return new \OC\OCS\Result(null, 101); + if($groupid === null) { + throw new OCSException('', 101); } - $group = $this->groupManager->get($group); + $group = $this->groupManager->get($groupid); if($group === null) { - return new \OC\OCS\Result(null, 102); + throw new OCSException('', 102); } - $targetUser = $this->userManager->get($parameters['userid']); + $targetUser = $this->userManager->get($userId); if($targetUser === null) { - return new \OC\OCS\Result(null, 103); + throw new OCSException('', 103); } // If they're not an admin, check they are a subadmin of the group in question $subAdminManager = $this->groupManager->getSubAdmin(); if(!$this->groupManager->isAdmin($loggedInUser->getUID()) && !$subAdminManager->isSubAdminofGroup($loggedInUser, $group)) { - return new \OC\OCS\Result(null, 104); + throw new OCSException('', 104); } // Check they aren't removing themselves from 'admin' or their 'subadmin; group - if($parameters['userid'] === $loggedInUser->getUID()) { + if($userId === $loggedInUser->getUID()) { if($this->groupManager->isAdmin($loggedInUser->getUID())) { if($group->getGID() === 'admin') { - return new \OC\OCS\Result(null, 105, 'Cannot remove yourself from the admin group'); + throw new OCSException('Cannot remove yourself from the admin group', 105); } } else { // Not an admin, check they are not removing themself from their subadmin group @@ -502,96 +498,101 @@ class Users { } if(in_array($group->getGID(), $subAdminGroups, true)) { - return new \OC\OCS\Result(null, 105, 'Cannot remove yourself from this group as you are a SubAdmin'); + throw new OCSException('Cannot remove yourself from this group as you are a SubAdmin', 105); } } } // Remove user from group $group->removeUser($targetUser); - return new \OC\OCS\Result(null, 100); + return new DataResponse(); } /** * Creates a subadmin * - * @param array $parameters - * @return \OC\OCS\Result + * @param string $userId + * @param string $groupid + * @return DataResponse + * @throws OCSException */ - public function addSubAdmin($parameters) { - $group = $this->groupManager->get($_POST['groupid']); - $user = $this->userManager->get($parameters['userid']); + public function addSubAdmin($userId, $groupid) { + $group = $this->groupManager->get($groupid); + $user = $this->userManager->get($userId); // Check if the user exists if($user === null) { - return new \OC\OCS\Result(null, 101, 'User does not exist'); + throw new OCSException('User does not exist', 101); } // Check if group exists if($group === null) { - return new \OC\OCS\Result(null, 102, 'Group:'.$_POST['groupid'].' does not exist'); + throw new OCSException('Group:'.$groupid.' does not exist', 102); } // Check if trying to make subadmin of admin group - if(strtolower($_POST['groupid']) === 'admin') { - return new \OC\OCS\Result(null, 103, 'Cannot create subadmins for admin group'); + if(strtolower($groupid) === 'admin') { + throw new OCSException('Cannot create subadmins for admin group', 103); } $subAdminManager = $this->groupManager->getSubAdmin(); // We cannot be subadmin twice if ($subAdminManager->isSubAdminofGroup($user, $group)) { - return new \OC\OCS\Result(null, 100); + return new DataResponse(); } // Go if($subAdminManager->createSubAdmin($user, $group)) { - return new \OC\OCS\Result(null, 100); + return new DataResponse(); } else { - return new \OC\OCS\Result(null, 103, 'Unknown error occurred'); + throw new OCSException('Unknown error occurred', 103); } } /** * Removes a subadmin from a group * - * @param array $parameters - * @return \OC\OCS\Result + * @param string $userId + * @param string $groupid + * @return DataResponse + * @throws OCSException */ - public function removeSubAdmin($parameters) { - $group = $this->groupManager->get($parameters['_delete']['groupid']); - $user = $this->userManager->get($parameters['userid']); + public function removeSubAdmin($userId, $groupid) { + $group = $this->groupManager->get($groupid); + $user = $this->userManager->get($userId); $subAdminManager = $this->groupManager->getSubAdmin(); // Check if the user exists if($user === null) { - return new \OC\OCS\Result(null, 101, 'User does not exist'); + throw new OCSException('User does not exist', 101); } // Check if the group exists if($group === null) { - return new \OC\OCS\Result(null, 101, 'Group does not exist'); + throw new OCSException('Group does not exist', 101); } // Check if they are a subadmin of this said group if(!$subAdminManager->isSubAdminofGroup($user, $group)) { - return new \OC\OCS\Result(null, 102, 'User is not a subadmin of this group'); + throw new OCSException('User is not a subadmin of this group', 102); } // Go if($subAdminManager->deleteSubAdmin($user, $group)) { - return new \OC\OCS\Result(null, 100); + return new DataResponse(); } else { - return new \OC\OCS\Result(null, 103, 'Unknown error occurred'); + throw new OCSException('Unknown error occurred', 103); } } /** * Get the groups a user is a subadmin of * - * @param array $parameters - * @return \OC\OCS\Result + * @param string $userId + * @return DataResponse + * @throws OCSException */ - public function getUserSubAdminGroups($parameters) { - $user = $this->userManager->get($parameters['userid']); + public function getUserSubAdminGroups($userId) { + $user = $this->userManager->get($userId); // Check if the user exists if($user === null) { - return new \OC\OCS\Result(null, 101, 'User does not exist'); + throw new OCSException('User does not exist', 101); } // Get the subadmin groups @@ -601,9 +602,9 @@ class Users { } if(!$groups) { - return new \OC\OCS\Result(null, 102, 'Unknown error occurred'); + throw new OCSException('Unknown error occurred', 102); } else { - return new \OC\OCS\Result($groups); + return new DataResponse($groups); } } @@ -622,6 +623,7 @@ class Users { 'used' => $storage['used'], 'total' => $storage['total'], 'relative' => $storage['relative'], + 'quota' => $storage['quota'], ]; } catch (NotFoundException $ex) { $data = []; diff --git a/apps/provisioning_api/lib/Middleware/Exceptions/NotSubAdminException.php b/apps/provisioning_api/lib/Middleware/Exceptions/NotSubAdminException.php new file mode 100644 index 00000000000..007ea04db46 --- /dev/null +++ b/apps/provisioning_api/lib/Middleware/Exceptions/NotSubAdminException.php @@ -0,0 +1,11 @@ +<?php + +namespace OCA\Provisioning_API\Middleware\Exceptions; + +use OCP\AppFramework\Http; + +class NotSubAdminException extends \Exception { + public function __construct() { + parent::__construct('Logged in user must be at least a sub admin', Http::STATUS_FORBIDDEN); + } +}
\ No newline at end of file diff --git a/apps/provisioning_api/lib/Middleware/ProvisioningApiMiddleware.php b/apps/provisioning_api/lib/Middleware/ProvisioningApiMiddleware.php new file mode 100644 index 00000000000..d9afe596027 --- /dev/null +++ b/apps/provisioning_api/lib/Middleware/ProvisioningApiMiddleware.php @@ -0,0 +1,64 @@ +<?php + +namespace OCA\Provisioning_API\Middleware; + +use OCA\Provisioning_API\Middleware\Exceptions\NotSubAdminException; +use OCP\AppFramework\Http\Response; +use OCP\AppFramework\Middleware; +use OCP\AppFramework\OCS\OCSException; +use OCP\AppFramework\Utility\IControllerMethodReflector; + +class ProvisioningApiMiddleware extends Middleware { + + /** @var IControllerMethodReflector */ + private $reflector; + + /** @var bool */ + private $isAdmin; + + /** @var bool */ + private $isSubAdmin; + + /** + * ProvisioningApiMiddleware constructor. + * + * @param IControllerMethodReflector $reflector + * @param bool $isAdmin + * @param bool $isSubAdmin + */ + public function __construct( + IControllerMethodReflector $reflector, + $isAdmin, + $isSubAdmin) { + $this->reflector = $reflector; + $this->isAdmin = $isAdmin; + $this->isSubAdmin = $isSubAdmin; + } + + /** + * @param \OCP\AppFramework\Controller $controller + * @param string $methodName + * + * @throws NotSubAdminException + */ + public function beforeController($controller, $methodName) { + if (!$this->isAdmin && !$this->reflector->hasAnnotation('NoSubAdminRequired') && !$this->isSubAdmin) { + throw new NotSubAdminException(); + } + } + + /** + * @param \OCP\AppFramework\Controller $controller + * @param string $methodName + * @param \Exception $exception + * @throws \Exception + * @return Response + */ + public function afterException($controller, $methodName, \Exception $exception) { + if ($exception instanceof NotSubAdminException) { + throw new OCSException($exception->getMessage(), \OCP\API::RESPOND_UNAUTHORISED); + } + + throw $exception; + } +}
\ No newline at end of file diff --git a/apps/provisioning_api/tests/AppsTest.php b/apps/provisioning_api/tests/Controller/AppsControllerTest.php index 35808b15816..9ac4a8290e4 100644 --- a/apps/provisioning_api/tests/AppsTest.php +++ b/apps/provisioning_api/tests/Controller/AppsControllerTest.php @@ -25,11 +25,11 @@ * */ -namespace OCA\Provisioning_API\Tests; +namespace OCA\Provisioning_API\Tests\Controller; use OC\OCSClient; -use OCA\Provisioning_API\Apps; +use OCA\Provisioning_API\Controller\AppsController; use OCP\API; use OCP\App\IAppManager; use OCP\IUserSession; @@ -41,10 +41,10 @@ use OCP\IUserSession; * * @package OCA\Provisioning_API\Tests */ -class AppsTest extends TestCase { +class AppsControllerTest extends \OCA\Provisioning_API\Tests\TestCase { /** @var IAppManager */ private $appManager; - /** @var Apps */ + /** @var AppsController */ private $api; /** @var IUserSession */ private $userSession; @@ -61,20 +61,30 @@ class AppsTest extends TestCase { ->disableOriginalConstructor() ->getMock(); - $this->api = new Apps($this->appManager, $this->ocsClient); + $request = $this->getMockBuilder('OCP\IRequest') + ->disableOriginalConstructor() + ->getMock(); + + $this->api = new AppsController( + 'provisioning_api', + $request, + $this->appManager, + $this->ocsClient + ); } public function testGetAppInfo() { - $result = $this->api->getAppInfo(['appid' => 'provisioning_api']); - $this->assertInstanceOf('\OC\OCS\Result', $result); - $this->assertTrue($result->succeeded()); + $result = $this->api->getAppInfo('provisioning_api'); + $expected = \OC_App::getAppInfo('provisioning_api'); + $this->assertEquals($expected, $result->getData()); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 998 + */ public function testGetAppInfoOnBadAppID() { - $result = $this->api->getAppInfo(['appid' => 'not_provisioning_api']); - $this->assertInstanceOf('\OC\OCS\Result', $result); - $this->assertFalse($result->succeeded()); - $this->assertEquals(API::RESPOND_NOT_FOUND, $result->getStatusCode()); + $this->api->getAppInfo('not_provisioning_api'); } public function testGetApps() { @@ -86,17 +96,14 @@ class AppsTest extends TestCase { $this->groupManager->get('admin')->addUser($user); $this->userSession->setUser($user); - $result = $this->api->getApps([]); + $result = $this->api->getApps(); - $this->assertTrue($result->succeeded()); $data = $result->getData(); $this->assertEquals(count(\OC_App::listAllApps(false, true, $this->ocsClient)), count($data['apps'])); } public function testGetAppsEnabled() { - $_GET['filter'] = 'enabled'; - $result = $this->api->getApps(['filter' => 'enabled']); - $this->assertTrue($result->succeeded()); + $result = $this->api->getApps('enabled'); $data = $result->getData(); $this->assertEquals(count(\OC_App::getEnabledApps()), count($data['apps'])); } @@ -106,9 +113,7 @@ class AppsTest extends TestCase { ->expects($this->any()) ->method($this->anything()) ->will($this->returnValue(null)); - $_GET['filter'] = 'disabled'; - $result = $this->api->getApps(['filter' => 'disabled']); - $this->assertTrue($result->succeeded()); + $result = $this->api->getApps('disabled'); $data = $result->getData(); $apps = \OC_App::listAllApps(false, true, $this->ocsClient); $list = array(); @@ -119,10 +124,11 @@ class AppsTest extends TestCase { $this->assertEquals(count($disabled), count($data['apps'])); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 101 + */ public function testGetAppsInvalidFilter() { - $_GET['filter'] = 'foo'; - $result = $this->api->getApps([]); - $this->assertFalse($result->succeeded()); - $this->assertEquals(101, $result->getStatusCode()); + $this->api->getApps('foo'); } } diff --git a/apps/provisioning_api/tests/GroupsTest.php b/apps/provisioning_api/tests/Controller/GroupsControllerTest.php index 2fa19c4f8b4..25059e85425 100644 --- a/apps/provisioning_api/tests/GroupsTest.php +++ b/apps/provisioning_api/tests/Controller/GroupsControllerTest.php @@ -24,24 +24,20 @@ * */ -namespace OCA\Provisioning_API\Tests; +namespace OCA\Provisioning_API\Tests\Controller; -use OCA\Provisioning_API\Groups; -use OCP\API; +use OCA\Provisioning_API\Controller\GroupsController; use OCP\IGroupManager; use OCP\IUserSession; -use OCP\IRequest; -class GroupsTest extends \Test\TestCase { +class GroupsControllerTest extends \Test\TestCase { /** @var IGroupManager|\PHPUnit_Framework_MockObject_MockObject */ protected $groupManager; /** @var IUserSession|\PHPUnit_Framework_MockObject_MockObject */ protected $userSession; - /** @var IRequest|\PHPUnit_Framework_MockObject_MockObject */ - protected $request; /** @var \OC\SubAdmin|\PHPUnit_Framework_MockObject_MockObject */ protected $subAdminManager; - /** @var Groups */ + /** @var GroupsController */ protected $api; protected function setUp() { @@ -61,13 +57,14 @@ class GroupsTest extends \Test\TestCase { $this->userSession = $this->getMockBuilder('OCP\IUserSession') ->disableOriginalConstructor() ->getMock(); - $this->request = $this->getMockBuilder('OCP\IRequest') + $request = $this->getMockBuilder('OCP\IRequest') ->disableOriginalConstructor() ->getMock(); - $this->api = new Groups( + $this->api = new GroupsController( + 'provisioning_api', + $request, $this->groupManager, - $this->userSession, - $this->request + $this->userSession ); } @@ -148,15 +145,6 @@ class GroupsTest extends \Test\TestCase { * @param int|null $offset */ public function testGetGroups($search, $limit, $offset) { - $this->request - ->expects($this->exactly(3)) - ->method('getParam') - ->will($this->returnValueMap([ - ['search', '', $search], - ['limit', null, $limit], - ['offset', null, $offset], - ])); - $groups = [$this->createGroup('group1'), $this->createGroup('group2')]; $search = $search === null ? '' : $search; @@ -167,19 +155,8 @@ class GroupsTest extends \Test\TestCase { ->with($search, $limit, $offset) ->willReturn($groups); - $result = $this->api->getGroups([]); - $this->assertInstanceOf('\OC\OCS\Result', $result); - $this->assertTrue($result->succeeded()); - $this->assertEquals(['group1', 'group2'], $result->getData()['groups']); - } - - public function testGetGroupAsUser() { - $result = $this->api->getGroup([]); - - $this->assertInstanceOf('\OC\OCS\Result', $result); - $this->assertFalse($result->succeeded()); - $this->assertEquals(API::RESPOND_UNAUTHORISED, $result->getStatusCode()); - + $result = $this->api->getGroups($search, $limit, $offset); + $this->assertEquals(['groups' => ['group1', 'group2']], $result->getData()); } public function testGetGroupAsSubadmin() { @@ -201,17 +178,15 @@ class GroupsTest extends \Test\TestCase { $this->createUser('user2') ]); - $result = $this->api->getGroup([ - 'groupid' => 'group', - ]); + $result = $this->api->getGroup('group'); - $this->assertInstanceOf('\OC\OCS\Result', $result); - $this->assertTrue($result->succeeded()); - $this->assertEquals(1, sizeof($result->getData()), 'Asserting the result data array only has the "users" key'); - $this->assertArrayHasKey('users', $result->getData()); - $this->assertEquals(['user1', 'user2'], $result->getData()['users']); + $this->assertEquals(['users' => ['user1', 'user2']], $result->getData()); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 997 + */ public function testGetGroupAsIrrelevantSubadmin() { $group = $this->createGroup('group'); $otherGroup = $this->createGroup('otherGroup'); @@ -226,13 +201,7 @@ class GroupsTest extends \Test\TestCase { ->with('group') ->willReturn(true); - $result = $this->api->getGroup([ - 'groupid' => 'group', - ]); - - $this->assertInstanceOf('\OC\OCS\Result', $result); - $this->assertFalse($result->succeeded()); - $this->assertEquals(API::RESPOND_UNAUTHORISED, $result->getStatusCode()); + $this->api->getGroup('group'); } public function testGetGroupAsAdmin() { @@ -254,39 +223,29 @@ class GroupsTest extends \Test\TestCase { $this->createUser('user2') ]); - $result = $this->api->getGroup([ - 'groupid' => 'group', - ]); + $result = $this->api->getGroup('group'); - $this->assertInstanceOf('\OC\OCS\Result', $result); - $this->assertTrue($result->succeeded()); - $this->assertEquals(1, sizeof($result->getData()), 'Asserting the result data array only has the "users" key'); - $this->assertArrayHasKey('users', $result->getData()); - $this->assertEquals(['user1', 'user2'], $result->getData()['users']); + $this->assertEquals(['users' => ['user1', 'user2']], $result->getData()); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 998 + * @expectedExceptionMessage The requested group could not be found + */ public function testGetGroupNonExisting() { $this->asUser(); - $result = $this->api->getGroup([ - 'groupid' => $this->getUniqueID() - ]); - - $this->assertInstanceOf('\OC\OCS\Result', $result); - $this->assertFalse($result->succeeded()); - $this->assertEquals(API::RESPOND_NOT_FOUND, $result->getStatusCode()); - $this->assertEquals('The requested group could not be found', $result->getMeta()['message']); + $this->api->getGroup($this->getUniqueID()); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 101 + * @expectedExceptionMessage Group does not exist + */ public function testGetSubAdminsOfGroupsNotExists() { - $result = $this->api->getSubAdminsOfGroup([ - 'groupid' => 'NonExistingGroup', - ]); - - $this->assertInstanceOf('\OC\OCS\Result', $result); - $this->assertFalse($result->succeeded()); - $this->assertEquals(101, $result->getStatusCode()); - $this->assertEquals('Group does not exist', $result->getMeta()['message']); + $this->api->getSubAdminsOfGroup('NonExistingGroup'); } public function testGetSubAdminsOfGroup() { @@ -305,12 +264,7 @@ class GroupsTest extends \Test\TestCase { $this->createUser('SubAdmin2'), ]); - $result = $this->api->getSubAdminsOfGroup([ - 'groupid' => 'GroupWithSubAdmins', - ]); - - $this->assertInstanceOf('\OC\OCS\Result', $result); - $this->assertTrue($result->succeeded()); + $result = $this->api->getSubAdminsOfGroup('GroupWithSubAdmins'); $this->assertEquals(['SubAdmin1', 'SubAdmin2'], $result->getData()); } @@ -328,53 +282,33 @@ class GroupsTest extends \Test\TestCase { ->willReturn([ ]); - $result = $this->api->getSubAdminsOfGroup([ - 'groupid' => 'GroupWithOutSubAdmins', - ]); - - $this->assertInstanceOf('\OC\OCS\Result', $result); - $this->assertTrue($result->succeeded()); + $result = $this->api->getSubAdminsOfGroup('GroupWithOutSubAdmins'); $this->assertEquals([], $result->getData()); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 101 + * @expectedExceptionMessage Invalid group name + */ public function testAddGroupEmptyGroup() { - $this->request - ->method('getParam') - ->with('groupid') - ->willReturn(''); - - $result = $this->api->addGroup([]); - - $this->assertInstanceOf('\OC\OCS\Result', $result); - $this->assertFalse($result->succeeded()); - $this->assertEquals(101, $result->getStatusCode()); - $this->assertEquals('Invalid group name', $result->getMeta()['message']); + $this->api->addGroup(''); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 102 + */ public function testAddGroupExistingGroup() { - $this->request - ->method('getParam') - ->with('groupid') - ->willReturn('ExistingGroup'); - $this->groupManager ->method('groupExists') ->with('ExistingGroup') ->willReturn(true); - $result = $this->api->addGroup([]); - - $this->assertInstanceOf('\OC\OCS\Result', $result); - $this->assertFalse($result->succeeded()); - $this->assertEquals(102, $result->getStatusCode()); + $this->api->addGroup('ExistingGroup'); } public function testAddGroup() { - $this->request - ->method('getParam') - ->with('groupid') - ->willReturn('NewGroup'); - $this->groupManager ->method('groupExists') ->with('NewGroup') @@ -385,17 +319,10 @@ class GroupsTest extends \Test\TestCase { ->method('createGroup') ->with('NewGroup'); - $result = $this->api->addGroup([]); - $this->assertInstanceOf('\OC\OCS\Result', $result); - $this->assertTrue($result->succeeded()); + $this->api->addGroup('NewGroup'); } public function testAddGroupWithSpecialChar() { - $this->request - ->method('getParam') - ->with('groupid') - ->willReturn('Iñtërnâtiônàlizætiøn'); - $this->groupManager ->method('groupExists') ->with('Iñtërnâtiônàlizætiøn') @@ -406,32 +333,28 @@ class GroupsTest extends \Test\TestCase { ->method('createGroup') ->with('Iñtërnâtiônàlizætiøn'); - $result = $this->api->addGroup([]); - $this->assertInstanceOf('\OC\OCS\Result', $result); - $this->assertTrue($result->succeeded()); + $this->api->addGroup('Iñtërnâtiônàlizætiøn'); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 101 + */ public function testDeleteGroupNonExisting() { - $result = $this->api->deleteGroup([ - 'groupid' => 'NonExistingGroup' - ]); - $this->assertInstanceOf('\OC\OCS\Result', $result); - $this->assertFalse($result->succeeded()); - $this->assertEquals(101, $result->getStatusCode()); + $this->api->deleteGroup('NonExistingGroup'); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 102 + */ public function testDeleteAdminGroup() { $this->groupManager ->method('groupExists') ->with('admin') ->willReturn('true'); - $result = $this->api->deleteGroup([ - 'groupid' => 'admin' - ]); - $this->assertInstanceOf('\OC\OCS\Result', $result); - $this->assertFalse($result->succeeded()); - $this->assertEquals(102, $result->getStatusCode()); + $this->api->deleteGroup('admin'); } public function testDeleteGroup() { @@ -450,10 +373,6 @@ class GroupsTest extends \Test\TestCase { ->method('delete') ->willReturn(true); - $result = $this->api->deleteGroup([ - 'groupid' => 'ExistingGroup', - ]); - $this->assertInstanceOf('\OC\OCS\Result', $result); - $this->assertTrue($result->succeeded()); + $this->api->deleteGroup('ExistingGroup'); } } diff --git a/apps/provisioning_api/tests/UsersTest.php b/apps/provisioning_api/tests/Controller/UsersControllerTest.php index e67d603e487..e04ee86feae 100644 --- a/apps/provisioning_api/tests/UsersTest.php +++ b/apps/provisioning_api/tests/Controller/UsersControllerTest.php @@ -27,10 +27,9 @@ * */ -namespace OCA\Provisioning_API\Tests; +namespace OCA\Provisioning_API\Tests\Controller; -use OCA\Provisioning_API\Users; -use OCP\API; +use OCA\Provisioning_API\Controller\UsersController; use OCP\IUserManager; use OCP\IConfig; use OCP\IUserSession; @@ -38,7 +37,7 @@ use PHPUnit_Framework_MockObject_MockObject; use Test\TestCase as OriginalTest; use OCP\ILogger; -class UsersTest extends OriginalTest { +class UsersControllerTest extends OriginalTest { /** @var IUserManager | PHPUnit_Framework_MockObject_MockObject */ protected $userManager; @@ -50,12 +49,10 @@ class UsersTest extends OriginalTest { protected $userSession; /** @var ILogger | PHPUnit_Framework_MockObject_MockObject */ protected $logger; - /** @var Users | PHPUnit_Framework_MockObject_MockObject */ + /** @var UsersController | PHPUnit_Framework_MockObject_MockObject */ protected $api; protected function tearDown() { - $_GET = null; - $_POST = null; parent::tearDown(); } @@ -77,8 +74,13 @@ class UsersTest extends OriginalTest { $this->logger = $this->getMockBuilder('OCP\ILogger') ->disableOriginalConstructor() ->getMock(); - $this->api = $this->getMockBuilder('OCA\Provisioning_API\Users') + $request = $this->getMockBuilder('OCP\IRequest') + ->disableOriginalConstructor() + ->getMock(); + $this->api = $this->getMockBuilder('OCA\Provisioning_API\Controller\UsersController') ->setConstructorArgs([ + 'provisioning_api', + $request, $this->userManager, $this->config, $this->groupManager, @@ -89,19 +91,7 @@ class UsersTest extends OriginalTest { ->getMock(); } - public function testGetUsersNotLoggedIn() { - $this->userSession - ->expects($this->once()) - ->method('getUser') - ->will($this->returnValue(null)); - - $expected = new \OC\OCS\Result(null, API::RESPOND_UNAUTHORISED); - $this->assertEquals($expected, $this->api->getUsers()); - } - public function testGetUsersAsAdmin() { - $_GET['search'] = 'MyCustomSearch'; - $loggedInUser = $this->getMockBuilder('OCP\IUser') ->disableOriginalConstructor() ->getMock(); @@ -123,19 +113,16 @@ class UsersTest extends OriginalTest { ->with('MyCustomSearch', null, null) ->will($this->returnValue(['Admin' => [], 'Foo' => [], 'Bar' => []])); - $expected = new \OC\OCS\Result([ - 'users' => [ + $expected = ['users' => [ 'Admin', 'Foo', 'Bar', ], - ]); - $this->assertEquals($expected, $this->api->getUsers()); + ]; + $this->assertEquals($expected, $this->api->getUsers('MyCustomSearch')->getData()); } public function testGetUsersAsSubAdmin() { - $_GET['search'] = 'MyCustomSearch'; - $loggedInUser = $this->getMockBuilder('OCP\IUser') ->disableOriginalConstructor() ->getMock(); @@ -186,51 +173,20 @@ class UsersTest extends OriginalTest { ->method('displayNamesInGroup') ->will($this->onConsecutiveCalls(['AnotherUserInTheFirstGroup' => []], ['UserInTheSecondGroup' => []])); - $expected = new \OC\OCS\Result([ + $expected = [ 'users' => [ 'AnotherUserInTheFirstGroup', 'UserInTheSecondGroup', ], - ]); - $this->assertEquals($expected, $this->api->getUsers()); - } - - public function testGetUsersAsRegularUser() { - $_GET['search'] = 'MyCustomSearch'; - - $loggedInUser = $this->getMockBuilder('OCP\IUser') - ->disableOriginalConstructor() - ->getMock(); - $loggedInUser - ->expects($this->once()) - ->method('getUID') - ->will($this->returnValue('regularUser')); - $this->userSession - ->expects($this->once()) - ->method('getUser') - ->will($this->returnValue($loggedInUser)); - $this->groupManager - ->expects($this->once()) - ->method('isAdmin') - ->will($this->returnValue(false)); - $subAdminManager = $this->getMockBuilder('OC\SubAdmin') - ->disableOriginalConstructor()->getMock(); - $subAdminManager - ->expects($this->once()) - ->method('isSubAdmin') - ->with($loggedInUser) - ->will($this->returnValue(false)); - $this->groupManager - ->expects($this->once()) - ->method('getSubAdmin') - ->will($this->returnValue($subAdminManager)); - - $expected = new \OC\OCS\Result(null, API::RESPOND_UNAUTHORISED); - $this->assertEquals($expected, $this->api->getUsers()); + ]; + $this->assertEquals($expected, $this->api->getUsers('MyCustomSearch')->getData()); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 102 + */ public function testAddUserAlreadyExisting() { - $_POST['userid'] = 'AlreadyExistingUser'; $this->userManager ->expects($this->once()) ->method('userExists') @@ -257,13 +213,15 @@ class UsersTest extends OriginalTest { ->with('adminUser') ->willReturn(true); - $expected = new \OC\OCS\Result(null, 102, 'User already exists'); - $this->assertEquals($expected, $this->api->addUser()); + $this->api->addUser('AlreadyExistingUser', null, null); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 104 + * @expectedExceptionMessage group NonExistingGroup does not exist + */ public function testAddUserNonExistingGroup() { - $_POST['userid'] = 'NewUser'; - $_POST['groups'] = ['NonExistingGroup']; $this->userManager ->expects($this->once()) ->method('userExists') @@ -291,13 +249,15 @@ class UsersTest extends OriginalTest { ->with('NonExistingGroup') ->willReturn(false); - $expected = new \OC\OCS\Result(null, 104, 'group NonExistingGroup does not exist'); - $this->assertEquals($expected, $this->api->addUser()); + $this->api->addUser('NewUser', 'pass', ['NonExistingGroup']); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 104 + * @expectedExceptionMessage group NonExistingGroup does not exist + */ public function testAddUserExistingGroupNonExistingGroup() { - $_POST['userid'] = 'NewUser'; - $_POST['groups'] = ['ExistingGroup', 'NonExistingGroup']; $this->userManager ->expects($this->once()) ->method('userExists') @@ -331,13 +291,10 @@ class UsersTest extends OriginalTest { ['NonExistingGroup', false] ])); - $expected = new \OC\OCS\Result(null, 104, 'group NonExistingGroup does not exist'); - $this->assertEquals($expected, $this->api->addUser()); + $this->api->addUser('NewUser', 'pass', ['ExistingGroup', 'NonExistingGroup']); } public function testAddUserSuccessful() { - $_POST['userid'] = 'NewUser'; - $_POST['password'] = 'PasswordOfTheNewUser'; $this->userManager ->expects($this->once()) ->method('userExists') @@ -368,14 +325,10 @@ class UsersTest extends OriginalTest { ->with('adminUser') ->willReturn(true); - $expected = new \OC\OCS\Result(null, 100); - $this->assertEquals($expected, $this->api->addUser()); + $this->assertEquals([], $this->api->addUser('NewUser', 'PasswordOfTheNewUser')->getData()); } public function testAddUserExistingGroup() { - $_POST['userid'] = 'NewUser'; - $_POST['password'] = 'PasswordOfTheNewUser'; - $_POST['groups'] = ['ExistingGroup']; $this->userManager ->expects($this->once()) ->method('userExists') @@ -430,13 +383,15 @@ class UsersTest extends OriginalTest { ['Added userid NewUser to group ExistingGroup', ['app' => 'ocs_api']] ); - $expected = new \OC\OCS\Result(null, 100); - $this->assertEquals($expected, $this->api->addUser()); + $this->assertEquals([], $this->api->addUser('NewUser', 'PasswordOfTheNewUser', ['ExistingGroup'])->getData()); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 101 + * @expectedExceptionMessage Bad request + */ public function testAddUserUnsuccessful() { - $_POST['userid'] = 'NewUser'; - $_POST['password'] = 'PasswordOfTheNewUser'; $this->userManager ->expects($this->once()) ->method('userExists') @@ -468,49 +423,15 @@ class UsersTest extends OriginalTest { ->with('adminUser') ->willReturn(true); - $expected = new \OC\OCS\Result(null, 101, 'Bad request'); - $this->assertEquals($expected, $this->api->addUser()); - } - - public function testAddUserAsRegularUser() { - $_POST['userid'] = 'NewUser'; - $_POST['password'] = 'PasswordOfTheNewUser'; - $loggedInUser = $this->getMockBuilder('OCP\IUser') - ->disableOriginalConstructor() - ->getMock(); - $loggedInUser - ->expects($this->once()) - ->method('getUID') - ->will($this->returnValue('regularUser')); - $this->userSession - ->expects($this->once()) - ->method('getUser') - ->will($this->returnValue($loggedInUser)); - $this->groupManager - ->expects($this->once()) - ->method('isAdmin') - ->with('regularUser') - ->willReturn(false); - $subAdminManager = $this->getMockBuilder('OC\SubAdmin') - ->disableOriginalConstructor()->getMock(); - $subAdminManager - ->expects($this->once()) - ->method('isSubAdmin') - ->with($loggedInUser) - ->willReturn(false); - $this->groupManager - ->expects($this->once()) - ->method('getSubAdmin') - ->with() - ->willReturn($subAdminManager); - - $expected = new \OC\OCS\Result(null, API::RESPOND_UNAUTHORISED); - $this->assertEquals($expected, $this->api->addUser()); + $this->api->addUser('NewUser', 'PasswordOfTheNewUser'); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 106 + * @expectedExceptionMessage no group specified (required for subadmins) + */ public function testAddUserAsSubAdminNoGroup() { - $_POST['userid'] = 'NewUser'; - $_POST['password'] = 'PasswordOfTheNewUser'; $loggedInUser = $this->getMockBuilder('OCP\IUser') ->disableOriginalConstructor() ->getMock(); @@ -529,25 +450,21 @@ class UsersTest extends OriginalTest { ->willReturn(false); $subAdminManager = $this->getMockBuilder('OC\SubAdmin') ->disableOriginalConstructor()->getMock(); - $subAdminManager - ->expects($this->once()) - ->method('isSubAdmin') - ->with($loggedInUser) - ->willReturn(true); $this->groupManager ->expects($this->once()) ->method('getSubAdmin') ->with() ->willReturn($subAdminManager); - $expected = new \OC\OCS\Result(null, 106, 'no group specified (required for subadmins)'); - $this->assertEquals($expected, $this->api->addUser()); + $this->api->addUser('NewUser', 'PasswordOfTheNewUser', null); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 105 + * @expectedExceptionMessage insufficient privileges for group ExistingGroup + */ public function testAddUserAsSubAdminValidGroupNotSubAdmin() { - $_POST['userid'] = 'NewUser'; - $_POST['password'] = 'PasswordOfTheNewUser'; - $_POST['groups'] = ['ExistingGroup']; $loggedInUser = $this->getMockBuilder('OCP\IUser') ->disableOriginalConstructor() ->getMock(); @@ -574,11 +491,6 @@ class UsersTest extends OriginalTest { ->disableOriginalConstructor()->getMock(); $subAdminManager ->expects($this->once()) - ->method('isSubAdmin') - ->with($loggedInUser) - ->willReturn(true); - $subAdminManager - ->expects($this->once()) ->method('isSubAdminOfGroup') ->with($loggedInUser, $existingGroup) ->willReturn(false); @@ -593,14 +505,10 @@ class UsersTest extends OriginalTest { ->with('ExistingGroup') ->willReturn(true); - $expected = new \OC\OCS\Result(null, 105, 'insufficient privileges for group ExistingGroup'); - $this->assertEquals($expected, $this->api->addUser()); + $this->api->addUser('NewUser', 'PasswordOfTheNewUser', ['ExistingGroup'])->getData(); } public function testAddUserAsSubAdminExistingGroups() { - $_POST['userid'] = 'NewUser'; - $_POST['password'] = 'PasswordOfTheNewUser'; - $_POST['groups'] = ['ExistingGroup1', 'ExistingGroup2']; $this->userManager ->expects($this->once()) ->method('userExists') @@ -680,11 +588,6 @@ class UsersTest extends OriginalTest { ->method('getSubAdmin') ->willReturn($subAdminManager); $subAdminManager - ->expects($this->once()) - ->method('isSubAdmin') - ->with($loggedInUser) - ->willReturn(true); - $subAdminManager ->expects($this->exactly(2)) ->method('isSubAdminOfGroup') ->withConsecutive( @@ -693,22 +596,14 @@ class UsersTest extends OriginalTest { ) ->willReturn(true); - - $expected = new \OC\OCS\Result(null, 100); - $this->assertEquals($expected, $this->api->addUser()); - } - - - public function testGetUserNotLoggedIn() { - $this->userSession - ->expects($this->once()) - ->method('getUser') - ->will($this->returnValue(null)); - - $expected = new \OC\OCS\Result(null, API::RESPOND_UNAUTHORISED); - $this->assertEquals($expected, $this->api->getUser(['userid' => 'UserToGet'])); + $this->assertEquals([], $this->api->addUser('NewUser', 'PasswordOfTheNewUser', ['ExistingGroup1', 'ExistingGroup2'])->getData()); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 998 + * @expectedExceptionMessage The requested user could not be found + */ public function testGetUserTargetDoesNotExist() { $loggedInUser = $this->getMockBuilder('OCP\IUser') ->disableOriginalConstructor() @@ -723,8 +618,7 @@ class UsersTest extends OriginalTest { ->with('UserToGet') ->will($this->returnValue(null)); - $expected = new \OC\OCS\Result(null, API::RESPOND_NOT_FOUND, 'The requested user could not be found'); - $this->assertEquals($expected, $this->api->getUser(['userid' => 'UserToGet'])); + $this->api->getUser('UserToGet'); } public function testGetUserAsAdmin() { @@ -770,15 +664,13 @@ class UsersTest extends OriginalTest { ->method('getDisplayName') ->will($this->returnValue('Demo User')); - $expected = new \OC\OCS\Result( - [ - 'enabled' => 'true', - 'quota' => ['DummyValue'], - 'email' => 'demo@owncloud.org', - 'displayname' => 'Demo User', - ] - ); - $this->assertEquals($expected, $this->api->getUser(['userid' => 'UserToGet'])); + $expected = [ + 'enabled' => 'true', + 'quota' => ['DummyValue'], + 'email' => 'demo@owncloud.org', + 'displayname' => 'Demo User', + ]; + $this->assertEquals($expected, $this->api->getUser('UserToGet')->getData()); } public function testGetUserAsSubAdminAndUserIsAccessible() { @@ -837,17 +729,20 @@ class UsersTest extends OriginalTest { ->method('getDisplayName') ->will($this->returnValue('Demo User')); - $expected = new \OC\OCS\Result( - [ - 'enabled' => 'true', - 'quota' => ['DummyValue'], - 'email' => 'demo@owncloud.org', - 'displayname' => 'Demo User', - ] - ); - $this->assertEquals($expected, $this->api->getUser(['userid' => 'UserToGet'])); + $expected = [ + 'enabled' => 'true', + 'quota' => ['DummyValue'], + 'email' => 'demo@owncloud.org', + 'displayname' => 'Demo User', + ]; + $this->assertEquals($expected, $this->api->getUser('UserToGet')->getData()); } + + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 997 + */ public function testGetUserAsSubAdminAndUserIsNotAccessible() { $loggedInUser = $this->getMockBuilder('OCP\IUser') ->disableOriginalConstructor() @@ -886,8 +781,7 @@ class UsersTest extends OriginalTest { ->method('getSubAdmin') ->will($this->returnValue($subAdminManager)); - $expected = new \OC\OCS\Result(null, API::RESPOND_UNAUTHORISED); - $this->assertEquals($expected, $this->api->getUser(['userid' => 'UserToGet'])); + $this->api->getUser('UserToGet'); } public function testGetUserAsSubAdminSelfLookup() { @@ -941,22 +835,12 @@ class UsersTest extends OriginalTest { ->method('getEMailAddress') ->will($this->returnValue('subadmin@owncloud.org')); - $expected = new \OC\OCS\Result([ + $expected = [ 'quota' => ['DummyValue'], 'email' => 'subadmin@owncloud.org', 'displayname' => 'Subadmin User', - ]); - $this->assertEquals($expected, $this->api->getUser(['userid' => 'subadmin'])); - } - - public function testEditUserNotLoggedIn() { - $this->userSession - ->expects($this->once()) - ->method('getUser') - ->will($this->returnValue(null)); - - $expected = new \OC\OCS\Result(null, API::RESPOND_UNAUTHORISED); - $this->assertEquals($expected, $this->api->editUser(['userid' => 'UserToEdit'])); + ]; + $this->assertEquals($expected, $this->api->getUser('subadmin')->getData()); } public function testEditUserRegularUserSelfEditChangeDisplayName() { @@ -984,8 +868,7 @@ class UsersTest extends OriginalTest { ->method('setDisplayName') ->with('NewDisplayName'); - $expected = new \OC\OCS\Result(null, 100); - $this->assertEquals($expected, $this->api->editUser(['userid' => 'UserToEdit', '_put' => ['key' => 'display', 'value' => 'NewDisplayName']])); + $this->assertEquals([], $this->api->editUser('UserToEdit', 'display', 'NewDisplayName')->getData()); } public function testEditUserRegularUserSelfEditChangeEmailValid() { @@ -1013,10 +896,14 @@ class UsersTest extends OriginalTest { ->method('setEMailAddress') ->with('demo@owncloud.org'); - $expected = new \OC\OCS\Result(null, 100); - $this->assertEquals($expected, $this->api->editUser(['userid' => 'UserToEdit', '_put' => ['key' => 'email', 'value' => 'demo@owncloud.org']])); + $this->assertEquals([], $this->api->editUser('UserToEdit', 'email', 'demo@owncloud.org')->getData()); } + + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 102 + */ public function testEditUserRegularUserSelfEditChangeEmailInvalid() { $loggedInUser = $this->getMockBuilder('OCP\IUser') ->disableOriginalConstructor() @@ -1038,8 +925,7 @@ class UsersTest extends OriginalTest { ->with('UserToEdit') ->will($this->returnValue($targetUser)); - $expected = new \OC\OCS\Result(null, 102); - $this->assertEquals($expected, $this->api->editUser(['userid' => 'UserToEdit', '_put' => ['key' => 'email', 'value' => 'demo.org']])); + $this->api->editUser('UserToEdit', 'email', 'demo.org'); } public function testEditUserRegularUserSelfEditChangePassword() { @@ -1067,10 +953,14 @@ class UsersTest extends OriginalTest { ->method('setPassword') ->with('NewPassword'); - $expected = new \OC\OCS\Result(null, 100); - $this->assertEquals($expected, $this->api->editUser(['userid' => 'UserToEdit', '_put' => ['key' => 'password', 'value' => 'NewPassword']])); + $this->assertEquals([], $this->api->editUser('UserToEdit', 'password', 'NewPassword')->getData()); } + + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 997 + */ public function testEditUserRegularUserSelfEditChangeQuota() { $loggedInUser = $this->getMockBuilder('OCP\IUser') ->disableOriginalConstructor() @@ -1092,8 +982,7 @@ class UsersTest extends OriginalTest { ->with('UserToEdit') ->will($this->returnValue($targetUser)); - $expected = new \OC\OCS\Result(null, 997); - $this->assertEquals($expected, $this->api->editUser(['userid' => 'UserToEdit', '_put' => ['key' => 'quota', 'value' => 'NewQuota']])); + $this->api->editUser('UserToEdit', 'quota', 'NewQuota'); } public function testEditUserAdminUserSelfEditChangeValidQuota() { @@ -1121,10 +1010,15 @@ class UsersTest extends OriginalTest { ->with('UserToEdit') ->will($this->returnValue(true)); - $expected = new \OC\OCS\Result(null, 100); - $this->assertEquals($expected, $this->api->editUser(['userid' => 'UserToEdit', '_put' => ['key' => 'quota', 'value' => '3042824']])); + $this->assertEquals([], $this->api->editUser('UserToEdit', 'quota', '3042824')->getData()); } + + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 103 + * @expectedExceptionMessage Invalid quota value ABC + */ public function testEditUserAdminUserSelfEditChangeInvalidQuota() { $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); $loggedInUser @@ -1147,8 +1041,7 @@ class UsersTest extends OriginalTest { ->with('UserToEdit') ->will($this->returnValue(true)); - $expected = new \OC\OCS\Result(null, 103, 'Invalid quota value ABC'); - $this->assertEquals($expected, $this->api->editUser(['userid' => 'UserToEdit', '_put' => ['key' => 'quota', 'value' => 'ABC']])); + $this->api->editUser('UserToEdit', 'quota', 'ABC'); } public function testEditUserAdminUserEditChangeValidQuota() { @@ -1183,8 +1076,7 @@ class UsersTest extends OriginalTest { ->method('getSubAdmin') ->will($this->returnValue($subAdminManager)); - $expected = new \OC\OCS\Result(null, 100); - $this->assertEquals($expected, $this->api->editUser(['userid' => 'UserToEdit', '_put' => ['key' => 'quota', 'value' => '3042824']])); + $this->assertEquals([], $this->api->editUser('UserToEdit', 'quota', '3042824')->getData()); } public function testEditUserSubadminUserAccessible() { @@ -1219,10 +1111,13 @@ class UsersTest extends OriginalTest { ->method('getSubAdmin') ->will($this->returnValue($subAdminManager)); - $expected = new \OC\OCS\Result(null, 100); - $this->assertEquals($expected, $this->api->editUser(['userid' => 'UserToEdit', '_put' => ['key' => 'quota', 'value' => '3042824']])); + $this->assertEquals([], $this->api->editUser('UserToEdit', 'quota', '3042824')->getData()); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 997 + */ public function testEditUserSubadminUserInaccessible() { $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); $loggedInUser @@ -1252,20 +1147,13 @@ class UsersTest extends OriginalTest { ->method('getSubAdmin') ->will($this->returnValue($subAdminManager)); - $expected = new \OC\OCS\Result(null, 997); - $this->assertEquals($expected, $this->api->editUser(['userid' => 'UserToEdit', '_put' => ['key' => 'quota', 'value' => '3042824']])); - } - - public function testDeleteUserNotLoggedIn() { - $this->userSession - ->expects($this->once()) - ->method('getUser') - ->will($this->returnValue(null)); - - $expected = new \OC\OCS\Result(null, 997); - $this->assertEquals($expected, $this->api->deleteUser(['userid' => 'UserToDelete'])); + $this->api->editUser('UserToEdit', 'quota', 'value'); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 101 + */ public function testDeleteUserNotExistingUser() { $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); $loggedInUser @@ -1282,10 +1170,13 @@ class UsersTest extends OriginalTest { ->with('UserToDelete') ->will($this->returnValue(null)); - $expected = new \OC\OCS\Result(null, 101); - $this->assertEquals($expected, $this->api->deleteUser(['userid' => 'UserToDelete'])); + $this->api->deleteUser('UserToDelete'); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 101 + */ public function testDeleteUserSelf() { $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); $loggedInUser @@ -1307,8 +1198,7 @@ class UsersTest extends OriginalTest { ->with('UserToDelete') ->will($this->returnValue($targetUser)); - $expected = new \OC\OCS\Result(null, 101); - $this->assertEquals($expected, $this->api->deleteUser(['userid' => 'UserToDelete'])); + $this->api->deleteUser('UserToDelete'); } public function testDeleteSuccessfulUserAsAdmin() { @@ -1341,10 +1231,13 @@ class UsersTest extends OriginalTest { ->method('delete') ->will($this->returnValue(true)); - $expected = new \OC\OCS\Result(null, 100); - $this->assertEquals($expected, $this->api->deleteUser(['userid' => 'UserToDelete'])); + $this->assertEquals([], $this->api->deleteUser('UserToDelete')->getData()); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 101 + */ public function testDeleteUnsuccessfulUserAsAdmin() { $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); $loggedInUser @@ -1375,8 +1268,7 @@ class UsersTest extends OriginalTest { ->method('delete') ->will($this->returnValue(false)); - $expected = new \OC\OCS\Result(null, 101); - $this->assertEquals($expected, $this->api->deleteUser(['userid' => 'UserToDelete'])); + $this->api->deleteUser('UserToDelete'); } public function testDeleteSuccessfulUserAsSubadmin() { @@ -1420,10 +1312,13 @@ class UsersTest extends OriginalTest { ->method('delete') ->will($this->returnValue(true)); - $expected = new \OC\OCS\Result(null, 100); - $this->assertEquals($expected, $this->api->deleteUser(['userid' => 'UserToDelete'])); + $this->assertEquals([], $this->api->deleteUser('UserToDelete')->getData()); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 101 + */ public function testDeleteUnsuccessfulUserAsSubadmin() { $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); $loggedInUser @@ -1465,10 +1360,13 @@ class UsersTest extends OriginalTest { ->method('delete') ->will($this->returnValue(false)); - $expected = new \OC\OCS\Result(null, 101); - $this->assertEquals($expected, $this->api->deleteUser(['userid' => 'UserToDelete'])); + $this->api->deleteUser('UserToDelete'); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 997 + */ public function testDeleteUserAsSubAdminAndUserIsNotAccessible() { $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); $loggedInUser @@ -1506,20 +1404,13 @@ class UsersTest extends OriginalTest { ->method('getSubAdmin') ->will($this->returnValue($subAdminManager)); - $expected = new \OC\OCS\Result(null, 997); - $this->assertEquals($expected, $this->api->deleteUser(['userid' => 'UserToDelete'])); - } - - public function testGetUsersGroupsNotLoggedIn() { - $this->userSession - ->expects($this->once()) - ->method('getUser') - ->will($this->returnValue(null)); - - $expected = new \OC\OCS\Result(null, 997); - $this->assertEquals($expected, $this->api->getUsersGroups(['userid' => 'UserToLookup'])); + $this->api->deleteUser('UserToDelete'); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 998 + */ public function testGetUsersGroupsTargetUserNotExisting() { $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); $this->userSession @@ -1527,8 +1418,7 @@ class UsersTest extends OriginalTest { ->method('getUser') ->will($this->returnValue($loggedInUser)); - $expected = new \OC\OCS\Result(null, 998); - $this->assertEquals($expected, $this->api->getUsersGroups(['userid' => 'UserToLookup'])); + $this->api->getUsersGroups('UserToLookup'); } public function testGetUsersGroupsSelfTargetted() { @@ -1557,8 +1447,7 @@ class UsersTest extends OriginalTest { ->with($targetUser) ->will($this->returnValue(['DummyValue'])); - $expected = new \OC\OCS\Result(['groups' => ['DummyValue']]); - $this->assertEquals($expected, $this->api->getUsersGroups(['userid' => 'UserToLookup'])); + $this->assertEquals(['groups' => ['DummyValue']], $this->api->getUsersGroups('UserToLookup')->getData()); } public function testGetUsersGroupsForAdminUser() { @@ -1592,8 +1481,7 @@ class UsersTest extends OriginalTest { ->with('admin') ->will($this->returnValue(true)); - $expected = new \OC\OCS\Result(['groups' => ['DummyValue']]); - $this->assertEquals($expected, $this->api->getUsersGroups(['userid' => 'UserToLookup'])); + $this->assertEquals(['groups' => ['DummyValue']], $this->api->getUsersGroups('UserToLookup')->getData()); } public function testGetUsersGroupsForSubAdminUserAndUserIsAccessible() { @@ -1653,11 +1541,13 @@ class UsersTest extends OriginalTest { ->with($targetUser) ->will($this->returnValue(['Group1'])); - $expected = new \OC\OCS\Result(['groups' => ['Group1']]); - $this->assertEquals($expected, $this->api->getUsersGroups(['userid' => 'UserToLookup'])); + $this->assertEquals(['groups' => ['Group1']], $this->api->getUsersGroups('UserToLookup')->getData()); } - + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 997 + */ public function testGetUsersGroupsForSubAdminUserAndUserIsInaccessible() { $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); $loggedInUser @@ -1700,137 +1590,64 @@ class UsersTest extends OriginalTest { ->with($targetUser) ->will($this->returnValue(['Group1'])); - $expected = new \OC\OCS\Result(null, 997); - $this->assertEquals($expected, $this->api->getUsersGroups(['userid' => 'UserToLookup'])); - } - - public function testAddToGroupNotLoggedIn() { - $this->userSession - ->expects($this->once()) - ->method('getUser') - ->will($this->returnValue(null)); - - $expected = new \OC\OCS\Result(null, 997); - $this->assertEquals($expected, $this->api->addToGroup([])); + $this->api->getUsersGroups('UserToLookup'); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 102 + */ public function testAddToGroupWithTargetGroupNotExisting() { - $_POST['groupid'] = 'GroupToAddTo'; - - $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); - $loggedInUser - ->expects($this->once()) - ->method('getUID') - ->will($this->returnValue('admin')); - $this->userSession - ->expects($this->once()) - ->method('getUser') - ->will($this->returnValue($loggedInUser)); $this->groupManager ->expects($this->once()) ->method('get') ->with('GroupToAddTo') ->will($this->returnValue(null)); - $this->groupManager - ->expects($this->once()) - ->method('isAdmin') - ->with('admin') - ->will($this->returnValue(true)); - $expected = new \OC\OCS\Result(null, 102); - $this->assertEquals($expected, $this->api->addToGroup(['userid' => 'TargetUser'])); + $this->api->addToGroup('TargetUser', 'GroupToAddTo'); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 101 + */ public function testAddToGroupWithNoGroupSpecified() { - $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); - $loggedInUser - ->expects($this->once()) - ->method('getUID') - ->will($this->returnValue('admin')); - $this->userSession - ->expects($this->once()) - ->method('getUser') - ->will($this->returnValue($loggedInUser)); - $this->groupManager - ->expects($this->once()) - ->method('isAdmin') - ->with('admin') - ->will($this->returnValue(true)); - - $expected = new \OC\OCS\Result(null, 101); - $this->assertEquals($expected, $this->api->addToGroup(['userid' => 'TargetUser'])); + $this->api->addToGroup('TargetUser'); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 103 + */ public function testAddToGroupWithTargetUserNotExisting() { - $_POST['groupid'] = 'GroupToAddTo'; - - $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); - $loggedInUser - ->expects($this->once()) - ->method('getUID') - ->will($this->returnValue('admin')); $targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock(); - $this->userSession - ->expects($this->once()) - ->method('getUser') - ->will($this->returnValue($loggedInUser)); $this->groupManager ->expects($this->once()) ->method('get') ->with('GroupToAddTo') ->will($this->returnValue($targetGroup)); - $this->groupManager - ->expects($this->once()) - ->method('isAdmin') - ->with('admin') - ->will($this->returnValue(true)); - - $expected = new \OC\OCS\Result(null, 103); - $this->assertEquals($expected, $this->api->addToGroup(['userid' => 'TargetUser'])); - } - - public function testAddToGroupWithoutPermission() { - $_POST['groupid'] = 'GroupToAddTo'; - - $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); - $loggedInUser - ->expects($this->once()) - ->method('getUID') - ->will($this->returnValue('admin')); - $this->userSession - ->expects($this->once()) - ->method('getUser') - ->will($this->returnValue($loggedInUser)); - $this->groupManager - ->expects($this->once()) - ->method('isAdmin') - ->with('admin') - ->will($this->returnValue(false)); - $expected = new \OC\OCS\Result(null, 997); - $this->assertEquals($expected, $this->api->addToGroup(['userid' => 'TargetUser'])); - } - - public function testRemoveFromGroupWithoutLogIn() { - $this->userSession - ->expects($this->once()) - ->method('getUser') - ->will($this->returnValue(null)); - - $expected = new \OC\OCS\Result(null, 997); - $this->assertEquals($expected, $this->api->removeFromGroup(['userid' => 'TargetUser', '_delete' => ['groupid' => 'TargetGroup']])); + $this->api->addToGroup('TargetUser', 'GroupToAddTo'); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 101 + */ public function testRemoveFromGroupWithNoTargetGroup() { $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); $this->userSession ->expects($this->once()) ->method('getUser') ->will($this->returnValue($loggedInUser)); - $expected = new \OC\OCS\Result(null, 101); - $this->assertEquals($expected, $this->api->removeFromGroup(['userid' => 'TargetUser', '_delete' => []])); + + $this->api->removeFromGroup('TargetUser', null); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 102 + */ public function testRemoveFromGroupWithNotExistingTargetGroup() { $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); $this->userSession @@ -1843,10 +1660,13 @@ class UsersTest extends OriginalTest { ->with('TargetGroup') ->will($this->returnValue(null)); - $expected = new \OC\OCS\Result(null, 102); - $this->assertEquals($expected, $this->api->removeFromGroup(['userid' => 'TargetUser', '_delete' => ['groupid' => 'TargetGroup']])); + $this->api->removeFromGroup('TargetUser', 'TargetGroup'); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 103 + */ public function testRemoveFromGroupWithNotExistingTargetUser() { $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); $targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock(); @@ -1865,10 +1685,13 @@ class UsersTest extends OriginalTest { ->with('TargetUser') ->will($this->returnValue(null)); - $expected = new \OC\OCS\Result(null, 103); - $this->assertEquals($expected, $this->api->removeFromGroup(['userid' => 'TargetUser', '_delete' => ['groupid' => 'TargetGroup']])); + $this->api->removeFromGroup('TargetUser', 'TargetGroup'); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 104 + */ public function testRemoveFromGroupWithoutPermission() { $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); $loggedInUser @@ -1903,10 +1726,14 @@ class UsersTest extends OriginalTest { ->with('unauthorizedUser') ->will($this->returnValue(false)); - $expected = new \OC\OCS\Result(null, 104); - $this->assertEquals($expected, $this->api->removeFromGroup(['userid' => 'TargetUser', '_delete' => ['groupid' => 'TargetGroup']])); + $this->api->removeFromGroup('TargetUser', 'TargetGroup'); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 105 + * @expectedExceptionMessage Cannot remove yourself from the admin group + */ public function testRemoveFromGroupAsAdminFromAdmin() { $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); $loggedInUser @@ -1945,10 +1772,14 @@ class UsersTest extends OriginalTest { ->with('admin') ->will($this->returnValue(true)); - $expected = new \OC\OCS\Result(null, 105, 'Cannot remove yourself from the admin group'); - $this->assertEquals($expected, $this->api->removeFromGroup(['userid' => 'admin', '_delete' => ['groupid' => 'admin']])); + $this->api->removeFromGroup('admin', 'admin'); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 105 + * @expectedExceptionMessage Cannot remove yourself from this group as you are a SubAdmin + */ public function testRemoveFromGroupAsSubAdminFromSubAdmin() { $loggedInUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); $loggedInUser @@ -1997,8 +1828,7 @@ class UsersTest extends OriginalTest { ->with('subadmin') ->will($this->returnValue(false)); - $expected = new \OC\OCS\Result(null, 105, 'Cannot remove yourself from this group as you are a SubAdmin'); - $this->assertEquals($expected, $this->api->removeFromGroup(['userid' => 'subadmin', '_delete' => ['groupid' => 'subadmin']])); + $this->api->removeFromGroup('subadmin', 'subadmin'); } public function testRemoveFromGroupSuccessful() { @@ -2039,10 +1869,14 @@ class UsersTest extends OriginalTest { ->method('removeUser') ->with($targetUser); - $expected = new \OC\OCS\Result(null, 100); - $this->assertEquals($expected, $this->api->removeFromGroup(['userid' => 'AnotherUser', '_delete' => ['groupid' => 'admin']])); + $this->assertEquals([], $this->api->removeFromGroup('AnotherUser', 'admin')->getData()); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 101 + * @expectedExceptionMessage User does not exist + */ public function testAddSubAdminWithNotExistingTargetUser() { $this->userManager ->expects($this->once()) @@ -2050,12 +1884,15 @@ class UsersTest extends OriginalTest { ->with('NotExistingUser') ->will($this->returnValue(null)); - $expected = new \OC\OCS\Result(null, 101, 'User does not exist'); - $this->assertEquals($expected, $this->api->addSubAdmin(['userid' => 'NotExistingUser'])); + $this->api->addSubAdmin('NotExistingUser', null); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 102 + * @expectedExceptionMessage Group:NotExistingGroup does not exist + */ public function testAddSubAdminWithNotExistingTargetGroup() { - $_POST['groupid'] = 'NotExistingGroup'; $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); $this->userManager @@ -2069,13 +1906,15 @@ class UsersTest extends OriginalTest { ->with('NotExistingGroup') ->will($this->returnValue(null)); - $expected = new \OC\OCS\Result(null, 102, 'Group:NotExistingGroup does not exist'); - $this->assertEquals($expected, $this->api->addSubAdmin(['userid' => 'ExistingUser'])); + $this->api->addSubAdmin('ExistingUser', 'NotExistingGroup'); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 103 + * @expectedExceptionMessage Cannot create subadmins for admin group + */ public function testAddSubAdminToAdminGroup() { - $_POST['groupid'] = 'ADmiN'; - $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); $targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock(); $this->userManager @@ -2089,13 +1928,10 @@ class UsersTest extends OriginalTest { ->with('ADmiN') ->will($this->returnValue($targetGroup)); - $expected = new \OC\OCS\Result(null, 103, 'Cannot create subadmins for admin group'); - $this->assertEquals($expected, $this->api->addSubAdmin(['userid' => 'ExistingUser'])); + $this->api->addSubAdmin('ExistingUser', 'ADmiN'); } public function testAddSubAdminTwice() { - $_POST['groupid'] = 'TargetGroup'; - $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); $targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock(); $this->userManager @@ -2120,13 +1956,10 @@ class UsersTest extends OriginalTest { ->method('getSubAdmin') ->will($this->returnValue($subAdminManager)); - $expected = new \OC\OCS\Result(null, 100); - $this->assertEquals($expected, $this->api->addSubAdmin(['userid' => 'ExistingUser'])); + $this->assertEquals([], $this->api->addSubAdmin('ExistingUser', 'TargetGroup')->getData()); } public function testAddSubAdminSuccessful() { - $_POST['groupid'] = 'TargetGroup'; - $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); $targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock(); $this->userManager @@ -2156,13 +1989,15 @@ class UsersTest extends OriginalTest { ->method('getSubAdmin') ->will($this->returnValue($subAdminManager)); - $expected = new \OC\OCS\Result(null, 100); - $this->assertEquals($expected, $this->api->addSubAdmin(['userid' => 'ExistingUser'])); + $this->assertEquals([], $this->api->addSubAdmin('ExistingUser', 'TargetGroup')->getData()); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 103 + * @expectedExceptionMessage Unknown error occurred + */ public function testAddSubAdminUnsuccessful() { - $_POST['groupid'] = 'TargetGroup'; - $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); $targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock(); $this->userManager @@ -2192,10 +2027,14 @@ class UsersTest extends OriginalTest { ->method('getSubAdmin') ->will($this->returnValue($subAdminManager)); - $expected = new \OC\OCS\Result(null, 103, 'Unknown error occurred'); - $this->assertEquals($expected, $this->api->addSubAdmin(['userid' => 'ExistingUser'])); + $this->api->addSubAdmin('ExistingUser', 'TargetGroup'); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 101 + * @expectedExceptionMessage User does not exist + */ public function testRemoveSubAdminNotExistingTargetUser() { $this->userManager ->expects($this->once()) @@ -2203,10 +2042,14 @@ class UsersTest extends OriginalTest { ->with('NotExistingUser') ->will($this->returnValue(null)); - $expected = new \OC\OCS\Result(null, 101, 'User does not exist'); - $this->assertEquals($expected, $this->api->removeSubAdmin(['userid' => 'NotExistingUser', '_delete' => ['groupid' => 'GroupToDeleteFrom']])); + $this->api->removeSubAdmin('NotExistingUser', 'GroupToDeleteFrom'); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 101 + * @expectedExceptionMessage Group does not exist + */ public function testRemoveSubAdminNotExistingTargetGroup() { $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); $this->userManager @@ -2220,10 +2063,15 @@ class UsersTest extends OriginalTest { ->with('GroupToDeleteFrom') ->will($this->returnValue(null)); - $expected = new \OC\OCS\Result(null, 101, 'Group does not exist'); - $this->assertEquals($expected, $this->api->removeSubAdmin(['userid' => 'ExistingUser', '_delete' => ['groupid' => 'GroupToDeleteFrom']])); + $this->api->removeSubAdmin('ExistingUser', 'GroupToDeleteFrom'); } + + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 102 + * @expectedExceptionMessage User is not a subadmin of this group + */ public function testRemoveSubAdminFromNotASubadmin() { $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); $targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock(); @@ -2249,8 +2097,7 @@ class UsersTest extends OriginalTest { ->method('getSubAdmin') ->will($this->returnValue($subAdminManager)); - $expected = new \OC\OCS\Result(null, 102, 'User is not a subadmin of this group'); - $this->assertEquals($expected, $this->api->removeSubAdmin(['userid' => 'ExistingUser', '_delete' => ['groupid' => 'GroupToDeleteFrom']])); + $this->api->removeSubAdmin('ExistingUser', 'GroupToDeleteFrom'); } public function testRemoveSubAdminSuccessful() { @@ -2283,10 +2130,14 @@ class UsersTest extends OriginalTest { ->method('getSubAdmin') ->will($this->returnValue($subAdminManager)); - $expected = new \OC\OCS\Result(null, 100); - $this->assertEquals($expected, $this->api->removeSubAdmin(['userid' => 'ExistingUser', '_delete' => ['groupid' => 'GroupToDeleteFrom']])); + $this->assertEquals([], $this->api->removeSubAdmin('ExistingUser', 'GroupToDeleteFrom')->getData()); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 103 + * @expectedExceptionMessage Unknown error occurred + */ public function testRemoveSubAdminUnsuccessful() { $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); $targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock(); @@ -2317,10 +2168,14 @@ class UsersTest extends OriginalTest { ->method('getSubAdmin') ->will($this->returnValue($subAdminManager)); - $expected = new \OC\OCS\Result(null, 103, 'Unknown error occurred'); - $this->assertEquals($expected, $this->api->removeSubAdmin(['userid' => 'ExistingUser', '_delete' => ['groupid' => 'GroupToDeleteFrom']])); + $this->api->removeSubAdmin('ExistingUser', 'GroupToDeleteFrom'); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 101 + * @expectedExceptionMessage User does not exist + */ public function testGetUserSubAdminGroupsNotExistingTargetUser() { $this->userManager ->expects($this->once()) @@ -2328,8 +2183,7 @@ class UsersTest extends OriginalTest { ->with('RequestedUser') ->will($this->returnValue(null)); - $expected = new \OC\OCS\Result(null, 101, 'User does not exist'); - $this->assertEquals($expected, $this->api->getUserSubAdminGroups(['userid' => 'RequestedUser'])); + $this->api->getUserSubAdminGroups('RequestedUser'); } public function testGetUserSubAdminGroupsWithGroups() { @@ -2356,10 +2210,14 @@ class UsersTest extends OriginalTest { ->method('getSubAdmin') ->will($this->returnValue($subAdminManager)); - $expected = new \OC\OCS\Result(['TargetGroup'], 100); - $this->assertEquals($expected, $this->api->getUserSubAdminGroups(['userid' => 'RequestedUser'])); + $this->assertEquals(['TargetGroup'], $this->api->getUserSubAdminGroups('RequestedUser')->getData()); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSException + * @expectedExceptionCode 102 + * @expectedExceptionMessage Unknown error occurred + */ public function testGetUserSubAdminGroupsWithoutGroups() { $targetUser = $this->getMockBuilder('\OCP\IUser')->disableOriginalConstructor()->getMock(); $this->userManager @@ -2379,8 +2237,7 @@ class UsersTest extends OriginalTest { ->method('getSubAdmin') ->will($this->returnValue($subAdminManager)); - $expected = new \OC\OCS\Result(null, 102, 'Unknown error occurred'); - $this->assertEquals($expected, $this->api->getUserSubAdminGroups(['userid' => 'RequestedUser'])); + $this->api->getUserSubAdminGroups('RequestedUser'); } public function testEnableUser() { @@ -2407,8 +2264,7 @@ class UsersTest extends OriginalTest { ->method('isAdmin') ->will($this->returnValue(true)); - $expected = new \OC\OCS\Result(null, 100); - $this->assertEquals($expected, $this->api->enableUser(['userid' => 'RequestedUser'])); + $this->assertEquals([], $this->api->enableUser('RequestedUser')->getData()); } public function testDisableUser() { @@ -2435,7 +2291,6 @@ class UsersTest extends OriginalTest { ->method('isAdmin') ->will($this->returnValue(true)); - $expected = new \OC\OCS\Result(null, 100); - $this->assertEquals($expected, $this->api->disableUser(['userid' => 'RequestedUser'])); + $this->assertEquals([], $this->api->disableUser('RequestedUser')->getData()); } } diff --git a/apps/systemtags/appinfo/app.php b/apps/systemtags/appinfo/app.php index 5a365c4ef15..af91e5fdbcd 100644 --- a/apps/systemtags/appinfo/app.php +++ b/apps/systemtags/appinfo/app.php @@ -78,9 +78,6 @@ $mapperListener = function(MapperEvent $event) use ($activityManager) { $eventDispatcher->addListener(MapperEvent::EVENT_ASSIGN, $mapperListener); $eventDispatcher->addListener(MapperEvent::EVENT_UNASSIGN, $mapperListener); -$app = new \OCA\SystemTags\AppInfo\Application(); -$app->registerAdminPage(); - $l = \OC::$server->getL10N('systemtags'); \OCA\Files\App::getNavigationManager()->add( diff --git a/apps/systemtags/appinfo/info.xml b/apps/systemtags/appinfo/info.xml index 5eced10b710..0a98d7ae680 100644 --- a/apps/systemtags/appinfo/info.xml +++ b/apps/systemtags/appinfo/info.xml @@ -7,7 +7,7 @@ <licence>AGPL</licence> <author>Vincent Petry, Joas Schilling</author> <default_enable/> - <version>1.1.0</version> + <version>1.1.3</version> <dependencies> <owncloud min-version="9.2" max-version="9.2" /> </dependencies> @@ -15,4 +15,7 @@ <types> <logging/> </types> + <settings> + <admin>OCA\SystemTags\Settings\Admin</admin> + </settings> </info> diff --git a/apps/systemtags/img/app.svg b/apps/systemtags/img/app.svg index 8bfd246078e..4f201c6c769 100644 --- a/apps/systemtags/img/app.svg +++ b/apps/systemtags/img/app.svg @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.0"> +<svg xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.0" viewBox="0 0 32 32"> <path fill="#fff" d="m12.372 1.9224-9.614 0.02632c-0.54322 0-0.69312 0.41974-0.69406 0.69208l-0.030264 9.6034 17.446 17.444c0.39376 0.39658 1.0247 0.39394 1.4184 0l8.9138-8.9138c0.39344-0.39376 0.3979-1.0265 0.004-1.4205l-0.0022 0.01752-16.734-16.734-0.7082-0.70834zm-4.3336 3.7044a2.2876 2.2876 0 0 1 2.2876 2.288 2.2876 2.2876 0 0 1 -2.2876 2.2882 2.2876 2.2876 0 0 1 -2.288 -2.2882 2.2876 2.2876 0 0 1 2.288 -2.288z"/> </svg> diff --git a/apps/systemtags/l10n/cs_CZ.js b/apps/systemtags/l10n/cs_CZ.js index 31f290bd280..ff1251f828d 100644 --- a/apps/systemtags/l10n/cs_CZ.js +++ b/apps/systemtags/l10n/cs_CZ.js @@ -36,6 +36,7 @@ OC.L10N.register( "No files in here" : "Žádné soubory", "No entries found in this folder" : "V tomto adresáři nebylo nic nalezeno", "Size" : "Velikost", - "Modified" : "Upraveno" + "Modified" : "Upraveno", + "%s (not-assignable)" : "%s (nepřiřaditelné)" }, "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/apps/systemtags/l10n/cs_CZ.json b/apps/systemtags/l10n/cs_CZ.json index d0729858edf..791485a3b12 100644 --- a/apps/systemtags/l10n/cs_CZ.json +++ b/apps/systemtags/l10n/cs_CZ.json @@ -34,6 +34,7 @@ "No files in here" : "Žádné soubory", "No entries found in this folder" : "V tomto adresáři nebylo nic nalezeno", "Size" : "Velikost", - "Modified" : "Upraveno" + "Modified" : "Upraveno", + "%s (not-assignable)" : "%s (nepřiřaditelné)" },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/systemtags/l10n/de.js b/apps/systemtags/l10n/de.js index 3271146d62b..3507015ed5f 100644 --- a/apps/systemtags/l10n/de.js +++ b/apps/systemtags/l10n/de.js @@ -36,6 +36,7 @@ OC.L10N.register( "No files in here" : "Keine Dateien vorhanden", "No entries found in this folder" : "Keine Einträge in diesem Ordner gefunden", "Size" : "Größe", - "Modified" : "Geändert" + "Modified" : "Geändert", + "%s (not-assignable)" : "%s (nicht zuweisbar)" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/systemtags/l10n/de.json b/apps/systemtags/l10n/de.json index 67a13fd0999..1f74b6075ea 100644 --- a/apps/systemtags/l10n/de.json +++ b/apps/systemtags/l10n/de.json @@ -34,6 +34,7 @@ "No files in here" : "Keine Dateien vorhanden", "No entries found in this folder" : "Keine Einträge in diesem Ordner gefunden", "Size" : "Größe", - "Modified" : "Geändert" + "Modified" : "Geändert", + "%s (not-assignable)" : "%s (nicht zuweisbar)" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/systemtags/l10n/de_DE.js b/apps/systemtags/l10n/de_DE.js index 8c7e0c1d466..588f030d1db 100644 --- a/apps/systemtags/l10n/de_DE.js +++ b/apps/systemtags/l10n/de_DE.js @@ -36,6 +36,7 @@ OC.L10N.register( "No files in here" : "Keine Dateien vorhanden", "No entries found in this folder" : "Keine Einträge in diesem Ordner gefunden", "Size" : "Größe", - "Modified" : "Geändert" + "Modified" : "Geändert", + "%s (not-assignable)" : "%s (nicht zuweisbar)" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/systemtags/l10n/de_DE.json b/apps/systemtags/l10n/de_DE.json index 443868af44a..017d396db9d 100644 --- a/apps/systemtags/l10n/de_DE.json +++ b/apps/systemtags/l10n/de_DE.json @@ -34,6 +34,7 @@ "No files in here" : "Keine Dateien vorhanden", "No entries found in this folder" : "Keine Einträge in diesem Ordner gefunden", "Size" : "Größe", - "Modified" : "Geändert" + "Modified" : "Geändert", + "%s (not-assignable)" : "%s (nicht zuweisbar)" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/systemtags/l10n/id.js b/apps/systemtags/l10n/id.js index bb6424c9556..f56866594d4 100644 --- a/apps/systemtags/l10n/id.js +++ b/apps/systemtags/l10n/id.js @@ -36,6 +36,7 @@ OC.L10N.register( "No files in here" : "Tidak ada berkas disini", "No entries found in this folder" : "Tidak ada entri yang ditemukan dalam folder ini", "Size" : "Ukuran", - "Modified" : "Dimodifikasi" + "Modified" : "Dimodifikasi", + "%s (not-assignable)" : "%s (tidak dapat disematkan)" }, "nplurals=1; plural=0;"); diff --git a/apps/systemtags/l10n/id.json b/apps/systemtags/l10n/id.json index fcbdb6ca1e2..59aeef7cf53 100644 --- a/apps/systemtags/l10n/id.json +++ b/apps/systemtags/l10n/id.json @@ -34,6 +34,7 @@ "No files in here" : "Tidak ada berkas disini", "No entries found in this folder" : "Tidak ada entri yang ditemukan dalam folder ini", "Size" : "Ukuran", - "Modified" : "Dimodifikasi" + "Modified" : "Dimodifikasi", + "%s (not-assignable)" : "%s (tidak dapat disematkan)" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/systemtags/l10n/is.js b/apps/systemtags/l10n/is.js index efdeb28fc86..c0ce0d958bb 100644 --- a/apps/systemtags/l10n/is.js +++ b/apps/systemtags/l10n/is.js @@ -2,6 +2,9 @@ OC.L10N.register( "systemtags", { "Tags" : "Merki", + "Update" : "Uppfæra", + "Create" : "Búa til", + "Select tag…" : "Veldu merki...", "Tagged files" : "Merktar skrár", "Select tags to filter by" : "Veldu merki til að sía eftir", "Please select tags to filter by" : "Veldu merki til að sía eftir", @@ -23,10 +26,17 @@ OC.L10N.register( "%1$s unassigned system tag %3$s from %2$s" : "%1$s tók kerfismerki %3$s af %2$s", "%s (restricted)" : "%s (takmarkaður aðgangur)", "%s (invisible)" : "%s (ósýnilegt)", + "Collaborative tags" : "Samstarfsmerkingar", "Name" : "Heiti", + "Delete" : "Eyða", + "Public" : "Opinbert", + "Restricted" : "Takmarkað", + "Invisible" : "Ósýnilegt", + "Reset" : "Endurstilla", "No files in here" : "Engar skrár hér", "No entries found in this folder" : "Engar skrár fundust í þessari möppu", "Size" : "Stærð", - "Modified" : "Breytt" + "Modified" : "Breytt", + "%s (not-assignable)" : "%s (ekki-úthlutanlegt)" }, "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/apps/systemtags/l10n/is.json b/apps/systemtags/l10n/is.json index d47891dabd1..fe52360ce77 100644 --- a/apps/systemtags/l10n/is.json +++ b/apps/systemtags/l10n/is.json @@ -1,5 +1,8 @@ { "translations": { "Tags" : "Merki", + "Update" : "Uppfæra", + "Create" : "Búa til", + "Select tag…" : "Veldu merki...", "Tagged files" : "Merktar skrár", "Select tags to filter by" : "Veldu merki til að sía eftir", "Please select tags to filter by" : "Veldu merki til að sía eftir", @@ -21,10 +24,17 @@ "%1$s unassigned system tag %3$s from %2$s" : "%1$s tók kerfismerki %3$s af %2$s", "%s (restricted)" : "%s (takmarkaður aðgangur)", "%s (invisible)" : "%s (ósýnilegt)", + "Collaborative tags" : "Samstarfsmerkingar", "Name" : "Heiti", + "Delete" : "Eyða", + "Public" : "Opinbert", + "Restricted" : "Takmarkað", + "Invisible" : "Ósýnilegt", + "Reset" : "Endurstilla", "No files in here" : "Engar skrár hér", "No entries found in this folder" : "Engar skrár fundust í þessari möppu", "Size" : "Stærð", - "Modified" : "Breytt" + "Modified" : "Breytt", + "%s (not-assignable)" : "%s (ekki-úthlutanlegt)" },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" }
\ No newline at end of file diff --git a/apps/systemtags/l10n/it.js b/apps/systemtags/l10n/it.js index e448ae94594..b1aae23d4fc 100644 --- a/apps/systemtags/l10n/it.js +++ b/apps/systemtags/l10n/it.js @@ -36,6 +36,7 @@ OC.L10N.register( "No files in here" : "Qui non c'è alcun file", "No entries found in this folder" : "Nessuna voce trovata in questa cartella", "Size" : "Dimensione", - "Modified" : "Modificato" + "Modified" : "Modificato", + "%s (not-assignable)" : "%s (non assegnabile)" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/systemtags/l10n/it.json b/apps/systemtags/l10n/it.json index a06a99dd806..e41005337a7 100644 --- a/apps/systemtags/l10n/it.json +++ b/apps/systemtags/l10n/it.json @@ -34,6 +34,7 @@ "No files in here" : "Qui non c'è alcun file", "No entries found in this folder" : "Nessuna voce trovata in questa cartella", "Size" : "Dimensione", - "Modified" : "Modificato" + "Modified" : "Modificato", + "%s (not-assignable)" : "%s (non assegnabile)" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/systemtags/l10n/pt_BR.js b/apps/systemtags/l10n/pt_BR.js index 9ff39ad7fb1..cea511bdcc3 100644 --- a/apps/systemtags/l10n/pt_BR.js +++ b/apps/systemtags/l10n/pt_BR.js @@ -36,6 +36,7 @@ OC.L10N.register( "No files in here" : "Nenhum arquivo aqui", "No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta", "Size" : "Tamanho", - "Modified" : "Modificado" + "Modified" : "Modificado", + "%s (not-assignable)" : "%s (não atribuível)" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/systemtags/l10n/pt_BR.json b/apps/systemtags/l10n/pt_BR.json index 6f7a8ee2f2d..9f756390613 100644 --- a/apps/systemtags/l10n/pt_BR.json +++ b/apps/systemtags/l10n/pt_BR.json @@ -34,6 +34,7 @@ "No files in here" : "Nenhum arquivo aqui", "No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta", "Size" : "Tamanho", - "Modified" : "Modificado" + "Modified" : "Modificado", + "%s (not-assignable)" : "%s (não atribuível)" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/systemtags/lib/Settings/Admin.php b/apps/systemtags/lib/Settings/Admin.php new file mode 100644 index 00000000000..9e21dafed8b --- /dev/null +++ b/apps/systemtags/lib/Settings/Admin.php @@ -0,0 +1,56 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\SystemTags\Settings; + +use OCP\AppFramework\Http\TemplateResponse; +use OCP\Settings\ISettings; + +class Admin implements ISettings { + + /** + * @return TemplateResponse + */ + public function getForm() { + return new TemplateResponse('systemtags', 'admin', [], ''); + } + + /** + * @return string the section ID, e.g. 'sharing' + */ + public function getSection() { + return 'workflow'; + } + + /** + * @return int whether the form should be rather on the top or bottom of + * the admin section. The forms are arranged in ascending order of the + * priority values. It is required to return a value between 0 and 100. + * + * E.g.: 70 + */ + public function getPriority() { + return 70; + } + +} diff --git a/apps/systemtags/tests/Settings/AdminTest.php b/apps/systemtags/tests/Settings/AdminTest.php new file mode 100644 index 00000000000..d768ad86272 --- /dev/null +++ b/apps/systemtags/tests/Settings/AdminTest.php @@ -0,0 +1,52 @@ +<?php +/** + * @copyright Copyright (c) 2016 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 OCA\SystemTags\Tests\Settings; + +use OCA\SystemTags\Settings\Admin; +use OCP\AppFramework\Http\TemplateResponse; +use Test\TestCase; + +class AdminTest extends TestCase { + /** @var Admin */ + private $admin; + + public function setUp() { + parent::setUp(); + + $this->admin = new Admin(); + } + + public function testGetForm() { + $expected = new TemplateResponse('systemtags', 'admin', [], ''); + $this->assertEquals($expected, $this->admin->getForm()); + } + + public function testGetSection() { + $this->assertSame('workflow', $this->admin->getSection()); + } + + public function testGetPriority() { + $this->assertSame(70, $this->admin->getPriority()); + } +} diff --git a/apps/testing/img/app.svg b/apps/testing/img/app.svg index b6ae35211a3..ad789050c9a 100644 --- a/apps/testing/img/app.svg +++ b/apps/testing/img/app.svg @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> +<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 32 32"> <path d="m13.733 0.00064c-0.52991 0-0.93331 0.40337-0.93331 0.93333v2.6666c-1.182 0.3034-2.243 0.7934-3.2668 1.4001l-1.9334-1.9334c-0.3747-0.3747-0.9586-0.3747-1.3333 0l-3.1999 3.2c-0.37473 0.37474-0.37473 0.95859 0 1.3333l1.9334 1.9335c-0.6067 1.0239-1.0967 2.0849-1.4001 3.2669h-2.6666c-0.52994 0-0.9333 0.403-0.9333 0.933v4.5333c2e-8 0.52996 0.40336 0.93333 0.93331 0.93333h2.6666c0.30335 1.1817 0.79332 2.2426 1.4 3.2666l-1.9334 1.9349c-0.37473 0.37474-0.37473 0.95859 0 1.3333l3.1999 3.2c0.37473 0.37474 0.95857 0.37474 1.3333 0l1.9334-1.9349c1.024 0.608 2.0849 1.0965 3.2665 1.3995v2.6667c0 0.53 0.403 0.933 0.933 0.933h4.5332c0.52991 0 0.93331-0.4032 0.93331-0.9344v-2.6667c1.1816-0.30336 2.2425-0.79335 3.2665-1.4l1.9333 1.9333c0.37473 0.37474 0.95857 0.37474 1.3333 0l3.1999-3.2c0.37473-0.37474 0.37473-0.95859 0-1.3333l-1.9327-1.9328c0.60798-1.024 1.0965-2.0845 1.3994-3.2661h2.6666c0.532 0 0.935-0.403 0.935-0.933v-4.534c0-0.53-0.403-0.933-0.934-0.933h-2.667c-0.303-1.182-0.791-2.243-1.399-3.2666l1.932-1.9334c0.37473-0.37474 0.37473-0.95859 0-1.3333l-3.2-3.2c-0.37473-0.37474-0.95857-0.37474-1.3333 0l-1.9327 1.9334c-1.024-0.6067-2.084-1.0967-3.266-1.4001v-2.6667c0-0.52993-0.403-0.9333-0.933-0.9333zm2.2666 8.8689c3.9361 0 7.1309 3.1947 7.1309 7.1311 0 3.9362-3.1946 7.1311-7.1309 7.1311-3.9361 0-7.1309-3.1955-7.1309-7.1317s3.1948-7.1311 7.1309-7.1311z" display="block" fill="#fff"/> </svg> diff --git a/apps/theming/appinfo/app.php b/apps/theming/appinfo/app.php index 5ef506e5acd..f558c35e61f 100644 --- a/apps/theming/appinfo/app.php +++ b/apps/theming/appinfo/app.php @@ -23,8 +23,6 @@ * */ -\OCP\App::registerAdmin('theming', 'settings/settings-admin'); - $linkToCSS = \OC::$server->getURLGenerator()->linkToRoute( 'theming.Theming.getStylesheet', [ @@ -39,3 +37,15 @@ $linkToCSS = \OC::$server->getURLGenerator()->linkToRoute( ] ); +$linkToJs = \OC::$server->getURLGenerator()->linkToRoute( + 'theming.Theming.getJavascript', + [ + 'v' => \OC::$server->getConfig()->getAppValue('theming', 'cachebuster', '0'), + ] +); +\OCP\Util::addHeader( + 'script', + [ + 'src' => $linkToJs, + ], '' +); diff --git a/apps/theming/appinfo/info.xml b/apps/theming/appinfo/info.xml index 8ae1d3eb73a..423d11d2aef 100644 --- a/apps/theming/appinfo/info.xml +++ b/apps/theming/appinfo/info.xml @@ -5,7 +5,7 @@ <description>Adjust the Nextcloud theme</description> <licence>AGPL</licence> <author>Nextcloud</author> - <version>1.1.0</version> + <version>1.1.1</version> <namespace>Theming</namespace> <category>other</category> @@ -18,4 +18,9 @@ </types> <default_enable/> + + <settings> + <admin>OCA\Theming\Settings\Admin</admin> + <admin-section>OCA\Theming\Settings\Section</admin-section> + </settings> </info> diff --git a/apps/theming/appinfo/routes.php b/apps/theming/appinfo/routes.php index e062a68d69d..4a8d4bac5bc 100644 --- a/apps/theming/appinfo/routes.php +++ b/apps/theming/appinfo/routes.php @@ -55,5 +55,10 @@ return ['routes' => [ 'url' => '/loginbackground', 'verb' => 'GET', ], + [ + 'name' => 'Theming#getJavascript', + 'url' => '/js/theming', + 'verb' => 'GET', + ], ]]; diff --git a/apps/theming/css/settings-admin.css b/apps/theming/css/settings-admin.css index 53214b245c6..5d2b08f5e43 100644 --- a/apps/theming/css/settings-admin.css +++ b/apps/theming/css/settings-admin.css @@ -9,12 +9,13 @@ #theming .theme-undo { cursor: pointer; opacity: .5; - padding: 9px; - vertical-align: bottom; + padding: 11px 5px; + vertical-align: top; + display: inline-block; } -#theming .icon { - display: inline-block; +#theming .icon-loading-small:after { + margin: -10px 0 0 -10px; } #theming label span { @@ -23,12 +24,28 @@ padding: 8px 0px; } -#theming .icon-upload { +#theming .icon-upload, +#theming .icon-loading-small { display: inline-flex; padding: 8px; - margin: 0; + margin: 2px 0px; } div#theming_settings_msg { margin-left: 10px; } + +#theming-preview { + width: 230px; + height: 140px; + background-size: cover; + background-position: center center; + text-align: center; + margin-left: 93px; +} + +#theming-preview img { + max-width: 20%; + max-height: 20%; + margin-top: 20px; +}
\ No newline at end of file diff --git a/apps/theming/js/settings-admin.js b/apps/theming/js/settings-admin.js index 01ff9123842..216463b15e0 100644 --- a/apps/theming/js/settings-admin.js +++ b/apps/theming/js/settings-admin.js @@ -25,6 +25,7 @@ function setThemingValue(setting, value) { OC.generateUrl('/apps/theming/ajax/updateStylesheet'), {'setting' : setting, 'value' : value} ).done(function(response) { OC.msg.finishedSaving('#theming_settings_msg', response); + hideUndoButton(setting, value); }).fail(function(response) { OC.msg.finishedSaving('#theming_settings_msg', response); }); @@ -68,7 +69,7 @@ function preview(setting, value) { textColor = "#ffffff"; icon = 'caret'; } - if (luminance>0.8) { + if (luminance > 0.8) { elementColor = '#555555'; } @@ -87,17 +88,49 @@ function preview(setting, value) { 'background-image: url(\'data:image/svg+xml;base64,' + generateRadioButton(elementColor) + '\'); }' ); } + + var timestamp = new Date().getTime(); if (setting === 'logoMime') { - console.log(setting); var logos = document.getElementsByClassName('logo-icon'); - var timestamp = new Date().getTime(); + 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.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; + } + } + if (setting === 'backgroundMime') { + var previewImage = document.getElementById('theming-preview'); + if (value !== '') { + previewImage.style.backgroundImage = "url('" + OC.generateUrl('/apps/theming/loginbackground') + "?v" + timestamp + "')"; + } else { + previewImage.style.backgroundImage = "url('" + OC.getRootPath() + '/core/img/background.jpg?v' + timestamp + "')"; } + + } + if (setting === 'name') { + window.document.title = t('core', 'Admin') + " - " + value; + } +} + +function hideUndoButton(setting, value) { + var themingDefaults = { + name: 'Nextcloud', + slogan: t('lib', 'a safe home for all your data'), + url: 'https://nextcloud.com', + color: '#0082c9', + logoMime: '', + backgroundMime: '' + }; + + if (value === themingDefaults[setting] || value === '') { + $('.theme-undo[data-setting=' + setting + ']').hide(); + } else { + $('.theme-undo[data-setting=' + setting + ']').show(); } } @@ -106,18 +139,30 @@ $(document).ready(function () { $('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(); + if(setting === 'logoMime' || setting === 'backgroundMime') { + var value = $('#current-'+setting).val(); + } + hideUndoButton(setting, value); + }); var uploadParamsLogo = { pasteZone: null, dropZone: null, done: function (e, response) { preview('logoMime', response.result.data.name); OC.msg.finishedSaving('#theming_settings_msg', response.result); + $('label#uploadlogo').addClass('icon-upload').removeClass('icon-loading-small'); + $('.theme-undo[data-setting=logoMime]').show(); }, submit: function(e, response) { OC.msg.startSaving('#theming_settings_msg'); + $('label#uploadlogo').removeClass('icon-upload').addClass('icon-loading-small'); }, - fail: function (e, data){ - OC.msg.finishedSaving('#theming_settings_msg', response); + fail: function (e, response){ + OC.msg.finishedError('#theming_settings_msg', response._response.jqXHR.responseJSON.data.message); + $('label#uploadlogo').addClass('icon-upload').removeClass('icon-loading-small'); } }; var uploadParamsLogin = { @@ -126,12 +171,16 @@ $(document).ready(function () { done: function (e, response) { preview('backgroundMime', response.result.data.name); OC.msg.finishedSaving('#theming_settings_msg', response.result); + $('label#upload-login-background').addClass('icon-upload').removeClass('icon-loading-small'); + $('.theme-undo[data-setting=backgroundMime]').show(); }, submit: function(e, response) { OC.msg.startSaving('#theming_settings_msg'); + $('label#upload-login-background').removeClass('icon-upload').addClass('icon-loading-small'); }, - fail: function (e, data){ - OC.msg.finishedSaving('#theming_settings_msg', response); + fail: function (e, response){ + $('label#upload-login-background').removeClass('icon-loading-small').addClass('icon-upload'); + OC.msg.finishedError('#theming_settings_msg', response._response.jqXHR.responseJSON.data.message); } }; @@ -175,17 +224,19 @@ $(document).ready(function () { $('.theme-undo').click(function (e) { var setting = $(this).data('setting'); OC.msg.startSaving('#theming_settings_msg'); + $('.theme-undo[data-setting=' + setting + ']').hide(); $.post( OC.generateUrl('/apps/theming/ajax/undoChanges'), {'setting' : setting} ).done(function(response) { if (setting === 'color') { var colorPicker = document.getElementById('theming-color'); colorPicker.style.backgroundColor = response.data.value; - colorPicker.value = response.data.value.slice(1); + colorPicker.value = response.data.value.slice(1).toUpperCase(); } else if (setting !== 'logoMime' && setting !== 'backgroundMime') { 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/lib/Controller/ThemingController.php b/apps/theming/lib/Controller/ThemingController.php index 8d9869b84a7..b4e3a95710f 100644 --- a/apps/theming/lib/Controller/ThemingController.php +++ b/apps/theming/lib/Controller/ThemingController.php @@ -27,7 +27,7 @@ namespace OCA\Theming\Controller; -use OCA\Theming\Template; +use OCA\Theming\ThemingDefaults; use OCP\AppFramework\Controller; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataDownloadResponse; @@ -39,6 +39,7 @@ use OCP\IConfig; use OCP\IL10N; use OCP\IRequest; use OCA\Theming\Util; +use OCP\ITempManager; /** * Class ThemingController @@ -48,7 +49,7 @@ use OCA\Theming\Util; * @package OCA\Theming\Controller */ class ThemingController extends Controller { - /** @var Template */ + /** @var ThemingDefaults */ private $template; /** @var Util */ private $util; @@ -60,6 +61,8 @@ class ThemingController extends Controller { private $config; /** @var IRootFolder */ private $rootFolder; + /** @var ITempManager */ + private $tempManager; /** * ThemingController constructor. @@ -67,21 +70,23 @@ class ThemingController extends Controller { * @param string $appName * @param IRequest $request * @param IConfig $config - * @param Template $template + * @param ThemingDefaults $template * @param Util $util * @param ITimeFactory $timeFactory * @param IL10N $l * @param IRootFolder $rootFolder + * @param ITempManager $tempManager */ public function __construct( $appName, IRequest $request, IConfig $config, - Template $template, + ThemingDefaults $template, Util $util, ITimeFactory $timeFactory, IL10N $l, - IRootFolder $rootFolder + IRootFolder $rootFolder, + ITempManager $tempManager ) { parent::__construct($appName, $request); @@ -91,6 +96,7 @@ class ThemingController extends Controller { $this->l = $l; $this->config = $config; $this->rootFolder = $rootFolder; + $this->tempManager = $tempManager; } /** @@ -171,7 +177,8 @@ class ThemingController extends Controller { 'message' => $this->l->t('No file uploaded') ] ], - Http::STATUS_UNPROCESSABLE_ENTITY); + Http::STATUS_UNPROCESSABLE_ENTITY + ); } $name = ''; if(!empty($newLogo)) { @@ -182,7 +189,32 @@ class ThemingController extends Controller { } if(!empty($newBackgroundLogo)) { $target = $this->rootFolder->newFile('themedbackgroundlogo'); - stream_copy_to_stream(fopen($newBackgroundLogo['tmp_name'], 'r'), $target->fopen('w')); + + $image = @imagecreatefromstring(file_get_contents($newBackgroundLogo['tmp_name'], 'r')); + if($image === false) { + return new DataResponse( + [ + 'data' => [ + 'message' => $this->l->t('Unsupported image type'), + ], + 'status' => 'failure', + ], + Http::STATUS_UNPROCESSABLE_ENTITY + ); + } + + // Optimize the image since some people may upload images that will be + // either to big or are not progressive rendering. + $tmpFile = $this->tempManager->getTemporaryFile(); + if(function_exists('imagescale')) { + // FIXME: Once PHP 5.5.0 is a requirement the above check can be removed + $image = imagescale($image, 1920); + } + imageinterlace($image, 1); + imagejpeg($image, $tmpFile, 75); + imagedestroy($image); + + stream_copy_to_stream(fopen($tmpFile, 'r'), $target->fopen('w')); $this->template->set('backgroundMime', $newBackgroundLogo['type']); $name = $newBackgroundLogo['name']; } @@ -236,6 +268,7 @@ class ThemingController extends Controller { $response->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime())); $response->addHeader('Content-Disposition', 'attachment'); $response->addHeader('Content-Type', $this->config->getAppValue($this->appName, 'logoMime', '')); + $response->addHeader('Pragma', 'cache'); return $response; } @@ -256,6 +289,7 @@ class ThemingController extends Controller { $response->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime())); $response->addHeader('Content-Disposition', 'attachment'); $response->addHeader('Content-Type', $this->config->getAppValue($this->appName, 'backgroundMime', '')); + $response->addHeader('Pragma', 'cache'); return $response; } @@ -270,6 +304,13 @@ class ThemingController extends Controller { $responseCss = ''; $color = $this->config->getAppValue($this->appName, 'color'); $elementColor = $this->util->elementColor($color); + + if($this->util->invertTextColor($color)) { + $textColor = '#000000'; + } else { + $textColor = '#ffffff'; + } + if($color !== '') { $responseCss .= sprintf( '#body-user #header,#body-settings #header,#body-public #header,#body-login,.searchbox input[type="search"]:focus,.searchbox input[type="search"]:active,.searchbox input[type="search"]:valid {background-color: %s}' . "\n", @@ -286,6 +327,36 @@ class ThemingController extends Controller { $responseCss .= 'input[type="radio"].radio:checked:not(.radio--white):not(:disabled) + label:before {' . 'background-image: url(\'data:image/svg+xml;base64,'.$this->util->generateRadioButton($elementColor).'\');' . "}\n"; + $responseCss .= '.primary, input[type="submit"].primary, input[type="button"].primary, button.primary, .button.primary,' . + '.primary:active, input[type="submit"].primary:active, input[type="button"].primary:active, button.primary:active, .button.primary:active {' . + 'border: 1px solid '.$elementColor.';'. + 'background-color: '.$elementColor.';'. + 'opacity: 0.8;' . + 'color: ' . $textColor . ';'. + "}\n" . + '.primary:hover, input[type="submit"].primary:hover, input[type="button"].primary:hover, button.primary:hover, .button.primary:hover,' . + '.primary:focus, input[type="submit"].primary:focus, input[type="button"].primary:focus, button.primary:focus, .button.primary:focus {' . + 'border: 1px solid '.$elementColor.';'. + 'background-color: '.$elementColor.';'. + 'opacity: 1.0;' . + 'color: ' . $textColor . ';'. + "}\n" . + '.primary:disabled, input[type="submit"].primary:disabled, input[type="button"].primary:disabled, button.primary:disabled, .button.primary:disabled,' . + '.primary:disabled:hover, input[type="submit"].primary:disabled:hover, input[type="button"].primary:disabled:hover, button.primary:disabled:hover, .button.primary:disabled:hover,' . + '.primary:disabled:focus, input[type="submit"].primary:disabled:focus, input[type="button"].primary:disabled:focus, button.primary:disabled:focus, .button.primary:disabled:focus {' . + 'border: 1px solid '.$elementColor.';'. + 'background-color: '.$elementColor.';'. + 'opacity: 0.4;' . + 'color: '.$textColor.';'. + "}\n"; + $responseCss .= '.ui-widget-header { border: 1px solid ' . $color . '; background: '. $color . '; color: #ffffff;' . "}\n"; + $responseCss .= '.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active {' . + 'border: 1px solid ' . $color . ';' . + 'color: ' . $elementColor . ';' . + "}\n"; + $responseCss .= '.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited {' . + 'color: ' . $elementColor . ';' . + "}\n"; $responseCss .= ' #firstrunwizard .firstrunwizard-header { background-color: ' . $color . '; @@ -294,6 +365,8 @@ class ThemingController extends Controller { color: ' . $color . '; } '; + $responseCss .= sprintf('.nc-theming-main-background {background-color: %s}' . "\n", $color); + $responseCss .= sprintf('.nc-theming-main-text {color: %s}' . "\n", $color); } $logo = $this->config->getAppValue($this->appName, 'logoMime'); @@ -325,10 +398,38 @@ class ThemingController extends Controller { $responseCss .= '#header .icon-caret { background-image: url(\'' . \OC::$WEBROOT . '/core/img/actions/caret-dark.svg\'); }' . "\n"; $responseCss .= '.searchbox input[type="search"] { background: transparent url(\'' . \OC::$WEBROOT . '/core/img/actions/search.svg\') no-repeat 6px center; color: #000; }' . "\n"; $responseCss .= '.searchbox input[type="search"]:focus,.searchbox input[type="search"]:active,.searchbox input[type="search"]:valid { color: #000; border: 1px solid rgba(0, 0, 0, .5); }' . "\n"; + $responseCss .= '.nc-theming-contrast {color: #000000}' . "\n"; + $responseCss .= '.ui-widget-header { color: #000000; }' . "\n"; + } else { + $responseCss .= '.nc-theming-contrast {color: #ffffff}' . "\n"; } $response = new DataDownloadResponse($responseCss, 'style', 'text/css'); $response->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime())); + $response->addHeader('Pragma', 'cache'); + $response->cacheFor(3600); + return $response; + } + /** + * @NoCSRFRequired + * @PublicPage + * + * @return DataDownloadResponse + */ + public function getJavascript() { + $responseJS = '(function() { + OCA.Theming = { + name: ' . json_encode($this->template->getName()) . ', + url: ' . json_encode($this->template->getBaseUrl()) . ', + slogan: ' . json_encode($this->template->getSlogan()) . ', + color: ' . json_encode($this->template->getMailHeaderColor()) . ', + inverted: ' . json_encode($this->util->invertTextColor($this->template->getMailHeaderColor())) . ', + }; +})();'; + $response = new Http\DataDisplayResponse($responseJS); + $response->addHeader('Content-type', 'text/javascript'); + $response->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime())); + $response->addHeader('Pragma', 'cache'); $response->cacheFor(3600); return $response; } diff --git a/apps/theming/lib/Settings/Admin.php b/apps/theming/lib/Settings/Admin.php new file mode 100644 index 00000000000..22ab5650e5b --- /dev/null +++ b/apps/theming/lib/Settings/Admin.php @@ -0,0 +1,102 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\Theming\Settings; + +use OCA\Theming\ThemingDefaults; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\IConfig; +use OCP\IL10N; +use OCP\IURLGenerator; +use OCP\Settings\ISettings; + +class Admin implements ISettings { + /** @var IConfig */ + private $config; + /** @var IL10N */ + private $l; + /** @var ThemingDefaults */ + private $themingDefaults; + /** @var IURLGenerator */ + private $urlGenerator; + + public function __construct(IConfig $config, + IL10N $l, + ThemingDefaults $themingDefaults, + IURLGenerator $urlGenerator) { + $this->config = $config; + $this->l = $l; + $this->themingDefaults = $themingDefaults; + $this->urlGenerator = $urlGenerator; + } + + /** + * @return TemplateResponse + */ + public function getForm() { + $path = $this->urlGenerator->linkToRoute('theming.Theming.updateLogo'); + + $themable = true; + $errorMessage = ''; + $theme = $this->config->getSystemValue('theme', ''); + if ($theme !== '') { + $themable = false; + $errorMessage = $this->l->t('You are already using a custom theme'); + } + + $parameters = [ + 'themable' => $themable, + 'errorMessage' => $errorMessage, + 'name' => $this->themingDefaults->getEntity(), + 'url' => $this->themingDefaults->getBaseUrl(), + 'slogan' => $this->themingDefaults->getSlogan(), + 'color' => $this->themingDefaults->getMailHeaderColor(), + 'logo' => $this->themingDefaults->getLogo(), + 'logoMime' => $this->config->getAppValue('theming', 'logoMime', ''), + 'background' => $this->themingDefaults->getBackground(), + 'backgroundMime' => $this->config->getAppValue('theming', 'backgroundMime', ''), + 'uploadLogoRoute' => $path, + ]; + + return new TemplateResponse('theming', 'settings-admin', $parameters, ''); + } + + /** + * @return string the section ID, e.g. 'sharing' + */ + public function getSection() { + return 'theming'; + } + + /** + * @return int whether the form should be rather on the top or bottom of + * the admin section. The forms are arranged in ascending order of the + * priority values. It is required to return a value between 0 and 100. + * + * E.g.: 70 + */ + public function getPriority() { + return 5; + } + +} diff --git a/apps/theming/lib/Settings/Section.php b/apps/theming/lib/Settings/Section.php new file mode 100644 index 00000000000..cffbb8901c8 --- /dev/null +++ b/apps/theming/lib/Settings/Section.php @@ -0,0 +1,67 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\Theming\Settings; + +use OCP\IL10N; +use OCP\Settings\ISection; + +class Section implements ISection { + /** @var IL10N */ + private $l; + + public function __construct(IL10N $l) { + $this->l = $l; + } + + /** + * returns the ID of the section. It is supposed to be a lower case string, + * e.g. 'ldap' + * + * @returns string + */ + public function getID() { + return 'theming'; + } + + /** + * returns the translated name as it should be displayed, e.g. 'LDAP / AD + * integration'. Use the L10N service to translate it. + * + * @return string + */ + public function getName() { + return $this->l->t('Theming'); + } + + /** + * @return int whether the form should be rather on the top or bottom of + * the settings navigation. The sections are arranged in ascending order of + * the priority values. It is required to return a value between 0 and 99. + * + * E.g.: 70 + */ + public function getPriority() { + return 30; + } +} diff --git a/apps/theming/lib/Template.php b/apps/theming/lib/ThemingDefaults.php index 25730aad95b..9139dd56247 100644 --- a/apps/theming/lib/Template.php +++ b/apps/theming/lib/ThemingDefaults.php @@ -1,11 +1,6 @@ <?php /** * @copyright Copyright (c) 2016 Bjoern Schiessle <bjoern@schiessle.org> - * @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch> - * - * @author Bjoern Schiessle <bjoern@schiessle.org> - * @author Joas Schilling <coding@schilljs.com> - * @author Lukas Reschke <lukas@statuscode.ch> * * @license GNU AGPL version 3 or any later version * @@ -24,26 +19,25 @@ * */ + namespace OCA\Theming; + use OCP\IConfig; use OCP\IL10N; use OCP\IURLGenerator; +use OCP\Files\IRootFolder; + +class ThemingDefaults extends \OC_Defaults { -/** - * Class Template - * - * Handle all the values which can be modified by this app - * - * @package OCA\Theming - */ -class Template extends \OC_Defaults { /** @var IConfig */ private $config; /** @var IL10N */ private $l; /** @var IURLGenerator */ private $urlGenerator; + /** @var IRootFolder */ + private $rootFolder; /** @var string */ private $name; /** @var string */ @@ -54,22 +48,25 @@ class Template extends \OC_Defaults { private $color; /** - * Template constructor. + * ThemingDefaults constructor. * * @param IConfig $config * @param IL10N $l * @param IURLGenerator $urlGenerator * @param \OC_Defaults $defaults + * @param IRootFolder $rootFolder */ public function __construct(IConfig $config, IL10N $l, IURLGenerator $urlGenerator, - \OC_Defaults $defaults + \OC_Defaults $defaults, + IRootFolder $rootFolder ) { parent::__construct(); $this->config = $config; $this->l = $l; $this->urlGenerator = $urlGenerator; + $this->rootFolder = $rootFolder; $this->name = $defaults->getName(); $this->url = $defaults->getBaseUrl(); @@ -92,7 +89,7 @@ class Template extends \OC_Defaults { public function getEntity() { return $this->config->getAppValue('theming', 'name', $this->name); } - + public function getBaseUrl() { return $this->config->getAppValue('theming', 'url', $this->url); } @@ -120,6 +117,34 @@ class Template extends \OC_Defaults { } /** + * Themed logo url + * + * @return string + */ + public function getLogo() { + $logo = $this->config->getAppValue('theming', 'logoMime'); + if(!$logo || !$this->rootFolder->nodeExists('/themedinstancelogo')) { + return $this->urlGenerator->imagePath('core','logo.svg'); + } else { + return $this->urlGenerator->linkToRoute('theming.Theming.getLogo'); + } + } + + /** + * Themed background image url + * + * @return string + */ + public function getBackground() { + $backgroundLogo = $this->config->getAppValue('theming', 'backgroundMime'); + if(!$backgroundLogo || !$this->rootFolder->nodeExists('/themedbackgroundlogo')) { + return $this->urlGenerator->imagePath('core','background.jpg'); + } else { + return $this->urlGenerator->linkToRoute('theming.Theming.getLoginBackground'); + } + } + + /** * Increases the cache buster key */ private function increaseCacheBuster() { @@ -168,4 +193,5 @@ class Template extends \OC_Defaults { return $returnValue; } + } diff --git a/apps/theming/settings/settings-admin.php b/apps/theming/settings/settings-admin.php deleted file mode 100644 index 8ef499789e8..00000000000 --- a/apps/theming/settings/settings-admin.php +++ /dev/null @@ -1,52 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016 Bjoern Schiessle <bjoern@schiessle.org> - * @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch> - * - * @author Bjoern Schiessle <bjoern@schiessle.org> - * @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/>. - * - */ - -$config = \OC::$server->getConfig(); -$l = \OC::$server->getL10N('theming'); -$urlGenerator = \OC::$server->getURLGenerator(); - -$theming = \OC::$server->getThemingDefaults(); - -$themable = true; -$errorMessage = ''; -$theme = $config->getSystemValue('theme', ''); - -if ($theme !== '') { - $themable = false; - $errorMessage = $l->t('You already use a custom theme'); -} - -$template = new \OCP\Template('theming', 'settings-admin'); - -$template->assign('themable', $themable); -$template->assign('errorMessage', $errorMessage); -$template->assign('name', $theming->getEntity()); -$template->assign('url', $theming->getBaseUrl()); -$template->assign('slogan', $theming->getSlogan()); -$template->assign('color', $theming->getMailHeaderColor()); -$path = $urlGenerator->linkToRoute('theming.Theming.updateLogo'); -$template->assign('uploadLogoRoute', $path); - -return $template->fetchPage(); diff --git a/apps/theming/templates/settings-admin.php b/apps/theming/templates/settings-admin.php index 50c4a8fb5ec..b6c97040230 100644 --- a/apps/theming/templates/settings-admin.php +++ b/apps/theming/templates/settings-admin.php @@ -60,19 +60,24 @@ style('theming', 'settings-admin'); </p> <p> <form class="uploadButton" method="post" action="<?php p($_['uploadLogoRoute']) ?>"> + <input type="hidden" id="current-logoMime" name="current-logoMime" value="<?php p($_['logoMime']); ?>" /> <label for="uploadlogo"><span><?php p($l->t('Logo')) ?></span></label> - <input id="uploadlogo" class="upload-logo-field" name="uploadlogo" type="file"> + <input id="uploadlogo" class="upload-logo-field" name="uploadlogo" type="file" /> <label for="uploadlogo" class="button icon-upload svg" id="uploadlogo" title="<?php p($l->t('Upload new logo')) ?>"></label> <span data-setting="logoMime" data-toggle="tooltip" data-original-title="<?php p($l->t('reset to default')); ?>" class="theme-undo icon icon-history"></span> </form> </p> <p> <form class="uploadButton" method="post" action="<?php p($_['uploadLogoRoute']) ?>"> + <input type="hidden" id="current-backgroundMime" name="current-backgroundMime" value="<?php p($_['backgroundMime']); ?>" /> <label for="upload-login-background"><span><?php p($l->t('Log in image')) ?></span></label> <input id="upload-login-background" class="upload-logo-field" name="upload-login-background" type="file"> <label for="upload-login-background" class="button icon-upload svg" id="upload-login-background" title="<?php p($l->t("Upload new login background")) ?>"></label> <span data-setting="backgroundMime" data-toggle="tooltip" data-original-title="<?php p($l->t('reset to default')); ?>" class="theme-undo icon icon-history"></span> </form> - </p> + </p> + <div id="theming-preview" style="background-color:<?php p($_['color']);?>; background-image:url(<?php p($_['background']); ?>);"> + <img src="<?php p($_['logo']); ?>" id="theming-preview-logo" /> + </div> <?php } ?> </div> diff --git a/apps/theming/tests/Controller/ThemingControllerTest.php b/apps/theming/tests/Controller/ThemingControllerTest.php index 82eb8259af5..193e0bdcb4b 100644 --- a/apps/theming/tests/Controller/ThemingControllerTest.php +++ b/apps/theming/tests/Controller/ThemingControllerTest.php @@ -25,7 +25,6 @@ namespace OCA\Theming\Tests\Controller; use OCA\Theming\Controller\ThemingController; -use OCA\Theming\Template; use OCA\Theming\Util; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; @@ -33,14 +32,16 @@ use OCP\Files\IRootFolder; use OCP\IConfig; use OCP\IL10N; use OCP\IRequest; +use OCP\ITempManager; use Test\TestCase; +use OCA\Theming\ThemingDefaults; class ThemingControllerTest extends TestCase { /** @var IRequest|\PHPUnit_Framework_MockObject_MockObject */ private $request; /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */ private $config; - /** @var Template|\PHPUnit_Framework_MockObject_MockObject */ + /** @var ThemingDefaults|\PHPUnit_Framework_MockObject_MockObject */ private $template; /** @var Util */ private $util; @@ -52,11 +53,13 @@ class ThemingControllerTest extends TestCase { private $themingController; /** @var IRootFolder|\PHPUnit_Framework_MockObject_MockObject */ private $rootFolder; + /** @var ITempManager */ + private $tempManager; public function setUp() { $this->request = $this->getMockBuilder('OCP\IRequest')->getMock(); $this->config = $this->getMockBuilder('OCP\IConfig')->getMock(); - $this->template = $this->getMockBuilder('OCA\Theming\Template') + $this->template = $this->getMockBuilder('OCA\Theming\ThemingDefaults') ->disableOriginalConstructor()->getMock(); $this->util = new Util(); $this->timeFactory = $this->getMockBuilder('OCP\AppFramework\Utility\ITimeFactory') @@ -64,10 +67,10 @@ class ThemingControllerTest extends TestCase { ->getMock(); $this->l10n = $this->getMockBuilder('OCP\IL10N')->getMock(); $this->rootFolder = $this->getMockBuilder('OCP\Files\IRootFolder')->getMock(); - $this->timeFactory->expects($this->any()) ->method('getTime') ->willReturn(123); + $this->tempManager = \OC::$server->getTempManager(); $this->themingController = new ThemingController( 'theming', @@ -77,7 +80,8 @@ class ThemingControllerTest extends TestCase { $this->util, $this->timeFactory, $this->l10n, - $this->rootFolder + $this->rootFolder, + $this->tempManager ); return parent::setUp(); @@ -214,6 +218,7 @@ class ThemingControllerTest extends TestCase { $destination = \OC::$server->getTempManager()->getTemporaryFolder(); touch($tmpLogo); + file_put_contents($tmpLogo, file_get_contents(__DIR__ . '/../../../../tests/data/desktopapp.png')); $this->request ->expects($this->at(0)) ->method('getUploadedFile') @@ -261,6 +266,52 @@ class ThemingControllerTest extends TestCase { $this->assertEquals($expected, $this->themingController->updateLogo()); } + public function testUpdateLogoLoginScreenUploadWithInvalidImage() { + $tmpLogo = \OC::$server->getTempManager()->getTemporaryFolder() . '/logo.svg'; + $destination = \OC::$server->getTempManager()->getTemporaryFolder(); + + touch($tmpLogo); + file_put_contents($tmpLogo, file_get_contents(__DIR__ . '/../../../../tests/data/data.zip')); + $this->request + ->expects($this->at(0)) + ->method('getUploadedFile') + ->with('uploadlogo') + ->willReturn(null); + $this->request + ->expects($this->at(1)) + ->method('getUploadedFile') + ->with('upload-login-background') + ->willReturn([ + 'tmp_name' => $tmpLogo, + 'type' => 'text/svg', + 'name' => 'logo.svg', + ]); + $this->l10n + ->expects($this->once()) + ->method('t') + ->with('Unsupported image type') + ->willReturn('Unsupported image type'); + $file = $this->getMockBuilder('\\OCP\\Files\\File') + ->disableOriginalConstructor() + ->getMock(); + $this->rootFolder + ->expects($this->once()) + ->method('newFile') + ->with('themedbackgroundlogo') + ->willReturn($file); + $expected = new DataResponse( + [ + 'data' => + [ + 'message' => 'Unsupported image type', + ], + 'status' => 'failure' + ], + Http::STATUS_UNPROCESSABLE_ENTITY + ); + $this->assertEquals($expected, $this->themingController->updateLogo()); + } + public function testUndo() { $this->l10n ->expects($this->once()) @@ -311,6 +362,7 @@ class ThemingControllerTest extends TestCase { $expected->addHeader('Expires', date(\DateTime::RFC2822, 123)); $expected->addHeader('Content-Disposition', 'attachment'); $expected->addHeader('Content-Type', 'text/svg'); + $expected->addHeader('Pragma', 'cache'); @$this->assertEquals($expected, $this->themingController->getLogo()); } @@ -340,6 +392,7 @@ class ThemingControllerTest extends TestCase { $expected->addHeader('Expires', date(\DateTime::RFC2822, 123)); $expected->addHeader('Content-Disposition', 'attachment'); $expected->addHeader('Content-Type', 'image/png'); + $expected->addHeader('Pragma', 'cache'); @$this->assertEquals($expected, $this->themingController->getLoginBackground()); } @@ -383,7 +436,36 @@ class ThemingControllerTest extends TestCase { $expectedData .= 'input[type="radio"].radio:checked:not(.radio--white):not(:disabled) + label:before {' . 'background-image: url(\'data:image/svg+xml;base64,'.$this->util->generateRadioButton($color).'\');' . "}\n"; - + $expectedData .= '.primary, input[type="submit"].primary, input[type="button"].primary, button.primary, .button.primary,' . + '.primary:active, input[type="submit"].primary:active, input[type="button"].primary:active, button.primary:active, .button.primary:active {' . + 'border: 1px solid '.$color.';'. + 'background-color: '.$color.';'. + 'opacity: 0.8;' . + 'color: #ffffff;'. + "}\n" . + '.primary:hover, input[type="submit"].primary:hover, input[type="button"].primary:hover, button.primary:hover, .button.primary:hover,' . + '.primary:focus, input[type="submit"].primary:focus, input[type="button"].primary:focus, button.primary:focus, .button.primary:focus {' . + 'border: 1px solid '.$color.';'. + 'background-color: '.$color.';'. + 'opacity: 1.0;' . + 'color: #ffffff;'. + "}\n" . + '.primary:disabled, input[type="submit"].primary:disabled, input[type="button"].primary:disabled, button.primary:disabled, .button.primary:disabled,' . + '.primary:disabled:hover, input[type="submit"].primary:disabled:hover, input[type="button"].primary:disabled:hover, button.primary:disabled:hover, .button.primary:disabled:hover,' . + '.primary:disabled:focus, input[type="submit"].primary:disabled:focus, input[type="button"].primary:disabled:focus, button.primary:disabled:focus, .button.primary:disabled:focus {' . + 'border: 1px solid '.$color.';'. + 'background-color: '.$color.';'. + 'opacity: 0.4;' . + 'color: #ffffff;'. + "}\n"; + $expectedData .= '.ui-widget-header { border: 1px solid ' . $color . '; background: '. $color . '; color: #ffffff;' . "}\n"; + $expectedData .= '.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active {' . + 'border: 1px solid ' . $color . ';' . + 'color: ' . $color . ';' . + "}\n"; + $expectedData .= '.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited {' . + 'color: ' . $color . ';' . + "}\n"; $expectedData .= ' #firstrunwizard .firstrunwizard-header { background-color: ' . $color . '; @@ -392,17 +474,22 @@ class ThemingControllerTest extends TestCase { color: ' . $color . '; } '; + $expectedData .= sprintf('.nc-theming-main-background {background-color: %s}' . "\n", $color); + $expectedData .= sprintf('.nc-theming-main-text {color: %s}' . "\n", $color); + $expectedData .= '.nc-theming-contrast {color: #ffffff}' . "\n"; $expected = new Http\DataDownloadResponse($expectedData, 'style', 'text/css'); $expected->cacheFor(3600); $expected->addHeader('Expires', date(\DateTime::RFC2822, 123)); + $expected->addHeader('Pragma', 'cache'); @$this->assertEquals($expected, $this->themingController->getStylesheet()); } public function testGetStylesheetWithOnlyColorInvert() { $color = '#fff'; + $elementColor = '#555555'; $this->config ->expects($this->at(0)) @@ -439,7 +526,36 @@ class ThemingControllerTest extends TestCase { $expectedData .= 'input[type="radio"].radio:checked:not(.radio--white):not(:disabled) + label:before {' . 'background-image: url(\'data:image/svg+xml;base64,'.$this->util->generateRadioButton('#555555').'\');' . "}\n"; - + $expectedData .= '.primary, input[type="submit"].primary, input[type="button"].primary, button.primary, .button.primary,' . + '.primary:active, input[type="submit"].primary:active, input[type="button"].primary:active, button.primary:active, .button.primary:active {' . + 'border: 1px solid '.$elementColor.';'. + 'background-color: '.$elementColor.';'. + 'opacity: 0.8;' . + 'color: #000000;'. + "}\n" . + '.primary:hover, input[type="submit"].primary:hover, input[type="button"].primary:hover, button.primary:hover, .button.primary:hover,' . + '.primary:focus, input[type="submit"].primary:focus, input[type="button"].primary:focus, button.primary:focus, .button.primary:focus {' . + 'border: 1px solid '.$elementColor.';'. + 'background-color: '.$elementColor.';'. + 'opacity: 1.0;' . + 'color: #000000;'. + "}\n" . + '.primary:disabled, input[type="submit"].primary:disabled, input[type="button"].primary:disabled, button.primary:disabled, .button.primary:disabled,' . + '.primary:disabled:hover, input[type="submit"].primary:disabled:hover, input[type="button"].primary:disabled:hover, button.primary:disabled:hover, .button.primary:disabled:hover,' . + '.primary:disabled:focus, input[type="submit"].primary:disabled:focus, input[type="button"].primary:disabled:focus, button.primary:disabled:focus, .button.primary:disabled:focus {' . + 'border: 1px solid '.$elementColor.';'. + 'background-color: '.$elementColor.';'. + 'opacity: 0.4;' . + 'color: #000000;'. + "}\n"; + $expectedData .= '.ui-widget-header { border: 1px solid ' . $color . '; background: '. $color . '; color: #ffffff;' . "}\n"; + $expectedData .= '.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active {' . + 'border: 1px solid ' . $color . ';' . + 'color: ' . $elementColor . ';' . + "}\n"; + $expectedData .= '.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited {' . + 'color: ' . $elementColor . ';' . + "}\n"; $expectedData .= ' #firstrunwizard .firstrunwizard-header { background-color: ' . $color . '; @@ -448,16 +564,21 @@ class ThemingControllerTest extends TestCase { color: ' . $color . '; } '; + $expectedData .= sprintf('.nc-theming-main-background {background-color: %s}' . "\n", $color); + $expectedData .= sprintf('.nc-theming-main-text {color: %s}' . "\n", $color); $expectedData .= '#header .header-appname, #expandDisplayName { color: #000000; }' . "\n"; $expectedData .= '#header .icon-caret { background-image: url(\'' . \OC::$WEBROOT . '/core/img/actions/caret-dark.svg\'); }' . "\n"; $expectedData .= '.searchbox input[type="search"] { background: transparent url(\'' . \OC::$WEBROOT . '/core/img/actions/search.svg\') no-repeat 6px center; color: #000; }' . "\n"; $expectedData .= '.searchbox input[type="search"]:focus,.searchbox input[type="search"]:active,.searchbox input[type="search"]:valid { color: #000; border: 1px solid rgba(0, 0, 0, .5); }' . "\n"; + $expectedData .= '.nc-theming-contrast {color: #000000}' . "\n"; + $expectedData .= '.ui-widget-header { color: #000000; }' . "\n"; $expected = new Http\DataDownloadResponse($expectedData, 'style', 'text/css'); $expected->cacheFor(3600); $expected->addHeader('Expires', date(\DateTime::RFC2822, 123)); + $expected->addHeader('Pragma', 'cache'); @$this->assertEquals($expected, $this->themingController->getStylesheet()); } @@ -495,11 +616,13 @@ class ThemingControllerTest extends TestCase { 'background-image: url(\'./logo?v=0\');' . 'background-size: contain;' . '}' . "\n"; + $expectedData .= '.nc-theming-contrast {color: #ffffff}' . "\n"; $expected = new Http\DataDownloadResponse($expectedData, 'style', 'text/css'); $expected->cacheFor(3600); $expected->addHeader('Expires', date(\DateTime::RFC2822, 123)); + $expected->addHeader('Pragma', 'cache'); @$this->assertEquals($expected, $this->themingController->getStylesheet()); } @@ -529,11 +652,13 @@ class ThemingControllerTest extends TestCase { $expectedData .= '#firstrunwizard .firstrunwizard-header {' . 'background-image: url(\'./loginbackground?v=0\');' . '}' . "\n"; + $expectedData .= '.nc-theming-contrast {color: #ffffff}' . "\n"; $expected = new Http\DataDownloadResponse($expectedData, 'style', 'text/css'); $expected->cacheFor(3600); $expected->addHeader('Expires', date(\DateTime::RFC2822, 123)); + $expected->addHeader('Pragma', 'cache'); @$this->assertEquals($expected, $this->themingController->getStylesheet()); } @@ -577,6 +702,36 @@ class ThemingControllerTest extends TestCase { $expectedData .= 'input[type="radio"].radio:checked:not(.radio--white):not(:disabled) + label:before {' . 'background-image: url(\'data:image/svg+xml;base64,'.$this->util->generateRadioButton($color).'\');' . "}\n"; + $expectedData .= '.primary, input[type="submit"].primary, input[type="button"].primary, button.primary, .button.primary,' . + '.primary:active, input[type="submit"].primary:active, input[type="button"].primary:active, button.primary:active, .button.primary:active {' . + 'border: 1px solid '.$color.';'. + 'background-color: '.$color.';'. + 'opacity: 0.8;' . + 'color: #ffffff;'. + "}\n" . + '.primary:hover, input[type="submit"].primary:hover, input[type="button"].primary:hover, button.primary:hover, .button.primary:hover,' . + '.primary:focus, input[type="submit"].primary:focus, input[type="button"].primary:focus, button.primary:focus, .button.primary:focus {' . + 'border: 1px solid '.$color.';'. + 'background-color: '.$color.';'. + 'opacity: 1.0;' . + 'color: #ffffff;'. + "}\n" . + '.primary:disabled, input[type="submit"].primary:disabled, input[type="button"].primary:disabled, button.primary:disabled, .button.primary:disabled,' . + '.primary:disabled:hover, input[type="submit"].primary:disabled:hover, input[type="button"].primary:disabled:hover, button.primary:disabled:hover, .button.primary:disabled:hover,' . + '.primary:disabled:focus, input[type="submit"].primary:disabled:focus, input[type="button"].primary:disabled:focus, button.primary:disabled:focus, .button.primary:disabled:focus {' . + 'border: 1px solid '.$color.';'. + 'background-color: '.$color.';'. + 'opacity: 0.4;' . + 'color: #ffffff;'. + "}\n"; + $expectedData .= '.ui-widget-header { border: 1px solid ' . $color . '; background: '. $color . '; color: #ffffff;' . "}\n"; + $expectedData .= '.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active {' . + 'border: 1px solid ' . $color . ';' . + 'color: ' . $color . ';' . + "}\n"; + $expectedData .= '.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited {' . + 'color: ' . $color . ';' . + "}\n"; $expectedData .= ' #firstrunwizard .firstrunwizard-header { background-color: ' . $color . '; @@ -585,6 +740,8 @@ class ThemingControllerTest extends TestCase { color: ' . $color . '; } '; + $expectedData .= sprintf('.nc-theming-main-background {background-color: %s}' . "\n", $color); + $expectedData .= sprintf('.nc-theming-main-text {color: %s}' . "\n", $color); $expectedData .= sprintf( '#header .logo {' . 'background-image: url(\'./logo?v=0\');' . @@ -603,16 +760,19 @@ class ThemingControllerTest extends TestCase { $expectedData .= '#firstrunwizard .firstrunwizard-header {' . 'background-image: url(\'./loginbackground?v=0\');' . '}' . "\n"; + $expectedData .= '.nc-theming-contrast {color: #ffffff}' . "\n"; $expected = new Http\DataDownloadResponse($expectedData, 'style', 'text/css'); $expected->cacheFor(3600); $expected->addHeader('Expires', date(\DateTime::RFC2822, 123)); + $expected->addHeader('Pragma', 'cache'); @$this->assertEquals($expected, $this->themingController->getStylesheet()); } public function testGetStylesheetWithAllCombinedInverted() { $color = '#fff'; + $elementColor = '#555555'; $this->config ->expects($this->at(0)) @@ -635,7 +795,6 @@ class ThemingControllerTest extends TestCase { ->with('theming', 'backgroundMime', '') ->willReturn('image/png'); - $expectedData = sprintf( '#body-user #header,#body-settings #header,#body-public #header,#body-login,.searchbox input[type="search"]:focus,.searchbox input[type="search"]:active,.searchbox input[type="search"]:valid {background-color: %s}' . "\n", $color); @@ -650,6 +809,36 @@ class ThemingControllerTest extends TestCase { $expectedData .= 'input[type="radio"].radio:checked:not(.radio--white):not(:disabled) + label:before {' . 'background-image: url(\'data:image/svg+xml;base64,'.$this->util->generateRadioButton('#555555').'\');' . "}\n"; + $expectedData .= '.primary, input[type="submit"].primary, input[type="button"].primary, button.primary, .button.primary,' . + '.primary:active, input[type="submit"].primary:active, input[type="button"].primary:active, button.primary:active, .button.primary:active {' . + 'border: 1px solid '.$elementColor.';'. + 'background-color: '.$elementColor.';'. + 'opacity: 0.8;' . + 'color: #000000;'. + "}\n" . + '.primary:hover, input[type="submit"].primary:hover, input[type="button"].primary:hover, button.primary:hover, .button.primary:hover,' . + '.primary:focus, input[type="submit"].primary:focus, input[type="button"].primary:focus, button.primary:focus, .button.primary:focus {' . + 'border: 1px solid '.$elementColor.';'. + 'background-color: '.$elementColor.';'. + 'opacity: 1.0;' . + 'color: #000000;'. + "}\n" . + '.primary:disabled, input[type="submit"].primary:disabled, input[type="button"].primary:disabled, button.primary:disabled, .button.primary:disabled,' . + '.primary:disabled:hover, input[type="submit"].primary:disabled:hover, input[type="button"].primary:disabled:hover, button.primary:disabled:hover, .button.primary:disabled:hover,' . + '.primary:disabled:focus, input[type="submit"].primary:disabled:focus, input[type="button"].primary:disabled:focus, button.primary:disabled:focus, .button.primary:disabled:focus {' . + 'border: 1px solid '.$elementColor.';'. + 'background-color: '.$elementColor.';'. + 'opacity: 0.4;' . + 'color: #000000;'. + "}\n"; + $expectedData .= '.ui-widget-header { border: 1px solid ' . $color . '; background: '. $color . '; color: #ffffff;' . "}\n"; + $expectedData .= '.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active {' . + 'border: 1px solid ' . $color . ';' . + 'color: ' . $elementColor . ';' . + "}\n"; + $expectedData .= '.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited {' . + 'color: ' . $elementColor . ';' . + "}\n"; $expectedData .= ' #firstrunwizard .firstrunwizard-header { background-color: ' . $color . '; @@ -658,6 +847,8 @@ class ThemingControllerTest extends TestCase { color: ' . $color . '; } '; + $expectedData .= sprintf('.nc-theming-main-background {background-color: %s}' . "\n", $color); + $expectedData .= sprintf('.nc-theming-main-text {color: %s}' . "\n", $color); $expectedData .= sprintf( '#header .logo {' . 'background-image: url(\'./logo?v=0\');' . @@ -680,10 +871,83 @@ class ThemingControllerTest extends TestCase { $expectedData .= '#header .icon-caret { background-image: url(\'' . \OC::$WEBROOT . '/core/img/actions/caret-dark.svg\'); }' . "\n"; $expectedData .= '.searchbox input[type="search"] { background: transparent url(\'' . \OC::$WEBROOT . '/core/img/actions/search.svg\') no-repeat 6px center; color: #000; }' . "\n"; $expectedData .= '.searchbox input[type="search"]:focus,.searchbox input[type="search"]:active,.searchbox input[type="search"]:valid { color: #000; border: 1px solid rgba(0, 0, 0, .5); }' . "\n"; - $expected = new Http\DataDownloadResponse($expectedData, 'style', 'text/css'); + $expectedData .= '.nc-theming-contrast {color: #000000}' . "\n"; + $expectedData .= '.ui-widget-header { color: #000000; }' . "\n"; + $expected = new Http\DataDownloadResponse($expectedData, 'style', 'text/css'); $expected->cacheFor(3600); $expected->addHeader('Expires', date(\DateTime::RFC2822, 123)); + $expected->addHeader('Pragma', 'cache'); @$this->assertEquals($expected, $this->themingController->getStylesheet()); } + + public function testGetJavascript() { + $this->template + ->expects($this->at(0)) + ->method('getName') + ->willReturn(""); + $this->template + ->expects($this->at(1)) + ->method('getBaseUrl') + ->willReturn(""); + $this->template + ->expects($this->at(2)) + ->method('getSlogan') + ->willReturn(""); + $this->template + ->expects($this->at(3)) + ->method('getMailHeaderColor') + ->willReturn("#000"); + + + $expectedResponse = '(function() { + OCA.Theming = { + name: "", + url: "", + slogan: "", + color: "#000", + inverted: false, + }; +})();'; + $expected = new Http\DataDisplayResponse($expectedResponse); + $expected->addHeader("Content-type","text/javascript"); + $expected->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime())); + $expected->addHeader('Pragma', 'cache'); + $expected->cacheFor(3600); + @$this->assertEquals($expected, $this->themingController->getJavascript()); + } + public function testGetJavascriptInverted() { + $this->template + ->expects($this->at(0)) + ->method('getName') + ->willReturn("Nextcloud"); + $this->template + ->expects($this->at(1)) + ->method('getBaseUrl') + ->willReturn("nextcloudurl"); + $this->template + ->expects($this->at(2)) + ->method('getSlogan') + ->willReturn("awesome"); + $this->template + ->expects($this->any()) + ->method('getMailHeaderColor') + ->willReturn("#ffffff"); + + $expectedResponse = '(function() { + OCA.Theming = { + name: "Nextcloud", + url: "nextcloudurl", + slogan: "awesome", + color: "#ffffff", + inverted: true, + }; +})();'; + $expected = new Http\DataDisplayResponse($expectedResponse); + $expected->addHeader("Content-type","text/javascript"); + $expected->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime())); + $expected->addHeader('Pragma', 'cache'); + $expected->cacheFor(3600); + @$this->assertEquals($expected, $this->themingController->getJavascript()); + } } diff --git a/apps/theming/tests/Settings/AdminTest.php b/apps/theming/tests/Settings/AdminTest.php new file mode 100644 index 00000000000..d4f5490d352 --- /dev/null +++ b/apps/theming/tests/Settings/AdminTest.php @@ -0,0 +1,163 @@ +<?php +/** + * @copyright Copyright (c) 2016 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 OCA\Theming\Tests\Settings; + +use OCA\Theming\Settings\Admin; +use OCA\Theming\ThemingDefaults; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\IConfig; +use OCP\IL10N; +use OCP\IURLGenerator; +use Test\TestCase; + +class AdminTest extends TestCase { + /** @var Admin */ + private $admin; + /** @var IConfig */ + private $config; + /** @var ThemingDefaults */ + private $themingDefaults; + /** @var IURLGenerator */ + private $urlGenerator; + /** @var IL10N */ + private $l10n; + + public function setUp() { + parent::setUp(); + $this->config = $this->getMockBuilder('\OCP\IConfig')->getMock(); + $this->l10n = $this->getMockBuilder('\OCP\IL10N')->getMock(); + $this->themingDefaults = $this->getMockBuilder('\OCA\Theming\ThemingDefaults')->disableOriginalConstructor()->getMock(); + $this->urlGenerator = $this->getMockBuilder('\OCP\IURLGenerator')->getMock(); + + $this->admin = new Admin( + $this->config, + $this->l10n, + $this->themingDefaults, + $this->urlGenerator + ); + } + + public function testGetFormNoErrors() { + $this->config + ->expects($this->once()) + ->method('getSystemValue') + ->with('theme', '') + ->willReturn(''); + $this->themingDefaults + ->expects($this->once()) + ->method('getEntity') + ->willReturn('MyEntity'); + $this->themingDefaults + ->expects($this->once()) + ->method('getBaseUrl') + ->willReturn('https://example.com'); + $this->themingDefaults + ->expects($this->once()) + ->method('getSlogan') + ->willReturn('MySlogan'); + $this->themingDefaults + ->expects($this->once()) + ->method('getMailHeaderColor') + ->willReturn('#fff'); + $this->urlGenerator + ->expects($this->once()) + ->method('linkToRoute') + ->with('theming.Theming.updateLogo') + ->willReturn('/my/route'); + $params = [ + 'themable' => true, + 'errorMessage' => '', + 'name' => 'MyEntity', + 'url' => 'https://example.com', + 'slogan' => 'MySlogan', + 'color' => '#fff', + 'uploadLogoRoute' => '/my/route', + 'logo' => null, + 'logoMime' => null, + 'background' => null, + 'backgroundMime' => null, + ]; + + $expected = new TemplateResponse('theming', 'settings-admin', $params, ''); + $this->assertEquals($expected, $this->admin->getForm()); + } + + public function testGetFormWithErrors() { + $this->config + ->expects($this->once()) + ->method('getSystemValue') + ->with('theme', '') + ->willReturn('MyCustomTheme'); + $this->l10n + ->expects($this->once()) + ->method('t') + ->with('You are already using a custom theme') + ->willReturn('You are already using a custom theme'); + $this->themingDefaults + ->expects($this->once()) + ->method('getEntity') + ->willReturn('MyEntity'); + $this->themingDefaults + ->expects($this->once()) + ->method('getBaseUrl') + ->willReturn('https://example.com'); + $this->themingDefaults + ->expects($this->once()) + ->method('getSlogan') + ->willReturn('MySlogan'); + $this->themingDefaults + ->expects($this->once()) + ->method('getMailHeaderColor') + ->willReturn('#fff'); + $this->urlGenerator + ->expects($this->once()) + ->method('linkToRoute') + ->with('theming.Theming.updateLogo') + ->willReturn('/my/route'); + $params = [ + 'themable' => false, + 'errorMessage' => 'You are already using a custom theme', + 'name' => 'MyEntity', + 'url' => 'https://example.com', + 'slogan' => 'MySlogan', + 'color' => '#fff', + 'uploadLogoRoute' => '/my/route', + 'logo' => null, + 'logoMime' => null, + 'background' => null, + 'backgroundMime' => null, + ]; + + $expected = new TemplateResponse('theming', 'settings-admin', $params, ''); + $this->assertEquals($expected, $this->admin->getForm()); + } + + public function testGetSection() { + $this->assertSame('theming', $this->admin->getSection()); + } + + public function testGetPriority() { + $this->assertSame(5, $this->admin->getPriority()); + } +} diff --git a/apps/theming/tests/Settings/SectionTest.php b/apps/theming/tests/Settings/SectionTest.php new file mode 100644 index 00000000000..3a3a4375236 --- /dev/null +++ b/apps/theming/tests/Settings/SectionTest.php @@ -0,0 +1,62 @@ +<?php +/** + * @copyright Copyright (c) 2016 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 OCA\Theming\Tests\Settings; + +use OCA\Theming\Settings\Section; +use OCP\IL10N; +use Test\TestCase; + +class SectionTest extends TestCase { + /** @var IL10N */ + private $l; + /** @var Section */ + private $section; + + public function setUp() { + parent::setUp(); + $this->l = $this->getMockBuilder('\OCP\IL10N')->getMock(); + + $this->section = new Section( + $this->l + ); + } + + public function testGetID() { + $this->assertSame('theming', $this->section->getID()); + } + + public function testGetName() { + $this->l + ->expects($this->once()) + ->method('t') + ->with('Theming') + ->willReturn('Theming'); + + $this->assertSame('Theming', $this->section->getName()); + } + + public function testGetPriority() { + $this->assertSame(30, $this->section->getPriority()); + } +} diff --git a/apps/theming/tests/TemplateTest.php b/apps/theming/tests/ThemingDefaultsTest.php index c3c792657ec..ffa6810ffde 100644 --- a/apps/theming/tests/TemplateTest.php +++ b/apps/theming/tests/ThemingDefaultsTest.php @@ -23,13 +23,14 @@ */ namespace OCA\Theming\Tests; -use OCA\Theming\Template; +use OCA\Theming\ThemingDefaults; use OCP\IConfig; use OCP\IL10N; use OCP\IURLGenerator; +use OCP\Files\IRootFolder; use Test\TestCase; -class TemplateTest extends TestCase { +class ThemingDefaultsTest extends TestCase { /** @var IConfig */ private $config; /** @var IL10N */ @@ -38,13 +39,19 @@ class TemplateTest extends TestCase { private $urlGenerator; /** @var \OC_Defaults */ private $defaults; - /** @var Template */ + /** @var ThemingDefaults */ private $template; + /** @var IRootFolder */ + private $rootFolder; public function setUp() { + parent::setUp(); $this->config = $this->getMock('\\OCP\\IConfig'); $this->l10n = $this->getMock('\\OCP\\IL10N'); $this->urlGenerator = $this->getMock('\\OCP\\IURLGenerator'); + $this->rootFolder = $this->getMockBuilder('OCP\Files\IRootFolder') + ->disableOriginalConstructor() + ->getMock(); $this->defaults = $this->getMockBuilder('\\OC_Defaults') ->disableOriginalConstructor() ->getMock(); @@ -64,14 +71,13 @@ class TemplateTest extends TestCase { ->expects($this->at(3)) ->method('getMailHeaderColor') ->willReturn('#000'); - $this->template = new Template( + $this->template = new ThemingDefaults( $this->config, $this->l10n, $this->urlGenerator, - $this->defaults + $this->defaults, + $this->rootFolder ); - - return parent::setUp(); } public function testGetNameWithDefault() { @@ -368,4 +374,44 @@ class TemplateTest extends TestCase { $this->assertSame('', $this->template->undo('defaultitem')); } + + public function testGetBackgroundDefault() { + $this->config + ->expects($this->once()) + ->method('getAppValue') + ->with('theming', 'backgroundMime') + ->willReturn(''); + $expected = $this->urlGenerator->imagePath('core','background.jpg'); + $this->assertEquals($expected, $this->template->getBackground()); + } + + public function testGetBackgroundCustom() { + $this->config + ->expects($this->once()) + ->method('getAppValue') + ->with('theming', 'backgroundMime') + ->willReturn('image/svg+xml'); + $expected = $this->urlGenerator->linkToRoute('theming.Theming.getLoginBackground'); + $this->assertEquals($expected, $this->template->getBackground()); + } + + public function testGetLogoDefault() { + $this->config + ->expects($this->once()) + ->method('getAppValue') + ->with('theming', 'logoMime') + ->willReturn(''); + $expected = $this->urlGenerator->imagePath('core','logo.svg'); + $this->assertEquals($expected, $this->template->getLogo()); + } + + public function testGetLogoCustom() { + $this->config + ->expects($this->once()) + ->method('getAppValue') + ->with('theming', 'logoMime') + ->willReturn('image/svg+xml'); + $expected = $this->urlGenerator->linkToRoute('theming.Theming.getLogo'); + $this->assertEquals($expected, $this->template->getLogo()); + } } diff --git a/apps/updatenotification/admin.php b/apps/updatenotification/admin.php deleted file mode 100644 index 81c7a8fb557..00000000000 --- a/apps/updatenotification/admin.php +++ /dev/null @@ -1,26 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Lukas Reschke <lukas@statuscode.ch> - * - * @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/> - * - */ - -$app = new \OCA\UpdateNotification\AppInfo\Application(); -/** @var OCA\UpdateNotification\Controller\AdminController $controller */ -$controller = $app->getContainer()->query('AdminController'); -return $controller->displayPanel()->render(); diff --git a/apps/updatenotification/appinfo/app.php b/apps/updatenotification/appinfo/app.php index 0f49d2525e5..f5bcf345669 100644 --- a/apps/updatenotification/appinfo/app.php +++ b/apps/updatenotification/appinfo/app.php @@ -38,7 +38,6 @@ if(\OC::$server->getConfig()->getSystemValue('updatechecker', true) === true) { \OCP\Util::addScript('updatenotification', 'notification'); OC_Hook::connect('\OCP\Config', 'js', $updateChecker, 'getJavaScript'); } - \OC_App::registerAdmin('updatenotification', 'admin'); } } diff --git a/apps/updatenotification/appinfo/info.xml b/apps/updatenotification/appinfo/info.xml index 4070e90f221..2fe400a3587 100644 --- a/apps/updatenotification/appinfo/info.xml +++ b/apps/updatenotification/appinfo/info.xml @@ -5,7 +5,7 @@ <description>Displays update notifications for ownCloud and provides the SSO for the updater.</description> <licence>AGPL</licence> <author>Lukas Reschke</author> - <version>1.1.0</version> + <version>1.1.1</version> <namespace>UpdateNotification</namespace> <default_enable/> <dependencies> @@ -15,4 +15,8 @@ <background-jobs> <job>OCA\UpdateNotification\Notification\BackgroundJob</job> </background-jobs> + + <settings> + <admin>OCA\UpdateNotification\Controller\AdminController</admin> + </settings> </info> diff --git a/apps/updatenotification/img/app.svg b/apps/updatenotification/img/app.svg new file mode 100644 index 00000000000..a77cc418515 --- /dev/null +++ b/apps/updatenotification/img/app.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" viewBox="0 0 16 16"> + <path d="m8 2c-0.5523 0-1 0.4477-1 1 0 0.0472 0.021 0.0873 0.0273 0.1328-1.7366 0.4362-3.0273 1.9953-3.0273 3.8672v2l-1 1v1h10v-1l-1-1v-2c0-1.8719-1.291-3.431-3.0273-3.8672 0.0063-0.0455 0.0273-0.0856 0.0273-0.1328 0-0.5523-0.4477-1-1-1zm-2 10c0 1.1046 0.8954 2 2 2s2-0.8954 2-2z" fill="#fff"/> +</svg> diff --git a/apps/updatenotification/l10n/cs_CZ.js b/apps/updatenotification/l10n/cs_CZ.js index 56dcfdd7aee..2bc1daf96ed 100644 --- a/apps/updatenotification/l10n/cs_CZ.js +++ b/apps/updatenotification/l10n/cs_CZ.js @@ -6,7 +6,6 @@ OC.L10N.register( "Updated channel" : "Aktualizovat kanál", "Nextcloud core" : "Nextcloud Core", "Update for %1$s to version %2$s is available." : "Je dostupná aktualizace pro %1$s na verzi %2$s.", - "Updater" : "Automatické aktualizace", "A new version is available: %s" : "Je dostupná nová verze: %s", "Open updater" : "Otevřít program aktualizací", "Your version is up to date." : "Používáte nejnovější verzi.", @@ -16,6 +15,7 @@ OC.L10N.register( "Notify members of the following groups about available updates:" : "Upozorňovat členy následujících skupin na dostupné aktualizace:", "Only notification for app updates are available." : "Je možné pouze upozornění na dostupné aktualizace aplikací.", "The selected update channel makes dedicated notifications for the server obsolete." : "Zvolený kanál aktualizací označuje dedikovaná upozornění pro server za zastaralá.", - "The selected update channel does not support updates of the server." : "Vybraný kanál aktualizací nepodporuje aktualizace serveru." + "The selected update channel does not support updates of the server." : "Vybraný kanál aktualizací nepodporuje aktualizace serveru.", + "Updater" : "Automatické aktualizace" }, "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/apps/updatenotification/l10n/cs_CZ.json b/apps/updatenotification/l10n/cs_CZ.json index 3f93f490446..8b5563d15a1 100644 --- a/apps/updatenotification/l10n/cs_CZ.json +++ b/apps/updatenotification/l10n/cs_CZ.json @@ -4,7 +4,6 @@ "Updated channel" : "Aktualizovat kanál", "Nextcloud core" : "Nextcloud Core", "Update for %1$s to version %2$s is available." : "Je dostupná aktualizace pro %1$s na verzi %2$s.", - "Updater" : "Automatické aktualizace", "A new version is available: %s" : "Je dostupná nová verze: %s", "Open updater" : "Otevřít program aktualizací", "Your version is up to date." : "Používáte nejnovější verzi.", @@ -14,6 +13,7 @@ "Notify members of the following groups about available updates:" : "Upozorňovat členy následujících skupin na dostupné aktualizace:", "Only notification for app updates are available." : "Je možné pouze upozornění na dostupné aktualizace aplikací.", "The selected update channel makes dedicated notifications for the server obsolete." : "Zvolený kanál aktualizací označuje dedikovaná upozornění pro server za zastaralá.", - "The selected update channel does not support updates of the server." : "Vybraný kanál aktualizací nepodporuje aktualizace serveru." + "The selected update channel does not support updates of the server." : "Vybraný kanál aktualizací nepodporuje aktualizace serveru.", + "Updater" : "Automatické aktualizace" },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/de.js b/apps/updatenotification/l10n/de.js index 331993c2cb4..39c9d419227 100644 --- a/apps/updatenotification/l10n/de.js +++ b/apps/updatenotification/l10n/de.js @@ -6,7 +6,6 @@ OC.L10N.register( "Updated channel" : "Update-Kanal", "Nextcloud core" : "Nextcloud Kern", "Update for %1$s to version %2$s is available." : "Ein Update von %1$s auf Version %2$s ist verfügbar.", - "Updater" : "Updater", "A new version is available: %s" : "Eine neue Version ist verfügbar: %s", "Open updater" : "Updater aufrufen", "Your version is up to date." : "Deine Version ist aktuell.", @@ -16,6 +15,8 @@ OC.L10N.register( "Notify members of the following groups about available updates:" : "Informiere die Mitglieder der folgenden Gruppen über verfügbare Updates:", "Only notification for app updates are available." : "Benachrichtigungen sind nur für Aktualisierungen von Apps verfügbar.", "The selected update channel makes dedicated notifications for the server obsolete." : "Der gewählte Aktualisierungskanal macht dedizierte Benachrichtigungen für Server Aktualisierungen obsolet.", - "The selected update channel does not support updates of the server." : "Der gewählte Aktualisierungskanal unterstützt keine Aktualisierungen für Server." + "The selected update channel does not support updates of the server." : "Der gewählte Aktualisierungskanal unterstützt keine Aktualisierungen für Server.", + "Updater" : "Updater", + "At the moment only manual updates are supported on your environment. This is very likely the case because functions such as shell_exec are not available." : "Aktuell werden lediglich manuelle Aktualisierungen in deiner Umgebung unterstützt. Dies ist wahrscheinlich der Fall, da Funktionen wie zum Beispiel shell_exec nicht verfügbar sind." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/updatenotification/l10n/de.json b/apps/updatenotification/l10n/de.json index 18924aa14d6..870f82a150a 100644 --- a/apps/updatenotification/l10n/de.json +++ b/apps/updatenotification/l10n/de.json @@ -4,7 +4,6 @@ "Updated channel" : "Update-Kanal", "Nextcloud core" : "Nextcloud Kern", "Update for %1$s to version %2$s is available." : "Ein Update von %1$s auf Version %2$s ist verfügbar.", - "Updater" : "Updater", "A new version is available: %s" : "Eine neue Version ist verfügbar: %s", "Open updater" : "Updater aufrufen", "Your version is up to date." : "Deine Version ist aktuell.", @@ -14,6 +13,8 @@ "Notify members of the following groups about available updates:" : "Informiere die Mitglieder der folgenden Gruppen über verfügbare Updates:", "Only notification for app updates are available." : "Benachrichtigungen sind nur für Aktualisierungen von Apps verfügbar.", "The selected update channel makes dedicated notifications for the server obsolete." : "Der gewählte Aktualisierungskanal macht dedizierte Benachrichtigungen für Server Aktualisierungen obsolet.", - "The selected update channel does not support updates of the server." : "Der gewählte Aktualisierungskanal unterstützt keine Aktualisierungen für Server." + "The selected update channel does not support updates of the server." : "Der gewählte Aktualisierungskanal unterstützt keine Aktualisierungen für Server.", + "Updater" : "Updater", + "At the moment only manual updates are supported on your environment. This is very likely the case because functions such as shell_exec are not available." : "Aktuell werden lediglich manuelle Aktualisierungen in deiner Umgebung unterstützt. Dies ist wahrscheinlich der Fall, da Funktionen wie zum Beispiel shell_exec nicht verfügbar sind." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/de_DE.js b/apps/updatenotification/l10n/de_DE.js index 0c20537b338..5d0fd3b5900 100644 --- a/apps/updatenotification/l10n/de_DE.js +++ b/apps/updatenotification/l10n/de_DE.js @@ -6,7 +6,6 @@ OC.L10N.register( "Updated channel" : "Update-Kanal", "Nextcloud core" : "Nextcloud Kern", "Update for %1$s to version %2$s is available." : "Ein Update von %1$s auf Version %2$s ist verfügbar.", - "Updater" : "Updater", "A new version is available: %s" : "Eine neue Version ist verfügbar: %s", "Open updater" : "Updater aufrufen", "Your version is up to date." : "Ihre Version ist aktuell.", @@ -16,6 +15,8 @@ OC.L10N.register( "Notify members of the following groups about available updates:" : "Informieren Sie die Mitglieder der folgenden Gruppen über verfügbare Updates:", "Only notification for app updates are available." : "Benachrichtigungen sind nur für Aktualisierungen von Apps verfügbar.", "The selected update channel makes dedicated notifications for the server obsolete." : "Der gewählte Aktualisierungskanal macht dedizierte Benachrichtigungen für Server Aktualisierungen obsolet.", - "The selected update channel does not support updates of the server." : "Der gewählte Aktualisierungskanal unterstützt keine Aktualisierungen für Server." + "The selected update channel does not support updates of the server." : "Der gewählte Aktualisierungskanal unterstützt keine Aktualisierungen für Server.", + "Updater" : "Updater", + "At the moment only manual updates are supported on your environment. This is very likely the case because functions such as shell_exec are not available." : "Aktuell werden lediglich manuelle Aktualisierungen in Ihrer Umgebung unterstützt. Dies ist wahrscheinlich der Fall, da Funktionen wie zum Beispiel shell_exec nicht verfügbar sind." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/updatenotification/l10n/de_DE.json b/apps/updatenotification/l10n/de_DE.json index afce6689371..f8875ef6682 100644 --- a/apps/updatenotification/l10n/de_DE.json +++ b/apps/updatenotification/l10n/de_DE.json @@ -4,7 +4,6 @@ "Updated channel" : "Update-Kanal", "Nextcloud core" : "Nextcloud Kern", "Update for %1$s to version %2$s is available." : "Ein Update von %1$s auf Version %2$s ist verfügbar.", - "Updater" : "Updater", "A new version is available: %s" : "Eine neue Version ist verfügbar: %s", "Open updater" : "Updater aufrufen", "Your version is up to date." : "Ihre Version ist aktuell.", @@ -14,6 +13,8 @@ "Notify members of the following groups about available updates:" : "Informieren Sie die Mitglieder der folgenden Gruppen über verfügbare Updates:", "Only notification for app updates are available." : "Benachrichtigungen sind nur für Aktualisierungen von Apps verfügbar.", "The selected update channel makes dedicated notifications for the server obsolete." : "Der gewählte Aktualisierungskanal macht dedizierte Benachrichtigungen für Server Aktualisierungen obsolet.", - "The selected update channel does not support updates of the server." : "Der gewählte Aktualisierungskanal unterstützt keine Aktualisierungen für Server." + "The selected update channel does not support updates of the server." : "Der gewählte Aktualisierungskanal unterstützt keine Aktualisierungen für Server.", + "Updater" : "Updater", + "At the moment only manual updates are supported on your environment. This is very likely the case because functions such as shell_exec are not available." : "Aktuell werden lediglich manuelle Aktualisierungen in Ihrer Umgebung unterstützt. Dies ist wahrscheinlich der Fall, da Funktionen wie zum Beispiel shell_exec nicht verfügbar sind." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/en_GB.js b/apps/updatenotification/l10n/en_GB.js index 09e1f00ade2..aa52aa19f1c 100644 --- a/apps/updatenotification/l10n/en_GB.js +++ b/apps/updatenotification/l10n/en_GB.js @@ -6,7 +6,6 @@ OC.L10N.register( "Updated channel" : "Updated channel", "Nextcloud core" : "Nextcloud core", "Update for %1$s to version %2$s is available." : "Update for %1$s to version %2$s is available.", - "Updater" : "Updater", "A new version is available: %s" : "A new version is available: %s", "Open updater" : "Open updater", "Your version is up to date." : "Your version is up to date.", @@ -16,6 +15,7 @@ OC.L10N.register( "Notify members of the following groups about available updates:" : "Notify members of the following groups about available updates:", "Only notification for app updates are available." : "Only notification for app updates are available.", "The selected update channel makes dedicated notifications for the server obsolete." : "The selected update channel makes dedicated notifications for the server obsolete.", - "The selected update channel does not support updates of the server." : "The selected update channel does not support updates of the server." + "The selected update channel does not support updates of the server." : "The selected update channel does not support updates of the server.", + "Updater" : "Updater" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/updatenotification/l10n/en_GB.json b/apps/updatenotification/l10n/en_GB.json index 839833d3335..23aa00e0244 100644 --- a/apps/updatenotification/l10n/en_GB.json +++ b/apps/updatenotification/l10n/en_GB.json @@ -4,7 +4,6 @@ "Updated channel" : "Updated channel", "Nextcloud core" : "Nextcloud core", "Update for %1$s to version %2$s is available." : "Update for %1$s to version %2$s is available.", - "Updater" : "Updater", "A new version is available: %s" : "A new version is available: %s", "Open updater" : "Open updater", "Your version is up to date." : "Your version is up to date.", @@ -14,6 +13,7 @@ "Notify members of the following groups about available updates:" : "Notify members of the following groups about available updates:", "Only notification for app updates are available." : "Only notification for app updates are available.", "The selected update channel makes dedicated notifications for the server obsolete." : "The selected update channel makes dedicated notifications for the server obsolete.", - "The selected update channel does not support updates of the server." : "The selected update channel does not support updates of the server." + "The selected update channel does not support updates of the server." : "The selected update channel does not support updates of the server.", + "Updater" : "Updater" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/es.js b/apps/updatenotification/l10n/es.js index 10fd1c96f53..5b7b2d06a1a 100644 --- a/apps/updatenotification/l10n/es.js +++ b/apps/updatenotification/l10n/es.js @@ -6,7 +6,6 @@ OC.L10N.register( "Updated channel" : "Canal actualizado", "Nextcloud core" : "Núcleo de Nextcloud", "Update for %1$s to version %2$s is available." : "La actualización de %1$s a la versión %2$s está disponible.", - "Updater" : "Actualizador", "A new version is available: %s" : "Hay una nueva versión disponible: %s", "Open updater" : "Abrir el actualizador", "Your version is up to date." : "Su versión está actualizada.", @@ -16,6 +15,7 @@ OC.L10N.register( "Notify members of the following groups about available updates:" : "Notificar a los miembros de los siguientes grupos sobre actualizaciones disponibles:", "Only notification for app updates are available." : "Solo están disponibles las notificaciones para actualizaciones de apps", "The selected update channel makes dedicated notifications for the server obsolete." : "El canal de actualización seleccionado hace obsoletas las notificaciones dedicadas para el servidor.", - "The selected update channel does not support updates of the server." : "El canal de actualización seleccionado no soporta actualizaciones del servidor" + "The selected update channel does not support updates of the server." : "El canal de actualización seleccionado no soporta actualizaciones del servidor", + "Updater" : "Actualizador" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/updatenotification/l10n/es.json b/apps/updatenotification/l10n/es.json index f75b92765ce..560ee441a75 100644 --- a/apps/updatenotification/l10n/es.json +++ b/apps/updatenotification/l10n/es.json @@ -4,7 +4,6 @@ "Updated channel" : "Canal actualizado", "Nextcloud core" : "Núcleo de Nextcloud", "Update for %1$s to version %2$s is available." : "La actualización de %1$s a la versión %2$s está disponible.", - "Updater" : "Actualizador", "A new version is available: %s" : "Hay una nueva versión disponible: %s", "Open updater" : "Abrir el actualizador", "Your version is up to date." : "Su versión está actualizada.", @@ -14,6 +13,7 @@ "Notify members of the following groups about available updates:" : "Notificar a los miembros de los siguientes grupos sobre actualizaciones disponibles:", "Only notification for app updates are available." : "Solo están disponibles las notificaciones para actualizaciones de apps", "The selected update channel makes dedicated notifications for the server obsolete." : "El canal de actualización seleccionado hace obsoletas las notificaciones dedicadas para el servidor.", - "The selected update channel does not support updates of the server." : "El canal de actualización seleccionado no soporta actualizaciones del servidor" + "The selected update channel does not support updates of the server." : "El canal de actualización seleccionado no soporta actualizaciones del servidor", + "Updater" : "Actualizador" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/fr.js b/apps/updatenotification/l10n/fr.js index 53b34864dcb..eaa8124093e 100644 --- a/apps/updatenotification/l10n/fr.js +++ b/apps/updatenotification/l10n/fr.js @@ -6,7 +6,6 @@ OC.L10N.register( "Updated channel" : "Canal à jour", "Nextcloud core" : "Noyau Nextcloud", "Update for %1$s to version %2$s is available." : "Une mise à jour de %1$s vers la version %2$s est disponible.", - "Updater" : "Mises à jour", "A new version is available: %s" : "Une nouvelle version est disponible : %s", "Open updater" : "Ouvrir le système de mise à jour", "Your version is up to date." : "Votre version est à jour.", @@ -16,6 +15,8 @@ OC.L10N.register( "Notify members of the following groups about available updates:" : "Notifier les membres des groupes suivants des mises à jours disponibles :", "Only notification for app updates are available." : "Seules les notifications pour les mises à jour d'applications sont diponibles.", "The selected update channel makes dedicated notifications for the server obsolete." : "Le canal de mise à jour sélectionné rend obsolètes les notifications dédiées au serveur.", - "The selected update channel does not support updates of the server." : "Le canal de mises à jour sélectionné ne supporte pas les mises à jour du serveur." + "The selected update channel does not support updates of the server." : "Le canal de mises à jour sélectionné ne supporte pas les mises à jour du serveur.", + "Updater" : "Mises à jour", + "At the moment only manual updates are supported on your environment. This is very likely the case because functions such as shell_exec are not available." : "Pour l'instant, seules les mises à jour manuel sont permises pour votre environment. C'est très probablement parce que les fonctions telles que « shell_exec » ne sont pas disponibles." }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/updatenotification/l10n/fr.json b/apps/updatenotification/l10n/fr.json index f0360a94aae..23a97533afc 100644 --- a/apps/updatenotification/l10n/fr.json +++ b/apps/updatenotification/l10n/fr.json @@ -4,7 +4,6 @@ "Updated channel" : "Canal à jour", "Nextcloud core" : "Noyau Nextcloud", "Update for %1$s to version %2$s is available." : "Une mise à jour de %1$s vers la version %2$s est disponible.", - "Updater" : "Mises à jour", "A new version is available: %s" : "Une nouvelle version est disponible : %s", "Open updater" : "Ouvrir le système de mise à jour", "Your version is up to date." : "Votre version est à jour.", @@ -14,6 +13,8 @@ "Notify members of the following groups about available updates:" : "Notifier les membres des groupes suivants des mises à jours disponibles :", "Only notification for app updates are available." : "Seules les notifications pour les mises à jour d'applications sont diponibles.", "The selected update channel makes dedicated notifications for the server obsolete." : "Le canal de mise à jour sélectionné rend obsolètes les notifications dédiées au serveur.", - "The selected update channel does not support updates of the server." : "Le canal de mises à jour sélectionné ne supporte pas les mises à jour du serveur." + "The selected update channel does not support updates of the server." : "Le canal de mises à jour sélectionné ne supporte pas les mises à jour du serveur.", + "Updater" : "Mises à jour", + "At the moment only manual updates are supported on your environment. This is very likely the case because functions such as shell_exec are not available." : "Pour l'instant, seules les mises à jour manuel sont permises pour votre environment. C'est très probablement parce que les fonctions telles que « shell_exec » ne sont pas disponibles." },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/id.js b/apps/updatenotification/l10n/id.js index 7d420dd49a6..af6d7d70681 100644 --- a/apps/updatenotification/l10n/id.js +++ b/apps/updatenotification/l10n/id.js @@ -6,7 +6,6 @@ OC.L10N.register( "Updated channel" : "Kanal diperbarui", "Nextcloud core" : "Nextcloud core", "Update for %1$s to version %2$s is available." : "Pembaruan untuk %1$s ke versi %2$s tersedia.", - "Updater" : "Pengupdate", "A new version is available: %s" : "Versi baru tersedia: %s", "Open updater" : "Buka pembaruan", "Your version is up to date." : "Versi Anda saat ini adalah yang terbaru.", @@ -16,6 +15,7 @@ OC.L10N.register( "Notify members of the following groups about available updates:" : "Beritahu anggota grup tentang pembaruan yang tersedia:", "Only notification for app updates are available." : "Hanya pemberitahuan untuk pembaruan aplikasi tersedia.", "The selected update channel makes dedicated notifications for the server obsolete." : "Kanal pembaruan yang terpilih membuat pemberitahuan terdedikasi untuk server usang.", - "The selected update channel does not support updates of the server." : "Kanal pembaruan yang terpilih tidak mendukung pembaruan server." + "The selected update channel does not support updates of the server." : "Kanal pembaruan yang terpilih tidak mendukung pembaruan server.", + "Updater" : "Pengupdate" }, "nplurals=1; plural=0;"); diff --git a/apps/updatenotification/l10n/id.json b/apps/updatenotification/l10n/id.json index 64fc3bedf99..aba4ed0c281 100644 --- a/apps/updatenotification/l10n/id.json +++ b/apps/updatenotification/l10n/id.json @@ -4,7 +4,6 @@ "Updated channel" : "Kanal diperbarui", "Nextcloud core" : "Nextcloud core", "Update for %1$s to version %2$s is available." : "Pembaruan untuk %1$s ke versi %2$s tersedia.", - "Updater" : "Pengupdate", "A new version is available: %s" : "Versi baru tersedia: %s", "Open updater" : "Buka pembaruan", "Your version is up to date." : "Versi Anda saat ini adalah yang terbaru.", @@ -14,6 +13,7 @@ "Notify members of the following groups about available updates:" : "Beritahu anggota grup tentang pembaruan yang tersedia:", "Only notification for app updates are available." : "Hanya pemberitahuan untuk pembaruan aplikasi tersedia.", "The selected update channel makes dedicated notifications for the server obsolete." : "Kanal pembaruan yang terpilih membuat pemberitahuan terdedikasi untuk server usang.", - "The selected update channel does not support updates of the server." : "Kanal pembaruan yang terpilih tidak mendukung pembaruan server." + "The selected update channel does not support updates of the server." : "Kanal pembaruan yang terpilih tidak mendukung pembaruan server.", + "Updater" : "Pengupdate" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/is.js b/apps/updatenotification/l10n/is.js index c1961755c78..41b4445d16a 100644 --- a/apps/updatenotification/l10n/is.js +++ b/apps/updatenotification/l10n/is.js @@ -6,13 +6,17 @@ OC.L10N.register( "Updated channel" : "Uppfærði rás", "Nextcloud core" : "Nextcloud kjarni", "Update for %1$s to version %2$s is available." : "Upfærsla %1$s í útgáfu %2$s er tiltæk.", - "Updater" : "Uppfærslustýring", "A new version is available: %s" : "Ný útgáfa er tiltæk: %s", "Open updater" : "Opna uppfærslustýringu", "Your version is up to date." : "Útgáfan þín er af nýjustu gerð.", "Checked on %s" : "Athugað þann %s", "Update channel:" : "Uppfærslurás:", "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Þú getur alltaf uppfært í nýrri útgáfu eða tilraunaútgáfurás. En þú getur aldrei niðurfært í stöðugri rás.", - "Notify members of the following groups about available updates:" : "Tilkynna meðlimum eftirfarandi hópa um tiltækar uppfærslur:" + "Notify members of the following groups about available updates:" : "Tilkynna meðlimum eftirfarandi hópa um tiltækar uppfærslur:", + "Only notification for app updates are available." : "Eingöngu eru eru tiltækar tilkynningar fyrir uppfærslur forrita.", + "The selected update channel makes dedicated notifications for the server obsolete." : "Valda uppfærslurásin gerir úreltar sértækar tilkynningar fyrir vefþjóninn.", + "The selected update channel does not support updates of the server." : "Valda uppfærslurásin styður ekki uppfærslur fyrir vefþjóninn.", + "Updater" : "Uppfærslustýring", + "At the moment only manual updates are supported on your environment. This is very likely the case because functions such as shell_exec are not available." : "Í augnablikinu er einungis stuðningur við handvirkar uppfærslur á kerfinu þínu. Það gerist mjög líklega vegna þess að aðgerðir á borð við shell_exec eru ekki tiltækar." }, "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/apps/updatenotification/l10n/is.json b/apps/updatenotification/l10n/is.json index 044131460fc..b318e8fb9e0 100644 --- a/apps/updatenotification/l10n/is.json +++ b/apps/updatenotification/l10n/is.json @@ -4,13 +4,17 @@ "Updated channel" : "Uppfærði rás", "Nextcloud core" : "Nextcloud kjarni", "Update for %1$s to version %2$s is available." : "Upfærsla %1$s í útgáfu %2$s er tiltæk.", - "Updater" : "Uppfærslustýring", "A new version is available: %s" : "Ný útgáfa er tiltæk: %s", "Open updater" : "Opna uppfærslustýringu", "Your version is up to date." : "Útgáfan þín er af nýjustu gerð.", "Checked on %s" : "Athugað þann %s", "Update channel:" : "Uppfærslurás:", "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Þú getur alltaf uppfært í nýrri útgáfu eða tilraunaútgáfurás. En þú getur aldrei niðurfært í stöðugri rás.", - "Notify members of the following groups about available updates:" : "Tilkynna meðlimum eftirfarandi hópa um tiltækar uppfærslur:" + "Notify members of the following groups about available updates:" : "Tilkynna meðlimum eftirfarandi hópa um tiltækar uppfærslur:", + "Only notification for app updates are available." : "Eingöngu eru eru tiltækar tilkynningar fyrir uppfærslur forrita.", + "The selected update channel makes dedicated notifications for the server obsolete." : "Valda uppfærslurásin gerir úreltar sértækar tilkynningar fyrir vefþjóninn.", + "The selected update channel does not support updates of the server." : "Valda uppfærslurásin styður ekki uppfærslur fyrir vefþjóninn.", + "Updater" : "Uppfærslustýring", + "At the moment only manual updates are supported on your environment. This is very likely the case because functions such as shell_exec are not available." : "Í augnablikinu er einungis stuðningur við handvirkar uppfærslur á kerfinu þínu. Það gerist mjög líklega vegna þess að aðgerðir á borð við shell_exec eru ekki tiltækar." },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/it.js b/apps/updatenotification/l10n/it.js index 80d8633b017..ace4a78e534 100644 --- a/apps/updatenotification/l10n/it.js +++ b/apps/updatenotification/l10n/it.js @@ -6,7 +6,6 @@ OC.L10N.register( "Updated channel" : "Canale di aggiornamento", "Nextcloud core" : "Componente principale di Nextcloud", "Update for %1$s to version %2$s is available." : "È disponibile l'aggiornamento di %1$s alla versione %2$s.", - "Updater" : "Strumento di aggiornamento", "A new version is available: %s" : "Una nuova versione è disponibile: %s", "Open updater" : "Apri lo strumento di aggiornamento", "Your version is up to date." : "La tua versione è aggiornata.", @@ -16,6 +15,7 @@ OC.L10N.register( "Notify members of the following groups about available updates:" : "Notifica i membri dei seguenti gruppi sugli aggiornamenti disponibili:", "Only notification for app updates are available." : "Sono disponibili solo le notifiche per gli aggiornamenti delle applicazioni.", "The selected update channel makes dedicated notifications for the server obsolete." : "Il canale di aggiornamento selezionato rende obsolete le notifiche dedicate al server.", - "The selected update channel does not support updates of the server." : "Il canale di aggiornamento selezionato non supporta gli aggiornamenti del server." + "The selected update channel does not support updates of the server." : "Il canale di aggiornamento selezionato non supporta gli aggiornamenti del server.", + "Updater" : "Strumento di aggiornamento" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/updatenotification/l10n/it.json b/apps/updatenotification/l10n/it.json index 6d3167d392e..98e4a727596 100644 --- a/apps/updatenotification/l10n/it.json +++ b/apps/updatenotification/l10n/it.json @@ -4,7 +4,6 @@ "Updated channel" : "Canale di aggiornamento", "Nextcloud core" : "Componente principale di Nextcloud", "Update for %1$s to version %2$s is available." : "È disponibile l'aggiornamento di %1$s alla versione %2$s.", - "Updater" : "Strumento di aggiornamento", "A new version is available: %s" : "Una nuova versione è disponibile: %s", "Open updater" : "Apri lo strumento di aggiornamento", "Your version is up to date." : "La tua versione è aggiornata.", @@ -14,6 +13,7 @@ "Notify members of the following groups about available updates:" : "Notifica i membri dei seguenti gruppi sugli aggiornamenti disponibili:", "Only notification for app updates are available." : "Sono disponibili solo le notifiche per gli aggiornamenti delle applicazioni.", "The selected update channel makes dedicated notifications for the server obsolete." : "Il canale di aggiornamento selezionato rende obsolete le notifiche dedicate al server.", - "The selected update channel does not support updates of the server." : "Il canale di aggiornamento selezionato non supporta gli aggiornamenti del server." + "The selected update channel does not support updates of the server." : "Il canale di aggiornamento selezionato non supporta gli aggiornamenti del server.", + "Updater" : "Strumento di aggiornamento" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/ja.js b/apps/updatenotification/l10n/ja.js index 5b48c91167e..625fe0568c3 100644 --- a/apps/updatenotification/l10n/ja.js +++ b/apps/updatenotification/l10n/ja.js @@ -6,7 +6,6 @@ OC.L10N.register( "Updated channel" : "アップデートチャンネル", "Nextcloud core" : "Nextcloud core", "Update for %1$s to version %2$s is available." : "%1$s に対するバージョン %2$s へアップデートが利用可能です。", - "Updater" : "アップデート", "A new version is available: %s" : "新しいバージョンが利用可能: %s", "Open updater" : "アップデーターを開く", "Your version is up to date." : "最新版です。", @@ -16,6 +15,7 @@ OC.L10N.register( "Notify members of the following groups about available updates:" : "次のグループのメンバーに対してアップデートのメッセージが表示されます:", "Only notification for app updates are available." : "アプリ更新情報があるときのみ通知する。", "The selected update channel makes dedicated notifications for the server obsolete." : "選択した更新チャネルでは、廃止サーバーについて専用の通知を行います。", - "The selected update channel does not support updates of the server." : "選択したチャンネルでは、サーバーのアップデートをサポートしていません。" + "The selected update channel does not support updates of the server." : "選択したチャンネルでは、サーバーのアップデートをサポートしていません。", + "Updater" : "アップデート" }, "nplurals=1; plural=0;"); diff --git a/apps/updatenotification/l10n/ja.json b/apps/updatenotification/l10n/ja.json index 6a370be805c..ff4303431d8 100644 --- a/apps/updatenotification/l10n/ja.json +++ b/apps/updatenotification/l10n/ja.json @@ -4,7 +4,6 @@ "Updated channel" : "アップデートチャンネル", "Nextcloud core" : "Nextcloud core", "Update for %1$s to version %2$s is available." : "%1$s に対するバージョン %2$s へアップデートが利用可能です。", - "Updater" : "アップデート", "A new version is available: %s" : "新しいバージョンが利用可能: %s", "Open updater" : "アップデーターを開く", "Your version is up to date." : "最新版です。", @@ -14,6 +13,7 @@ "Notify members of the following groups about available updates:" : "次のグループのメンバーに対してアップデートのメッセージが表示されます:", "Only notification for app updates are available." : "アプリ更新情報があるときのみ通知する。", "The selected update channel makes dedicated notifications for the server obsolete." : "選択した更新チャネルでは、廃止サーバーについて専用の通知を行います。", - "The selected update channel does not support updates of the server." : "選択したチャンネルでは、サーバーのアップデートをサポートしていません。" + "The selected update channel does not support updates of the server." : "選択したチャンネルでは、サーバーのアップデートをサポートしていません。", + "Updater" : "アップデート" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/nl.js b/apps/updatenotification/l10n/nl.js index 008753d6607..cb0b3700fad 100644 --- a/apps/updatenotification/l10n/nl.js +++ b/apps/updatenotification/l10n/nl.js @@ -6,7 +6,6 @@ OC.L10N.register( "Updated channel" : "Bijgewerkt kanaal", "Nextcloud core" : "Nextcloud core", "Update for %1$s to version %2$s is available." : "Update voor %1$s naar versie %2$s is beschikbaar.", - "Updater" : "Updater", "A new version is available: %s" : "Er is een nieuwe versie beschikbaar: %s", "Open updater" : "Open updater", "Your version is up to date." : "Je versie is up to date.", @@ -16,6 +15,7 @@ OC.L10N.register( "Notify members of the following groups about available updates:" : "Geef een melding over beschikbare updates aan leden van de volgende groepen:", "Only notification for app updates are available." : "Er zijn alleen meldingen voor apps beschikbaar.", "The selected update channel makes dedicated notifications for the server obsolete." : "Het geselecteerde updatekanaal maakt overbodig om serverspecifieke meldingen apart te genereren.", - "The selected update channel does not support updates of the server." : "Het geselecteerde updatekanaal ondersteunt geen updates voor de server." + "The selected update channel does not support updates of the server." : "Het geselecteerde updatekanaal ondersteunt geen updates voor de server.", + "Updater" : "Updater" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/updatenotification/l10n/nl.json b/apps/updatenotification/l10n/nl.json index a37fbd27b32..9e571fb0f78 100644 --- a/apps/updatenotification/l10n/nl.json +++ b/apps/updatenotification/l10n/nl.json @@ -4,7 +4,6 @@ "Updated channel" : "Bijgewerkt kanaal", "Nextcloud core" : "Nextcloud core", "Update for %1$s to version %2$s is available." : "Update voor %1$s naar versie %2$s is beschikbaar.", - "Updater" : "Updater", "A new version is available: %s" : "Er is een nieuwe versie beschikbaar: %s", "Open updater" : "Open updater", "Your version is up to date." : "Je versie is up to date.", @@ -14,6 +13,7 @@ "Notify members of the following groups about available updates:" : "Geef een melding over beschikbare updates aan leden van de volgende groepen:", "Only notification for app updates are available." : "Er zijn alleen meldingen voor apps beschikbaar.", "The selected update channel makes dedicated notifications for the server obsolete." : "Het geselecteerde updatekanaal maakt overbodig om serverspecifieke meldingen apart te genereren.", - "The selected update channel does not support updates of the server." : "Het geselecteerde updatekanaal ondersteunt geen updates voor de server." + "The selected update channel does not support updates of the server." : "Het geselecteerde updatekanaal ondersteunt geen updates voor de server.", + "Updater" : "Updater" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/pt_BR.js b/apps/updatenotification/l10n/pt_BR.js index d606b4278e7..521e5a48186 100644 --- a/apps/updatenotification/l10n/pt_BR.js +++ b/apps/updatenotification/l10n/pt_BR.js @@ -6,7 +6,6 @@ OC.L10N.register( "Updated channel" : "Canal atualizado", "Nextcloud core" : "Núcleo Nextcloud", "Update for %1$s to version %2$s is available." : "Atualização de %1$s para versão %2$s está disponível.", - "Updater" : "Atualizador", "A new version is available: %s" : "Uma nova versão está disponível: %s", "Open updater" : "Abrir o atualizador", "Your version is up to date." : "Sua versão está atualizada.", @@ -16,6 +15,7 @@ OC.L10N.register( "Notify members of the following groups about available updates:" : "Notificar membros dos seguintes grupos sobre atualizações disponíveis.", "Only notification for app updates are available." : "Só está disponível notificação para atualizações de aplicativos.", "The selected update channel makes dedicated notifications for the server obsolete." : "O canal de atualização selecionado fornece notificações dedicadas para o servidor desatualizado.", - "The selected update channel does not support updates of the server." : "O canal de atualização selecionado não fornece suporte a atualizações do servidor." + "The selected update channel does not support updates of the server." : "O canal de atualização selecionado não fornece suporte a atualizações do servidor.", + "Updater" : "Atualizador" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/updatenotification/l10n/pt_BR.json b/apps/updatenotification/l10n/pt_BR.json index 02da300a086..a4f26d6a27c 100644 --- a/apps/updatenotification/l10n/pt_BR.json +++ b/apps/updatenotification/l10n/pt_BR.json @@ -4,7 +4,6 @@ "Updated channel" : "Canal atualizado", "Nextcloud core" : "Núcleo Nextcloud", "Update for %1$s to version %2$s is available." : "Atualização de %1$s para versão %2$s está disponível.", - "Updater" : "Atualizador", "A new version is available: %s" : "Uma nova versão está disponível: %s", "Open updater" : "Abrir o atualizador", "Your version is up to date." : "Sua versão está atualizada.", @@ -14,6 +13,7 @@ "Notify members of the following groups about available updates:" : "Notificar membros dos seguintes grupos sobre atualizações disponíveis.", "Only notification for app updates are available." : "Só está disponível notificação para atualizações de aplicativos.", "The selected update channel makes dedicated notifications for the server obsolete." : "O canal de atualização selecionado fornece notificações dedicadas para o servidor desatualizado.", - "The selected update channel does not support updates of the server." : "O canal de atualização selecionado não fornece suporte a atualizações do servidor." + "The selected update channel does not support updates of the server." : "O canal de atualização selecionado não fornece suporte a atualizações do servidor.", + "Updater" : "Atualizador" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/ru.js b/apps/updatenotification/l10n/ru.js index 22ab2c588bb..eb2c66516d5 100644 --- a/apps/updatenotification/l10n/ru.js +++ b/apps/updatenotification/l10n/ru.js @@ -6,7 +6,6 @@ OC.L10N.register( "Updated channel" : "Обновленный канал", "Nextcloud core" : "Nextcloud core", "Update for %1$s to version %2$s is available." : "Доступно обновление для %1$s до версии %2$s.", - "Updater" : "Обновление", "A new version is available: %s" : "Доступна новая версия: %s", "Open updater" : "Открыть окно обновления", "Your version is up to date." : "Версия не требует обновления.", @@ -16,6 +15,7 @@ OC.L10N.register( "Notify members of the following groups about available updates:" : "Уведомить членов следующих групп о наличии доступных обновлений:", "Only notification for app updates are available." : "Только уведомления об обновлении приложений доступны.", "The selected update channel makes dedicated notifications for the server obsolete." : "Выбранный канал обновлений высылает специальные уведомления, если сервер устарел.", - "The selected update channel does not support updates of the server." : "Выбранный канал обновлений не поддерживает обновление сервера." + "The selected update channel does not support updates of the server." : "Выбранный канал обновлений не поддерживает обновление сервера.", + "Updater" : "Обновление" }, "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/updatenotification/l10n/ru.json b/apps/updatenotification/l10n/ru.json index 38ec4f3a29b..9f1add9509f 100644 --- a/apps/updatenotification/l10n/ru.json +++ b/apps/updatenotification/l10n/ru.json @@ -4,7 +4,6 @@ "Updated channel" : "Обновленный канал", "Nextcloud core" : "Nextcloud core", "Update for %1$s to version %2$s is available." : "Доступно обновление для %1$s до версии %2$s.", - "Updater" : "Обновление", "A new version is available: %s" : "Доступна новая версия: %s", "Open updater" : "Открыть окно обновления", "Your version is up to date." : "Версия не требует обновления.", @@ -14,6 +13,7 @@ "Notify members of the following groups about available updates:" : "Уведомить членов следующих групп о наличии доступных обновлений:", "Only notification for app updates are available." : "Только уведомления об обновлении приложений доступны.", "The selected update channel makes dedicated notifications for the server obsolete." : "Выбранный канал обновлений высылает специальные уведомления, если сервер устарел.", - "The selected update channel does not support updates of the server." : "Выбранный канал обновлений не поддерживает обновление сервера." + "The selected update channel does not support updates of the server." : "Выбранный канал обновлений не поддерживает обновление сервера.", + "Updater" : "Обновление" },"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/updatenotification/l10n/sl.js b/apps/updatenotification/l10n/sl.js index 879f98f053a..5431e7404a6 100644 --- a/apps/updatenotification/l10n/sl.js +++ b/apps/updatenotification/l10n/sl.js @@ -6,13 +6,13 @@ OC.L10N.register( "Updated channel" : "Posodobljen kanal", "Nextcloud core" : "Nextcloud jedro", "Update for %1$s to version %2$s is available." : "Posodobitev %1$s na različico %2$s je na voljo.", - "Updater" : "Posodabljalnik", "A new version is available: %s" : "Na voljo je nova različica: %s", "Open updater" : "Odpri posodabljalnik", "Your version is up to date." : "Nameščena je najnovejša različica.", "Checked on %s" : "Zadnjič preverjeno %s", "Update channel:" : "Posodobi kanal:", "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Nadgradnja na višjo različico ali preizkusni kanal je vedno mogoča, ne pa tudi povrnitev na predhodno, bolj stabilno različico.", - "Notify members of the following groups about available updates:" : "Obvestite člane naslednjih skupin o posodobitvah, ki so na voljo:" + "Notify members of the following groups about available updates:" : "Obvestite člane naslednjih skupin o posodobitvah, ki so na voljo:", + "Updater" : "Posodabljalnik" }, "nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"); diff --git a/apps/updatenotification/l10n/sl.json b/apps/updatenotification/l10n/sl.json index b0245dcbec5..77bc54a9dc9 100644 --- a/apps/updatenotification/l10n/sl.json +++ b/apps/updatenotification/l10n/sl.json @@ -4,13 +4,13 @@ "Updated channel" : "Posodobljen kanal", "Nextcloud core" : "Nextcloud jedro", "Update for %1$s to version %2$s is available." : "Posodobitev %1$s na različico %2$s je na voljo.", - "Updater" : "Posodabljalnik", "A new version is available: %s" : "Na voljo je nova različica: %s", "Open updater" : "Odpri posodabljalnik", "Your version is up to date." : "Nameščena je najnovejša različica.", "Checked on %s" : "Zadnjič preverjeno %s", "Update channel:" : "Posodobi kanal:", "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Nadgradnja na višjo različico ali preizkusni kanal je vedno mogoča, ne pa tudi povrnitev na predhodno, bolj stabilno različico.", - "Notify members of the following groups about available updates:" : "Obvestite člane naslednjih skupin o posodobitvah, ki so na voljo:" + "Notify members of the following groups about available updates:" : "Obvestite člane naslednjih skupin o posodobitvah, ki so na voljo:", + "Updater" : "Posodabljalnik" },"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/updatenotification/l10n/tr.js b/apps/updatenotification/l10n/tr.js index eb0a2558cb1..7474f1b9304 100644 --- a/apps/updatenotification/l10n/tr.js +++ b/apps/updatenotification/l10n/tr.js @@ -6,7 +6,6 @@ OC.L10N.register( "Updated channel" : "Kanal güncellendi", "Nextcloud core" : "Nextcloud çekirdeği", "Update for %1$s to version %2$s is available." : "%1$s sürümünden %2$s sürümüne güncelleme mevcut.", - "Updater" : "Güncelleyici", "A new version is available: %s" : "Yeni bir sürüm mevcut: %s", "Open updater" : "Güncelleyiciyi aç", "Your version is up to date." : "Sürümünüz güncel.", @@ -16,6 +15,7 @@ OC.L10N.register( "Notify members of the following groups about available updates:" : "Aşağıdaki grupların üyelerini mevcut güncellelemeler hakkında bilgilendir:", "Only notification for app updates are available." : "Sadece uygulama bildirim güncellemeleri var.", "The selected update channel makes dedicated notifications for the server obsolete." : "Seçilen güncelleme kanalı sunucusnun eski olduğu bildirimine sahip.", - "The selected update channel does not support updates of the server." : "Seçilen güncelleme nakalı sunucunun güncellemelerini desteklemiyor." + "The selected update channel does not support updates of the server." : "Seçilen güncelleme nakalı sunucunun güncellemelerini desteklemiyor.", + "Updater" : "Güncelleyici" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/updatenotification/l10n/tr.json b/apps/updatenotification/l10n/tr.json index 566771e3795..ffbae2e0bb3 100644 --- a/apps/updatenotification/l10n/tr.json +++ b/apps/updatenotification/l10n/tr.json @@ -4,7 +4,6 @@ "Updated channel" : "Kanal güncellendi", "Nextcloud core" : "Nextcloud çekirdeği", "Update for %1$s to version %2$s is available." : "%1$s sürümünden %2$s sürümüne güncelleme mevcut.", - "Updater" : "Güncelleyici", "A new version is available: %s" : "Yeni bir sürüm mevcut: %s", "Open updater" : "Güncelleyiciyi aç", "Your version is up to date." : "Sürümünüz güncel.", @@ -14,6 +13,7 @@ "Notify members of the following groups about available updates:" : "Aşağıdaki grupların üyelerini mevcut güncellelemeler hakkında bilgilendir:", "Only notification for app updates are available." : "Sadece uygulama bildirim güncellemeleri var.", "The selected update channel makes dedicated notifications for the server obsolete." : "Seçilen güncelleme kanalı sunucusnun eski olduğu bildirimine sahip.", - "The selected update channel does not support updates of the server." : "Seçilen güncelleme nakalı sunucunun güncellemelerini desteklemiyor." + "The selected update channel does not support updates of the server." : "Seçilen güncelleme nakalı sunucunun güncellemelerini desteklemiyor.", + "Updater" : "Güncelleyici" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/updatenotification/lib/Controller/AdminController.php b/apps/updatenotification/lib/Controller/AdminController.php index ada04bdd68c..ebb3fa642f1 100644 --- a/apps/updatenotification/lib/Controller/AdminController.php +++ b/apps/updatenotification/lib/Controller/AdminController.php @@ -34,8 +34,9 @@ use OCP\IDateTimeFormatter; use OCP\IL10N; use OCP\IRequest; use OCP\Security\ISecureRandom; +use OCP\Settings\ISettings; -class AdminController extends Controller { +class AdminController extends Controller implements ISettings { /** @var IJobList */ private $jobList; /** @var ISecureRandom */ @@ -144,4 +145,29 @@ class AdminController extends Controller { return new DataResponse($newToken); } + + /** + * @return TemplateResponse returns the instance with all parameters set, ready to be rendered + */ + public function getForm() { + return $this->displayPanel(); + } + + /** + * @return string the section ID, e.g. 'sharing' + */ + public function getSection() { + return 'server'; + } + + /** + * @return int whether the form should be rather on the top or bottom of + * the admin section. The forms are arranged in ascending order of the + * priority values. It is required to return a value between 0 and 100. + * + * E.g.: 70 + */ + public function getPriority() { + return 1; + } } diff --git a/apps/updatenotification/templates/admin.php b/apps/updatenotification/templates/admin.php index b1cc76534e3..3c3d6cbd4cd 100644 --- a/apps/updatenotification/templates/admin.php +++ b/apps/updatenotification/templates/admin.php @@ -13,9 +13,7 @@ /** @var string $currentChannel */ $currentChannel = $_['currentChannel']; ?> -<form id="oca_updatenotification_section" class="section"> - <h2><?php p($l->t('Updater')); ?></h2> - +<form id="oca_updatenotification_section" class="followupsection"> <?php if($isNewVersionAvailable === true): ?> <strong><?php p($l->t('A new version is available: %s', [$newVersionString])); ?></strong> <input type="button" id="oca_updatenotification_button" value="<?php p($l->t('Open updater')) ?>"> diff --git a/apps/updatenotification/tests/Controller/AdminControllerTest.php b/apps/updatenotification/tests/Controller/AdminControllerTest.php index 0343542ef41..336edffc957 100644 --- a/apps/updatenotification/tests/Controller/AdminControllerTest.php +++ b/apps/updatenotification/tests/Controller/AdminControllerTest.php @@ -59,15 +59,15 @@ class AdminControllerTest extends TestCase { public function setUp() { parent::setUp(); - $this->request = $this->getMock('\\OCP\\IRequest'); - $this->jobList = $this->getMock('\\OCP\\BackgroundJob\\IJobList'); - $this->secureRandom = $this->getMock('\\OCP\\Security\\ISecureRandom'); - $this->config = $this->getMock('\\OCP\\IConfig'); - $this->timeFactory = $this->getMock('\\OCP\\AppFramework\\Utility\\ITimeFactory'); - $this->l10n = $this->getMock('\\OCP\\IL10N'); + $this->request = $this->getMockBuilder('\\OCP\\IRequest')->getMock(); + $this->jobList = $this->getMockBuilder('\\OCP\\BackgroundJob\\IJobList')->getMock(); + $this->secureRandom = $this->getMockBuilder('\\OCP\\Security\\ISecureRandom')->getMock(); + $this->config = $this->getMockBuilder('\\OCP\\IConfig')->getMock(); + $this->timeFactory = $this->getMockBuilder('\\OCP\\AppFramework\\Utility\\ITimeFactory')->getMock(); + $this->l10n = $this->getMockBuilder('\\OCP\\IL10N')->getMock(); $this->updateChecker = $this->getMockBuilder('\\OCA\\UpdateNotification\\UpdateChecker') ->disableOriginalConstructor()->getMock(); - $this->dateTimeFormatter = $this->getMock('\\OCP\\IDateTimeFormatter'); + $this->dateTimeFormatter = $this->getMockBuilder('\\OCP\\IDateTimeFormatter')->getMock(); $this->adminController = new AdminController( 'updatenotification', @@ -197,4 +197,12 @@ class AdminControllerTest extends TestCase { $expected = new DataResponse('MyGeneratedToken'); $this->assertEquals($expected, $this->adminController->createCredentials()); } + + public function testGetSection() { + $this->assertSame('server', $this->adminController->getSection()); + } + + public function testGetPriority() { + $this->assertSame(1, $this->adminController->getPriority()); + } } diff --git a/apps/updatenotification/tests/Notification/BackgroundJobTest.php b/apps/updatenotification/tests/Notification/BackgroundJobTest.php index c60a1429576..c3a4c28830d 100644 --- a/apps/updatenotification/tests/Notification/BackgroundJobTest.php +++ b/apps/updatenotification/tests/Notification/BackgroundJobTest.php @@ -51,12 +51,12 @@ class BackgroundJobTest extends TestCase { public function setUp() { parent::setUp(); - $this->config = $this->getMock('OCP\IConfig'); - $this->notificationManager = $this->getMock('OCP\Notification\IManager'); - $this->groupManager = $this->getMock('OCP\IGroupManager'); - $this->appManager = $this->getMock('OCP\App\IAppManager'); - $this->client = $this->getMock('OCP\Http\Client\IClientService'); - $this->urlGenerator = $this->getMock('OCP\IURLGenerator'); + $this->config = $this->getMockBuilder('OCP\IConfig')->getMock(); + $this->notificationManager = $this->getMockBuilder('OCP\Notification\IManager')->getMock(); + $this->groupManager = $this->getMockBuilder('OCP\IGroupManager')->getMock(); + $this->appManager = $this->getMockBuilder('OCP\App\IAppManager')->getMock(); + $this->client = $this->getMockBuilder('OCP\Http\Client\IClientService')->getMock(); + $this->urlGenerator = $this->getMockBuilder('OCP\IURLGenerator')->getMock(); } /** @@ -279,7 +279,7 @@ class BackgroundJobTest extends TestCase { } if ($createNotification) { - $notification = $this->getMock('OCP\Notification\INotification'); + $notification = $this->getMockBuilder('OCP\Notification\INotification')->getMock(); $notification->expects($this->once()) ->method('setApp') ->with('updatenotification') @@ -380,7 +380,7 @@ class BackgroundJobTest extends TestCase { * @param string $version */ public function testDeleteOutdatedNotifications($app, $version) { - $notification = $this->getMock('OCP\Notification\INotification'); + $notification = $this->getMockBuilder('OCP\Notification\INotification')->getMock(); $notification->expects($this->once()) ->method('setApp') ->with('updatenotification') @@ -408,7 +408,7 @@ class BackgroundJobTest extends TestCase { protected function getUsers(array $userIds) { $users = []; foreach ($userIds as $uid) { - $user = $this->getMock('OCP\IUser'); + $user = $this->getMockBuilder('OCP\IUser')->getMock(); $user->expects($this->any()) ->method('getUID') ->willReturn($uid); @@ -422,7 +422,7 @@ class BackgroundJobTest extends TestCase { * @return \OCP\IGroup|\PHPUnit_Framework_MockObject_MockObject */ protected function getGroup($gid) { - $group = $this->getMock('OCP\IGroup'); + $group = $this->getMockBuilder('OCP\IGroup')->getMock(); $group->expects($this->any()) ->method('getGID') ->willReturn($gid); diff --git a/apps/updatenotification/tests/Notification/NotifierTest.php b/apps/updatenotification/tests/Notification/NotifierTest.php index 8848a3124fb..e5ccb291b5c 100644 --- a/apps/updatenotification/tests/Notification/NotifierTest.php +++ b/apps/updatenotification/tests/Notification/NotifierTest.php @@ -38,8 +38,8 @@ class NotifierTest extends TestCase { public function setUp() { parent::setUp(); - $this->notificationManager = $this->getMock('OCP\Notification\IManager'); - $this->l10nFactory = $this->getMock('OCP\L10n\IFactory'); + $this->notificationManager = $this->getMockBuilder('OCP\Notification\IManager')->getMock(); + $this->l10nFactory = $this->getMockBuilder('OCP\L10n\IFactory')->getMock(); } /** @@ -81,7 +81,7 @@ class NotifierTest extends TestCase { public function testUpdateAlreadyInstalledCheck($versionNotification, $versionInstalled, $exception) { $notifier = $this->getNotifier(); - $notification = $this->getMock('OCP\Notification\INotification'); + $notification = $this->getMockBuilder('OCP\Notification\INotification')->getMock(); $notification->expects($this->once()) ->method('getObjectId') ->willReturn($versionNotification); diff --git a/apps/updatenotification/tests/ResetTokenBackgroundJobTest.php b/apps/updatenotification/tests/ResetTokenBackgroundJobTest.php index 71b72a40021..a52d46040cd 100644 --- a/apps/updatenotification/tests/ResetTokenBackgroundJobTest.php +++ b/apps/updatenotification/tests/ResetTokenBackgroundJobTest.php @@ -37,8 +37,8 @@ class ResetTokenBackgroundJobTest extends TestCase { public function setUp() { parent::setUp(); - $this->config = $this->getMock('\\OCP\\IConfig'); - $this->timeFactory = $this->getMock('\\OCP\\AppFramework\\Utility\\ITimeFactory'); + $this->config = $this->getMockBuilder('\\OCP\\IConfig')->getMock(); + $this->timeFactory = $this->getMockBuilder('\\OCP\\AppFramework\\Utility\\ITimeFactory')->getMock(); $this->resetTokenBackgroundJob = new ResetTokenBackgroundJob($this->config, $this->timeFactory); } diff --git a/apps/user_ldap/ajax/getConfiguration.php b/apps/user_ldap/ajax/getConfiguration.php index 0537349bbeb..34ac97f29e7 100644 --- a/apps/user_ldap/ajax/getConfiguration.php +++ b/apps/user_ldap/ajax/getConfiguration.php @@ -32,4 +32,9 @@ OCP\JSON::callCheck(); $prefix = (string)$_POST['ldap_serverconfig_chooser']; $ldapWrapper = new OCA\User_LDAP\LDAP(); $connection = new \OCA\User_LDAP\Connection($ldapWrapper, $prefix); -OCP\JSON::success(array('configuration' => $connection->getConfiguration())); +$configuration = $connection->getConfiguration(); +if (isset($configuration['ldap_agent_password']) && $configuration['ldap_agent_password'] !== '') { + // hide password + $configuration['ldap_agent_password'] = '**PASSWORD SET**'; +} +OCP\JSON::success(array('configuration' => $configuration)); diff --git a/apps/user_ldap/ajax/testConfiguration.php b/apps/user_ldap/ajax/testConfiguration.php index f73e11d3e21..0416e49767b 100644 --- a/apps/user_ldap/ajax/testConfiguration.php +++ b/apps/user_ldap/ajax/testConfiguration.php @@ -33,12 +33,19 @@ OCP\JSON::callCheck(); $l = \OC::$server->getL10N('user_ldap'); $ldapWrapper = new OCA\User_LDAP\LDAP(); -$connection = new \OCA\User_LDAP\Connection($ldapWrapper, '', null); -//needs to be true, otherwise it will also fail with an irritating message -$_POST['ldap_configuration_active'] = 1; +$connection = new \OCA\User_LDAP\Connection($ldapWrapper, $_POST['ldap_serverconfig_chooser']); + try { - if ($connection->setConfiguration($_POST)) { + $configurationOk = true; + $conf = $connection->getConfiguration(); + if ($conf['ldap_configuration_active'] === '0') { + //needs to be true, otherwise it will also fail with an irritating message + $conf['ldap_configuration_active'] = '1'; + $configurationOk = $connection->setConfiguration($conf); + } + if ($configurationOk) { + //Configuration is okay /* * Clossing the session since it won't be used from this point on. There might be a potential * race condition if a second request is made: either this request or the other might not @@ -46,7 +53,6 @@ try { * problem with that other than the extra connection. */ \OC::$server->getSession()->close(); - //Configuration is okay if ($connection->bind()) { /* * This shiny if block is an ugly hack to find out whether anonymous diff --git a/apps/user_ldap/appinfo/app.php b/apps/user_ldap/appinfo/app.php index 10cc003a3f5..caacbea5619 100644 --- a/apps/user_ldap/appinfo/app.php +++ b/apps/user_ldap/appinfo/app.php @@ -27,8 +27,6 @@ * */ -OCP\App::registerAdmin('user_ldap', 'settings'); - $helper = new \OCA\User_LDAP\Helper(); $configPrefixes = $helper->getServerConfigurationPrefixes(true); $ldapWrapper = new OCA\User_LDAP\LDAP(); diff --git a/apps/user_ldap/appinfo/info.xml b/apps/user_ldap/appinfo/info.xml index b0984dcf624..b16824925c0 100644 --- a/apps/user_ldap/appinfo/info.xml +++ b/apps/user_ldap/appinfo/info.xml @@ -9,7 +9,7 @@ A user logs into ownCloud with their LDAP or AD credentials, and is granted acce </description> <licence>AGPL</licence> <author>Dominik Schmidt and Arthur Schiwon</author> - <version>1.1.0</version> + <version>1.1.1</version> <types> <authentication/> </types> @@ -27,4 +27,9 @@ A user logs into ownCloud with their LDAP or AD credentials, and is granted acce <job>OCA\User_LDAP\Jobs\UpdateGroups</job> <job>OCA\User_LDAP\Jobs\CleanUp</job> </background-jobs> + + <settings> + <admin>OCA\User_LDAP\Settings\Admin</admin> + <admin-section>OCA\User_LDAP\Settings\Section</admin-section> + </settings> </info> diff --git a/apps/user_ldap/img/app.svg b/apps/user_ldap/img/app.svg index 0ce7ed867bd..5642ad9c9e1 100644 --- a/apps/user_ldap/img/app.svg +++ b/apps/user_ldap/img/app.svg @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> +<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 16 16"> <rect style="color:#000000" fill-opacity="0" height="97.986" width="163.31" y="-32.993" x="-62.897"/> <path style="block-progression:tb;color:#000000;text-transform:none;text-indent:0" fill="#fff" d="m8.4036 1c-1.7312 0-3.1998 1.2661-3.1998 2.9 0.012287 0.51643 0.058473 1.1532 0.36664 2.5v0.033333l0.033328 0.033333c0.098928 0.28338 0.24289 0.44549 0.4333 0.66666s0.41742 0.48149 0.63328 0.69999c0.025397 0.025708 0.041676 0.041633 0.066656 0.066677 0.04281 0.18631 0.094672 0.38681 0.13332 0.56666 0.10284 0.47851 0.092296 0.81737 0.066668 0.93332-0.74389 0.26121-1.6694 0.57228-2.4998 0.93332-0.46622 0.2027-0.8881 0.3837-1.2332 0.59999-0.34513 0.2163-0.68837 0.37971-0.79994 0.86666-0.16004 0.63293-0.19866 0.7539-0.39997 1.5333-0.027212 0.20914 0.083011 0.42961 0.26665 0.53333 1.5078 0.81451 3.824 1.1423 6.1329 1.1333s4.6066-0.35609 6.0662-1.1333c0.11739-0.07353 0.14304-0.10869 0.13332-0.2333-0.04365-0.68908-0.08154-1.3669-0.13332-1.7666-0.01807-0.09908-0.06492-0.19275-0.13332-0.26666-0.46366-0.5537-1.1564-0.89218-1.9665-1.2333-0.7396-0.31144-1.6067-0.63486-2.4665-0.99999-0.048123-0.10721-0.095926-0.41912 0-0.89999 0.025759-0.12912 0.066096-0.26742 0.099994-0.4 0.0808-0.090507 0.14378-0.16447 0.23332-0.26666 0.19096-0.21796 0.39614-0.44661 0.56662-0.66666s0.30996-0.40882 0.39997-0.66666l0.03333-0.033333c0.34839-1.4062 0.34857-1.9929 0.36664-2.5v-0.033333c0-1.6339-1.4686-2.9-3.1998-2.9z"/> </svg> diff --git a/apps/user_ldap/js/wizard/configModel.js b/apps/user_ldap/js/wizard/configModel.js index c3f1e85b592..3732409c3e1 100644 --- a/apps/user_ldap/js/wizard/configModel.js +++ b/apps/user_ldap/js/wizard/configModel.js @@ -318,7 +318,7 @@ OCA = OCA || {}; */ requestConfigurationTest: function() { var url = OC.generateUrl('apps/user_ldap/ajax/testConfiguration.php'); - var params = OC.buildQueryString(this.configuration); + var params = OC.buildQueryString({ldap_serverconfig_chooser: this.configID}); var model = this; $.post(url, params, function(result) { model._processTestResult(model, result) }); //TODO: make sure only one test is running at a time diff --git a/apps/user_ldap/js/wizard/view.js b/apps/user_ldap/js/wizard/view.js index 9c7e2132dc6..1a89eba3515 100644 --- a/apps/user_ldap/js/wizard/view.js +++ b/apps/user_ldap/js/wizard/view.js @@ -271,7 +271,7 @@ OCA = OCA || {}; * requests a configuration test */ onTestButtonClick: function() { - this.configModel.requestWizard('ldap_action_test_connection', this.configModel.configuration); + this.configModel.requestWizard('ldap_action_test_connection', {ldap_serverconfig_chooser: this.configModel.configID}); }, /** diff --git a/apps/user_ldap/l10n/ast.js b/apps/user_ldap/l10n/ast.js index 029e3417674..26f04fa976e 100644 --- a/apps/user_ldap/l10n/ast.js +++ b/apps/user_ldap/l10n/ast.js @@ -52,10 +52,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Nun deteutamos el nome d'atributu na pantalla d'usuariu. Por favor especifícalu nos axustes avanzaos de ldap", "Could not find the desired feature" : "Nun pudo alcontrase la carauterística deseyada", "Invalid Host" : "Host inválidu", - "Server" : "Sirvidor", - "Users" : "Usuarios", - "Login Attributes" : "Los atributos d'aniciu de sesión", - "Groups" : "Grupos", "Test Configuration" : "Configuración de prueba", "Help" : "Ayuda", "Groups meeting these criteria are available in %s:" : "Los grupos que cumplen estos criterios tán disponibles en %s:", @@ -104,6 +100,10 @@ OC.L10N.register( "Back" : "Atrás", "Continue" : "Continuar", "LDAP" : "LDAP", + "Server" : "Sirvidor", + "Users" : "Usuarios", + "Login Attributes" : "Los atributos d'aniciu de sesión", + "Groups" : "Grupos", "Expert" : "Espertu", "Advanced" : "Avanzáu", "<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>Avisu:</b> Les apps user_ldap y user_webdavauth son incompatibles. Pues esperimentar un comportamientu inesperáu. Entruga al to alministrador de sistemes pa desactivar una d'elles.", diff --git a/apps/user_ldap/l10n/ast.json b/apps/user_ldap/l10n/ast.json index 9625518cff7..512a7ae9913 100644 --- a/apps/user_ldap/l10n/ast.json +++ b/apps/user_ldap/l10n/ast.json @@ -50,10 +50,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Nun deteutamos el nome d'atributu na pantalla d'usuariu. Por favor especifícalu nos axustes avanzaos de ldap", "Could not find the desired feature" : "Nun pudo alcontrase la carauterística deseyada", "Invalid Host" : "Host inválidu", - "Server" : "Sirvidor", - "Users" : "Usuarios", - "Login Attributes" : "Los atributos d'aniciu de sesión", - "Groups" : "Grupos", "Test Configuration" : "Configuración de prueba", "Help" : "Ayuda", "Groups meeting these criteria are available in %s:" : "Los grupos que cumplen estos criterios tán disponibles en %s:", @@ -102,6 +98,10 @@ "Back" : "Atrás", "Continue" : "Continuar", "LDAP" : "LDAP", + "Server" : "Sirvidor", + "Users" : "Usuarios", + "Login Attributes" : "Los atributos d'aniciu de sesión", + "Groups" : "Grupos", "Expert" : "Espertu", "Advanced" : "Avanzáu", "<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>Avisu:</b> Les apps user_ldap y user_webdavauth son incompatibles. Pues esperimentar un comportamientu inesperáu. Entruga al to alministrador de sistemes pa desactivar una d'elles.", diff --git a/apps/user_ldap/l10n/cs_CZ.js b/apps/user_ldap/l10n/cs_CZ.js index 8d20d122bf4..5c27108ebc7 100644 --- a/apps/user_ldap/l10n/cs_CZ.js +++ b/apps/user_ldap/l10n/cs_CZ.js @@ -52,10 +52,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Nelze detekovat atribut pro zobrazení jména uživatele. Upřesněte ho prosím sami v rozšířeném nastavení LDAP.", "Could not find the desired feature" : "Nelze nalézt požadovanou vlastnost", "Invalid Host" : "Neplatný hostitel", - "Server" : "Server", - "Users" : "Uživatelé", - "Login Attributes" : "Přihlašovací atributy", - "Groups" : "Skupiny", "Test Configuration" : "Vyzkoušet nastavení", "Help" : "Nápověda", "Groups meeting these criteria are available in %s:" : "Skupiny splňující tyto podmínky jsou k dispozici v %s:", @@ -104,6 +100,10 @@ OC.L10N.register( "Back" : "Zpět", "Continue" : "Pokračovat", "LDAP" : "LDAP", + "Server" : "Server", + "Users" : "Uživatelé", + "Login Attributes" : "Přihlašovací atributy", + "Groups" : "Skupiny", "Expert" : "Expertní", "Advanced" : "Pokročilé", "<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>Varování:</b> Aplikace user_ldap a user_webdavauth jsou vzájemně nekompatibilní. Můžete zaznamenat neočekávané chování. Požádejte prosím svého správce systému o zakázání jedné z nich.", @@ -158,6 +158,8 @@ OC.L10N.register( "Username-LDAP User Mapping" : "Mapování uživatelských jmen z LDAPu", "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Uživatelská jména jsou používána pro uchovávání a přiřazování (meta)dat. Pro správnou identifikaci a rozpoznání uživatelů bude mít každý LDAP uživatel interní uživatelské jméno. To vyžaduje mapování uživatelských jmen na uživatele LDAP. Vytvořené uživatelské jméno je mapováno na UUID uživatele v LDAP. DN informace je navíc udržována v paměti pro snížení interakce s LDAP, ale není používána pro identifikaci. Pokud se DN změní, bude to správně rozpoznáno. Interní uživatelské jméno se používá celé. Vyčištění mapování zanechá zbytky všude. Vyčištění navíc není specifické pro každou konfiguraci, bude mít vliv na všechny LDAP konfigurace! Nikdy nečistěte mapování v produkčním prostředí, ale pouze v testovací nebo experimentální fázi.", "Clear Username-LDAP User Mapping" : "Zrušit mapování uživatelských jmen LDAPu", - "Clear Groupname-LDAP Group Mapping" : "Zrušit mapování názvů skupin LDAPu" + "Clear Groupname-LDAP Group Mapping" : "Zrušit mapování názvů skupin LDAPu", + "Limit %s access to users meeting these criteria:" : "Přístup ke %s je omezen na uživatele odpovídající těmto kritériím:", + "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Ve výchozím nastavení bude interní uživatelské jméno vytvořeno z atributu UUID. To zajišťuje, že je uživatelské jméno unikátní a znaky nemusí být převáděny. Interní uživatelské jméno má omezení, podle kterého jsou povoleny jen následující znaky [ a-zA-Z0-9_.@- ]. Ostatní znaky jsou nahrazeny jejich protějšky z ASCII nebo prostě vynechány. Při konfliktech bude přidáno/zvýšeno číslo. Interní uživatelské jméno slouží pro interní identifikaci uživatele. Je také výchozím názvem domovského adresáře uživatele. Je také součástí URL, např. pro služby *DAV. Tímto nastavením může být výchozí chování změněno. Pro dosažení podobného chování jako před ownCloud 5, zadejte atribut uživatelského jména do následujícího pole. Ponechte jej prázdné, chcete-li zachovat výchozí nastavení. Změny se projeví pouze u nově namapovaných (přidaných) uživatelů LDAP." }, "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/apps/user_ldap/l10n/cs_CZ.json b/apps/user_ldap/l10n/cs_CZ.json index 3332adb58d9..42822f2590f 100644 --- a/apps/user_ldap/l10n/cs_CZ.json +++ b/apps/user_ldap/l10n/cs_CZ.json @@ -50,10 +50,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Nelze detekovat atribut pro zobrazení jména uživatele. Upřesněte ho prosím sami v rozšířeném nastavení LDAP.", "Could not find the desired feature" : "Nelze nalézt požadovanou vlastnost", "Invalid Host" : "Neplatný hostitel", - "Server" : "Server", - "Users" : "Uživatelé", - "Login Attributes" : "Přihlašovací atributy", - "Groups" : "Skupiny", "Test Configuration" : "Vyzkoušet nastavení", "Help" : "Nápověda", "Groups meeting these criteria are available in %s:" : "Skupiny splňující tyto podmínky jsou k dispozici v %s:", @@ -102,6 +98,10 @@ "Back" : "Zpět", "Continue" : "Pokračovat", "LDAP" : "LDAP", + "Server" : "Server", + "Users" : "Uživatelé", + "Login Attributes" : "Přihlašovací atributy", + "Groups" : "Skupiny", "Expert" : "Expertní", "Advanced" : "Pokročilé", "<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>Varování:</b> Aplikace user_ldap a user_webdavauth jsou vzájemně nekompatibilní. Můžete zaznamenat neočekávané chování. Požádejte prosím svého správce systému o zakázání jedné z nich.", @@ -156,6 +156,8 @@ "Username-LDAP User Mapping" : "Mapování uživatelských jmen z LDAPu", "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Uživatelská jména jsou používána pro uchovávání a přiřazování (meta)dat. Pro správnou identifikaci a rozpoznání uživatelů bude mít každý LDAP uživatel interní uživatelské jméno. To vyžaduje mapování uživatelských jmen na uživatele LDAP. Vytvořené uživatelské jméno je mapováno na UUID uživatele v LDAP. DN informace je navíc udržována v paměti pro snížení interakce s LDAP, ale není používána pro identifikaci. Pokud se DN změní, bude to správně rozpoznáno. Interní uživatelské jméno se používá celé. Vyčištění mapování zanechá zbytky všude. Vyčištění navíc není specifické pro každou konfiguraci, bude mít vliv na všechny LDAP konfigurace! Nikdy nečistěte mapování v produkčním prostředí, ale pouze v testovací nebo experimentální fázi.", "Clear Username-LDAP User Mapping" : "Zrušit mapování uživatelských jmen LDAPu", - "Clear Groupname-LDAP Group Mapping" : "Zrušit mapování názvů skupin LDAPu" + "Clear Groupname-LDAP Group Mapping" : "Zrušit mapování názvů skupin LDAPu", + "Limit %s access to users meeting these criteria:" : "Přístup ke %s je omezen na uživatele odpovídající těmto kritériím:", + "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Ve výchozím nastavení bude interní uživatelské jméno vytvořeno z atributu UUID. To zajišťuje, že je uživatelské jméno unikátní a znaky nemusí být převáděny. Interní uživatelské jméno má omezení, podle kterého jsou povoleny jen následující znaky [ a-zA-Z0-9_.@- ]. Ostatní znaky jsou nahrazeny jejich protějšky z ASCII nebo prostě vynechány. Při konfliktech bude přidáno/zvýšeno číslo. Interní uživatelské jméno slouží pro interní identifikaci uživatele. Je také výchozím názvem domovského adresáře uživatele. Je také součástí URL, např. pro služby *DAV. Tímto nastavením může být výchozí chování změněno. Pro dosažení podobného chování jako před ownCloud 5, zadejte atribut uživatelského jména do následujícího pole. Ponechte jej prázdné, chcete-li zachovat výchozí nastavení. Změny se projeví pouze u nově namapovaných (přidaných) uživatelů LDAP." },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/da.js b/apps/user_ldap/l10n/da.js index 74963b5f769..9faadadb45b 100644 --- a/apps/user_ldap/l10n/da.js +++ b/apps/user_ldap/l10n/da.js @@ -51,10 +51,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kunne ikke registrere navneattributten for visning af bruger. Angiv den venligst selv i de avancerede ldap-indstillinger.", "Could not find the desired feature" : "Fandt ikke den ønskede funktion", "Invalid Host" : "Ugyldig vært", - "Server" : "Server", - "Users" : "Brugere", - "Login Attributes" : "Login-attributter", - "Groups" : "Grupper", "Test Configuration" : "Test konfigurationen", "Help" : "Hjælp", "Groups meeting these criteria are available in %s:" : "Grupper som opfylder disse kriterier er tilgængelige i %s:", @@ -102,6 +98,10 @@ OC.L10N.register( "Back" : "Tilbage", "Continue" : "Videre", "LDAP" : "LDAP", + "Server" : "Server", + "Users" : "Brugere", + "Login Attributes" : "Login-attributter", + "Groups" : "Grupper", "Expert" : "Ekspert", "Advanced" : "Avanceret", "<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> Apps'ene user_ldap og user_webdavauth er ikke kompatible. Du kan opleve uventet adfærd. Spørg venligst din systemadministrator om at slå én af dem fra.", diff --git a/apps/user_ldap/l10n/da.json b/apps/user_ldap/l10n/da.json index bc798f96acc..68c31f42be7 100644 --- a/apps/user_ldap/l10n/da.json +++ b/apps/user_ldap/l10n/da.json @@ -49,10 +49,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kunne ikke registrere navneattributten for visning af bruger. Angiv den venligst selv i de avancerede ldap-indstillinger.", "Could not find the desired feature" : "Fandt ikke den ønskede funktion", "Invalid Host" : "Ugyldig vært", - "Server" : "Server", - "Users" : "Brugere", - "Login Attributes" : "Login-attributter", - "Groups" : "Grupper", "Test Configuration" : "Test konfigurationen", "Help" : "Hjælp", "Groups meeting these criteria are available in %s:" : "Grupper som opfylder disse kriterier er tilgængelige i %s:", @@ -100,6 +96,10 @@ "Back" : "Tilbage", "Continue" : "Videre", "LDAP" : "LDAP", + "Server" : "Server", + "Users" : "Brugere", + "Login Attributes" : "Login-attributter", + "Groups" : "Grupper", "Expert" : "Ekspert", "Advanced" : "Avanceret", "<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> Apps'ene user_ldap og user_webdavauth er ikke kompatible. Du kan opleve uventet adfærd. Spørg venligst din systemadministrator om at slå én af dem fra.", diff --git a/apps/user_ldap/l10n/de.js b/apps/user_ldap/l10n/de.js index acc42088c7a..f825abd2cd1 100644 --- a/apps/user_ldap/l10n/de.js +++ b/apps/user_ldap/l10n/de.js @@ -3,7 +3,7 @@ OC.L10N.register( { "Failed to clear the mappings." : "Löschen der Zuordnungen fehlgeschlagen.", "Failed to delete the server configuration" : "Löschen der Serverkonfiguration fehlgeschlagen", - "The configuration is invalid: anonymous bind is not allowed." : "Die Konfiguration ist ungültig: anonymes binden ist nicht erlaubt.", + "The configuration is invalid: anonymous bind is not allowed." : "Die Konfiguration ist ungültig: anonymes Binden ist nicht erlaubt.", "The configuration is valid and the connection could be established!" : "Die Konfiguration ist gültig und die Verbindung konnte hergestellt werden!", "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Die Konfiguration ist gültig, aber der LDAP-Bind ist fehlgeschlagen. Bitte überprüfe die Servereinstellungen und Anmeldeinformationen.", "The configuration is invalid. Please have a look at the logs for further details." : "Die Konfiguration ist ungültig. Weitere Details können in den Logdateien nachgelesen werden.", @@ -14,8 +14,8 @@ OC.L10N.register( "Action does not exist" : "Aktion existiert nicht", "The Base DN appears to be wrong" : "Die Base-DN scheint falsch zu sein", "Testing configuration…" : "Teste Konfiguration…", - "Configuration incorrect" : "Konfiguration nicht korrekt", - "Configuration incomplete" : "Konfiguration nicht vollständig", + "Configuration incorrect" : "Konfiguration falsch", + "Configuration incomplete" : "Konfiguration unvollständig", "Configuration OK" : "Konfiguration OK", "Select groups" : "Gruppen auswählen", "Select object classes" : "Objektklassen auswählen", @@ -36,7 +36,7 @@ OC.L10N.register( "LDAP Operations error. Anonymous bind might not be allowed." : "Fehler in den LDAP-Operationen. Anonymes binden ist scheinbar nicht erlaubt.", "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Speichern fehlgeschlagen. Bitte stelle sicher, dass die Datenbank in Betrieb ist. Bitte lade vor dem Fortfahren neu.", "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Das Umschalten des Modus ermöglicht automatische LDAP-Abfragen. Abhängig von Ihrer LDAP-Größe können diese einige Zeit in Anspruch nehmen. Soll immer noch in den Modus gewechselt werden?", - "Mode switch" : "Modus umschalten", + "Mode switch" : "Modus wechseln", "Select attributes" : "Attribute auswählen", "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Benutzer nicht gefunden. Bitte überprüfe Deine Loginattribute und Deinen Benutzernamen. Gültige Filter (zum Kopieren und Einfügen bei der Überprüfung auf der Kommandozeile): <br/>", "User found and settings verified." : "Benutzer gefunden und Einstellungen überprüft.", @@ -47,15 +47,12 @@ OC.L10N.register( "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Der %uid - Platzhalter fehlt. Dieser wird mit dem Anmeldenamen beim Abfragen von LDAP / AD ersetzt.", "Please provide a login name to test against" : "Bitte gib einen Benutzernamen an, um gegen diesen zu testen", "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.", + "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"], "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Das Anzeigename-Attribut des Benutzers konnte nicht gefunden werden. Bitte gib es in den erweiterten LDAP-Einstellungen selber an.", "Could not find the desired feature" : "Die gewünschte Funktion konnte nicht gefunden werden", "Invalid Host" : "Ungültiger Host", - "Server" : "Server", - "Users" : "Benutzer", - "Login Attributes" : "Loginattribute", - "Groups" : "Gruppen", "Test Configuration" : "Testkonfiguration", "Help" : "Hilfe", "Groups meeting these criteria are available in %s:" : "Gruppen, auf die diese Kriterien zutreffen, sind verfügbar in %s:", @@ -104,6 +101,10 @@ OC.L10N.register( "Back" : "Zurück", "Continue" : "Fortsetzen", "LDAP" : "LDAP", + "Server" : "Server", + "Users" : "Benutzer", + "Login Attributes" : "Loginattribute", + "Groups" : "Gruppen", "Expert" : "Experte", "Advanced" : "Fortgeschritten", "<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>Warnung:</b> Die Anwendungen user_ldap und user_webdavauth sind inkompatibel. Es kann deshalb zu unerwartetem Systemverhalten kommen. Bitte kontaktiere deinen Systemadministator und bitte ihn um die Deaktivierung einer der beiden Anwendungen.", @@ -158,6 +159,8 @@ OC.L10N.register( "Username-LDAP User Mapping" : "LDAP-Benutzernamenzuordnung", "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Die Benutzernamen werden genutzt, um (Meta-)Daten zuzuordnen und zu speichern. Um Benutzer eindeutig und präzise zu identifizieren, hat jeder LDAP-Benutzer einen internen Benutzernamen. Dies erfordert eine Zuordnung (mappen) von Benutzernamen zum LDAP-Benutzer. Der erstellte Benutzername wird der UUID des LDAP-Benutzernamens zugeordnet. Zusätzlich wird der DN zwischengespeichert, um die Interaktion mit dem LDAP zu minimieren, was aber nicht der Identifikation dient. Ändert sich der DN, werden die Änderungen durch gefunden. Der interne Benutzername, wird in überall verwendet. Werden die Zuordnungen gelöscht, bleiben überall Reste zurück. Die Löschung der Zuordnungen kann nicht in der Konfiguration vorgenommen werden, beeinflusst aber die LDAP-Konfiguration! Löschen Sie niemals die Zuordnungen in einer produktiven Umgebung. Lösche die Zuordnungen nur in einer Test- oder Experimentierumgebung.", "Clear Username-LDAP User Mapping" : "LDAP-Benutzernamenzuordnung löschen", - "Clear Groupname-LDAP Group Mapping" : "LDAP-Gruppennamenzuordnung löschen" + "Clear Groupname-LDAP Group Mapping" : "LDAP-Gruppennamenzuordnung löschen", + "Limit %s access to users meeting these criteria:" : "Zugriff auf %s auf Benutzer beschränken die folgende Kriterien erfüllen:", + "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Standardmäßig wird der interne Benutzername aus dem UUID-Atribut erstellt. So wird sichergestellt, dass der Benutzername einmalig ist und Zeichen nicht konvertiert werden müssen. Für den internen Benutzernamen sind nur folgende Zeichen zulässig: [ a-zA-Z0-9_.@- ]. Andere Zeichen werden mit ihrer ASCII-Entsprechung ersetzt oder einfach weggelassen. Bei Kollisionen wird eine Nummer hinzugefügt/erhöht. Der interne Benutzername wird verwandt, um den Benutzer intern zu identifizieren. Er ist ausserdem der Standardname für den Stamm-Ordner des Benutzers. Darüber hinaus ist er Teil der URLs für den Zugriff, zum Bespiel für alle *DAV-Dienste. Mit dieser Einstellung, kann das Standardverhalten geändert werden. Für die Standardeinstellung, lasse das Eingabefeld leer. Änderungen wirken sich nur auf neu eingetragene (hinzugefügte) LDAP-Benutzer aus. " }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/de.json b/apps/user_ldap/l10n/de.json index 2b1dadc107d..618d4b81876 100644 --- a/apps/user_ldap/l10n/de.json +++ b/apps/user_ldap/l10n/de.json @@ -1,7 +1,7 @@ { "translations": { "Failed to clear the mappings." : "Löschen der Zuordnungen fehlgeschlagen.", "Failed to delete the server configuration" : "Löschen der Serverkonfiguration fehlgeschlagen", - "The configuration is invalid: anonymous bind is not allowed." : "Die Konfiguration ist ungültig: anonymes binden ist nicht erlaubt.", + "The configuration is invalid: anonymous bind is not allowed." : "Die Konfiguration ist ungültig: anonymes Binden ist nicht erlaubt.", "The configuration is valid and the connection could be established!" : "Die Konfiguration ist gültig und die Verbindung konnte hergestellt werden!", "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "Die Konfiguration ist gültig, aber der LDAP-Bind ist fehlgeschlagen. Bitte überprüfe die Servereinstellungen und Anmeldeinformationen.", "The configuration is invalid. Please have a look at the logs for further details." : "Die Konfiguration ist ungültig. Weitere Details können in den Logdateien nachgelesen werden.", @@ -12,8 +12,8 @@ "Action does not exist" : "Aktion existiert nicht", "The Base DN appears to be wrong" : "Die Base-DN scheint falsch zu sein", "Testing configuration…" : "Teste Konfiguration…", - "Configuration incorrect" : "Konfiguration nicht korrekt", - "Configuration incomplete" : "Konfiguration nicht vollständig", + "Configuration incorrect" : "Konfiguration falsch", + "Configuration incomplete" : "Konfiguration unvollständig", "Configuration OK" : "Konfiguration OK", "Select groups" : "Gruppen auswählen", "Select object classes" : "Objektklassen auswählen", @@ -34,7 +34,7 @@ "LDAP Operations error. Anonymous bind might not be allowed." : "Fehler in den LDAP-Operationen. Anonymes binden ist scheinbar nicht erlaubt.", "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Speichern fehlgeschlagen. Bitte stelle sicher, dass die Datenbank in Betrieb ist. Bitte lade vor dem Fortfahren neu.", "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Das Umschalten des Modus ermöglicht automatische LDAP-Abfragen. Abhängig von Ihrer LDAP-Größe können diese einige Zeit in Anspruch nehmen. Soll immer noch in den Modus gewechselt werden?", - "Mode switch" : "Modus umschalten", + "Mode switch" : "Modus wechseln", "Select attributes" : "Attribute auswählen", "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Benutzer nicht gefunden. Bitte überprüfe Deine Loginattribute und Deinen Benutzernamen. Gültige Filter (zum Kopieren und Einfügen bei der Überprüfung auf der Kommandozeile): <br/>", "User found and settings verified." : "Benutzer gefunden und Einstellungen überprüft.", @@ -45,15 +45,12 @@ "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Der %uid - Platzhalter fehlt. Dieser wird mit dem Anmeldenamen beim Abfragen von LDAP / AD ersetzt.", "Please provide a login name to test against" : "Bitte gib einen Benutzernamen an, um gegen diesen zu testen", "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.", + "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"], "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Das Anzeigename-Attribut des Benutzers konnte nicht gefunden werden. Bitte gib es in den erweiterten LDAP-Einstellungen selber an.", "Could not find the desired feature" : "Die gewünschte Funktion konnte nicht gefunden werden", "Invalid Host" : "Ungültiger Host", - "Server" : "Server", - "Users" : "Benutzer", - "Login Attributes" : "Loginattribute", - "Groups" : "Gruppen", "Test Configuration" : "Testkonfiguration", "Help" : "Hilfe", "Groups meeting these criteria are available in %s:" : "Gruppen, auf die diese Kriterien zutreffen, sind verfügbar in %s:", @@ -102,6 +99,10 @@ "Back" : "Zurück", "Continue" : "Fortsetzen", "LDAP" : "LDAP", + "Server" : "Server", + "Users" : "Benutzer", + "Login Attributes" : "Loginattribute", + "Groups" : "Gruppen", "Expert" : "Experte", "Advanced" : "Fortgeschritten", "<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>Warnung:</b> Die Anwendungen user_ldap und user_webdavauth sind inkompatibel. Es kann deshalb zu unerwartetem Systemverhalten kommen. Bitte kontaktiere deinen Systemadministator und bitte ihn um die Deaktivierung einer der beiden Anwendungen.", @@ -156,6 +157,8 @@ "Username-LDAP User Mapping" : "LDAP-Benutzernamenzuordnung", "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Die Benutzernamen werden genutzt, um (Meta-)Daten zuzuordnen und zu speichern. Um Benutzer eindeutig und präzise zu identifizieren, hat jeder LDAP-Benutzer einen internen Benutzernamen. Dies erfordert eine Zuordnung (mappen) von Benutzernamen zum LDAP-Benutzer. Der erstellte Benutzername wird der UUID des LDAP-Benutzernamens zugeordnet. Zusätzlich wird der DN zwischengespeichert, um die Interaktion mit dem LDAP zu minimieren, was aber nicht der Identifikation dient. Ändert sich der DN, werden die Änderungen durch gefunden. Der interne Benutzername, wird in überall verwendet. Werden die Zuordnungen gelöscht, bleiben überall Reste zurück. Die Löschung der Zuordnungen kann nicht in der Konfiguration vorgenommen werden, beeinflusst aber die LDAP-Konfiguration! Löschen Sie niemals die Zuordnungen in einer produktiven Umgebung. Lösche die Zuordnungen nur in einer Test- oder Experimentierumgebung.", "Clear Username-LDAP User Mapping" : "LDAP-Benutzernamenzuordnung löschen", - "Clear Groupname-LDAP Group Mapping" : "LDAP-Gruppennamenzuordnung löschen" + "Clear Groupname-LDAP Group Mapping" : "LDAP-Gruppennamenzuordnung löschen", + "Limit %s access to users meeting these criteria:" : "Zugriff auf %s auf Benutzer beschränken die folgende Kriterien erfüllen:", + "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Standardmäßig wird der interne Benutzername aus dem UUID-Atribut erstellt. So wird sichergestellt, dass der Benutzername einmalig ist und Zeichen nicht konvertiert werden müssen. Für den internen Benutzernamen sind nur folgende Zeichen zulässig: [ a-zA-Z0-9_.@- ]. Andere Zeichen werden mit ihrer ASCII-Entsprechung ersetzt oder einfach weggelassen. Bei Kollisionen wird eine Nummer hinzugefügt/erhöht. Der interne Benutzername wird verwandt, um den Benutzer intern zu identifizieren. Er ist ausserdem der Standardname für den Stamm-Ordner des Benutzers. Darüber hinaus ist er Teil der URLs für den Zugriff, zum Bespiel für alle *DAV-Dienste. Mit dieser Einstellung, kann das Standardverhalten geändert werden. Für die Standardeinstellung, lasse das Eingabefeld leer. Änderungen wirken sich nur auf neu eingetragene (hinzugefügte) LDAP-Benutzer aus. " },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/de_DE.js b/apps/user_ldap/l10n/de_DE.js index 51092dd4849..0d7b91b52fe 100644 --- a/apps/user_ldap/l10n/de_DE.js +++ b/apps/user_ldap/l10n/de_DE.js @@ -47,15 +47,12 @@ OC.L10N.register( "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Der %uid - Platzhalter fehlt. Dieser wird mit dem Anmeldenamen beim Abfragen von LDAP / AD ersetzt.", "Please provide a login name to test against" : "Bitte geben Sie einen Benutzernamen an, um gegen diesen zu testen", "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.", + "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"], "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Das Anzeigename-Attribut des Benutzers konnte nicht gefunden werden. Bitte geben Sie es in den erweiterten LDAP-Einstellungen selber an.", "Could not find the desired feature" : "Die gewünschte Funktion konnte nicht gefunden werden", "Invalid Host" : "Ungültiger Host", - "Server" : "Server", - "Users" : "Benutzer", - "Login Attributes" : "Anmeldeattribute", - "Groups" : "Gruppen", "Test Configuration" : "Testkonfiguration", "Help" : "Hilfe", "Groups meeting these criteria are available in %s:" : "Gruppen, auf die diese Kriterien zutreffen, sind verfügbar in %s:", @@ -104,6 +101,10 @@ OC.L10N.register( "Back" : "Zurück", "Continue" : "Fortsetzen", "LDAP" : "LDAP", + "Server" : "Server", + "Users" : "Benutzer", + "Login Attributes" : "Anmeldeattribute", + "Groups" : "Gruppen", "Expert" : "Experte", "Advanced" : "Fortgeschritten", "<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>Warnung:</b> Die Anwendungen user_ldap und user_webdavauth sind inkompatibel. Es kann deshalb zu unerwartetem Systemverhalten kommen. Bitte kontaktieren Sie Ihren Systemadministator und bitten Sie um die Deaktivierung einer der beiden Anwendungen.", @@ -158,6 +159,8 @@ OC.L10N.register( "Username-LDAP User Mapping" : "LDAP-Benutzernamenzuordnung", "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Benutzernamen dienen zum Speichern und Zuweisen von (Meta-)Daten. Um Benutzer eindeutig zu identifizieren und zu erkennen, besitzt jeder LDAP-Benutzer einen internen Benutzernamen. Dies erfordert eine Zuordnung des jeweiligen Benutzernamens zum LDAP-Benutzer. Der erstellte Benutzername wird der UUID des LDAP-Benutzers zugeordnet. Darüber hinaus wird der DN auch zwischengespeichert, um die Interaktion über LDAP zu reduzieren, was aber nicht zur Identifikation dient. Ändert sich der DN, werden die Änderungen gefunden. Der interne Benutzername wird durchgängig verwendet. Ein Löschen der Zuordnungen führt zum systemweiten Verbleib von Restdaten. Es bleibt nicht auf eine einzelne Konfiguration beschränkt, sondern wirkt sich auf alle LDAP-Konfigurationen aus! Löschen Sie die Zuordnungen nie innerhalb einer Produktivumgebung, sondern nur in einer Test- oder Experimentierumgebung.", "Clear Username-LDAP User Mapping" : "Lösche LDAP-Benutzernamenzuordnung", - "Clear Groupname-LDAP Group Mapping" : "Lösche LDAP-Gruppennamenzuordnung" + "Clear Groupname-LDAP Group Mapping" : "Lösche LDAP-Gruppennamenzuordnung", + "Limit %s access to users meeting these criteria:" : "Zugriff auf %s auf Benutzer beschränken die folgende Kriterien erfüllen:", + "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Standardmäßig wird der interne Benutzername aus dem UUID-Atribut erstellt. So wird sichergestellt, dass der Benutzername einmalig ist und Zeichen nicht konvertiert werden müssen. Für den internen Benutzernamen sind nur folgende Zeichen zulässig: [ a-zA-Z0-9_.@- ]. Andere Zeichen werden mit ihrer ASCII-Entsprechung ersetzt oder einfach weggelassen. Bei Kollisionen wird eine Nummer hinzugefügt/erhöht. Der interne Benutzername wird verwandt, um den Benutzer intern zu identifizieren. Er ist ausserdem der Standardname für den Stamm-Ordner des Benutzers. Darüber hinaus ist er Teil der URLs für den Zugriff, zum Bespiel für alle *DAV-Dienste. Mit dieser Einstellung, kann das Standardverhalten geändert werden. Für die Standardeinstellung, lassen Sie das Eingabefeld leer. \nUm ein ähnliches Verhalten wie vor Owncloud 5 zu erreichen, geben Sie das Benutzer-Anzeige-Attribut in das folgende Feld ein. Änderungen wirken sich nur auf neu eingetragene (hinzugefügte) LDAP-Benutzer aus." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/user_ldap/l10n/de_DE.json b/apps/user_ldap/l10n/de_DE.json index 2c540b2060f..8536bab02d2 100644 --- a/apps/user_ldap/l10n/de_DE.json +++ b/apps/user_ldap/l10n/de_DE.json @@ -45,15 +45,12 @@ "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Der %uid - Platzhalter fehlt. Dieser wird mit dem Anmeldenamen beim Abfragen von LDAP / AD ersetzt.", "Please provide a login name to test against" : "Bitte geben Sie einen Benutzernamen an, um gegen diesen zu testen", "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.", + "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"], "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Das Anzeigename-Attribut des Benutzers konnte nicht gefunden werden. Bitte geben Sie es in den erweiterten LDAP-Einstellungen selber an.", "Could not find the desired feature" : "Die gewünschte Funktion konnte nicht gefunden werden", "Invalid Host" : "Ungültiger Host", - "Server" : "Server", - "Users" : "Benutzer", - "Login Attributes" : "Anmeldeattribute", - "Groups" : "Gruppen", "Test Configuration" : "Testkonfiguration", "Help" : "Hilfe", "Groups meeting these criteria are available in %s:" : "Gruppen, auf die diese Kriterien zutreffen, sind verfügbar in %s:", @@ -102,6 +99,10 @@ "Back" : "Zurück", "Continue" : "Fortsetzen", "LDAP" : "LDAP", + "Server" : "Server", + "Users" : "Benutzer", + "Login Attributes" : "Anmeldeattribute", + "Groups" : "Gruppen", "Expert" : "Experte", "Advanced" : "Fortgeschritten", "<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>Warnung:</b> Die Anwendungen user_ldap und user_webdavauth sind inkompatibel. Es kann deshalb zu unerwartetem Systemverhalten kommen. Bitte kontaktieren Sie Ihren Systemadministator und bitten Sie um die Deaktivierung einer der beiden Anwendungen.", @@ -156,6 +157,8 @@ "Username-LDAP User Mapping" : "LDAP-Benutzernamenzuordnung", "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Benutzernamen dienen zum Speichern und Zuweisen von (Meta-)Daten. Um Benutzer eindeutig zu identifizieren und zu erkennen, besitzt jeder LDAP-Benutzer einen internen Benutzernamen. Dies erfordert eine Zuordnung des jeweiligen Benutzernamens zum LDAP-Benutzer. Der erstellte Benutzername wird der UUID des LDAP-Benutzers zugeordnet. Darüber hinaus wird der DN auch zwischengespeichert, um die Interaktion über LDAP zu reduzieren, was aber nicht zur Identifikation dient. Ändert sich der DN, werden die Änderungen gefunden. Der interne Benutzername wird durchgängig verwendet. Ein Löschen der Zuordnungen führt zum systemweiten Verbleib von Restdaten. Es bleibt nicht auf eine einzelne Konfiguration beschränkt, sondern wirkt sich auf alle LDAP-Konfigurationen aus! Löschen Sie die Zuordnungen nie innerhalb einer Produktivumgebung, sondern nur in einer Test- oder Experimentierumgebung.", "Clear Username-LDAP User Mapping" : "Lösche LDAP-Benutzernamenzuordnung", - "Clear Groupname-LDAP Group Mapping" : "Lösche LDAP-Gruppennamenzuordnung" + "Clear Groupname-LDAP Group Mapping" : "Lösche LDAP-Gruppennamenzuordnung", + "Limit %s access to users meeting these criteria:" : "Zugriff auf %s auf Benutzer beschränken die folgende Kriterien erfüllen:", + "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Standardmäßig wird der interne Benutzername aus dem UUID-Atribut erstellt. So wird sichergestellt, dass der Benutzername einmalig ist und Zeichen nicht konvertiert werden müssen. Für den internen Benutzernamen sind nur folgende Zeichen zulässig: [ a-zA-Z0-9_.@- ]. Andere Zeichen werden mit ihrer ASCII-Entsprechung ersetzt oder einfach weggelassen. Bei Kollisionen wird eine Nummer hinzugefügt/erhöht. Der interne Benutzername wird verwandt, um den Benutzer intern zu identifizieren. Er ist ausserdem der Standardname für den Stamm-Ordner des Benutzers. Darüber hinaus ist er Teil der URLs für den Zugriff, zum Bespiel für alle *DAV-Dienste. Mit dieser Einstellung, kann das Standardverhalten geändert werden. Für die Standardeinstellung, lassen Sie das Eingabefeld leer. \nUm ein ähnliches Verhalten wie vor Owncloud 5 zu erreichen, geben Sie das Benutzer-Anzeige-Attribut in das folgende Feld ein. Änderungen wirken sich nur auf neu eingetragene (hinzugefügte) LDAP-Benutzer aus." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/el.js b/apps/user_ldap/l10n/el.js index 3157958092e..1ffe7b2ca8e 100644 --- a/apps/user_ldap/l10n/el.js +++ b/apps/user_ldap/l10n/el.js @@ -52,10 +52,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Δεν ήταν δυνατή η ανίχνευση της ιδιότητας του εμφανιζόμενου ονόματος χρήστη . Παρακαλείστε να το προσδιορίσετε στις προηγμένες ρυθμίσεις LDAP", "Could not find the desired feature" : "Αδυναμία εύρεσης επιθυμητου χαρακτηριστικού", "Invalid Host" : "Άκυρος εξυπηρετητής", - "Server" : "Διακομιστής", - "Users" : "Χρήστες", - "Login Attributes" : "Ιδιότητες Σύνδεσης", - "Groups" : "Ομάδες", "Test Configuration" : "Δοκιμαστικες ρυθμισεις", "Help" : "Βοήθεια", "Groups meeting these criteria are available in %s:" : "Οι ομάδες που πληρούν τα κριτήρια είναι διαθέσιμες σε %s:", @@ -103,6 +99,10 @@ OC.L10N.register( "Back" : "Επιστροφή", "Continue" : "Συνέχεια", "LDAP" : "LDAP", + "Server" : "Διακομιστής", + "Users" : "Χρήστες", + "Login Attributes" : "Ιδιότητες Σύνδεσης", + "Groups" : "Ομάδες", "Expert" : "Ειδικός", "Advanced" : "Για προχωρημένους", "<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>Προσοχή:</b> Οι εφαρμογές user_ldap και user_webdavauth είναι ασύμβατες. Μπορεί να αντιμετωπίσετε απρόβλεπτη συμπεριφορά. Παρακαλώ ζητήστε από τον διαχειριστή συστήματος να απενεργοποιήσει μία από αυτές.", diff --git a/apps/user_ldap/l10n/el.json b/apps/user_ldap/l10n/el.json index 81f8cb094b5..0751237abbc 100644 --- a/apps/user_ldap/l10n/el.json +++ b/apps/user_ldap/l10n/el.json @@ -50,10 +50,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Δεν ήταν δυνατή η ανίχνευση της ιδιότητας του εμφανιζόμενου ονόματος χρήστη . Παρακαλείστε να το προσδιορίσετε στις προηγμένες ρυθμίσεις LDAP", "Could not find the desired feature" : "Αδυναμία εύρεσης επιθυμητου χαρακτηριστικού", "Invalid Host" : "Άκυρος εξυπηρετητής", - "Server" : "Διακομιστής", - "Users" : "Χρήστες", - "Login Attributes" : "Ιδιότητες Σύνδεσης", - "Groups" : "Ομάδες", "Test Configuration" : "Δοκιμαστικες ρυθμισεις", "Help" : "Βοήθεια", "Groups meeting these criteria are available in %s:" : "Οι ομάδες που πληρούν τα κριτήρια είναι διαθέσιμες σε %s:", @@ -101,6 +97,10 @@ "Back" : "Επιστροφή", "Continue" : "Συνέχεια", "LDAP" : "LDAP", + "Server" : "Διακομιστής", + "Users" : "Χρήστες", + "Login Attributes" : "Ιδιότητες Σύνδεσης", + "Groups" : "Ομάδες", "Expert" : "Ειδικός", "Advanced" : "Για προχωρημένους", "<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>Προσοχή:</b> Οι εφαρμογές user_ldap και user_webdavauth είναι ασύμβατες. Μπορεί να αντιμετωπίσετε απρόβλεπτη συμπεριφορά. Παρακαλώ ζητήστε από τον διαχειριστή συστήματος να απενεργοποιήσει μία από αυτές.", diff --git a/apps/user_ldap/l10n/en_GB.js b/apps/user_ldap/l10n/en_GB.js index 3edebcab0b5..581b29c090e 100644 --- a/apps/user_ldap/l10n/en_GB.js +++ b/apps/user_ldap/l10n/en_GB.js @@ -52,10 +52,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings.", "Could not find the desired feature" : "Could not find the desired feature", "Invalid Host" : "Invalid Host", - "Server" : "Server", - "Users" : "Users", - "Login Attributes" : "Login Attributes", - "Groups" : "Groups", "Test Configuration" : "Test Configuration", "Help" : "Help", "Groups meeting these criteria are available in %s:" : "Groups meeting these criteria are available in %s:", @@ -104,6 +100,10 @@ OC.L10N.register( "Back" : "Back", "Continue" : "Continue", "LDAP" : "LDAP", + "Server" : "Server", + "Users" : "Users", + "Login Attributes" : "Login Attributes", + "Groups" : "Groups", "Expert" : "Expert", "Advanced" : "Advanced", "<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>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.", diff --git a/apps/user_ldap/l10n/en_GB.json b/apps/user_ldap/l10n/en_GB.json index 76efcf2670c..603567e9dd2 100644 --- a/apps/user_ldap/l10n/en_GB.json +++ b/apps/user_ldap/l10n/en_GB.json @@ -50,10 +50,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings.", "Could not find the desired feature" : "Could not find the desired feature", "Invalid Host" : "Invalid Host", - "Server" : "Server", - "Users" : "Users", - "Login Attributes" : "Login Attributes", - "Groups" : "Groups", "Test Configuration" : "Test Configuration", "Help" : "Help", "Groups meeting these criteria are available in %s:" : "Groups meeting these criteria are available in %s:", @@ -102,6 +98,10 @@ "Back" : "Back", "Continue" : "Continue", "LDAP" : "LDAP", + "Server" : "Server", + "Users" : "Users", + "Login Attributes" : "Login Attributes", + "Groups" : "Groups", "Expert" : "Expert", "Advanced" : "Advanced", "<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>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.", diff --git a/apps/user_ldap/l10n/es.js b/apps/user_ldap/l10n/es.js index 8b3d460570e..1f78ca09e3c 100644 --- a/apps/user_ldap/l10n/es.js +++ b/apps/user_ldap/l10n/es.js @@ -52,10 +52,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "No se pudo detectar el atributo de nombre de usuario pantalla. Por favor especifique lo mismo en ajustes avanzados ldap.", "Could not find the desired feature" : "No se puede encontrar la función deseada.", "Invalid Host" : "Host inválido", - "Server" : "Servidor", - "Users" : "Usuarios", - "Login Attributes" : "Atributos de inicio de sesión", - "Groups" : "Grupos", "Test Configuration" : "Configuración de prueba", "Help" : "Ayuda", "Groups meeting these criteria are available in %s:" : "Los grupos que cumplen estos criterios están disponibles en %s:", @@ -104,6 +100,10 @@ OC.L10N.register( "Back" : "Atrás", "Continue" : "Continuar", "LDAP" : "LDAP", + "Server" : "Servidor", + "Users" : "Usuarios", + "Login Attributes" : "Atributos de inicio de sesión", + "Groups" : "Grupos", "Expert" : "Experto", "Advanced" : "Avanzado", "<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>Advertencia:</b> Las apps user_ldap y user_webdavauth son incompatibles. Puede que experimente un comportamiento inesperado. Pídale a su administrador del sistema que desactive uno de ellos.", diff --git a/apps/user_ldap/l10n/es.json b/apps/user_ldap/l10n/es.json index a31c83a18c9..e5582349705 100644 --- a/apps/user_ldap/l10n/es.json +++ b/apps/user_ldap/l10n/es.json @@ -50,10 +50,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "No se pudo detectar el atributo de nombre de usuario pantalla. Por favor especifique lo mismo en ajustes avanzados ldap.", "Could not find the desired feature" : "No se puede encontrar la función deseada.", "Invalid Host" : "Host inválido", - "Server" : "Servidor", - "Users" : "Usuarios", - "Login Attributes" : "Atributos de inicio de sesión", - "Groups" : "Grupos", "Test Configuration" : "Configuración de prueba", "Help" : "Ayuda", "Groups meeting these criteria are available in %s:" : "Los grupos que cumplen estos criterios están disponibles en %s:", @@ -102,6 +98,10 @@ "Back" : "Atrás", "Continue" : "Continuar", "LDAP" : "LDAP", + "Server" : "Servidor", + "Users" : "Usuarios", + "Login Attributes" : "Atributos de inicio de sesión", + "Groups" : "Grupos", "Expert" : "Experto", "Advanced" : "Avanzado", "<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>Advertencia:</b> Las apps user_ldap y user_webdavauth son incompatibles. Puede que experimente un comportamiento inesperado. Pídale a su administrador del sistema que desactive uno de ellos.", diff --git a/apps/user_ldap/l10n/et_EE.js b/apps/user_ldap/l10n/et_EE.js index be6f3a129c6..ea05eb12ca9 100644 --- a/apps/user_ldap/l10n/et_EE.js +++ b/apps/user_ldap/l10n/et_EE.js @@ -32,10 +32,6 @@ OC.L10N.register( "_%s user found_::_%s users found_" : ["%s kasutaja leitud","%s kasutajat leitud"], "Could not find the desired feature" : "Ei suuda leida soovitud funktsioonaalsust", "Invalid Host" : "Vigane server", - "Server" : "Server", - "Users" : "Kasutajad", - "Login Attributes" : "Sisselogimise andmed", - "Groups" : "Grupid", "Test Configuration" : "Testi seadistust", "Help" : "Abiinfo", "Groups meeting these criteria are available in %s:" : "Kriteeriumiga sobivad grupid on saadaval %s:", @@ -77,6 +73,10 @@ OC.L10N.register( "Back" : "Tagasi", "Continue" : "Jätka", "LDAP" : "LDAP", + "Server" : "Server", + "Users" : "Kasutajad", + "Login Attributes" : "Sisselogimise andmed", + "Groups" : "Grupid", "Expert" : "Ekspert", "Advanced" : "Täpsem", "<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>Hoiatus:</b> rakendused user_ldap ja user_webdavauht ei ole ühilduvad. Töös võib esineda ootamatuid tõrkeid.\nPalu oma süsteemihalduril üks neist rakendustest kasutusest eemaldada.", diff --git a/apps/user_ldap/l10n/et_EE.json b/apps/user_ldap/l10n/et_EE.json index f688f72eb5f..1f6a8d35753 100644 --- a/apps/user_ldap/l10n/et_EE.json +++ b/apps/user_ldap/l10n/et_EE.json @@ -30,10 +30,6 @@ "_%s user found_::_%s users found_" : ["%s kasutaja leitud","%s kasutajat leitud"], "Could not find the desired feature" : "Ei suuda leida soovitud funktsioonaalsust", "Invalid Host" : "Vigane server", - "Server" : "Server", - "Users" : "Kasutajad", - "Login Attributes" : "Sisselogimise andmed", - "Groups" : "Grupid", "Test Configuration" : "Testi seadistust", "Help" : "Abiinfo", "Groups meeting these criteria are available in %s:" : "Kriteeriumiga sobivad grupid on saadaval %s:", @@ -75,6 +71,10 @@ "Back" : "Tagasi", "Continue" : "Jätka", "LDAP" : "LDAP", + "Server" : "Server", + "Users" : "Kasutajad", + "Login Attributes" : "Sisselogimise andmed", + "Groups" : "Grupid", "Expert" : "Ekspert", "Advanced" : "Täpsem", "<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>Hoiatus:</b> rakendused user_ldap ja user_webdavauht ei ole ühilduvad. Töös võib esineda ootamatuid tõrkeid.\nPalu oma süsteemihalduril üks neist rakendustest kasutusest eemaldada.", diff --git a/apps/user_ldap/l10n/eu.js b/apps/user_ldap/l10n/eu.js index 2e7939bbcfc..ff7fad6017c 100644 --- a/apps/user_ldap/l10n/eu.js +++ b/apps/user_ldap/l10n/eu.js @@ -31,10 +31,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Ezin izan da erabiltzailearen bistaratze izenaren atributua antzeman. Mesedez zehaztu ldap ezarpen aurreratuetan.", "Could not find the desired feature" : "Ezin izan da nahi zen ezaugarria aurkitu", "Invalid Host" : "Baliogabeko hostalaria", - "Server" : "Zerbitzaria", - "Users" : "Erabiltzaileak", - "Login Attributes" : "Saioa hasteko atributuak", - "Groups" : "Taldeak", "Test Configuration" : "Egiaztatu Konfigurazioa", "Help" : "Laguntza", "Groups meeting these criteria are available in %s:" : "Baldintza horiek betetzen dituzten taldeak bertan eskuragarri %s:", @@ -77,6 +73,10 @@ OC.L10N.register( "Back" : "Atzera", "Continue" : "Jarraitu", "LDAP" : "LDAP", + "Server" : "Zerbitzaria", + "Users" : "Erabiltzaileak", + "Login Attributes" : "Saioa hasteko atributuak", + "Groups" : "Taldeak", "Expert" : "Aditua", "Advanced" : "Aurreratua", "<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>Abisua:</b> user_ldap eta user_webdavauth aplikazioak bateraezinak dira. Portaera berezia izan dezakezu. Mesedez eskatu zure sistema kudeatzaileari bietako bat desgaitzeko.", diff --git a/apps/user_ldap/l10n/eu.json b/apps/user_ldap/l10n/eu.json index c6421e8d338..e4ac633236c 100644 --- a/apps/user_ldap/l10n/eu.json +++ b/apps/user_ldap/l10n/eu.json @@ -29,10 +29,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Ezin izan da erabiltzailearen bistaratze izenaren atributua antzeman. Mesedez zehaztu ldap ezarpen aurreratuetan.", "Could not find the desired feature" : "Ezin izan da nahi zen ezaugarria aurkitu", "Invalid Host" : "Baliogabeko hostalaria", - "Server" : "Zerbitzaria", - "Users" : "Erabiltzaileak", - "Login Attributes" : "Saioa hasteko atributuak", - "Groups" : "Taldeak", "Test Configuration" : "Egiaztatu Konfigurazioa", "Help" : "Laguntza", "Groups meeting these criteria are available in %s:" : "Baldintza horiek betetzen dituzten taldeak bertan eskuragarri %s:", @@ -75,6 +71,10 @@ "Back" : "Atzera", "Continue" : "Jarraitu", "LDAP" : "LDAP", + "Server" : "Zerbitzaria", + "Users" : "Erabiltzaileak", + "Login Attributes" : "Saioa hasteko atributuak", + "Groups" : "Taldeak", "Expert" : "Aditua", "Advanced" : "Aurreratua", "<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>Abisua:</b> user_ldap eta user_webdavauth aplikazioak bateraezinak dira. Portaera berezia izan dezakezu. Mesedez eskatu zure sistema kudeatzaileari bietako bat desgaitzeko.", diff --git a/apps/user_ldap/l10n/fr.js b/apps/user_ldap/l10n/fr.js index fe0ac95ac71..ca4d8c6861a 100644 --- a/apps/user_ldap/l10n/fr.js +++ b/apps/user_ldap/l10n/fr.js @@ -52,10 +52,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Impossible de détecter l'attribut contenant le nom d'affichage des utilisateurs. Veuillez l'indiquer vous-même dans les paramètres ldap avancés.", "Could not find the desired feature" : "Impossible de trouver la fonction souhaitée", "Invalid Host" : "Hôte non valide", - "Server" : "Serveur", - "Users" : "Utilisateurs", - "Login Attributes" : "Attributs de login", - "Groups" : "Groupes", "Test Configuration" : "Tester la configuration", "Help" : "Aide", "Groups meeting these criteria are available in %s:" : "Les groupes respectant ces critères sont disponibles dans %s :", @@ -104,6 +100,10 @@ OC.L10N.register( "Back" : "Retour", "Continue" : "Poursuivre", "LDAP" : "LDAP", + "Server" : "Serveur", + "Users" : "Utilisateurs", + "Login Attributes" : "Attributs de login", + "Groups" : "Groupes", "Expert" : "Expert", "Advanced" : "Avancé", "<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>Avertissement :</b> Les applications user_ldap et user_webdavauth sont incompatibles. Des dysfonctionnements peuvent survenir. Contactez votre administrateur système pour qu'il en désactive une.", diff --git a/apps/user_ldap/l10n/fr.json b/apps/user_ldap/l10n/fr.json index ffbae9ce878..24be0c9ea57 100644 --- a/apps/user_ldap/l10n/fr.json +++ b/apps/user_ldap/l10n/fr.json @@ -50,10 +50,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Impossible de détecter l'attribut contenant le nom d'affichage des utilisateurs. Veuillez l'indiquer vous-même dans les paramètres ldap avancés.", "Could not find the desired feature" : "Impossible de trouver la fonction souhaitée", "Invalid Host" : "Hôte non valide", - "Server" : "Serveur", - "Users" : "Utilisateurs", - "Login Attributes" : "Attributs de login", - "Groups" : "Groupes", "Test Configuration" : "Tester la configuration", "Help" : "Aide", "Groups meeting these criteria are available in %s:" : "Les groupes respectant ces critères sont disponibles dans %s :", @@ -102,6 +98,10 @@ "Back" : "Retour", "Continue" : "Poursuivre", "LDAP" : "LDAP", + "Server" : "Serveur", + "Users" : "Utilisateurs", + "Login Attributes" : "Attributs de login", + "Groups" : "Groupes", "Expert" : "Expert", "Advanced" : "Avancé", "<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>Avertissement :</b> Les applications user_ldap et user_webdavauth sont incompatibles. Des dysfonctionnements peuvent survenir. Contactez votre administrateur système pour qu'il en désactive une.", diff --git a/apps/user_ldap/l10n/gl.js b/apps/user_ldap/l10n/gl.js index a3379a66e49..3925451ea9f 100644 --- a/apps/user_ldap/l10n/gl.js +++ b/apps/user_ldap/l10n/gl.js @@ -50,10 +50,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Non foi posíbel detectar o atributo nome de usuario que mostrar. Especifíqueo vostede mesmo nos axustes avanzados de LDAP.", "Could not find the desired feature" : "Non foi posíbel atopar a función desexada", "Invalid Host" : "Máquina incorrecta", - "Server" : "Servidor", - "Users" : "Usuarios", - "Login Attributes" : "Atributos de acceso", - "Groups" : "Grupos", "Test Configuration" : "Probar a configuración", "Help" : "Axuda", "Groups meeting these criteria are available in %s:" : "Os grupos que cumpren estes criterios están dispoñíbeis en %s:", @@ -101,6 +97,10 @@ OC.L10N.register( "Back" : "Atrás", "Continue" : "Continuar", "LDAP" : "LDAP", + "Server" : "Servidor", + "Users" : "Usuarios", + "Login Attributes" : "Atributos de acceso", + "Groups" : "Grupos", "Expert" : "Experto", "Advanced" : "Avanzado", "<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>Aviso:</b> As aplicacións user_ldap e user_webdavauth son incompatíbeis. Pode acontecer un comportamento estraño. Consulte co administrador do sistema para desactivar unha delas.", diff --git a/apps/user_ldap/l10n/gl.json b/apps/user_ldap/l10n/gl.json index 00638fd02fb..4ba0f687666 100644 --- a/apps/user_ldap/l10n/gl.json +++ b/apps/user_ldap/l10n/gl.json @@ -48,10 +48,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Non foi posíbel detectar o atributo nome de usuario que mostrar. Especifíqueo vostede mesmo nos axustes avanzados de LDAP.", "Could not find the desired feature" : "Non foi posíbel atopar a función desexada", "Invalid Host" : "Máquina incorrecta", - "Server" : "Servidor", - "Users" : "Usuarios", - "Login Attributes" : "Atributos de acceso", - "Groups" : "Grupos", "Test Configuration" : "Probar a configuración", "Help" : "Axuda", "Groups meeting these criteria are available in %s:" : "Os grupos que cumpren estes criterios están dispoñíbeis en %s:", @@ -99,6 +95,10 @@ "Back" : "Atrás", "Continue" : "Continuar", "LDAP" : "LDAP", + "Server" : "Servidor", + "Users" : "Usuarios", + "Login Attributes" : "Atributos de acceso", + "Groups" : "Grupos", "Expert" : "Experto", "Advanced" : "Avanzado", "<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>Aviso:</b> As aplicacións user_ldap e user_webdavauth son incompatíbeis. Pode acontecer un comportamento estraño. Consulte co administrador do sistema para desactivar unha delas.", diff --git a/apps/user_ldap/l10n/he.js b/apps/user_ldap/l10n/he.js index 8ff1a2037e4..67e716f2fce 100644 --- a/apps/user_ldap/l10n/he.js +++ b/apps/user_ldap/l10n/he.js @@ -52,10 +52,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "לא אותר מאפיין שם תצוגה למשתמש. יש לספק אותו בעצמך בהגדרות ldap מתקדמות.", "Could not find the desired feature" : "לא אותרה התכונה הרצויה", "Invalid Host" : "מארח לא חוקי", - "Server" : "שרת", - "Users" : "משתמשים", - "Login Attributes" : "פרטי כניסה", - "Groups" : "קבוצות", "Test Configuration" : "בדיקת הגדרות", "Help" : "עזרה", "Groups meeting these criteria are available in %s:" : "קבוצות העומדות בקריטריון זה זמינות ב- %s:", @@ -103,6 +99,10 @@ OC.L10N.register( "Back" : "אחורה", "Continue" : "המשך", "LDAP" : "LDAP", + "Server" : "שרת", + "Users" : "משתמשים", + "Login Attributes" : "פרטי כניסה", + "Groups" : "קבוצות", "Expert" : "מומחה", "Advanced" : "מתקדם", "<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>אזהרה:</b> יישומים user_ldap ו- user_webdavauth אינם תואמים. תופעות לא מוסברות עלולות להתקיים. כדאי לפנות למנהל המערכת כדי שינטרל אחד מהם.", diff --git a/apps/user_ldap/l10n/he.json b/apps/user_ldap/l10n/he.json index 0ad2d1fc61b..77942e51e58 100644 --- a/apps/user_ldap/l10n/he.json +++ b/apps/user_ldap/l10n/he.json @@ -50,10 +50,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "לא אותר מאפיין שם תצוגה למשתמש. יש לספק אותו בעצמך בהגדרות ldap מתקדמות.", "Could not find the desired feature" : "לא אותרה התכונה הרצויה", "Invalid Host" : "מארח לא חוקי", - "Server" : "שרת", - "Users" : "משתמשים", - "Login Attributes" : "פרטי כניסה", - "Groups" : "קבוצות", "Test Configuration" : "בדיקת הגדרות", "Help" : "עזרה", "Groups meeting these criteria are available in %s:" : "קבוצות העומדות בקריטריון זה זמינות ב- %s:", @@ -101,6 +97,10 @@ "Back" : "אחורה", "Continue" : "המשך", "LDAP" : "LDAP", + "Server" : "שרת", + "Users" : "משתמשים", + "Login Attributes" : "פרטי כניסה", + "Groups" : "קבוצות", "Expert" : "מומחה", "Advanced" : "מתקדם", "<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>אזהרה:</b> יישומים user_ldap ו- user_webdavauth אינם תואמים. תופעות לא מוסברות עלולות להתקיים. כדאי לפנות למנהל המערכת כדי שינטרל אחד מהם.", diff --git a/apps/user_ldap/l10n/id.js b/apps/user_ldap/l10n/id.js index 41bddd33847..252fb9bd4ef 100644 --- a/apps/user_ldap/l10n/id.js +++ b/apps/user_ldap/l10n/id.js @@ -52,10 +52,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Tidak mendeteksi atribut nama tampilan pengguna. Silakan menentukannya sendiri di pengaturan ldap lanjutan.", "Could not find the desired feature" : "Tidak dapat menemukan fitur yang diinginkan", "Invalid Host" : "Host tidak sah", - "Server" : "Server", - "Users" : "Pengguna", - "Login Attributes" : "Atribut Login", - "Groups" : "Grup", "Test Configuration" : "Uji Konfigurasi", "Help" : "Bantuan", "Groups meeting these criteria are available in %s:" : "Grup yang memenuhi kriteria ini tersedia di %s:", @@ -104,6 +100,10 @@ OC.L10N.register( "Back" : "Kembali", "Continue" : "Lanjutkan", "LDAP" : "LDAP", + "Server" : "Server", + "Users" : "Pengguna", + "Login Attributes" : "Atribut Login", + "Groups" : "Grup", "Expert" : "Lanjutan", "Advanced" : "Lanjutan", "<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>Peringatan:</b> Aplikasi user_ldap dan user_webdavauth tidak kompatibel. Anda mungkin akan mengalami perilaku yang tidak terduga. Silakan minta administrator Anda untuk menonaktifkan salah satunya.", diff --git a/apps/user_ldap/l10n/id.json b/apps/user_ldap/l10n/id.json index d18d62a716d..e4675c1c0fc 100644 --- a/apps/user_ldap/l10n/id.json +++ b/apps/user_ldap/l10n/id.json @@ -50,10 +50,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Tidak mendeteksi atribut nama tampilan pengguna. Silakan menentukannya sendiri di pengaturan ldap lanjutan.", "Could not find the desired feature" : "Tidak dapat menemukan fitur yang diinginkan", "Invalid Host" : "Host tidak sah", - "Server" : "Server", - "Users" : "Pengguna", - "Login Attributes" : "Atribut Login", - "Groups" : "Grup", "Test Configuration" : "Uji Konfigurasi", "Help" : "Bantuan", "Groups meeting these criteria are available in %s:" : "Grup yang memenuhi kriteria ini tersedia di %s:", @@ -102,6 +98,10 @@ "Back" : "Kembali", "Continue" : "Lanjutkan", "LDAP" : "LDAP", + "Server" : "Server", + "Users" : "Pengguna", + "Login Attributes" : "Atribut Login", + "Groups" : "Grup", "Expert" : "Lanjutan", "Advanced" : "Lanjutan", "<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>Peringatan:</b> Aplikasi user_ldap dan user_webdavauth tidak kompatibel. Anda mungkin akan mengalami perilaku yang tidak terduga. Silakan minta administrator Anda untuk menonaktifkan salah satunya.", diff --git a/apps/user_ldap/l10n/it.js b/apps/user_ldap/l10n/it.js index e9e6f05d71b..a693548211d 100644 --- a/apps/user_ldap/l10n/it.js +++ b/apps/user_ldap/l10n/it.js @@ -52,10 +52,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Impossibile rilevare l'attributo nome visualizzato dell'utente. Specificalo nelle impostazioni avanzate di ldap.", "Could not find the desired feature" : "Impossibile trovare la funzionalità desiderata", "Invalid Host" : "Host non valido", - "Server" : "Server", - "Users" : "Utenti", - "Login Attributes" : "Attributi di accesso", - "Groups" : "Gruppi", "Test Configuration" : "Prova configurazione", "Help" : "Aiuto", "Groups meeting these criteria are available in %s:" : "I gruppi che corrispondono a questi criteri sono disponibili in %s:", @@ -104,6 +100,10 @@ OC.L10N.register( "Back" : "Indietro", "Continue" : "Continua", "LDAP" : "LDAP", + "Server" : "Server", + "Users" : "Utenti", + "Login Attributes" : "Attributi di accesso", + "Groups" : "Gruppi", "Expert" : "Esperto", "Advanced" : "Avanzate", "<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>Avviso:</b> le applicazioni user_ldap e user_webdavauth sono incompatibili. Potresti riscontrare un comportamento inatteso. Chiedi al tuo amministratore di sistema di disabilitarne una.", diff --git a/apps/user_ldap/l10n/it.json b/apps/user_ldap/l10n/it.json index ebdb9da914c..c47b1461a3a 100644 --- a/apps/user_ldap/l10n/it.json +++ b/apps/user_ldap/l10n/it.json @@ -50,10 +50,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Impossibile rilevare l'attributo nome visualizzato dell'utente. Specificalo nelle impostazioni avanzate di ldap.", "Could not find the desired feature" : "Impossibile trovare la funzionalità desiderata", "Invalid Host" : "Host non valido", - "Server" : "Server", - "Users" : "Utenti", - "Login Attributes" : "Attributi di accesso", - "Groups" : "Gruppi", "Test Configuration" : "Prova configurazione", "Help" : "Aiuto", "Groups meeting these criteria are available in %s:" : "I gruppi che corrispondono a questi criteri sono disponibili in %s:", @@ -102,6 +98,10 @@ "Back" : "Indietro", "Continue" : "Continua", "LDAP" : "LDAP", + "Server" : "Server", + "Users" : "Utenti", + "Login Attributes" : "Attributi di accesso", + "Groups" : "Gruppi", "Expert" : "Esperto", "Advanced" : "Avanzate", "<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>Avviso:</b> le applicazioni user_ldap e user_webdavauth sono incompatibili. Potresti riscontrare un comportamento inatteso. Chiedi al tuo amministratore di sistema di disabilitarne una.", diff --git a/apps/user_ldap/l10n/ja.js b/apps/user_ldap/l10n/ja.js index 4921577e636..fa34e930414 100644 --- a/apps/user_ldap/l10n/ja.js +++ b/apps/user_ldap/l10n/ja.js @@ -52,10 +52,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "ユーザー表示名の属性を検出できませんでした。詳細設定で対応する属性を指定してください。", "Could not find the desired feature" : "望ましい機能は見つかりませんでした", "Invalid Host" : "無効なホスト", - "Server" : "サーバー", - "Users" : "ユーザー", - "Login Attributes" : "ログイン属性", - "Groups" : "グループ", "Test Configuration" : "設定をテスト", "Help" : "ヘルプ", "Groups meeting these criteria are available in %s:" : "これらの基準を満たすグループが %s で利用可能:", @@ -104,6 +100,10 @@ OC.L10N.register( "Back" : "戻る", "Continue" : "続ける", "LDAP" : "LDAP", + "Server" : "サーバー", + "Users" : "ユーザー", + "Login Attributes" : "ログイン属性", + "Groups" : "グループ", "Expert" : "エキスパート設定", "Advanced" : "詳細設定", "<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>警告:</b> user_ldap と user_webdavauth のアプリには互換性がありません。予期せぬ動作をする可能性があります。システム管理者にどちらかを無効にするよう問い合わせてください。", diff --git a/apps/user_ldap/l10n/ja.json b/apps/user_ldap/l10n/ja.json index 960a30819e3..440ec49cf81 100644 --- a/apps/user_ldap/l10n/ja.json +++ b/apps/user_ldap/l10n/ja.json @@ -50,10 +50,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "ユーザー表示名の属性を検出できませんでした。詳細設定で対応する属性を指定してください。", "Could not find the desired feature" : "望ましい機能は見つかりませんでした", "Invalid Host" : "無効なホスト", - "Server" : "サーバー", - "Users" : "ユーザー", - "Login Attributes" : "ログイン属性", - "Groups" : "グループ", "Test Configuration" : "設定をテスト", "Help" : "ヘルプ", "Groups meeting these criteria are available in %s:" : "これらの基準を満たすグループが %s で利用可能:", @@ -102,6 +98,10 @@ "Back" : "戻る", "Continue" : "続ける", "LDAP" : "LDAP", + "Server" : "サーバー", + "Users" : "ユーザー", + "Login Attributes" : "ログイン属性", + "Groups" : "グループ", "Expert" : "エキスパート設定", "Advanced" : "詳細設定", "<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>警告:</b> user_ldap と user_webdavauth のアプリには互換性がありません。予期せぬ動作をする可能性があります。システム管理者にどちらかを無効にするよう問い合わせてください。", diff --git a/apps/user_ldap/l10n/ko.js b/apps/user_ldap/l10n/ko.js index 3cfd0590684..8c261c1b4da 100644 --- a/apps/user_ldap/l10n/ko.js +++ b/apps/user_ldap/l10n/ko.js @@ -51,10 +51,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "사용자 표시 이름을 결정할 수 없습니다. 고급 LDAP 설정에서 직접 입력하십시오.", "Could not find the desired feature" : "필요한 기능을 찾을 수 없음", "Invalid Host" : "잘못된 호스트", - "Server" : "서버", - "Users" : "사용자", - "Login Attributes" : "로그인 속성", - "Groups" : "그룹", "Test Configuration" : "설정 시험", "Help" : "도움말", "Groups meeting these criteria are available in %s:" : "이 조건을 만족하는 그룹은 %s에 있습니다:", @@ -102,6 +98,10 @@ OC.L10N.register( "Back" : "뒤로", "Continue" : "계속", "LDAP" : "LDAP", + "Server" : "서버", + "Users" : "사용자", + "Login Attributes" : "로그인 속성", + "Groups" : "그룹", "Expert" : "전문가", "Advanced" : "고급", "<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>경고:</b> user_ldap, user_webdavauth 앱은 서로 호환되지 않습니다. 예상하지 못한 행동을 할 수도 있습니다. 시스템 관리자에게 연락하여 둘 중 하나의 앱의 사용을 중단하십시오.", diff --git a/apps/user_ldap/l10n/ko.json b/apps/user_ldap/l10n/ko.json index 235173f0bd5..ffc0c2b526f 100644 --- a/apps/user_ldap/l10n/ko.json +++ b/apps/user_ldap/l10n/ko.json @@ -49,10 +49,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "사용자 표시 이름을 결정할 수 없습니다. 고급 LDAP 설정에서 직접 입력하십시오.", "Could not find the desired feature" : "필요한 기능을 찾을 수 없음", "Invalid Host" : "잘못된 호스트", - "Server" : "서버", - "Users" : "사용자", - "Login Attributes" : "로그인 속성", - "Groups" : "그룹", "Test Configuration" : "설정 시험", "Help" : "도움말", "Groups meeting these criteria are available in %s:" : "이 조건을 만족하는 그룹은 %s에 있습니다:", @@ -100,6 +96,10 @@ "Back" : "뒤로", "Continue" : "계속", "LDAP" : "LDAP", + "Server" : "서버", + "Users" : "사용자", + "Login Attributes" : "로그인 속성", + "Groups" : "그룹", "Expert" : "전문가", "Advanced" : "고급", "<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>경고:</b> user_ldap, user_webdavauth 앱은 서로 호환되지 않습니다. 예상하지 못한 행동을 할 수도 있습니다. 시스템 관리자에게 연락하여 둘 중 하나의 앱의 사용을 중단하십시오.", diff --git a/apps/user_ldap/l10n/nb_NO.js b/apps/user_ldap/l10n/nb_NO.js index 062b959a4f1..8536f545afd 100644 --- a/apps/user_ldap/l10n/nb_NO.js +++ b/apps/user_ldap/l10n/nb_NO.js @@ -51,10 +51,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kunne ikke påvise attributt for brukers visningsnavn. Du må selv spesifisere det i avanserte LDAP-innstillinger.", "Could not find the desired feature" : "Fant ikke den ønskede funksjonaliteten", "Invalid Host" : "Ugyldig tjener", - "Server" : "Server", - "Users" : "Brukere", - "Login Attributes" : "Påloggingsattributter", - "Groups" : "Grupper", "Test Configuration" : "Test konfigurasjonen", "Help" : "Hjelp", "Groups meeting these criteria are available in %s:" : "Grupper som tilfredsstiller disse kriteriene er tilgjengelige i %s:", @@ -102,6 +98,10 @@ OC.L10N.register( "Back" : "Tilbake", "Continue" : "Fortsett", "LDAP" : "LDAP", + "Server" : "Server", + "Users" : "Brukere", + "Login Attributes" : "Påloggingsattributter", + "Groups" : "Grupper", "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.", diff --git a/apps/user_ldap/l10n/nb_NO.json b/apps/user_ldap/l10n/nb_NO.json index 13a4444d8f5..17e899f5dbe 100644 --- a/apps/user_ldap/l10n/nb_NO.json +++ b/apps/user_ldap/l10n/nb_NO.json @@ -49,10 +49,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kunne ikke påvise attributt for brukers visningsnavn. Du må selv spesifisere det i avanserte LDAP-innstillinger.", "Could not find the desired feature" : "Fant ikke den ønskede funksjonaliteten", "Invalid Host" : "Ugyldig tjener", - "Server" : "Server", - "Users" : "Brukere", - "Login Attributes" : "Påloggingsattributter", - "Groups" : "Grupper", "Test Configuration" : "Test konfigurasjonen", "Help" : "Hjelp", "Groups meeting these criteria are available in %s:" : "Grupper som tilfredsstiller disse kriteriene er tilgjengelige i %s:", @@ -100,6 +96,10 @@ "Back" : "Tilbake", "Continue" : "Fortsett", "LDAP" : "LDAP", + "Server" : "Server", + "Users" : "Brukere", + "Login Attributes" : "Påloggingsattributter", + "Groups" : "Grupper", "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.", diff --git a/apps/user_ldap/l10n/nl.js b/apps/user_ldap/l10n/nl.js index f3af05d915a..75de784b395 100644 --- a/apps/user_ldap/l10n/nl.js +++ b/apps/user_ldap/l10n/nl.js @@ -52,10 +52,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kon het weergavenaam attribuut van de gebruiker niet vinden. Geef het zelf op in de geavanceerde ldap instellingen.", "Could not find the desired feature" : "Kon de gewenste functie niet vinden", "Invalid Host" : "Ongeldige server", - "Server" : "Server", - "Users" : "Gebruikers", - "Login Attributes" : "Inlogattributen", - "Groups" : "Groepen", "Test Configuration" : "Test configuratie", "Help" : "Help", "Groups meeting these criteria are available in %s:" : "Groepsafspraken die voldoen aan deze criteria zijn beschikbaar in %s:", @@ -104,6 +100,10 @@ OC.L10N.register( "Back" : "Terug", "Continue" : "Verder", "LDAP" : "LDAP", + "Server" : "Server", + "Users" : "Gebruikers", + "Login Attributes" : "Inlogattributen", + "Groups" : "Groepen", "Expert" : "Expert", "Advanced" : "Geavanceerd", "<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>Waarschuwing:</b> De Apps user_ldap en user_webdavauth zijn incompatible. Je kunt onverwacht gedrag ervaren. Vraag je beheerder om een van beide apps de deactiveren.", diff --git a/apps/user_ldap/l10n/nl.json b/apps/user_ldap/l10n/nl.json index f50af5c44d3..df6897547ef 100644 --- a/apps/user_ldap/l10n/nl.json +++ b/apps/user_ldap/l10n/nl.json @@ -50,10 +50,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kon het weergavenaam attribuut van de gebruiker niet vinden. Geef het zelf op in de geavanceerde ldap instellingen.", "Could not find the desired feature" : "Kon de gewenste functie niet vinden", "Invalid Host" : "Ongeldige server", - "Server" : "Server", - "Users" : "Gebruikers", - "Login Attributes" : "Inlogattributen", - "Groups" : "Groepen", "Test Configuration" : "Test configuratie", "Help" : "Help", "Groups meeting these criteria are available in %s:" : "Groepsafspraken die voldoen aan deze criteria zijn beschikbaar in %s:", @@ -102,6 +98,10 @@ "Back" : "Terug", "Continue" : "Verder", "LDAP" : "LDAP", + "Server" : "Server", + "Users" : "Gebruikers", + "Login Attributes" : "Inlogattributen", + "Groups" : "Groepen", "Expert" : "Expert", "Advanced" : "Geavanceerd", "<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>Waarschuwing:</b> De Apps user_ldap en user_webdavauth zijn incompatible. Je kunt onverwacht gedrag ervaren. Vraag je beheerder om een van beide apps de deactiveren.", diff --git a/apps/user_ldap/l10n/pl.js b/apps/user_ldap/l10n/pl.js index 91ca681796c..e63a44da399 100644 --- a/apps/user_ldap/l10n/pl.js +++ b/apps/user_ldap/l10n/pl.js @@ -39,10 +39,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Nie udało się wykryć atrybutu wyświetlanej nazwy użytkownika. Określ ją w zaawansowanych ustawieniach LDAP.", "Could not find the desired feature" : "Nie można znaleźć żądanej funkcji", "Invalid Host" : "Niepoprawny Host", - "Server" : "Serwer", - "Users" : "Użytkownicy", - "Login Attributes" : "Atrybuty logowania", - "Groups" : "Grupy", "Test Configuration" : "Konfiguracja testowa", "Help" : "Pomoc", "Groups meeting these criteria are available in %s:" : "Przyłączenie do grupy z tymi ustawieniami dostępne jest w %s:", @@ -81,6 +77,10 @@ OC.L10N.register( "Back" : "Wróć", "Continue" : "Kontynuuj ", "LDAP" : "LDAP", + "Server" : "Serwer", + "Users" : "Użytkownicy", + "Login Attributes" : "Atrybuty logowania", + "Groups" : "Grupy", "Expert" : "Ekspert", "Advanced" : "Zaawansowane", "<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>Ostrzeżenie:</b> Aplikacje user_ldap i user_webdavauth nie są kompatybilne. Mogą powodować nieoczekiwane zachowanie. Poproś administratora o wyłączenie jednej z nich.", diff --git a/apps/user_ldap/l10n/pl.json b/apps/user_ldap/l10n/pl.json index 9611326a792..2ec260c88e5 100644 --- a/apps/user_ldap/l10n/pl.json +++ b/apps/user_ldap/l10n/pl.json @@ -37,10 +37,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Nie udało się wykryć atrybutu wyświetlanej nazwy użytkownika. Określ ją w zaawansowanych ustawieniach LDAP.", "Could not find the desired feature" : "Nie można znaleźć żądanej funkcji", "Invalid Host" : "Niepoprawny Host", - "Server" : "Serwer", - "Users" : "Użytkownicy", - "Login Attributes" : "Atrybuty logowania", - "Groups" : "Grupy", "Test Configuration" : "Konfiguracja testowa", "Help" : "Pomoc", "Groups meeting these criteria are available in %s:" : "Przyłączenie do grupy z tymi ustawieniami dostępne jest w %s:", @@ -79,6 +75,10 @@ "Back" : "Wróć", "Continue" : "Kontynuuj ", "LDAP" : "LDAP", + "Server" : "Serwer", + "Users" : "Użytkownicy", + "Login Attributes" : "Atrybuty logowania", + "Groups" : "Grupy", "Expert" : "Ekspert", "Advanced" : "Zaawansowane", "<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>Ostrzeżenie:</b> Aplikacje user_ldap i user_webdavauth nie są kompatybilne. Mogą powodować nieoczekiwane zachowanie. Poproś administratora o wyłączenie jednej z nich.", diff --git a/apps/user_ldap/l10n/pt_BR.js b/apps/user_ldap/l10n/pt_BR.js index 8ae4f3a8f9f..29f6f7be2c6 100644 --- a/apps/user_ldap/l10n/pt_BR.js +++ b/apps/user_ldap/l10n/pt_BR.js @@ -52,10 +52,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Não foi possível detectar o nome de exibição do atributo do usuário. Por favor, indique-o você mesmo em configurações avançadas do LDAP.", "Could not find the desired feature" : "Não foi possível encontrar a função desejada", "Invalid Host" : "Host Inválido", - "Server" : "Servidor", - "Users" : "Usuários", - "Login Attributes" : "Atributos de Acesso", - "Groups" : "Grupos", "Test Configuration" : "Teste de Configuração", "Help" : "Ajuda", "Groups meeting these criteria are available in %s:" : "Grupos que satisfazem estes critérios estão disponíveis em %s:", @@ -104,6 +100,10 @@ OC.L10N.register( "Back" : "Voltar", "Continue" : "Continuar", "LDAP" : "LDAP", + "Server" : "Servidor", + "Users" : "Usuários", + "Login Attributes" : "Atributos de Acesso", + "Groups" : "Grupos", "Expert" : "Especialista", "Advanced" : "Avançado", "<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>Aviso:</b> Os aplicativos user_ldap e user_webdavauth são incompatíveis. Você pode experimentar comportamento inesperado. Por favor, peça ao seu administrador do sistema para desabilitar um deles.", @@ -158,6 +158,7 @@ OC.L10N.register( "Username-LDAP User Mapping" : "Usuário-LDAP Mapeamento de Usuário", "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Nomes de usuários são usados para armazenar e atribuir dados (meta). A fim de identificar e reconhecer precisamente usuários, cada usuário LDAP terá um nome de usuário interno. Isso requer um mapeamento de nome de usuário para usuário LDAP. O nome de usuário criado é mapeado para o UUID do usuário LDAP. Além disso, o DN é armazenado em cache, assim como para reduzir a interação LDAP, mas não é usado para identificação. Se o DN muda, as mudanças serão encontrados. O nome de usuário interno é usado por toda parte. Limpando os mapeamentos terá sobras em todos os lugares. Limpando os mapeamentos não é a configuração sensível, que afeta todas as configurações LDAP! Nunca limpar os mapeamentos em um ambiente de produção, somente em um teste ou estágio experimental.", "Clear Username-LDAP User Mapping" : "Limpar Mapeamento de Usuário Nome de Usuário-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Limpar NomedoGrupo-LDAP Mapeamento do Grupo" + "Clear Groupname-LDAP Group Mapping" : "Limpar NomedoGrupo-LDAP Mapeamento do Grupo", + "Limit %s access to users meeting these criteria:" : "Limita o acesso a %s para usuários que satisfaçam estes critérios:" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/user_ldap/l10n/pt_BR.json b/apps/user_ldap/l10n/pt_BR.json index b46c78a3319..7286d4c4765 100644 --- a/apps/user_ldap/l10n/pt_BR.json +++ b/apps/user_ldap/l10n/pt_BR.json @@ -50,10 +50,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Não foi possível detectar o nome de exibição do atributo do usuário. Por favor, indique-o você mesmo em configurações avançadas do LDAP.", "Could not find the desired feature" : "Não foi possível encontrar a função desejada", "Invalid Host" : "Host Inválido", - "Server" : "Servidor", - "Users" : "Usuários", - "Login Attributes" : "Atributos de Acesso", - "Groups" : "Grupos", "Test Configuration" : "Teste de Configuração", "Help" : "Ajuda", "Groups meeting these criteria are available in %s:" : "Grupos que satisfazem estes critérios estão disponíveis em %s:", @@ -102,6 +98,10 @@ "Back" : "Voltar", "Continue" : "Continuar", "LDAP" : "LDAP", + "Server" : "Servidor", + "Users" : "Usuários", + "Login Attributes" : "Atributos de Acesso", + "Groups" : "Grupos", "Expert" : "Especialista", "Advanced" : "Avançado", "<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>Aviso:</b> Os aplicativos user_ldap e user_webdavauth são incompatíveis. Você pode experimentar comportamento inesperado. Por favor, peça ao seu administrador do sistema para desabilitar um deles.", @@ -156,6 +156,7 @@ "Username-LDAP User Mapping" : "Usuário-LDAP Mapeamento de Usuário", "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Nomes de usuários são usados para armazenar e atribuir dados (meta). A fim de identificar e reconhecer precisamente usuários, cada usuário LDAP terá um nome de usuário interno. Isso requer um mapeamento de nome de usuário para usuário LDAP. O nome de usuário criado é mapeado para o UUID do usuário LDAP. Além disso, o DN é armazenado em cache, assim como para reduzir a interação LDAP, mas não é usado para identificação. Se o DN muda, as mudanças serão encontrados. O nome de usuário interno é usado por toda parte. Limpando os mapeamentos terá sobras em todos os lugares. Limpando os mapeamentos não é a configuração sensível, que afeta todas as configurações LDAP! Nunca limpar os mapeamentos em um ambiente de produção, somente em um teste ou estágio experimental.", "Clear Username-LDAP User Mapping" : "Limpar Mapeamento de Usuário Nome de Usuário-LDAP", - "Clear Groupname-LDAP Group Mapping" : "Limpar NomedoGrupo-LDAP Mapeamento do Grupo" + "Clear Groupname-LDAP Group Mapping" : "Limpar NomedoGrupo-LDAP Mapeamento do Grupo", + "Limit %s access to users meeting these criteria:" : "Limita o acesso a %s para usuários que satisfaçam estes critérios:" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/pt_PT.js b/apps/user_ldap/l10n/pt_PT.js index e67c0713f06..ea00405f04b 100644 --- a/apps/user_ldap/l10n/pt_PT.js +++ b/apps/user_ldap/l10n/pt_PT.js @@ -52,10 +52,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Não foi possível detetar o atributo do nome do utilizador. Por favor especifique-o nas configurações ldap avançadas.", "Could not find the desired feature" : "Não se encontrou a função desejada", "Invalid Host" : "Hospedeiro Inválido", - "Server" : "Servidor", - "Users" : "Utilizadores", - "Login Attributes" : "Atributos de Sessão", - "Groups" : "Grupos", "Test Configuration" : "Testar a configuração", "Help" : "Ajuda", "Groups meeting these criteria are available in %s:" : "Grupos que satisfazerem estes critérios estão disponíveis em %s:", @@ -104,6 +100,10 @@ OC.L10N.register( "Back" : "Voltar", "Continue" : "Continuar", "LDAP" : "LDAP", + "Server" : "Servidor", + "Users" : "Utilizadores", + "Login Attributes" : "Atributos de Sessão", + "Groups" : "Grupos", "Expert" : "Perito", "Advanced" : "Avançado", "<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>Aviso:</b> A aplicação user_ldap e user_webdavauth são incompativeis. A aplicação pode tornar-se instável. Por favor, peça ao seu administrador para desactivar uma das aplicações.", diff --git a/apps/user_ldap/l10n/pt_PT.json b/apps/user_ldap/l10n/pt_PT.json index 9c0424b0697..253b95d400f 100644 --- a/apps/user_ldap/l10n/pt_PT.json +++ b/apps/user_ldap/l10n/pt_PT.json @@ -50,10 +50,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Não foi possível detetar o atributo do nome do utilizador. Por favor especifique-o nas configurações ldap avançadas.", "Could not find the desired feature" : "Não se encontrou a função desejada", "Invalid Host" : "Hospedeiro Inválido", - "Server" : "Servidor", - "Users" : "Utilizadores", - "Login Attributes" : "Atributos de Sessão", - "Groups" : "Grupos", "Test Configuration" : "Testar a configuração", "Help" : "Ajuda", "Groups meeting these criteria are available in %s:" : "Grupos que satisfazerem estes critérios estão disponíveis em %s:", @@ -102,6 +98,10 @@ "Back" : "Voltar", "Continue" : "Continuar", "LDAP" : "LDAP", + "Server" : "Servidor", + "Users" : "Utilizadores", + "Login Attributes" : "Atributos de Sessão", + "Groups" : "Grupos", "Expert" : "Perito", "Advanced" : "Avançado", "<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>Aviso:</b> A aplicação user_ldap e user_webdavauth são incompativeis. A aplicação pode tornar-se instável. Por favor, peça ao seu administrador para desactivar uma das aplicações.", diff --git a/apps/user_ldap/l10n/ru.js b/apps/user_ldap/l10n/ru.js index 20430afdda1..a9ac5d3cb4d 100644 --- a/apps/user_ldap/l10n/ru.js +++ b/apps/user_ldap/l10n/ru.js @@ -52,10 +52,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Не удалось автоматически определить атрибут содержащий отображаемое имя пользователя. Зайдите в расширенные настройки ldap и укажите его вручную.", "Could not find the desired feature" : "Не удается найти требуемую функциональность", "Invalid Host" : "Некорректный адрес сервера", - "Server" : "Сервер", - "Users" : "Пользователи", - "Login Attributes" : "Учетные данные", - "Groups" : "Группы", "Test Configuration" : "Проверить конфигурацию", "Help" : "Помощь", "Groups meeting these criteria are available in %s:" : "Группы, отвечающие этим критериям доступны в %s:", @@ -104,6 +100,10 @@ OC.L10N.register( "Back" : "Назад", "Continue" : "Продолжить", "LDAP" : "LDAP", + "Server" : "Сервер", + "Users" : "Пользователи", + "Login Attributes" : "Учетные данные", + "Groups" : "Группы", "Expert" : "Эксперт", "Advanced" : "Дополнительно", "<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>Предупреждение:</b> Приложения user_ldap и user_webdavauth несовместимы. Вы можете наблюдать некорректное поведение. Пожалуйста, попросите вашего системного администратора отключить одно из них.", diff --git a/apps/user_ldap/l10n/ru.json b/apps/user_ldap/l10n/ru.json index 24d26b613c9..afebab81e0e 100644 --- a/apps/user_ldap/l10n/ru.json +++ b/apps/user_ldap/l10n/ru.json @@ -50,10 +50,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Не удалось автоматически определить атрибут содержащий отображаемое имя пользователя. Зайдите в расширенные настройки ldap и укажите его вручную.", "Could not find the desired feature" : "Не удается найти требуемую функциональность", "Invalid Host" : "Некорректный адрес сервера", - "Server" : "Сервер", - "Users" : "Пользователи", - "Login Attributes" : "Учетные данные", - "Groups" : "Группы", "Test Configuration" : "Проверить конфигурацию", "Help" : "Помощь", "Groups meeting these criteria are available in %s:" : "Группы, отвечающие этим критериям доступны в %s:", @@ -102,6 +98,10 @@ "Back" : "Назад", "Continue" : "Продолжить", "LDAP" : "LDAP", + "Server" : "Сервер", + "Users" : "Пользователи", + "Login Attributes" : "Учетные данные", + "Groups" : "Группы", "Expert" : "Эксперт", "Advanced" : "Дополнительно", "<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>Предупреждение:</b> Приложения user_ldap и user_webdavauth несовместимы. Вы можете наблюдать некорректное поведение. Пожалуйста, попросите вашего системного администратора отключить одно из них.", diff --git a/apps/user_ldap/l10n/sk_SK.js b/apps/user_ldap/l10n/sk_SK.js index d34e3f8d15d..49476ca3977 100644 --- a/apps/user_ldap/l10n/sk_SK.js +++ b/apps/user_ldap/l10n/sk_SK.js @@ -50,10 +50,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Nemožno zistiť používateľský atribút pre zobrazenie používateľského mena. Prosím, zadajte ho sami v pokročilých nastaveniach LDAP.", "Could not find the desired feature" : "Nemožno nájsť požadovanú funkciu", "Invalid Host" : "Neplatný hostiteľ", - "Server" : "Server", - "Users" : "Používatelia", - "Login Attributes" : "Prihlasovacie atribúty", - "Groups" : "Skupiny", "Test Configuration" : "Test nastavenia", "Help" : "Pomoc", "Groups meeting these criteria are available in %s:" : "Skupiny spĺňajúce tieto kritériá sú k dispozícii v %s:", @@ -101,6 +97,10 @@ OC.L10N.register( "Back" : "Späť", "Continue" : "Pokračovať", "LDAP" : "LDAP", + "Server" : "Server", + "Users" : "Používatelia", + "Login Attributes" : "Prihlasovacie atribúty", + "Groups" : "Skupiny", "Expert" : "Expert", "Advanced" : "Rozšírené", "<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>Upozornenie:</b> Aplikácie user_ldap a user_webdavauth sú navzájom nekompatibilné. Môžete zaznamenať neočakávané správanie. Požiadajte prosím vášho systémového administrátora pre zakázanie jedného z nich.", diff --git a/apps/user_ldap/l10n/sk_SK.json b/apps/user_ldap/l10n/sk_SK.json index 9d282a2031f..4642da5c7a5 100644 --- a/apps/user_ldap/l10n/sk_SK.json +++ b/apps/user_ldap/l10n/sk_SK.json @@ -48,10 +48,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Nemožno zistiť používateľský atribút pre zobrazenie používateľského mena. Prosím, zadajte ho sami v pokročilých nastaveniach LDAP.", "Could not find the desired feature" : "Nemožno nájsť požadovanú funkciu", "Invalid Host" : "Neplatný hostiteľ", - "Server" : "Server", - "Users" : "Používatelia", - "Login Attributes" : "Prihlasovacie atribúty", - "Groups" : "Skupiny", "Test Configuration" : "Test nastavenia", "Help" : "Pomoc", "Groups meeting these criteria are available in %s:" : "Skupiny spĺňajúce tieto kritériá sú k dispozícii v %s:", @@ -99,6 +95,10 @@ "Back" : "Späť", "Continue" : "Pokračovať", "LDAP" : "LDAP", + "Server" : "Server", + "Users" : "Používatelia", + "Login Attributes" : "Prihlasovacie atribúty", + "Groups" : "Skupiny", "Expert" : "Expert", "Advanced" : "Rozšírené", "<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>Upozornenie:</b> Aplikácie user_ldap a user_webdavauth sú navzájom nekompatibilné. Môžete zaznamenať neočakávané správanie. Požiadajte prosím vášho systémového administrátora pre zakázanie jedného z nich.", diff --git a/apps/user_ldap/l10n/sl.js b/apps/user_ldap/l10n/sl.js index 7180a469b92..aa68b965720 100644 --- a/apps/user_ldap/l10n/sl.js +++ b/apps/user_ldap/l10n/sl.js @@ -52,10 +52,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Ni mogoče prebrati atributa prikaznega imena. Določiti ga je treba ročno med nastavitvami LDAP.", "Could not find the desired feature" : "Želene zmožnosti ni mogoče najti", "Invalid Host" : "Neveljaven gostitelj", - "Server" : "Strežnik", - "Users" : "Uporabniki", - "Login Attributes" : "Atributi prijave", - "Groups" : "Skupine", "Test Configuration" : "Preizkusne nastavitve", "Help" : "Pomoč", "Groups meeting these criteria are available in %s:" : "Skupine, ki so skladne s kriterijem, so na voljo v %s:", @@ -103,6 +99,10 @@ OC.L10N.register( "Back" : "Nazaj", "Continue" : "Nadaljuj", "LDAP" : "LDAP", + "Server" : "Strežnik", + "Users" : "Uporabniki", + "Login Attributes" : "Atributi prijave", + "Groups" : "Skupine", "Expert" : "Napredno", "Advanced" : "Napredne možnosti", "<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>Opozorilo:</b> določili user_ldap in user_webdavauth sta neskladni, kar lahko vpliva na delovanje sistema. O napaki pošljite poročilo skrbniku sistema in opozorite, da je treba eno izmed možnosti onemogočiti.", diff --git a/apps/user_ldap/l10n/sl.json b/apps/user_ldap/l10n/sl.json index ed16bfeafc8..8ae76bd06d8 100644 --- a/apps/user_ldap/l10n/sl.json +++ b/apps/user_ldap/l10n/sl.json @@ -50,10 +50,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Ni mogoče prebrati atributa prikaznega imena. Določiti ga je treba ročno med nastavitvami LDAP.", "Could not find the desired feature" : "Želene zmožnosti ni mogoče najti", "Invalid Host" : "Neveljaven gostitelj", - "Server" : "Strežnik", - "Users" : "Uporabniki", - "Login Attributes" : "Atributi prijave", - "Groups" : "Skupine", "Test Configuration" : "Preizkusne nastavitve", "Help" : "Pomoč", "Groups meeting these criteria are available in %s:" : "Skupine, ki so skladne s kriterijem, so na voljo v %s:", @@ -101,6 +97,10 @@ "Back" : "Nazaj", "Continue" : "Nadaljuj", "LDAP" : "LDAP", + "Server" : "Strežnik", + "Users" : "Uporabniki", + "Login Attributes" : "Atributi prijave", + "Groups" : "Skupine", "Expert" : "Napredno", "Advanced" : "Napredne možnosti", "<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>Opozorilo:</b> določili user_ldap in user_webdavauth sta neskladni, kar lahko vpliva na delovanje sistema. O napaki pošljite poročilo skrbniku sistema in opozorite, da je treba eno izmed možnosti onemogočiti.", diff --git a/apps/user_ldap/l10n/sq.js b/apps/user_ldap/l10n/sq.js index 32d3344f1f5..8d999ba16e7 100644 --- a/apps/user_ldap/l10n/sq.js +++ b/apps/user_ldap/l10n/sq.js @@ -52,10 +52,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "S’u zbulua dot atribut emri përdoruesi në ekran. Ju lutemi, caktojeni ju vetë te rregullime e mëtejshme për LDAP.", "Could not find the desired feature" : "S’u gjet dot veçoria e dëshiruar", "Invalid Host" : "Strehë e Pavlefshme", - "Server" : "Shërbyes", - "Users" : "Përdorues", - "Login Attributes" : "Atribute Hyrjesh", - "Groups" : "Grupe", "Test Configuration" : "Provoni konfigurimet", "Help" : "Ndihmë", "Groups meeting these criteria are available in %s:" : "Grupet që i plotësojnë këto kushte gjenden te %s:", @@ -104,6 +100,10 @@ OC.L10N.register( "Back" : "Mbrapsht", "Continue" : "Vazhdo", "LDAP" : "LDAP", + "Server" : "Shërbyes", + "Users" : "Përdorues", + "Login Attributes" : "Atribute Hyrjesh", + "Groups" : "Grupe", "Expert" : "Ekspert", "Advanced" : "Të mëtejshme", "<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>Kujdes:</b> user_ldap dhe user_webdavauth të aplikacionit janë të papërputhshëm. Mund t’ju ndodhin sjellje të papritura. Ju lutemi, kërkojini përgjegjësit të sistemit tuaj të çaktivizojë një prej tyre.", diff --git a/apps/user_ldap/l10n/sq.json b/apps/user_ldap/l10n/sq.json index 199f270cb74..55062cff11d 100644 --- a/apps/user_ldap/l10n/sq.json +++ b/apps/user_ldap/l10n/sq.json @@ -50,10 +50,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "S’u zbulua dot atribut emri përdoruesi në ekran. Ju lutemi, caktojeni ju vetë te rregullime e mëtejshme për LDAP.", "Could not find the desired feature" : "S’u gjet dot veçoria e dëshiruar", "Invalid Host" : "Strehë e Pavlefshme", - "Server" : "Shërbyes", - "Users" : "Përdorues", - "Login Attributes" : "Atribute Hyrjesh", - "Groups" : "Grupe", "Test Configuration" : "Provoni konfigurimet", "Help" : "Ndihmë", "Groups meeting these criteria are available in %s:" : "Grupet që i plotësojnë këto kushte gjenden te %s:", @@ -102,6 +98,10 @@ "Back" : "Mbrapsht", "Continue" : "Vazhdo", "LDAP" : "LDAP", + "Server" : "Shërbyes", + "Users" : "Përdorues", + "Login Attributes" : "Atribute Hyrjesh", + "Groups" : "Grupe", "Expert" : "Ekspert", "Advanced" : "Të mëtejshme", "<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>Kujdes:</b> user_ldap dhe user_webdavauth të aplikacionit janë të papërputhshëm. Mund t’ju ndodhin sjellje të papritura. Ju lutemi, kërkojini përgjegjësit të sistemit tuaj të çaktivizojë një prej tyre.", diff --git a/apps/user_ldap/l10n/sr.js b/apps/user_ldap/l10n/sr.js index e4f8d6e1a5f..85613eec41e 100644 --- a/apps/user_ldap/l10n/sr.js +++ b/apps/user_ldap/l10n/sr.js @@ -51,10 +51,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Немогу да откријем особину приказивања корисниковог имена. Наведите је у напредним поставкама LDAP-a", "Could not find the desired feature" : "Не могу да пронађем жељену особину", "Invalid Host" : "Неисправан домаћин", - "Server" : "Сервер", - "Users" : "Корисници", - "Login Attributes" : "Атрибути пријаве", - "Groups" : "Групе", "Test Configuration" : "Испробај поставу", "Help" : "Помоћ", "Groups meeting these criteria are available in %s:" : "Групе које испуњавају ове критеријуме су доступне у %s:", @@ -102,6 +98,10 @@ OC.L10N.register( "Back" : "Назад", "Continue" : "Настави", "LDAP" : "LDAP", + "Server" : "Сервер", + "Users" : "Корисници", + "Login Attributes" : "Атрибути пријаве", + "Groups" : "Групе", "Expert" : "Стручњак", "Advanced" : "Напредно", "<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>Упозорење:</b> Апликације user_ldap и user_webdavauth нису компатибилне. Можете имати проблема. Питајте систем администратора да искључи једну од њих.", diff --git a/apps/user_ldap/l10n/sr.json b/apps/user_ldap/l10n/sr.json index 469f00b4af9..6823fb23228 100644 --- a/apps/user_ldap/l10n/sr.json +++ b/apps/user_ldap/l10n/sr.json @@ -49,10 +49,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Немогу да откријем особину приказивања корисниковог имена. Наведите је у напредним поставкама LDAP-a", "Could not find the desired feature" : "Не могу да пронађем жељену особину", "Invalid Host" : "Неисправан домаћин", - "Server" : "Сервер", - "Users" : "Корисници", - "Login Attributes" : "Атрибути пријаве", - "Groups" : "Групе", "Test Configuration" : "Испробај поставу", "Help" : "Помоћ", "Groups meeting these criteria are available in %s:" : "Групе које испуњавају ове критеријуме су доступне у %s:", @@ -100,6 +96,10 @@ "Back" : "Назад", "Continue" : "Настави", "LDAP" : "LDAP", + "Server" : "Сервер", + "Users" : "Корисници", + "Login Attributes" : "Атрибути пријаве", + "Groups" : "Групе", "Expert" : "Стручњак", "Advanced" : "Напредно", "<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>Упозорење:</b> Апликације user_ldap и user_webdavauth нису компатибилне. Можете имати проблема. Питајте систем администратора да искључи једну од њих.", diff --git a/apps/user_ldap/l10n/sv.js b/apps/user_ldap/l10n/sv.js index 936234c5d7f..650abf885a8 100644 --- a/apps/user_ldap/l10n/sv.js +++ b/apps/user_ldap/l10n/sv.js @@ -49,9 +49,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kunde inte upptäcka attributet användarvisningsnamn. Vänligen ange det själv i de avancerade LDAP-inställningarna.", "Could not find the desired feature" : "Det gick inte hitta den önskade funktionen", "Invalid Host" : "Felaktig värd", - "Server" : "Server", - "Users" : "Användare", - "Groups" : "Grupper", "Test Configuration" : "Testa konfigurationen", "Help" : "Hjälp", "Groups meeting these criteria are available in %s:" : "Grupper som uppfyller dessa kriterier finns i %s:", @@ -76,6 +73,9 @@ OC.L10N.register( "Back" : "Tillbaka", "Continue" : "Fortsätt", "LDAP" : "LDAP", + "Server" : "Server", + "Users" : "Användare", + "Groups" : "Grupper", "Expert" : "Expert", "Advanced" : "Avancerad", "<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>Varning:</b> Apps user_ldap och user_webdavauth är inkompatibla. Oväntade problem kan uppstå. Be din systemadministratör att inaktivera en av dem.", diff --git a/apps/user_ldap/l10n/sv.json b/apps/user_ldap/l10n/sv.json index 4bd700afdb3..246ec8f7718 100644 --- a/apps/user_ldap/l10n/sv.json +++ b/apps/user_ldap/l10n/sv.json @@ -47,9 +47,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kunde inte upptäcka attributet användarvisningsnamn. Vänligen ange det själv i de avancerade LDAP-inställningarna.", "Could not find the desired feature" : "Det gick inte hitta den önskade funktionen", "Invalid Host" : "Felaktig värd", - "Server" : "Server", - "Users" : "Användare", - "Groups" : "Grupper", "Test Configuration" : "Testa konfigurationen", "Help" : "Hjälp", "Groups meeting these criteria are available in %s:" : "Grupper som uppfyller dessa kriterier finns i %s:", @@ -74,6 +71,9 @@ "Back" : "Tillbaka", "Continue" : "Fortsätt", "LDAP" : "LDAP", + "Server" : "Server", + "Users" : "Användare", + "Groups" : "Grupper", "Expert" : "Expert", "Advanced" : "Avancerad", "<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>Varning:</b> Apps user_ldap och user_webdavauth är inkompatibla. Oväntade problem kan uppstå. Be din systemadministratör att inaktivera en av dem.", diff --git a/apps/user_ldap/l10n/th_TH.js b/apps/user_ldap/l10n/th_TH.js index 495a86acc69..68aa1069fdc 100644 --- a/apps/user_ldap/l10n/th_TH.js +++ b/apps/user_ldap/l10n/th_TH.js @@ -52,10 +52,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "ไม่สามารถตรวจสอบคุณลักษณะการแสดงชื่อของผู้ใช้ กรุณาระบุการตั้งค่า LDAP ขั้นสูงด้วยตัวคุณเอง", "Could not find the desired feature" : "ไม่พบคุณลักษณะที่ต้องการ", "Invalid Host" : "โฮสต์ไม่ถูกต้อง", - "Server" : "เซิร์ฟเวอร์", - "Users" : "ผู้ใช้งาน", - "Login Attributes" : "คุณลักษณะการเข้าสู่ระบบ", - "Groups" : "กลุ่ม", "Test Configuration" : "ทดสอบการตั้งค่า", "Help" : "ช่วยเหลือ", "Groups meeting these criteria are available in %s:" : "การประชุมกลุ่มเหล่านี้มีหลักเกณฑ์อยู่ใน %s:", @@ -103,6 +99,10 @@ OC.L10N.register( "Back" : "ย้อนกลับ", "Continue" : "ดำเนินการต่อ", "LDAP" : "LDAP", + "Server" : "เซิร์ฟเวอร์", + "Users" : "ผู้ใช้งาน", + "Login Attributes" : "คุณลักษณะการเข้าสู่ระบบ", + "Groups" : "กลุ่ม", "Expert" : "ผู้เชี่ยวชาญ", "Advanced" : "ขั้นสูง", "<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>คำเตือน:</b> แอพฯ user_ldap และ user_webdavauth เข้ากันไม่ได้ คุณอาจจะพบเหตุการณ์ที่ไม่คาดคิด กรุณาขอให้ผู้ดูแลระบบของคุณปิดการใช้งานบางอย่างของพวกเขา", diff --git a/apps/user_ldap/l10n/th_TH.json b/apps/user_ldap/l10n/th_TH.json index 8237bff04b5..1f74008274e 100644 --- a/apps/user_ldap/l10n/th_TH.json +++ b/apps/user_ldap/l10n/th_TH.json @@ -50,10 +50,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "ไม่สามารถตรวจสอบคุณลักษณะการแสดงชื่อของผู้ใช้ กรุณาระบุการตั้งค่า LDAP ขั้นสูงด้วยตัวคุณเอง", "Could not find the desired feature" : "ไม่พบคุณลักษณะที่ต้องการ", "Invalid Host" : "โฮสต์ไม่ถูกต้อง", - "Server" : "เซิร์ฟเวอร์", - "Users" : "ผู้ใช้งาน", - "Login Attributes" : "คุณลักษณะการเข้าสู่ระบบ", - "Groups" : "กลุ่ม", "Test Configuration" : "ทดสอบการตั้งค่า", "Help" : "ช่วยเหลือ", "Groups meeting these criteria are available in %s:" : "การประชุมกลุ่มเหล่านี้มีหลักเกณฑ์อยู่ใน %s:", @@ -101,6 +97,10 @@ "Back" : "ย้อนกลับ", "Continue" : "ดำเนินการต่อ", "LDAP" : "LDAP", + "Server" : "เซิร์ฟเวอร์", + "Users" : "ผู้ใช้งาน", + "Login Attributes" : "คุณลักษณะการเข้าสู่ระบบ", + "Groups" : "กลุ่ม", "Expert" : "ผู้เชี่ยวชาญ", "Advanced" : "ขั้นสูง", "<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>คำเตือน:</b> แอพฯ user_ldap และ user_webdavauth เข้ากันไม่ได้ คุณอาจจะพบเหตุการณ์ที่ไม่คาดคิด กรุณาขอให้ผู้ดูแลระบบของคุณปิดการใช้งานบางอย่างของพวกเขา", diff --git a/apps/user_ldap/l10n/tr.js b/apps/user_ldap/l10n/tr.js index 9b319a1c6c8..cbbeb992ce8 100644 --- a/apps/user_ldap/l10n/tr.js +++ b/apps/user_ldap/l10n/tr.js @@ -52,10 +52,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Görüntülenecek kullanıcı adı özelliği algılanamadı. Lütfen gelişmiş ldap ayarlarına girerek kendiniz belirleyin.", "Could not find the desired feature" : "İstenen özellik bulunamadı", "Invalid Host" : "Geçersiz Makine", - "Server" : "Sunucu", - "Users" : "Kullanıcılar", - "Login Attributes" : "Oturum Açma Öznitelikleri", - "Groups" : "Gruplar", "Test Configuration" : "Yapılandırmayı Sına", "Help" : "Yardım", "Groups meeting these criteria are available in %s:" : "Bu kriterlerle eşleşen gruplar %s içinde mevcut:", @@ -104,6 +100,10 @@ OC.L10N.register( "Back" : "Geri", "Continue" : "Devam et", "LDAP" : "LDAP", + "Server" : "Sunucu", + "Users" : "Kullanıcılar", + "Login Attributes" : "Oturum Açma Öznitelikleri", + "Groups" : "Gruplar", "Expert" : "Uzman", "Advanced" : "Gelişmiş", "<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>Uyarı:</b> user_ldap ve user_webdavauth uygulamaları uyumlu değil. Beklenmedik bir davranışla karşılaşabilirsiniz. Lütfen ikisinden birini devre dışı bırakmak için sistem yöneticinizle iletişime geçin.", diff --git a/apps/user_ldap/l10n/tr.json b/apps/user_ldap/l10n/tr.json index 119b09968f8..1a351b5fab4 100644 --- a/apps/user_ldap/l10n/tr.json +++ b/apps/user_ldap/l10n/tr.json @@ -50,10 +50,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Görüntülenecek kullanıcı adı özelliği algılanamadı. Lütfen gelişmiş ldap ayarlarına girerek kendiniz belirleyin.", "Could not find the desired feature" : "İstenen özellik bulunamadı", "Invalid Host" : "Geçersiz Makine", - "Server" : "Sunucu", - "Users" : "Kullanıcılar", - "Login Attributes" : "Oturum Açma Öznitelikleri", - "Groups" : "Gruplar", "Test Configuration" : "Yapılandırmayı Sına", "Help" : "Yardım", "Groups meeting these criteria are available in %s:" : "Bu kriterlerle eşleşen gruplar %s içinde mevcut:", @@ -102,6 +98,10 @@ "Back" : "Geri", "Continue" : "Devam et", "LDAP" : "LDAP", + "Server" : "Sunucu", + "Users" : "Kullanıcılar", + "Login Attributes" : "Oturum Açma Öznitelikleri", + "Groups" : "Gruplar", "Expert" : "Uzman", "Advanced" : "Gelişmiş", "<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>Uyarı:</b> user_ldap ve user_webdavauth uygulamaları uyumlu değil. Beklenmedik bir davranışla karşılaşabilirsiniz. Lütfen ikisinden birini devre dışı bırakmak için sistem yöneticinizle iletişime geçin.", diff --git a/apps/user_ldap/l10n/zh_CN.js b/apps/user_ldap/l10n/zh_CN.js index 0e8f0ee3eef..ba43e26abb2 100644 --- a/apps/user_ldap/l10n/zh_CN.js +++ b/apps/user_ldap/l10n/zh_CN.js @@ -51,10 +51,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "无法检测到用户的显示名称属性。请在高级LDAP设置中指定。", "Could not find the desired feature" : "无法找到所需的功能", "Invalid Host" : "无效的主机", - "Server" : "服务器", - "Users" : "用户", - "Login Attributes" : "登录属性", - "Groups" : "群组", "Test Configuration" : "测试配置", "Help" : "帮助", "Groups meeting these criteria are available in %s:" : "满足这些条件组在%s可供选择:", @@ -102,6 +98,10 @@ OC.L10N.register( "Back" : "返回", "Continue" : "继续", "LDAP" : "LDAP", + "Server" : "服务器", + "Users" : "用户", + "Login Attributes" : "登录属性", + "Groups" : "群组", "Expert" : "专家", "Advanced" : "高级", "<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>警告:</b> 应用 user_ldap 和 user_webdavauth 之间不兼容。您可能遭遇未预料的行为。请让系统管理员禁用其中一个。", diff --git a/apps/user_ldap/l10n/zh_CN.json b/apps/user_ldap/l10n/zh_CN.json index 3b8577bb9ea..10a1bd8b8ed 100644 --- a/apps/user_ldap/l10n/zh_CN.json +++ b/apps/user_ldap/l10n/zh_CN.json @@ -49,10 +49,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "无法检测到用户的显示名称属性。请在高级LDAP设置中指定。", "Could not find the desired feature" : "无法找到所需的功能", "Invalid Host" : "无效的主机", - "Server" : "服务器", - "Users" : "用户", - "Login Attributes" : "登录属性", - "Groups" : "群组", "Test Configuration" : "测试配置", "Help" : "帮助", "Groups meeting these criteria are available in %s:" : "满足这些条件组在%s可供选择:", @@ -100,6 +96,10 @@ "Back" : "返回", "Continue" : "继续", "LDAP" : "LDAP", + "Server" : "服务器", + "Users" : "用户", + "Login Attributes" : "登录属性", + "Groups" : "群组", "Expert" : "专家", "Advanced" : "高级", "<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>警告:</b> 应用 user_ldap 和 user_webdavauth 之间不兼容。您可能遭遇未预料的行为。请让系统管理员禁用其中一个。", diff --git a/apps/user_ldap/l10n/zh_TW.js b/apps/user_ldap/l10n/zh_TW.js index 1197595d485..22c381985dc 100644 --- a/apps/user_ldap/l10n/zh_TW.js +++ b/apps/user_ldap/l10n/zh_TW.js @@ -47,10 +47,6 @@ OC.L10N.register( "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "無法偵測使用者的顯示名稱,請您自行在ldap設定中指定", "Could not find the desired feature" : "無法找到所需的功能", "Invalid Host" : "無效的Host", - "Server" : "伺服器", - "Users" : "使用者", - "Login Attributes" : "登入的設定", - "Groups" : "群組", "Test Configuration" : "測試此設定", "Help" : "說明", "Only from these groups:" : "只從這些群組:", @@ -91,6 +87,10 @@ OC.L10N.register( "Back" : "返回", "Continue" : "繼續", "LDAP" : "LDAP", + "Server" : "伺服器", + "Users" : "使用者", + "Login Attributes" : "登入的設定", + "Groups" : "群組", "Advanced" : "進階", "<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>警告:</b> 應用程式user_ldap和user_webdavauth互不相容。可能會造成無法預期的結果。請要求您的系統管理員將兩者其中之一停用。", "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>警告:</b>沒有安裝 PHP LDAP 模組,後端系統將無法運作,請要求您的系統管理員安裝模組。", diff --git a/apps/user_ldap/l10n/zh_TW.json b/apps/user_ldap/l10n/zh_TW.json index 11a9cadfd29..16645dd706a 100644 --- a/apps/user_ldap/l10n/zh_TW.json +++ b/apps/user_ldap/l10n/zh_TW.json @@ -45,10 +45,6 @@ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "無法偵測使用者的顯示名稱,請您自行在ldap設定中指定", "Could not find the desired feature" : "無法找到所需的功能", "Invalid Host" : "無效的Host", - "Server" : "伺服器", - "Users" : "使用者", - "Login Attributes" : "登入的設定", - "Groups" : "群組", "Test Configuration" : "測試此設定", "Help" : "說明", "Only from these groups:" : "只從這些群組:", @@ -89,6 +85,10 @@ "Back" : "返回", "Continue" : "繼續", "LDAP" : "LDAP", + "Server" : "伺服器", + "Users" : "使用者", + "Login Attributes" : "登入的設定", + "Groups" : "群組", "Advanced" : "進階", "<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>警告:</b> 應用程式user_ldap和user_webdavauth互不相容。可能會造成無法預期的結果。請要求您的系統管理員將兩者其中之一停用。", "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>警告:</b>沒有安裝 PHP LDAP 模組,後端系統將無法運作,請要求您的系統管理員安裝模組。", diff --git a/apps/user_ldap/lib/Settings/Admin.php b/apps/user_ldap/lib/Settings/Admin.php new file mode 100644 index 00000000000..ca7db66c788 --- /dev/null +++ b/apps/user_ldap/lib/Settings/Admin.php @@ -0,0 +1,89 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\User_LDAP\Settings; + +use OCA\User_LDAP\Configuration; +use OCA\User_LDAP\Helper; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\IL10N; +use OCP\Settings\ISettings; +use OCP\Template; + +class Admin implements ISettings { + /** @var IL10N */ + private $l; + + /** + * @param IL10N $l + */ + public function __construct(IL10N $l) { + $this->l = $l; + } + + /** + * @return TemplateResponse + */ + public function getForm() { + $helper = new Helper(); + $prefixes = $helper->getServerConfigurationPrefixes(); + $hosts = $helper->getServerConfigurationHosts(); + + $wControls = new Template('user_ldap', 'part.wizardcontrols'); + $wControls = $wControls->fetchPage(); + $sControls = new Template('user_ldap', 'part.settingcontrols'); + $sControls = $sControls->fetchPage(); + + $parameters['serverConfigurationPrefixes'] = $prefixes; + $parameters['serverConfigurationHosts'] = $hosts; + $parameters['settingControls'] = $sControls; + $parameters['wizardControls'] = $wControls; + + // assign default values + $config = new Configuration('', false); + $defaults = $config->getDefaults(); + foreach($defaults as $key => $default) { + $parameters[$key.'_default'] = $default; + } + + return new TemplateResponse('user_ldap', 'settings', $parameters); + } + + /** + * @return string the section ID, e.g. 'sharing' + */ + public function getSection() { + return 'ldap'; + } + + /** + * @return int whether the form should be rather on the top or bottom of + * the admin section. The forms are arranged in ascending order of the + * priority values. It is required to return a value between 0 and 100. + * + * E.g.: 70 + */ + public function getPriority() { + return 5; + } +} diff --git a/apps/user_ldap/lib/Settings/Section.php b/apps/user_ldap/lib/Settings/Section.php new file mode 100644 index 00000000000..82d8d0c84fa --- /dev/null +++ b/apps/user_ldap/lib/Settings/Section.php @@ -0,0 +1,67 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\User_LDAP\Settings; + +use OCP\IL10N; +use OCP\Settings\ISection; + +class Section implements ISection { + /** @var IL10N */ + private $l; + + public function __construct(IL10N $l) { + $this->l = $l; + } + + /** + * returns the ID of the section. It is supposed to be a lower case string, + * e.g. 'ldap' + * + * @returns string + */ + public function getID() { + return 'ldap'; + } + + /** + * returns the translated name as it should be displayed, e.g. 'LDAP / AD + * integration'. Use the L10N service to translate it. + * + * @return string + */ + public function getName() { + return $this->l->t('LDAP / AD integration'); + } + + /** + * @return int whether the form should be rather on the top or bottom of + * the settings navigation. The sections are arranged in ascending order of + * the priority values. It is required to return a value between 0 and 99. + * + * E.g.: 70 + */ + public function getPriority() { + return 25; + } +} diff --git a/apps/user_ldap/settings.php b/apps/user_ldap/settings.php deleted file mode 100644 index f20f873e134..00000000000 --- a/apps/user_ldap/settings.php +++ /dev/null @@ -1,75 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Dominik Schmidt <dev@dominik-schmidt.de> - * @author Joas Schilling <coding@schilljs.com> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin Appelman <robin@icewind.nl> - * @author Robin McCorkell <robin@mccorkell.me.uk> - * @author Volkan Gezer <volkangezer@gmail.com> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -// fill template -$tmpl = new OCP\Template('user_ldap', 'settings'); - -$helper = new \OCA\User_LDAP\Helper(); -$prefixes = $helper->getServerConfigurationPrefixes(); -$hosts = $helper->getServerConfigurationHosts(); - -$wizardHtml = ''; -$toc = array(); - -$wControls = new OCP\Template('user_ldap', 'part.wizardcontrols'); -$wControls = $wControls->fetchPage(); -$sControls = new OCP\Template('user_ldap', 'part.settingcontrols'); -$sControls = $sControls->fetchPage(); - -$l = \OC::$server->getL10N('user_ldap'); - -$wizTabs = array(); -$wizTabs[] = array('tpl' => 'part.wizard-server', 'cap' => $l->t('Server')); -$wizTabs[] = array('tpl' => 'part.wizard-userfilter', 'cap' => $l->t('Users')); -$wizTabs[] = array('tpl' => 'part.wizard-loginfilter', 'cap' => $l->t('Login Attributes')); -$wizTabs[] = array('tpl' => 'part.wizard-groupfilter', 'cap' => $l->t('Groups')); -$wizTabsCount = count($wizTabs); -for($i = 0; $i < $wizTabsCount; $i++) { - $tab = new OCP\Template('user_ldap', $wizTabs[$i]['tpl']); - if($i === 0) { - $tab->assign('serverConfigurationPrefixes', $prefixes); - $tab->assign('serverConfigurationHosts', $hosts); - } - $tab->assign('wizardControls', $wControls); - $wizardHtml .= $tab->fetchPage(); - $toc['#ldapWizard'.($i+1)] = $wizTabs[$i]['cap']; -} - -$tmpl->assign('tabs', $wizardHtml); -$tmpl->assign('toc', $toc); -$tmpl->assign('settingControls', $sControls); - -// assign default values -$config = new \OCA\User_LDAP\Configuration('', false); -$defaults = $config->getDefaults(); -foreach($defaults as $key => $default) { - $tmpl->assign($key.'_default', $default); -} - -return $tmpl->fetchPage(); diff --git a/apps/user_ldap/templates/settings.php b/apps/user_ldap/templates/settings.php index a1511071af4..eb4c7b99127 100644 --- a/apps/user_ldap/templates/settings.php +++ b/apps/user_ldap/templates/settings.php @@ -49,6 +49,9 @@ script('user_ldap', [ style('user_ldap', 'settings'); +/** @var \OCP\IL10N $l */ +/** @var array $_ */ + ?> <form id="ldap" class="section" action="#" method="post"> @@ -56,20 +59,24 @@ style('user_ldap', 'settings'); <div id="ldapSettings"> <ul> - <?php foreach($_['toc'] as $id => $title) { ?> - <li id="<?php p($id); ?>"><a href="<?php p($id); ?>"><?php p($title); ?></a></li> - <?php } ?> + <li id="#ldapWizard1"><a href="#ldapWizard1"><?php p($l->t('Server'));?></a></li> + <li id="#ldapWizard2"><a href="#ldapWizard2"><?php p($l->t('Users'));?></a></li> + <li id="#ldapWizard3"><a href="#ldapWizard3"><?php p($l->t('Login Attributes'));?></a></li> + <li id="#ldapWizard4"><a href="#ldapWizard4"><?php p($l->t('Groups'));?></a></li> <li class="ldapSettingsTabs"><a href="#ldapSettings-2"><?php p($l->t('Expert'));?></a></li> <li class="ldapSettingsTabs"><a href="#ldapSettings-1"><?php p($l->t('Advanced'));?></a></li> </ul> - <?php if(OCP\App::isEnabled('user_webdavauth')) { - print_unescaped('<p class="ldapwarning">'.$l->t('<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.').'</p>'); - } - if(!function_exists('ldap_connect')) { - print_unescaped('<p class="ldapwarning">'.$l->t('<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it.').'</p>'); - } - ?> - <?php print_unescaped($_['tabs']); ?> + <?php if(OCP\App::isEnabled('user_webdavauth')) { + print_unescaped('<p class="ldapwarning">'.$l->t('<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.').'</p>'); + } + if(!function_exists('ldap_connect')) { + print_unescaped('<p class="ldapwarning">'.$l->t('<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it.').'</p>'); + } + ?> + <?php require_once(__DIR__ . '/part.wizard-server.php'); ?> + <?php require_once(__DIR__ . '/part.wizard-userfilter.php'); ?> + <?php require_once(__DIR__ . '/part.wizard-loginfilter.php'); ?> + <?php require_once(__DIR__ . '/part.wizard-groupfilter.php'); ?> <fieldset id="ldapSettings-1"> <div id="ldapAdvancedAccordion"> <h3><?php p($l->t('Connection Settings'));?></h3> diff --git a/apps/user_ldap/tests/Settings/AdminTest.php b/apps/user_ldap/tests/Settings/AdminTest.php new file mode 100644 index 00000000000..4ac5a14f58b --- /dev/null +++ b/apps/user_ldap/tests/Settings/AdminTest.php @@ -0,0 +1,90 @@ +<?php +/** + * @copyright Copyright (c) 2016 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 OCA\User_LDAP\Tests\Settings; + +use OCA\User_LDAP\Configuration; +use OCA\User_LDAP\Helper; +use OCA\User_LDAP\Settings\Admin; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\IL10N; +use OCP\Template; +use Test\TestCase; + +/** + * @group DB + * @package OCA\User_LDAP\Tests\Settings + */ +class AdminTest extends TestCase { + /** @var Admin */ + private $admin; + /** @var IL10N */ + private $l10n; + + public function setUp() { + parent::setUp(); + $this->l10n = $this->getMockBuilder('\OCP\IL10N')->getMock(); + + $this->admin = new Admin( + $this->l10n + ); + } + + /** + * @UseDB + */ + public function testGetForm() { + + $helper = new Helper(); + $prefixes = $helper->getServerConfigurationPrefixes(); + $hosts = $helper->getServerConfigurationHosts(); + + $wControls = new Template('user_ldap', 'part.wizardcontrols'); + $wControls = $wControls->fetchPage(); + $sControls = new Template('user_ldap', 'part.settingcontrols'); + $sControls = $sControls->fetchPage(); + + $parameters['serverConfigurationPrefixes'] = $prefixes; + $parameters['serverConfigurationHosts'] = $hosts; + $parameters['settingControls'] = $sControls; + $parameters['wizardControls'] = $wControls; + + // assign default values + $config = new Configuration('', false); + $defaults = $config->getDefaults(); + foreach($defaults as $key => $default) { + $parameters[$key.'_default'] = $default; + } + + $expected = new TemplateResponse('user_ldap', 'settings', $parameters); + $this->assertEquals($expected, $this->admin->getForm()); + } + + public function testGetSection() { + $this->assertSame('ldap', $this->admin->getSection()); + } + + public function testGetPriority() { + $this->assertSame(5, $this->admin->getPriority()); + } +} diff --git a/apps/user_ldap/tests/Settings/SectionTest.php b/apps/user_ldap/tests/Settings/SectionTest.php new file mode 100644 index 00000000000..2d2165b8e56 --- /dev/null +++ b/apps/user_ldap/tests/Settings/SectionTest.php @@ -0,0 +1,62 @@ +<?php +/** + * @copyright Copyright (c) 2016 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 OCA\User_LDAP\Tests\Settings; + +use OCA\User_LDAP\Settings\Section; +use OCP\IL10N; +use Test\TestCase; + +class SectionTest extends TestCase { + /** @var IL10N */ + private $l; + /** @var Section */ + private $section; + + public function setUp() { + parent::setUp(); + $this->l = $this->getMockBuilder('\OCP\IL10N')->getMock(); + + $this->section = new Section( + $this->l + ); + } + + public function testGetID() { + $this->assertSame('ldap', $this->section->getID()); + } + + public function testGetName() { + $this->l + ->expects($this->once()) + ->method('t') + ->with('LDAP / AD integration') + ->willReturn('LDAP / AD integration'); + + $this->assertSame('LDAP / AD integration', $this->section->getName()); + } + + public function testGetPriority() { + $this->assertSame(25, $this->section->getPriority()); + } +} diff --git a/apps/workflowengine/appinfo/info.xml b/apps/workflowengine/appinfo/info.xml index b53f8aedb16..aae234cc717 100644 --- a/apps/workflowengine/appinfo/info.xml +++ b/apps/workflowengine/appinfo/info.xml @@ -5,7 +5,7 @@ <description></description> <licence>AGPL</licence> <author>Morris Jobke</author> - <version>1.1.0</version> + <version>1.1.1</version> <namespace>WorkflowEngine</namespace> <category>other</category> @@ -20,4 +20,8 @@ <dependencies> <owncloud min-version="9.2" max-version="9.2" /> </dependencies> + + <settings> + <admin-section>OCA\WorkflowEngine\Settings\Section</admin-section> + </settings> </info> diff --git a/apps/workflowengine/lib/AppInfo/Application.php b/apps/workflowengine/lib/AppInfo/Application.php index b5e769d01d7..e968b40612f 100644 --- a/apps/workflowengine/lib/AppInfo/Application.php +++ b/apps/workflowengine/lib/AppInfo/Application.php @@ -21,9 +21,6 @@ namespace OCA\WorkflowEngine\AppInfo; -use OCP\Util; -use OCP\WorkflowEngine\RegisterCheckEvent; - class Application extends \OCP\AppFramework\App { public function __construct() { @@ -41,6 +38,11 @@ class Application extends \OCP\AppFramework\App { $dispatcher->addListener( 'OCP\WorkflowEngine::loadAdditionalSettingScripts', function() { + if (!function_exists('style')) { + // This is hacky, but we need to load the template class + class_exists('OCP\Template', true); + } + style('workflowengine', [ 'admin', ]); diff --git a/apps/workflowengine/lib/Manager.php b/apps/workflowengine/lib/Manager.php index b72836a919c..9140ef73ea7 100644 --- a/apps/workflowengine/lib/Manager.php +++ b/apps/workflowengine/lib/Manager.php @@ -30,6 +30,7 @@ use OCP\IL10N; use OCP\IServerContainer; use OCP\WorkflowEngine\ICheck; use OCP\WorkflowEngine\IManager; +use OCP\WorkflowEngine\IOperation; class Manager implements IManager { @@ -176,6 +177,8 @@ class Manager implements IManager { * @throws \UnexpectedValueException */ public function addOperation($class, $name, array $checks, $operation) { + $this->validateOperation($class, $name, $checks, $operation); + $checkIds = []; foreach ($checks as $check) { $checkIds[] = $this->addCheck($check['class'], $check['operator'], $check['value']); @@ -204,6 +207,9 @@ class Manager implements IManager { * @throws \UnexpectedValueException */ public function updateOperation($id, $name, array $checks, $operation) { + $row = $this->getOperation($id); + $this->validateOperation($row['class'], $name, $checks, $operation); + $checkIds = []; foreach ($checks as $check) { $checkIds[] = $this->addCheck($check['class'], $check['operator'], $check['value']); @@ -233,6 +239,43 @@ class Manager implements IManager { } /** + * @param string $class + * @param string $name + * @param array[] $checks + * @param string $operation + * @throws \UnexpectedValueException + */ + protected function validateOperation($class, $name, array $checks, $operation) { + try { + /** @var IOperation $instance */ + $instance = $this->container->query($class); + } catch (QueryException $e) { + throw new \UnexpectedValueException($this->l->t('Operation %s does not exist', $class)); + } + + if (!($instance instanceof IOperation)) { + throw new \UnexpectedValueException($this->l->t('Operation %s is invalid', $class)); + } + + $instance->validateOperation($name, $checks, $operation); + + foreach ($checks as $check) { + try { + /** @var ICheck $instance */ + $instance = $this->container->query($check['class']); + } catch (QueryException $e) { + throw new \UnexpectedValueException($this->l->t('Check %s does not exist', $class)); + } + + if (!($instance instanceof ICheck)) { + throw new \UnexpectedValueException($this->l->t('Check %s is invalid', $class)); + } + + $instance->validateCheck($check['operator'], $check['value']); + } + } + + /** * @param int[] $checkIds * @return array[] */ @@ -279,13 +322,8 @@ class Manager implements IManager { * @param string $operator * @param string $value * @return int Check unique ID - * @throws \UnexpectedValueException */ protected function addCheck($class, $operator, $value) { - /** @var ICheck $check */ - $check = $this->container->query($class); - $check->validateCheck($operator, $value); - $hash = md5($class . '::' . $operator . '::' . $value); $query = $this->connection->getQueryBuilder(); diff --git a/apps/workflowengine/lib/Settings/Section.php b/apps/workflowengine/lib/Settings/Section.php new file mode 100644 index 00000000000..df8bb807134 --- /dev/null +++ b/apps/workflowengine/lib/Settings/Section.php @@ -0,0 +1,57 @@ +<?php +/** + * @copyright Copyright (c) 2016 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 OCA\WorkflowEngine\Settings; + +use OCP\IL10N; +use OCP\Settings\ISection; + +class Section implements ISection { + /** @var IL10N */ + private $l; + + public function __construct(IL10N $l) { + $this->l = $l; + } + + /** + * {@inheritdoc} + */ + public function getID() { + return 'workflow'; + } + + /** + * {@inheritdoc} + */ + public function getName() { + return $this->l->t('Workflow'); + } + + /** + * {@inheritdoc} + */ + public function getPriority() { + return 55; + } +} diff --git a/build/autoloaderchecker.sh b/build/autoloaderchecker.sh new file mode 100644 index 00000000000..a1f52da2d87 --- /dev/null +++ b/build/autoloaderchecker.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash + +#Make sure we are on the latest composer +if [ -e "composer.phar" ] +then + echo "Composer found: checking for update" + php composer.phar self-update +else + echo "Composer not found: fetching" + php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" + php -r "if (hash_file('SHA384', 'composer-setup.php') === 'e115a8dc7871f15d853148a7fbac7da27d6c0030b848d9b3dc09e2a0388afed865e6a3d6b3c0fad45c48e2b5fc1196ae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" + php composer-setup.php + php -r "unlink('composer-setup.php');" +fi + +REPODIR=`git rev-parse --show-toplevel` + +#Redump the autoloader +echo +echo "Regenerating autoloader" +php composer.phar dump-autoload -d $REPODIR + +files=`git diff --name-only` +composerfile=false +for file in $files +do + if [[ $file == lib/composer/* ]] + then + composerfile=true + break + fi +done + +echo +if [ $composerfile = true ] +then + echo "The autoloader is not up to date" + echo "Please run: bash build/autoloaderchecker.sh" + echo "And commit the result" + exit 1 +else + echo "Autoloader up to date. Carry on" + exit 0 +fi diff --git a/build/integration/features/bootstrap/BasicStructure.php b/build/integration/features/bootstrap/BasicStructure.php index 0b0e5998c4b..e6da74601ba 100644 --- a/build/integration/features/bootstrap/BasicStructure.php +++ b/build/integration/features/bootstrap/BasicStructure.php @@ -165,6 +165,13 @@ trait BasicStructure { $options['body'] = $fd; } + // TODO: Fix this hack! + if ($verb === 'PUT' && $body === null) { + $options['body'] = [ + 'foo' => 'bar', + ]; + } + try { $this->response = $client->send($client->createRequest($verb, $fullUrl, $options)); } catch (\GuzzleHttp\Exception\ClientException $ex) { @@ -337,4 +344,28 @@ trait BasicStructure { rmdir("../../core/skeleton/PARENT"); } } + + /** + * @BeforeScenario @local_storage + */ + public static function removeFilesFromLocalStorageBefore(){ + $dir = "./work/local_storage/"; + $di = new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS); + $ri = new RecursiveIteratorIterator($di, RecursiveIteratorIterator::CHILD_FIRST); + foreach ( $ri as $file ) { + $file->isDir() ? rmdir($file) : unlink($file); + } + } + + /** + * @AfterScenario @local_storage + */ + public static function removeFilesFromLocalStorageAfter(){ + $dir = "./work/local_storage/"; + $di = new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS); + $ri = new RecursiveIteratorIterator($di, RecursiveIteratorIterator::CHILD_FIRST); + foreach ( $ri as $file ) { + $file->isDir() ? rmdir($file) : unlink($file); + } + } } diff --git a/build/integration/features/bootstrap/Provisioning.php b/build/integration/features/bootstrap/Provisioning.php index bc3fc9a4c4a..dbdfafcecdc 100644 --- a/build/integration/features/bootstrap/Provisioning.php +++ b/build/integration/features/bootstrap/Provisioning.php @@ -96,9 +96,12 @@ trait Provisioning { } $options['body'] = [ - 'userid' => $user, - 'password' => '123456' - ]; + 'userid' => $user, + 'password' => '123456' + ]; + $options['headers'] = [ + 'OCS-APIREQUEST' => 'true', + ]; $this->response = $client->send($client->createRequest("POST", $fullUrl, $options)); if ($this->currentServer === 'LOCAL'){ @@ -111,6 +114,9 @@ trait Provisioning { $options2 = [ 'auth' => [$user, '123456'], ]; + $options2['headers'] = [ + 'OCS-APIREQUEST' => 'true', + ]; $url = $fullUrl.'/'.$user; $client->send($client->createRequest('GET', $url, $options2)); } @@ -152,6 +158,9 @@ trait Provisioning { $client = new Client(); $options = []; $options['auth'] = $this->adminUser; + $options['headers'] = [ + 'OCS-APIREQUEST' => 'true' + ]; $this->response = $client->get($fullUrl, $options); } @@ -168,6 +177,9 @@ trait Provisioning { if ($this->currentUser === 'admin') { $options['auth'] = $this->adminUser; } + $options['headers'] = [ + 'OCS-APIREQUEST' => 'true', + ]; $this->response = $client->get($fullUrl, $options); $respondedArray = $this->getArrayOfGroupsResponded($this->response); @@ -183,6 +195,9 @@ trait Provisioning { if ($this->currentUser === 'admin') { $options['auth'] = $this->adminUser; } + $options['headers'] = [ + 'OCS-APIREQUEST' => 'true', + ]; $this->response = $client->get($fullUrl, $options); $respondedArray = $this->getArrayOfGroupsResponded($this->response); @@ -223,6 +238,9 @@ trait Provisioning { if ($this->currentUser === 'admin') { $options['auth'] = $this->adminUser; } + $options['headers'] = [ + 'OCS-APIREQUEST' => 'true', + ]; $this->response = $client->get($fullUrl, $options); $groups = array($group); @@ -244,8 +262,11 @@ trait Provisioning { } $options['body'] = [ - 'groupid' => $group, - ]; + 'groupid' => $group, + ]; + $options['headers'] = [ + 'OCS-APIREQUEST' => 'true', + ]; $this->response = $client->send($client->createRequest("POST", $fullUrl, $options)); if ($this->currentServer === 'LOCAL'){ @@ -265,6 +286,13 @@ trait Provisioning { if ($this->currentUser === 'admin') { $options['auth'] = $this->adminUser; } + $options['headers'] = [ + 'OCS-APIREQUEST' => 'true', + ]; + // TODO: fix hack + $options['body'] = [ + 'foo' => 'bar' + ]; $this->response = $client->send($client->createRequest("PUT", $fullUrl, $options)); } @@ -280,6 +308,9 @@ trait Provisioning { if ($this->currentUser === 'admin') { $options['auth'] = $this->adminUser; } + $options['headers'] = [ + 'OCS-APIREQUEST' => 'true', + ]; $this->response = $client->send($client->createRequest("DELETE", $fullUrl, $options)); } @@ -295,6 +326,9 @@ trait Provisioning { if ($this->currentUser === 'admin') { $options['auth'] = $this->adminUser; } + $options['headers'] = [ + 'OCS-APIREQUEST' => 'true', + ]; $this->response = $client->send($client->createRequest("DELETE", $fullUrl, $options)); } @@ -323,10 +357,13 @@ trait Provisioning { if ($this->currentUser === 'admin') { $options['auth'] = $this->adminUser; } + $options['headers'] = [ + 'OCS-APIREQUEST' => 'true', + ]; $options['body'] = [ - 'groupid' => $group, - ]; + 'groupid' => $group, + ]; $this->response = $client->send($client->createRequest("POST", $fullUrl, $options)); } @@ -337,6 +374,9 @@ trait Provisioning { $client = new Client(); $options = []; $options['auth'] = $this->adminUser; + $options['headers'] = [ + 'OCS-APIREQUEST' => 'true', + ]; $this->response = $client->get($fullUrl, $options); } @@ -394,6 +434,9 @@ trait Provisioning { if ($this->currentUser === 'admin') { $options['auth'] = $this->adminUser; } + $options['headers'] = [ + 'OCS-APIREQUEST' => 'true', + ]; $this->response = $client->get($fullUrl, $options); $respondedArray = $this->getArrayOfSubadminsResponded($this->response); @@ -415,8 +458,11 @@ trait Provisioning { $options['auth'] = $this->adminUser; } $options['body'] = [ - 'groupid' => $group - ]; + 'groupid' => $group + ]; + $options['headers'] = [ + 'OCS-APIREQUEST' => 'true', + ]; $this->response = $client->send($client->createRequest("POST", $fullUrl, $options)); PHPUnit_Framework_Assert::assertEquals(200, $this->response->getStatusCode()); } @@ -433,6 +479,9 @@ trait Provisioning { if ($this->currentUser === 'admin') { $options['auth'] = $this->adminUser; } + $options['headers'] = [ + 'OCS-APIREQUEST' => 'true', + ]; $this->response = $client->get($fullUrl, $options); $respondedArray = $this->getArrayOfSubadminsResponded($this->response); @@ -561,6 +610,9 @@ trait Provisioning { if ($this->currentUser === 'admin') { $options['auth'] = $this->adminUser; } + $options['headers'] = [ + 'OCS-APIREQUEST' => 'true', + ]; $this->response = $client->get($fullUrl, $options); $respondedArray = $this->getArrayOfAppsResponded($this->response); @@ -579,6 +631,9 @@ trait Provisioning { if ($this->currentUser === 'admin') { $options['auth'] = $this->adminUser; } + $options['headers'] = [ + 'OCS-APIREQUEST' => 'true', + ]; $this->response = $client->get($fullUrl, $options); $respondedArray = $this->getArrayOfAppsResponded($this->response); @@ -597,6 +652,9 @@ trait Provisioning { if ($this->currentUser === 'admin') { $options['auth'] = $this->adminUser; } + $options['headers'] = [ + 'OCS-APIREQUEST' => 'true', + ]; $this->response = $client->get($fullUrl, $options); PHPUnit_Framework_Assert::assertEquals("false", $this->response->xml()->data[0]->enabled); @@ -613,6 +671,9 @@ trait Provisioning { if ($this->currentUser === 'admin') { $options['auth'] = $this->adminUser; } + $options['headers'] = [ + 'OCS-APIREQUEST' => 'true', + ]; $this->response = $client->get($fullUrl, $options); PHPUnit_Framework_Assert::assertEquals("true", $this->response->xml()->data[0]->enabled); diff --git a/build/integration/features/external-storage.feature b/build/integration/features/external-storage.feature new file mode 100644 index 00000000000..9e53b01346e --- /dev/null +++ b/build/integration/features/external-storage.feature @@ -0,0 +1,26 @@ +Feature: external-storage + Background: + Given using api version "1" + Given using dav path "remote.php/webdav" + + @local_storage + Scenario: Share by link a file inside a local external storage + Given user "user0" exists + And user "user1" exists + And As an "user0" + And user "user0" created a folder "/local_storage/foo" + And User "user0" moved file "/textfile0.txt" to "/local_storage/foo/textfile0.txt" + And folder "/local_storage/foo" of user "user0" is shared with user "user1" + And As an "user1" + When creating a share with + | path | foo | + | shareType | 3 | + Then the OCS status code should be "100" + And the HTTP status code should be "200" + And Share fields of last share match with + | id | A_NUMBER | + | url | AN_URL | + | token | A_TOKEN | + | mimetype | httpd/unix-directory | + + diff --git a/build/integration/features/provisioning-v1.feature b/build/integration/features/provisioning-v1.feature index 38ed5213b19..785b795bf35 100644 --- a/build/integration/features/provisioning-v1.feature +++ b/build/integration/features/provisioning-v1.feature @@ -295,6 +295,7 @@ Feature: provisioning | theming | | updatenotification | | workflowengine | + | files_external | Scenario: get app info Given As an "admin" @@ -304,19 +305,19 @@ Feature: provisioning Scenario: enable an app Given As an "admin" - And app "files_external" is disabled - When sending "POST" to "/cloud/apps/files_external" + And app "testing" is disabled + When sending "POST" to "/cloud/apps/testing" Then the OCS status code should be "100" And the HTTP status code should be "200" - And app "files_external" is enabled + And app "testing" is enabled Scenario: disable an app Given As an "admin" - And app "files_external" is enabled - When sending "DELETE" to "/cloud/apps/files_external" + And app "testing" is enabled + When sending "DELETE" to "/cloud/apps/testing" Then the OCS status code should be "100" And the HTTP status code should be "200" - And app "files_external" is disabled + And app "testing" is disabled Scenario: disable an user Given As an "admin" diff --git a/build/integration/features/webdav-related.feature b/build/integration/features/webdav-related.feature index c49db4f8a5d..a59d65a2674 100644 --- a/build/integration/features/webdav-related.feature +++ b/build/integration/features/webdav-related.feature @@ -59,6 +59,24 @@ Feature: webdav-related |{DAV:}quota-available-bytes| And the single response should contain a property "{DAV:}quota-available-bytes" with value "10485421" + Scenario: Uploading a file as recipient using webdav having quota + Given using dav path "remote.php/webdav" + And As an "admin" + And user "user0" exists + And user "user1" exists + And user "user0" has a quota of "10 MB" + And user "user1" has a quota of "10 MB" + And As an "user1" + And user "user1" created a folder "/testquota" + And as "user1" creating a share with + | path | testquota | + | shareType | 0 | + | permissions | 31 | + | shareWith | user0 | + And As an "user0" + When User "user0" uploads file "data/textfile.txt" to "/testquota/asdf.txt" + Then the HTTP status code should be "201" + Scenario: download a public shared file with range Given user "user0" exists And As an "user0" diff --git a/build/integration/run.sh b/build/integration/run.sh index eccb378eec4..cf42ed75e4c 100755 --- a/build/integration/run.sh +++ b/build/integration/run.sh @@ -36,12 +36,27 @@ echo $PHPPID_FED export TEST_SERVER_URL="http://localhost:$PORT/ocs/" export TEST_SERVER_FED_URL="http://localhost:$PORT_FED/ocs/" +#Enable external storage app +../../occ app:enable files_external + +mkdir -p work/local_storage +OUTPUT_CREATE_STORAGE=`../../occ files_external:create local_storage local null::null -c datadir=./build/integration/work/local_storage` + +ID_STORAGE=`echo $OUTPUT_CREATE_STORAGE | awk {'print $5'}` + +../../occ files_external:option $ID_STORAGE enable_sharing true + vendor/bin/behat -f junit -f pretty $SCENARIO_TO_RUN RESULT=$? kill $PHPPID kill $PHPPID_FED +../../occ files_external:delete -y $ID_STORAGE + +#Disable external storage app +../../occ app:disable files_external + if [ -z $HIDE_OC_LOGS ]; then tail "../../data/nextcloud.log" fi diff --git a/build/license.php b/build/license.php index 11675f21a07..3f1fe41764a 100644 --- a/build/license.php +++ b/build/license.php @@ -99,7 +99,7 @@ EOD; $excludes = array_map(function($item) use ($folder) { return $folder . '/' . $item; - }, ['vendor', '3rdparty', '.git', 'l10n', 'templates']); + }, ['vendor', '3rdparty', '.git', 'l10n', 'templates', 'composer']); $iterator = new RecursiveDirectoryIterator($folder, RecursiveDirectoryIterator::SKIP_DOTS); $iterator = new RecursiveCallbackFilterIterator($iterator, function($item) use ($folder, $excludes){ @@ -154,7 +154,12 @@ With help from many libraries and frameworks including: } else { $license = str_replace('@AUTHORS@', $authors, $this->licenseText); } - $license = str_replace('@COPYRIGHT@', $copyrightNotices, $license); + + if ($copyrightNotices === '') { + $license = str_replace('@COPYRIGHT@', ' *', $license); + } else { + $license = str_replace('@COPYRIGHT@', $copyrightNotices, $license); + } $source = $this->eatOldLicense($source); $source = "<?php" . PHP_EOL . $license . PHP_EOL . $source; @@ -184,7 +189,7 @@ With help from many libraries and frameworks including: while(!empty($lines)) { $line = $lines[0]; array_shift($lines); - if (strpos($line, 'ownCloud, Inc') !== false) { + if (strpos($line, 'ownCloud, Inc') !== false || strpos($line, 'ownCloud GmbH') !== false) { return true; } } diff --git a/core/Application.php b/core/Application.php index a0deaff2b93..9a6d0878fee 100644 --- a/core/Application.php +++ b/core/Application.php @@ -31,13 +31,11 @@ namespace OC\Core; use OC\AppFramework\Utility\SimpleContainer; use OC\AppFramework\Utility\TimeFactory; -use OC\Core\Controller\AvatarController; use OC\Core\Controller\LoginController; use OC\Core\Controller\LostController; use OC\Core\Controller\TokenController; use OC\Core\Controller\TwoFactorChallengeController; use OC\Core\Controller\UserController; -use OCP\Defaults; use OCP\AppFramework\App; use OCP\Util; @@ -75,27 +73,6 @@ class Application extends App { $c->query('TimeFactory') ); }); - $container->registerService('UserController', function(SimpleContainer $c) { - return new UserController( - $c->query('AppName'), - $c->query('Request'), - $c->query('UserManager'), - $c->query('Defaults') - ); - }); - $container->registerService('AvatarController', function(SimpleContainer $c) { - return new AvatarController( - $c->query('AppName'), - $c->query('Request'), - $c->query('AvatarManager'), - $c->query('Cache'), - $c->query('L10N'), - $c->query('UserManager'), - $c->query('UserSession'), - $c->query('UserFolder'), - $c->query('Logger') - ); - }); $container->registerService('LoginController', function(SimpleContainer $c) { return new LoginController( $c->query('AppName'), @@ -150,33 +127,18 @@ class Application extends App { $container->registerService('SecureRandom', function(SimpleContainer $c) { return $c->query('ServerContainer')->getSecureRandom(); }); - $container->registerService('AvatarManager', function(SimpleContainer $c) { - return $c->query('ServerContainer')->getAvatarManager(); - }); $container->registerService('Session', function(SimpleContainer $c) { return $c->query('ServerContainer')->getSession(); }); $container->registerService('UserSession', function(SimpleContainer $c) { return $c->query('ServerContainer')->getUserSession(); }); - $container->registerService('Session', function(SimpleContainer $c) { - return $c->query('ServerContainer')->getSession(); - }); - $container->registerService('Cache', function(SimpleContainer $c) { - return $c->query('ServerContainer')->getCache(); - }); - $container->registerService('UserFolder', function(SimpleContainer $c) { - return $c->query('ServerContainer')->getUserFolder(); - }); $container->registerService('Defaults', function(SimpleContainer $c) { return $c->query('ServerContainer')->getThemingDefaults(); }); $container->registerService('Mailer', function(SimpleContainer $c) { return $c->query('ServerContainer')->getMailer(); }); - $container->registerService('Logger', function(SimpleContainer $c) { - return $c->query('ServerContainer')->getLogger(); - }); $container->registerService('TimeFactory', function(SimpleContainer $c) { return new TimeFactory(); }); diff --git a/core/Command/Upgrade.php b/core/Command/Upgrade.php index 77d67534c6a..69354272de8 100644 --- a/core/Command/Upgrade.php +++ b/core/Command/Upgrade.php @@ -250,10 +250,10 @@ class Upgrade extends Command { $output->writeln('<info>Checked database schema update</info>'); }); $updater->listen('\OC\Updater', 'incompatibleAppDisabled', function ($app) use($output) { - $output->writeln('<info>Disabled incompatible app: ' . $app . '</info>'); + $output->writeln('<comment>Disabled incompatible app: ' . $app . '</comment>'); }); $updater->listen('\OC\Updater', 'thirdPartyAppDisabled', function ($app) use ($output) { - $output->writeln('<info>Disabled 3rd-party app: ' . $app . '</info>'); + $output->writeln('<comment>Disabled 3rd-party app: ' . $app . '</comment>'); }); $updater->listen('\OC\Updater', 'upgradeAppStoreApp', function ($app) use($output) { $output->writeln('<info>Update 3rd-party app: ' . $app . '</info>'); diff --git a/core/Controller/AvatarController.php b/core/Controller/AvatarController.php index ed63025aca4..5b64320948a 100644 --- a/core/Controller/AvatarController.php +++ b/core/Controller/AvatarController.php @@ -29,16 +29,18 @@ namespace OC\Core\Controller; use OCP\AppFramework\Controller; use OCP\AppFramework\Http; -use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\Http\DataDisplayResponse; +use OCP\AppFramework\Http\JSONResponse; +use OCP\Files\File; +use OCP\Files\IRootFolder; use OCP\Files\NotFoundException; use OCP\IAvatarManager; +use OCP\ICache; use OCP\ILogger; use OCP\IL10N; use OCP\IRequest; use OCP\IUserManager; use OCP\IUserSession; -use OCP\Files\Folder; /** * Class AvatarController @@ -50,7 +52,7 @@ class AvatarController extends Controller { /** @var IAvatarManager */ protected $avatarManager; - /** @var \OC\Cache\File */ + /** @var ICache */ protected $cache; /** @var IL10N */ @@ -62,41 +64,44 @@ class AvatarController extends Controller { /** @var IUserSession */ protected $userSession; - /** @var Folder */ - protected $userFolder; + /** @var IRootFolder */ + protected $rootFolder; /** @var ILogger */ protected $logger; + /** @var string */ + protected $userId; + /** * @param string $appName * @param IRequest $request * @param IAvatarManager $avatarManager - * @param \OC\Cache\File $cache + * @param ICache $cache * @param IL10N $l10n * @param IUserManager $userManager - * @param IUserSession $userSession - * @param Folder $userFolder + * @param IRootFolder $rootFolder * @param ILogger $logger + * @param string $userId */ public function __construct($appName, IRequest $request, IAvatarManager $avatarManager, - \OC\Cache\File $cache, + ICache $cache, IL10N $l10n, IUserManager $userManager, - IUserSession $userSession, - Folder $userFolder = null, - ILogger $logger) { + IRootFolder $rootFolder, + ILogger $logger, + $userId) { parent::__construct($appName, $request); $this->avatarManager = $avatarManager; $this->cache = $cache; $this->l = $l10n; $this->userManager = $userManager; - $this->userSession = $userSession; - $this->userFolder = $userFolder; + $this->rootFolder = $rootFolder; $this->logger = $logger; + $this->userId = $userId; } /** @@ -106,7 +111,7 @@ class AvatarController extends Controller { * * @param string $userId * @param int $size - * @return DataResponse|DataDisplayResponse + * @return JSONResponse|DataDisplayResponse */ public function getAvatar($userId, $size) { if ($size > 2048) { @@ -123,13 +128,13 @@ class AvatarController extends Controller { $resp->setETag($avatar->getEtag()); } catch (NotFoundException $e) { $user = $this->userManager->get($userId); - $resp = new DataResponse([ + $resp = new JSONResponse([ 'data' => [ 'displayname' => $user->getDisplayName(), ], ]); } catch (\Exception $e) { - $resp = new DataResponse([ + $resp = new JSONResponse([ 'data' => [ 'displayname' => '', ], @@ -147,29 +152,22 @@ class AvatarController extends Controller { * @NoAdminRequired * * @param string $path - * @return DataResponse + * @return JSONResponse */ public function postAvatar($path) { - $userId = $this->userSession->getUser()->getUID(); $files = $this->request->getUploadedFile('files'); - $headers = []; - if ($this->request->isUserAgent([\OC\AppFramework\Http\Request::USER_AGENT_IE_8])) { - // due to upload iframe workaround, need to set content-type to text/plain - $headers['Content-Type'] = 'text/plain'; - } - if (isset($path)) { $path = stripslashes($path); - $node = $this->userFolder->get($path); - if (!($node instanceof \OCP\Files\File)) { - return new DataResponse(['data' => ['message' => $this->l->t('Please select a file.')]], Http::STATUS_OK, $headers); + $userFolder = $this->rootFolder->getUserFolder($this->userId); + $node = $userFolder->get($path); + if (!($node instanceof File)) { + return new JSONResponse(['data' => ['message' => $this->l->t('Please select a file.')]]); } if ($node->getSize() > 20*1024*1024) { - return new DataResponse( + return new JSONResponse( ['data' => ['message' => $this->l->t('File is too big')]], - Http::STATUS_BAD_REQUEST, - $headers + Http::STATUS_BAD_REQUEST ); } $content = $node->getContent(); @@ -180,28 +178,25 @@ class AvatarController extends Controller { !\OC\Files\Filesystem::isFileBlacklisted($files['tmp_name'][0]) ) { if ($files['size'][0] > 20*1024*1024) { - return new DataResponse( + return new JSONResponse( ['data' => ['message' => $this->l->t('File is too big')]], - Http::STATUS_BAD_REQUEST, - $headers + Http::STATUS_BAD_REQUEST ); } $this->cache->set('avatar_upload', file_get_contents($files['tmp_name'][0]), 7200); $content = $this->cache->get('avatar_upload'); unlink($files['tmp_name'][0]); } else { - return new DataResponse( + return new JSONResponse( ['data' => ['message' => $this->l->t('Invalid file provided')]], - Http::STATUS_BAD_REQUEST, - $headers + Http::STATUS_BAD_REQUEST ); } } else { //Add imgfile - return new DataResponse( + return new JSONResponse( ['data' => ['message' => $this->l->t('No image or file provided')]], - Http::STATUS_BAD_REQUEST, - $headers + Http::STATUS_BAD_REQUEST ); } @@ -213,59 +208,54 @@ class AvatarController extends Controller { if ($image->valid()) { $mimeType = $image->mimeType(); if ($mimeType !== 'image/jpeg' && $mimeType !== 'image/png') { - return new DataResponse( + return new JSONResponse( ['data' => ['message' => $this->l->t('Unknown filetype')]], - Http::STATUS_OK, - $headers + Http::STATUS_OK ); } $this->cache->set('tmpAvatar', $image->data(), 7200); - return new DataResponse( + return new JSONResponse( ['data' => 'notsquare'], - Http::STATUS_OK, - $headers + Http::STATUS_OK ); } else { - return new DataResponse( + return new JSONResponse( ['data' => ['message' => $this->l->t('Invalid image')]], - Http::STATUS_OK, - $headers + Http::STATUS_OK ); } } catch (\Exception $e) { $this->logger->logException($e, ['app' => 'core']); - return new DataResponse(['data' => ['message' => $this->l->t('An error occurred. Please contact your admin.')]], Http::STATUS_OK, $headers); + return new JSONResponse(['data' => ['message' => $this->l->t('An error occurred. Please contact your admin.')]], Http::STATUS_OK); } } /** * @NoAdminRequired * - * @return DataResponse + * @return JSONResponse */ public function deleteAvatar() { - $userId = $this->userSession->getUser()->getUID(); - try { - $avatar = $this->avatarManager->getAvatar($userId); + $avatar = $this->avatarManager->getAvatar($this->userId); $avatar->remove(); - return new DataResponse(); + return new JSONResponse(); } catch (\Exception $e) { $this->logger->logException($e, ['app' => 'core']); - return new DataResponse(['data' => ['message' => $this->l->t('An error occurred. Please contact your admin.')]], Http::STATUS_BAD_REQUEST); + return new JSONResponse(['data' => ['message' => $this->l->t('An error occurred. Please contact your admin.')]], Http::STATUS_BAD_REQUEST); } } /** * @NoAdminRequired * - * @return DataResponse|DataDisplayResponse + * @return JSONResponse|DataDisplayResponse */ public function getTmpAvatar() { $tmpAvatar = $this->cache->get('tmpAvatar'); if (is_null($tmpAvatar)) { - return new DataResponse(['data' => [ + return new JSONResponse(['data' => [ 'message' => $this->l->t("No temporary profile picture available, try again") ]], Http::STATUS_NOT_FOUND); @@ -287,24 +277,22 @@ class AvatarController extends Controller { * @NoAdminRequired * * @param array $crop - * @return DataResponse + * @return JSONResponse */ public function postCroppedAvatar($crop) { - $userId = $this->userSession->getUser()->getUID(); - if (is_null($crop)) { - return new DataResponse(['data' => ['message' => $this->l->t("No crop data provided")]], + return new JSONResponse(['data' => ['message' => $this->l->t("No crop data provided")]], Http::STATUS_BAD_REQUEST); } if (!isset($crop['x'], $crop['y'], $crop['w'], $crop['h'])) { - return new DataResponse(['data' => ['message' => $this->l->t("No valid crop data provided")]], + return new JSONResponse(['data' => ['message' => $this->l->t("No valid crop data provided")]], Http::STATUS_BAD_REQUEST); } $tmpAvatar = $this->cache->get('tmpAvatar'); if (is_null($tmpAvatar)) { - return new DataResponse(['data' => [ + return new JSONResponse(['data' => [ 'message' => $this->l->t("No temporary profile picture available, try again") ]], Http::STATUS_BAD_REQUEST); @@ -313,17 +301,17 @@ class AvatarController extends Controller { $image = new \OC_Image($tmpAvatar); $image->crop($crop['x'], $crop['y'], round($crop['w']), round($crop['h'])); try { - $avatar = $this->avatarManager->getAvatar($userId); + $avatar = $this->avatarManager->getAvatar($this->userId); $avatar->set($image); // Clean up $this->cache->remove('tmpAvatar'); - return new DataResponse(['status' => 'success']); + return new JSONResponse(['status' => 'success']); } catch (\OC\NotSquareException $e) { - return new DataResponse(['data' => ['message' => $this->l->t('Crop is not square')]], + return new JSONResponse(['data' => ['message' => $this->l->t('Crop is not square')]], Http::STATUS_BAD_REQUEST); } catch (\Exception $e) { $this->logger->logException($e, ['app' => 'core']); - return new DataResponse(['data' => ['message' => $this->l->t('An error occurred. Please contact your admin.')]], Http::STATUS_BAD_REQUEST); + return new JSONResponse(['data' => ['message' => $this->l->t('An error occurred. Please contact your admin.')]], Http::STATUS_BAD_REQUEST); } } } diff --git a/core/Controller/LoginController.php b/core/Controller/LoginController.php index 91f7fa0b25a..083f4bb0518 100644 --- a/core/Controller/LoginController.php +++ b/core/Controller/LoginController.php @@ -25,7 +25,6 @@ namespace OC\Core\Controller; -use OC\AppFramework\Utility\TimeFactory; use OC\Authentication\TwoFactorAuth\Manager; use OC\Security\Bruteforce\Throttler; use OC\User\Session; @@ -172,8 +171,25 @@ class LoginController extends Controller { } /** + * @param string $redirectUrl + * @return RedirectResponse + */ + private function generateRedirect($redirectUrl) { + if (!is_null($redirectUrl) && $this->userSession->isLoggedIn()) { + $location = $this->urlGenerator->getAbsoluteURL(urldecode($redirectUrl)); + // Deny the redirect if the URL contains a @ + // This prevents unvalidated redirects like ?redirect_url=:user@domain.com + if (strpos($location, '@') === false) { + return new RedirectResponse($location); + } + } + return new RedirectResponse(OC_Util::getDefaultPageUrl()); + } + + /** * @PublicPage * @UseSession + * @NoCSRFRequired * * @param string $user * @param string $password @@ -184,6 +200,13 @@ class LoginController extends Controller { $currentDelay = $this->throttler->getDelay($this->request->getRemoteAddress()); $this->throttler->sleepDelay($this->request->getRemoteAddress()); + // If the user is already logged in and the CSRF check does not pass then + // simply redirect the user to the correct page as required. This is the + // case when an user has already logged-in, in another tab. + if(!$this->request->passesCSRFCheck()) { + return $this->generateRedirect($redirect_url); + } + $originalUser = $user; // TODO: Add all the insane error handling /* @var $loginResult IUser */ @@ -202,7 +225,7 @@ class LoginController extends Controller { $this->throttler->sleepDelay($this->request->getRemoteAddress()); } $this->session->set('loginMessages', [ - ['invalidpassword'] + ['invalidpassword'], [] ]); // Read current user and append if possible - we need to return the unmodified user otherwise we will leak the login name $args = !is_null($user) ? ['user' => $originalUser] : []; @@ -213,25 +236,34 @@ class LoginController extends Controller { $this->userSession->login($user, $password); $this->userSession->createSessionToken($this->request, $loginResult->getUID(), $user, $password); + // User has successfully logged in, now remove the password reset link, when it is available + $this->config->deleteUserValue($loginResult->getUID(), 'core', 'lostpassword'); + if ($this->twoFactorManager->isTwoFactorAuthenticated($loginResult)) { $this->twoFactorManager->prepareTwoFactorLogin($loginResult); - if (!is_null($redirect_url)) { - return new RedirectResponse($this->urlGenerator->linkToRoute('core.TwoFactorChallenge.selectChallenge', [ - 'redirect_url' => $redirect_url - ])); + + $providers = $this->twoFactorManager->getProviders($loginResult); + if (count($providers) === 1) { + // Single provider, hence we can redirect to that provider's challenge page directly + /* @var $provider IProvider */ + $provider = array_pop($providers); + $url = 'core.TwoFactorChallenge.showChallenge'; + $urlParams = [ + 'challengeProviderId' => $provider->getId(), + ]; + } else { + $url = 'core.TwoFactorChallenge.selectChallenge'; + $urlParams = []; } - return new RedirectResponse($this->urlGenerator->linkToRoute('core.TwoFactorChallenge.selectChallenge')); - } - if (!is_null($redirect_url) && $this->userSession->isLoggedIn()) { - $location = $this->urlGenerator->getAbsoluteURL(urldecode($redirect_url)); - // Deny the redirect if the URL contains a @ - // This prevents unvalidated redirects like ?redirect_url=:user@domain.com - if (strpos($location, '@') === false) { - return new RedirectResponse($location); + if (!is_null($redirect_url)) { + $urlParams['redirect_url'] = $redirect_url; } + + return new RedirectResponse($this->urlGenerator->linkToRoute($url, $urlParams)); } - return new RedirectResponse(OC_Util::getDefaultPageUrl()); + + return $this->generateRedirect($redirect_url); } } diff --git a/core/Controller/LostController.php b/core/Controller/LostController.php index c3716e9a8e7..b1111559a6c 100644 --- a/core/Controller/LostController.php +++ b/core/Controller/LostController.php @@ -40,7 +40,6 @@ use \OCP\IConfig; use OCP\IUserManager; use OCP\Mail\IMailer; use OCP\Security\ISecureRandom; -use OCP\Security\StringUtils; /** * Class LostController @@ -144,14 +143,14 @@ class LostController extends Controller { } /** - * @param string $userId + * @param string $token * @param string $userId * @throws \Exception */ private function checkPasswordResetToken($token, $userId) { $user = $this->userManager->get($userId); - $splittedToken = explode(':', $this->config->getUserValue($userId, 'owncloud', 'lostpassword', null)); + $splittedToken = explode(':', $this->config->getUserValue($userId, 'core', 'lostpassword', null)); if(count($splittedToken) !== 2) { throw new \Exception($this->l10n->t('Couldn\'t reset password because the token is invalid')); } @@ -161,7 +160,7 @@ class LostController extends Controller { throw new \Exception($this->l10n->t('Couldn\'t reset password because the token is expired')); } - if (!StringUtils::equals($splittedToken[1], $token)) { + if (!hash_equals($splittedToken[1], $token)) { throw new \Exception($this->l10n->t('Couldn\'t reset password because the token is invalid')); } } @@ -222,7 +221,7 @@ class LostController extends Controller { \OC_Hook::emit('\OC\Core\LostPassword\Controller\LostController', 'post_passwordReset', array('uid' => $userId, 'password' => $password)); - $this->config->deleteUserValue($userId, 'owncloud', 'lostpassword'); + $this->config->deleteUserValue($userId, 'core', 'lostpassword'); @\OC_User::unsetMagicInCookie(); } catch (\Exception $e){ return $this->error($e->getMessage()); @@ -253,7 +252,7 @@ class LostController extends Controller { ISecureRandom::CHAR_DIGITS. ISecureRandom::CHAR_LOWER. ISecureRandom::CHAR_UPPER); - $this->config->setUserValue($user, 'owncloud', 'lostpassword', $this->timeFactory->getTime() .':'. $token); + $this->config->setUserValue($user, 'core', 'lostpassword', $this->timeFactory->getTime() .':'. $token); $link = $this->urlGenerator->linkToRouteAbsolute('core.lost.resetform', array('userId' => $user, 'token' => $token)); diff --git a/core/Controller/OCSController.php b/core/Controller/OCSController.php new file mode 100644 index 00000000000..c785f1ff94a --- /dev/null +++ b/core/Controller/OCSController.php @@ -0,0 +1,105 @@ +<?php +/** + * + * @author Roeland Jago Douma <roeland@famdouma.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 OC\Core\Controller; + +use OC\CapabilitiesManager; +use OCP\AppFramework\Http\DataResponse; +use OCP\IRequest; +use OCP\IUserSession; + +class OCSController extends \OCP\AppFramework\OCSController { + + /** @var CapabilitiesManager */ + private $capabilitiesManager; + + /** @var IUserSession */ + private $userSession; + + /** + * OCSController constructor. + * + * @param string $appName + * @param IRequest $request + * @param CapabilitiesManager $capabilitiesManager + * @param IUserSession $userSession + */ + public function __construct($appName, + IRequest $request, + CapabilitiesManager $capabilitiesManager, + IUserSession $userSession) { + parent::__construct($appName, $request); + + $this->capabilitiesManager = $capabilitiesManager; + $this->userSession = $userSession; + } + + /** + * @PublicPage + * + * @return DataResponse + */ + public function getConfig() { + $data = [ + 'version' => '1.7', + 'website' => 'Nextcloud', + 'host' => $this->request->getServerHost(), + 'contact' => '', + 'ssl' => 'false', + ]; + + return new DataResponse($data); + } + + /** + * @NoAdminRequired + * @return DataResponse + */ + public function getCapabilities() { + $result = []; + list($major, $minor, $micro) = \OCP\Util::getVersion(); + $result['version'] = array( + 'major' => $major, + 'minor' => $minor, + 'micro' => $micro, + 'string' => \OC_Util::getVersionString(), + 'edition' => \OC_Util::getEditionString(), + ); + + $result['capabilities'] = $this->capabilitiesManager->getCapabilities(); + + return new DataResponse($result); + } + + /** + * @NoAdminRequired + * @return DataResponse + */ + public function getCurrentUser() { + $userObject = $this->userSession->getUser(); + $data = [ + 'id' => $userObject->getUID(), + 'display-name' => $userObject->getDisplayName(), + 'email' => $userObject->getEMailAddress(), + ]; + return new DataResponse($data); + } +} diff --git a/core/Controller/TokenController.php b/core/Controller/TokenController.php index 9d4fd7c9656..6e3ff50fa1d 100644 --- a/core/Controller/TokenController.php +++ b/core/Controller/TokenController.php @@ -24,13 +24,10 @@ namespace OC\Core\Controller; use OC\AppFramework\Http; -use OC\AppFramework\Utility\TimeFactory; -use OC\Authentication\Token\DefaultTokenProvider; use OC\Authentication\Token\IProvider; use OC\Authentication\Token\IToken; use OC\Authentication\TwoFactorAuth\Manager as TwoFactorAuthManager; use OC\User\Manager as UserManager; -use OCA\User_LDAP\User\Manager; use OCP\AppFramework\Controller; use OCP\AppFramework\Http\JSONResponse; use OCP\IRequest; @@ -100,9 +97,9 @@ class TokenController extends Controller { $token = $this->secureRandom->generate(128); $this->tokenProvider->generateToken($token, $user->getUID(), $loginName, $password, $name, IToken::PERMANENT_TOKEN); - return [ + return new JSONResponse([ 'token' => $token, - ]; + ]); } } diff --git a/core/Controller/TwoFactorChallengeController.php b/core/Controller/TwoFactorChallengeController.php index b9e10b147ce..c19cf523279 100644 --- a/core/Controller/TwoFactorChallengeController.php +++ b/core/Controller/TwoFactorChallengeController.php @@ -96,7 +96,7 @@ class TwoFactorChallengeController extends Controller { * * @param string $challengeProviderId * @param string $redirect_url - * @return TemplateResponse + * @return TemplateResponse|RedirectResponse */ public function showChallenge($challengeProviderId, $redirect_url) { $user = $this->userSession->getUser(); diff --git a/core/Controller/UserController.php b/core/Controller/UserController.php index 0cede94eb6e..fc282e36d9b 100644 --- a/core/Controller/UserController.php +++ b/core/Controller/UserController.php @@ -26,26 +26,20 @@ namespace OC\Core\Controller; use \OCP\AppFramework\Controller; use \OCP\AppFramework\Http\JSONResponse; use \OCP\IRequest; +use \OCP\IUserManager; class UserController extends Controller { /** - * @var \OCP\IUserManager + * @var IUserManager */ protected $userManager; - /** - * @var \OC_Defaults - */ - protected $defaults; - public function __construct($appName, IRequest $request, - $userManager, - $defaults + IUserManager $userManager ) { parent::__construct($appName, $request); $this->userManager = $userManager; - $this->defaults = $defaults; } /** diff --git a/core/Middleware/TwoFactorMiddleware.php b/core/Middleware/TwoFactorMiddleware.php index c87058d11fa..c4c3b724eb5 100644 --- a/core/Middleware/TwoFactorMiddleware.php +++ b/core/Middleware/TwoFactorMiddleware.php @@ -27,6 +27,7 @@ use Exception; use OC\Authentication\Exceptions\TwoFactorAuthRequiredException; use OC\Authentication\Exceptions\UserAlreadyLoggedInException; use OC\Authentication\TwoFactorAuth\Manager; +use OC\Core\Controller\LoginController; use OC\Core\Controller\TwoFactorChallengeController; use OC\User\Session; use OCP\AppFramework\Controller; @@ -36,6 +37,7 @@ use OCP\AppFramework\Utility\IControllerMethodReflector; use OCP\IRequest; use OCP\ISession; use OCP\IURLGenerator; +use OCP\IUser; class TwoFactorMiddleware extends Middleware { @@ -83,7 +85,7 @@ class TwoFactorMiddleware extends Middleware { return; } - if ($controller instanceof \OC\Core\Controller\LoginController && $methodName === 'logout') { + if ($controller instanceof LoginController && $methodName === 'logout') { // Don't block the logout page, to allow canceling the 2FA return; } @@ -92,7 +94,7 @@ class TwoFactorMiddleware extends Middleware { $user = $this->userSession->getUser(); if ($this->twoFactorManager->isTwoFactorAuthenticated($user)) { - $this->checkTwoFactor($controller, $methodName); + $this->checkTwoFactor($controller, $methodName, $user); } else if ($controller instanceof TwoFactorChallengeController) { // Allow access to the two-factor controllers only if two-factor authentication // is in progress. @@ -102,10 +104,10 @@ class TwoFactorMiddleware extends Middleware { // TODO: dont check/enforce 2FA if a auth token is used } - private function checkTwoFactor($controller, $methodName) { + private function checkTwoFactor($controller, $methodName, IUser $user) { // If two-factor auth is in progress disallow access to any controllers // defined within "LoginController". - $needsSecondFactor = $this->twoFactorManager->needsSecondFactor(); + $needsSecondFactor = $this->twoFactorManager->needsSecondFactor($user); $twoFactor = $controller instanceof TwoFactorChallengeController; // Disallow access to any controller if 2FA needs to be checked @@ -129,6 +131,8 @@ class TwoFactorMiddleware extends Middleware { if ($exception instanceof UserAlreadyLoggedInException) { return new RedirectResponse($this->urlGenerator->linkToRoute('files.view.index')); } + + throw $exception; } } diff --git a/core/Tags/Controller.php b/core/Tags/Controller.php deleted file mode 100644 index 3cba40636bc..00000000000 --- a/core/Tags/Controller.php +++ /dev/null @@ -1,129 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Morris Jobke <hey@morrisjobke.de> - * @author Thomas Tanghus <thomas@tanghus.net> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace OC\Core\Tags; - -class Controller { - protected static function getTagger($type) { - \OC_JSON::checkLoggedIn(); - \OC_JSON::callCheck(); - - try { - $tagger = \OC::$server->getTagManager()->load($type); - return $tagger; - } catch(\Exception $e) { - \OCP\Util::writeLog('core', __METHOD__ . ' Exception: ' . $e->getMessage(), \OCP\Util::ERROR); - $l = new \OC_L10n('core'); - \OC_JSON::error(array('message'=> $l->t('Error loading tags'))); - exit; - } - } - - public static function getTags($args) { - $tagger = self::getTagger($args['type']); - \OC_JSON::success(array('tags'=> $tagger->getTags())); - } - - public static function getFavorites($args) { - $tagger = self::getTagger($args['type']); - \OC_JSON::success(array('ids'=> $tagger->getFavorites())); - } - - public static function getIdsForTag($args) { - $tagger = self::getTagger($args['type']); - \OC_JSON::success(array('ids'=> $tagger->getIdsForTag($_GET['tag']))); - } - - public static function addTag($args) { - $tagger = self::getTagger($args['type']); - - $id = $tagger->add(strip_tags($_POST['tag'])); - if($id === false) { - $l = new \OC_L10n('core'); - \OC_JSON::error(array('message'=> $l->t('Tag already exists'))); - } else { - \OC_JSON::success(array('id'=> $id)); - } - } - - public static function deleteTags($args) { - $tags = $_POST['tags']; - if(!is_array($tags)) { - $tags = array($tags); - } - - $tagger = self::getTagger($args['type']); - - if(!$tagger->delete($tags)) { - $l = new \OC_L10n('core'); - \OC_JSON::error(array('message'=> $l->t('Error deleting tag(s)'))); - } else { - \OC_JSON::success(); - } - } - - public static function tagAs($args) { - $tagger = self::getTagger($args['type']); - - if(!$tagger->tagAs($args['id'], $_POST['tag'])) { - $l = new \OC_L10n('core'); - \OC_JSON::error(array('message'=> $l->t('Error tagging'))); - } else { - \OC_JSON::success(); - } - } - - public static function unTag($args) { - $tagger = self::getTagger($args['type']); - - if(!$tagger->unTag($args['id'], $_POST['tag'])) { - $l = new \OC_L10n('core'); - \OC_JSON::error(array('message'=> $l->t('Error untagging'))); - } else { - \OC_JSON::success(); - } - } - - public static function favorite($args) { - $tagger = self::getTagger($args['type']); - - if(!$tagger->addToFavorites($args['id'])) { - $l = new \OC_L10n('core'); - \OC_JSON::error(array('message'=> $l->t('Error favoriting'))); - } else { - \OC_JSON::success(); - } - } - - public static function unFavorite($args) { - $tagger = self::getTagger($args['type']); - - if(!$tagger->removeFromFavorites($args['id'])) { - $l = new \OC_L10n('core'); - \OC_JSON::error(array('message'=> $l->t('Error unfavoriting'))); - } else { - \OC_JSON::success(); - } - } - -} diff --git a/core/ajax/preview.php b/core/ajax/preview.php index 2894efdc8e3..6cfba6aef30 100644 --- a/core/ajax/preview.php +++ b/core/ajax/preview.php @@ -53,6 +53,8 @@ $info = \OC\Files\Filesystem::getFileInfo($file); if (!$info instanceof OCP\Files\FileInfo || !$always && !\OC::$server->getPreviewManager()->isAvailable($info)) { \OC_Response::setStatus(404); +} else if (!$info->isReadable()) { + \OC_Response::setStatus(403); } else { $preview = new \OC\Preview(\OC_User::getUser(), 'files'); $preview->setFile($file, $info); diff --git a/core/ajax/share.php b/core/ajax/share.php deleted file mode 100644 index adcf31a0dfa..00000000000 --- a/core/ajax/share.php +++ /dev/null @@ -1,375 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Bart Visscher <bartv@thisnet.nl> - * @author Björn Schießle <bjoern@schiessle.org> - * @author Craig Morrissey <craig@owncloud.com> - * @author dampfklon <me@dampfklon.de> - * @author Felix Böhm <felixboehm@gmx.de> - * @author Joas Schilling <coding@schilljs.com> - * @author Leonardo Diez <leio10@users.noreply.github.com> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Michael Gapczynski <GapczynskiM@gmail.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Ramiro Aparicio <rapariciog@gmail.com> - * @author Robin Appelman <robin@icewind.nl> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * @author Thomas Tanghus <thomas@tanghus.net> - * - * @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/> - * - */ - -use OCP\IUser; - -OC_JSON::checkLoggedIn(); -OCP\JSON::callCheck(); - -$defaults = new \OCP\Defaults(); - -if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSource'])) { - switch ($_POST['action']) { - case 'informRecipients': - $l = \OC::$server->getL10N('core'); - $shareType = (int) $_POST['shareType']; - $itemType = (string)$_POST['itemType']; - $itemSource = (string)$_POST['itemSource']; - $recipient = (string)$_POST['recipient']; - - $userManager = \OC::$server->getUserManager(); - $recipientList = []; - if($shareType === \OCP\Share::SHARE_TYPE_USER) { - $recipientList[] = $userManager->get($recipient); - } elseif ($shareType === \OCP\Share::SHARE_TYPE_GROUP) { - $recipientList = \OC_Group::usersInGroup($recipient); - $group = \OC::$server->getGroupManager()->get($recipient); - $recipientList = $group->searchUsers(''); - } - // don't send a mail to the user who shared the file - $recipientList = array_filter($recipientList, function($user) { - /** @var IUser $user */ - return $user->getUID() !== \OCP\User::getUser(); - }); - - $mailNotification = new \OC\Share\MailNotifications( - \OC::$server->getUserSession()->getUser(), - \OC::$server->getL10N('lib'), - \OC::$server->getMailer(), - \OC::$server->getLogger(), - $defaults, - \OC::$server->getURLGenerator() - ); - $result = $mailNotification->sendInternalShareMail($recipientList, $itemSource, $itemType); - - \OCP\Share::setSendMailStatus($itemType, $itemSource, $shareType, $recipient, true); - - if (empty($result)) { - OCP\JSON::success(); - } else { - OCP\JSON::error(array( - 'data' => array( - 'message' => $l->t("Couldn't send mail to following users: %s ", - implode(', ', $result) - ) - ) - )); - } - break; - case 'informRecipientsDisabled': - $itemSource = (string)$_POST['itemSource']; - $shareType = (int)$_POST['shareType']; - $itemType = (string)$_POST['itemType']; - $recipient = (string)$_POST['recipient']; - \OCP\Share::setSendMailStatus($itemType, $itemSource, $shareType, $recipient, false); - OCP\JSON::success(); - break; - - case 'email': - // read post variables - $link = (string)$_POST['link']; - $file = (string)$_POST['file']; - $to_address = (string)$_POST['toaddress']; - - $mailNotification = new \OC\Share\MailNotifications( - \OC::$server->getUserSession()->getUser(), - \OC::$server->getL10N('lib'), - \OC::$server->getMailer(), - \OC::$server->getLogger(), - $defaults, - \OC::$server->getURLGenerator() - ); - - $expiration = null; - if (isset($_POST['expiration']) && $_POST['expiration'] !== '') { - try { - $date = new DateTime((string)$_POST['expiration']); - $expiration = $date->getTimestamp(); - } catch (Exception $e) { - \OCP\Util::writeLog('sharing', "Couldn't read date: " . $e->getMessage(), \OCP\Util::ERROR); - } - } - - $result = $mailNotification->sendLinkShareMail($to_address, $file, $link, $expiration); - if(empty($result)) { - // Get the token from the link - $linkParts = explode('/', $link); - $token = array_pop($linkParts); - - // Get the share for the token - $share = \OCP\Share::getShareByToken($token, false); - if ($share !== false) { - $currentUser = \OC::$server->getUserSession()->getUser()->getUID(); - $file = '/' . ltrim($file, '/'); - - // Check whether share belongs to the user and whether the file is the same - if ($share['file_target'] === $file && $share['uid_owner'] === $currentUser) { - - // Get the path for the user - $view = new \OC\Files\View('/' . $currentUser . '/files'); - $fileId = (int) $share['item_source']; - $path = $view->getPath((int) $share['item_source']); - - if ($path !== null) { - $event = \OC::$server->getActivityManager()->generateEvent(); - $event->setApp(\OCA\Files_Sharing\Activity::FILES_SHARING_APP) - ->setType(\OCA\Files_Sharing\Activity::TYPE_SHARED) - ->setAuthor($currentUser) - ->setAffectedUser($currentUser) - ->setObject('files', $fileId, $path) - ->setSubject(\OCA\Files_Sharing\Activity::SUBJECT_SHARED_EMAIL, [$path, $to_address]); - \OC::$server->getActivityManager()->publish($event); - } - } - } - - \OCP\JSON::success(); - } else { - $l = \OC::$server->getL10N('core'); - OCP\JSON::error(array( - 'data' => array( - 'message' => $l->t("Couldn't send mail to following users: %s ", - implode(', ', $result) - ) - ) - )); - } - - break; - } -} else if (isset($_GET['fetch'])) { - switch ($_GET['fetch']) { - case 'getItemsSharedStatuses': - if (isset($_GET['itemType'])) { - $return = OCP\Share::getItemsShared((string)$_GET['itemType'], OCP\Share::FORMAT_STATUSES); - is_array($return) ? OC_JSON::success(array('data' => $return)) : OC_JSON::error(); - } - break; - case 'getItem': - if (isset($_GET['itemType']) - && isset($_GET['itemSource']) - && isset($_GET['checkReshare']) - && isset($_GET['checkShares'])) { - if ($_GET['checkReshare'] == 'true') { - $reshare = OCP\Share::getItemSharedWithBySource( - (string)$_GET['itemType'], - (string)$_GET['itemSource'], - OCP\Share::FORMAT_NONE, - null, - true - ); - } else { - $reshare = false; - } - if ($_GET['checkShares'] == 'true') { - $shares = OCP\Share::getItemShared( - (string)$_GET['itemType'], - (string)$_GET['itemSource'], - OCP\Share::FORMAT_NONE, - null, - true - ); - } else { - $shares = false; - } - OC_JSON::success(array('data' => array('reshare' => $reshare, 'shares' => $shares))); - } - break; - case 'getShareWithEmail': - $result = array(); - if (isset($_GET['search'])) { - $cm = OC::$server->getContactsManager(); - if (!is_null($cm) && $cm->isEnabled()) { - $contacts = $cm->search((string)$_GET['search'], array('FN', 'EMAIL')); - foreach ($contacts as $contact) { - if (!isset($contact['EMAIL'])) { - continue; - } - - $emails = $contact['EMAIL']; - if (!is_array($emails)) { - $emails = array($emails); - } - - foreach($emails as $email) { - $result[] = array( - 'id' => $contact['id'], - 'email' => $email, - 'displayname' => $contact['FN'], - ); - } - } - } - } - OC_JSON::success(array('data' => $result)); - break; - case 'getShareWith': - if (isset($_GET['search'])) { - $shareWithinGroupOnly = OC\Share\Share::shareWithGroupMembersOnly(); - $shareWith = array(); - $groups = OC_Group::getGroups((string)$_GET['search']); - if ($shareWithinGroupOnly) { - $usergroups = OC_Group::getUserGroups(OC_User::getUser()); - $groups = array_intersect($groups, $usergroups); - } - - $sharedUsers = []; - $sharedGroups = []; - if (isset($_GET['itemShares'])) { - if (isset($_GET['itemShares'][OCP\Share::SHARE_TYPE_USER]) && - is_array($_GET['itemShares'][OCP\Share::SHARE_TYPE_USER])) { - $sharedUsers = $_GET['itemShares'][OCP\Share::SHARE_TYPE_USER]; - } - - if (isset($_GET['itemShares'][OCP\Share::SHARE_TYPE_GROUP]) && - is_array($_GET['itemShares'][OCP\Share::SHARE_TYPE_GROUP])) { - $sharedGroups = $_GET['itemShares'][OCP\Share::SHARE_TYPE_GROUP]; - } - } - - $count = 0; - $users = array(); - $limit = 0; - $offset = 0; - // limit defaults to 15 if not specified via request parameter and can be no larger than 500 - $request_limit = min((int)$_GET['limit'] ?: 15, 500); - while ($count < $request_limit && count($users) == $limit) { - $limit = $request_limit - $count; - if ($shareWithinGroupOnly) { - $users = OC_Group::displayNamesInGroups($usergroups, (string)$_GET['search'], $limit, $offset); - } else { - $users = OC_User::getDisplayNames((string)$_GET['search'], $limit, $offset); - } - - $offset += $limit; - foreach ($users as $uid => $displayName) { - if (in_array($uid, $sharedUsers)) { - continue; - } - - if ((!isset($_GET['itemShares']) - || !is_array($_GET['itemShares'][OCP\Share::SHARE_TYPE_USER]) - || !in_array($uid, $_GET['itemShares'][OCP\Share::SHARE_TYPE_USER])) - && $uid != OC_User::getUser()) { - $shareWith[] = array( - 'label' => $displayName, - 'value' => array( - 'shareType' => OCP\Share::SHARE_TYPE_USER, - 'shareWith' => $uid) - ); - $count++; - } - } - } - $count = 0; - - // enable l10n support - $l = \OC::$server->getL10N('core'); - - foreach ($groups as $group) { - if (in_array($group, $sharedGroups)) { - continue; - } - - if ($count < $request_limit) { - if (!isset($_GET['itemShares']) - || !isset($_GET['itemShares'][OCP\Share::SHARE_TYPE_GROUP]) - || !is_array($_GET['itemShares'][OCP\Share::SHARE_TYPE_GROUP]) - || !in_array($group, $_GET['itemShares'][OCP\Share::SHARE_TYPE_GROUP])) { - $shareWith[] = array( - 'label' => $group, - 'value' => array( - 'shareType' => OCP\Share::SHARE_TYPE_GROUP, - 'shareWith' => $group - ) - ); - $count++; - } - } else { - break; - } - } - - // allow user to add unknown remote addresses for server-to-server share - $backend = \OCP\Share::getBackend((string)$_GET['itemType']); - if ($backend->isShareTypeAllowed(\OCP\Share::SHARE_TYPE_REMOTE)) { - if (substr_count((string)$_GET['search'], '@') >= 1) { - $shareWith[] = array( - 'label' => (string)$_GET['search'], - 'value' => array( - 'shareType' => \OCP\Share::SHARE_TYPE_REMOTE, - 'shareWith' => (string)$_GET['search'] - ) - ); - } - $contactManager = \OC::$server->getContactsManager(); - $addressBookContacts = $contactManager->search($_GET['search'], ['CLOUD', 'FN']); - foreach ($addressBookContacts as $contact) { - if (isset($contact['CLOUD'])) { - foreach ($contact['CLOUD'] as $cloudId) { - $shareWith[] = array( - 'label' => $contact['FN'] . ' (' . $cloudId . ')', - 'value' => array( - 'shareType' => \OCP\Share::SHARE_TYPE_REMOTE, - 'shareWith' => $cloudId - ) - ); - } - } - } - } - - $sharingAutocompletion = \OC::$server->getConfig() - ->getAppValue('core', 'shareapi_allow_share_dialog_user_enumeration', 'yes'); - - if ($sharingAutocompletion !== 'yes') { - $searchTerm = strtolower($_GET['search']); - $shareWith = array_filter($shareWith, function($user) use ($searchTerm) { - return strtolower($user['label']) === $searchTerm - || strtolower($user['value']['shareWith']) === $searchTerm; - }); - } - - $sorter = new \OC\Share\SearchResultSorter((string)$_GET['search'], - 'label', - \OC::$server->getLogger()); - usort($shareWith, array($sorter, 'sort')); - OC_JSON::success(array('data' => $shareWith)); - } - break; - } -} diff --git a/core/css/apps.css b/core/css/apps.css index 0ccdb8a0398..24865cd6f6d 100644 --- a/core/css/apps.css +++ b/core/css/apps.css @@ -92,7 +92,7 @@ width: 44px; margin: 0; padding: 0; - background: none; background-image: url('../img/actions/triangle-s.svg'); + background: none; background-image: url('../img/actions/triangle-s.svg?v=1'); background-size: 16px; background-repeat: no-repeat; background-position: center; border: none; border-radius: 0; @@ -256,7 +256,7 @@ background-color: transparent; background-repeat: no-repeat; background-position: center; - background-image: url('../img/actions/more.svg'); + background-image: url('../img/actions/more.svg?v=1'); } #app-navigation .app-navigation-entry-utils-menu-button:hover button, @@ -497,7 +497,7 @@ padding: 0; margin: 0; background-color: #fff; - background-image: url('../img/actions/settings.svg'); + background-image: url('../img/actions/settings.svg?v=1'); background-position: 14px center; background-repeat: no-repeat; box-shadow: none; diff --git a/core/css/header.css b/core/css/header.css index 5a2b8009b15..efdd3be7ceb 100644 --- a/core/css/header.css +++ b/core/css/header.css @@ -68,7 +68,7 @@ } #header .logo { - background-image: url('../img/logo-icon.svg'); + background-image: url('../img/logo-icon.svg?v=1'); background-repeat: no-repeat; background-size: 175px; background-position: center; @@ -80,7 +80,7 @@ #header .logo-icon { /* display logo so appname can be shown next to it */ display: inline-block; - background-image: url('../img/logo-icon.svg'); + background-image: url('../img/logo-icon.svg?v=1'); background-repeat: no-repeat; background-position: center center; width: 62px; diff --git a/core/css/icons.css b/core/css/icons.css index 1a632fdd58b..d1ef86a94d0 100644 --- a/core/css/icons.css +++ b/core/css/icons.css @@ -11,7 +11,7 @@ /* general assets */ .icon-breadcrumb { - background-image: url('../img/breadcrumb.svg'); + background-image: url('../img/breadcrumb.svg?v=1'); } .loading, @@ -111,225 +111,221 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading- /* action icons */ .icon-add { - background-image: url('../img/actions/add.svg'); + background-image: url('../img/actions/add.svg?v=1'); } .icon-caret { - background-image: url('../img/actions/caret.svg'); + background-image: url('../img/actions/caret.svg?v=1'); } .icon-caret-dark { - background-image: url('../img/actions/caret-dark.svg'); + background-image: url('../img/actions/caret-dark.svg?v=1'); } .icon-checkmark { - background-image: url('../img/actions/checkmark.svg'); + background-image: url('../img/actions/checkmark.svg?v=1'); } .icon-checkmark-white { - background-image: url('../img/actions/checkmark-white.svg'); + background-image: url('../img/actions/checkmark-white.svg?v=1'); } .icon-checkmark-color { - background-image: url('../img/actions/checkmark-color.svg'); + background-image: url('../img/actions/checkmark-color.svg?v=1'); } .icon-close { - background-image: url('../img/actions/close.svg'); + background-image: url('../img/actions/close.svg?v=1'); } .icon-comment { - background-image: url('../img/actions/comment.svg'); + background-image: url('../img/actions/comment.svg?v=1'); } .icon-confirm { - background-image: url('../img/actions/confirm.svg'); + background-image: url('../img/actions/confirm.svg?v=1'); } .icon-delete, .icon-delete.no-permission:hover, .icon-delete.no-permission:focus { - background-image: url('../img/actions/delete.svg'); + background-image: url('../img/actions/delete.svg?v=1'); } .icon-delete:hover, .icon-delete:focus { - background-image: url('../img/actions/delete-hover.svg'); + background-image: url('../img/actions/delete-hover.svg?v=1'); } .icon-delete-white { - background-image: url('../img/actions/delete-white.svg'); + background-image: url('../img/actions/delete-white.svg?v=1'); } .icon-details { - background-image: url('../img/actions/details.svg'); + background-image: url('../img/actions/details.svg?v=1'); } .icon-download { - background-image: url('../img/actions/download.svg'); + background-image: url('../img/actions/download.svg?v=1'); } .icon-download-white { - background-image: url('../img/actions/download-white.svg'); + background-image: url('../img/actions/download-white.svg?v=1'); } .icon-edit { - background-image: url('../img/actions/edit.svg'); + background-image: url('../img/actions/edit.svg?v=1'); } .icon-error { - background-image: url('../img/actions/error.svg'); + background-image: url('../img/actions/error.svg?v=1'); } .icon-error-white { - background-image: url('../img/actions/error-white.svg'); + background-image: url('../img/actions/error-white.svg?v=1'); } .icon-error-color { - background-image: url('../img/actions/error-color.svg'); + background-image: url('../img/actions/error-color.svg?v=1'); } .icon-external { - background-image: url('../img/actions/external.svg'); + background-image: url('../img/actions/external.svg?v=1'); } .icon-history { - background-image: url('../img/actions/history.svg'); + background-image: url('../img/actions/history.svg?v=1'); } .icon-info { - background-image: url('../img/actions/info.svg'); + background-image: url('../img/actions/info.svg?v=1'); } .icon-info-white { - background-image: url('../img/actions/info-white.svg'); + background-image: url('../img/actions/info-white.svg?v=1'); } .icon-logout { - background-image: url('../img/actions/logout.svg'); + background-image: url('../img/actions/logout.svg?v=1'); } .icon-mail { - background-image: url('../img/actions/mail.svg'); -} - -.icon-mail-grey { - background-image: url('../img/actions/mail-grey.svg'); + background-image: url('../img/actions/mail.svg?v=1'); } .icon-menu { - background-image: url('../img/actions/menu.svg'); + background-image: url('../img/actions/menu.svg?v=1'); } .icon-more { - background-image: url('../img/actions/more.svg'); + background-image: url('../img/actions/more.svg?v=1'); } .icon-password { - background-image: url('../img/actions/password.svg'); + background-image: url('../img/actions/password.svg?v=1'); } .icon-pause { - background-image: url('../img/actions/pause.svg'); + background-image: url('../img/actions/pause.svg?v=1'); } .icon-pause-big { - background-image: url('../img/actions/pause-big.svg'); + background-image: url('../img/actions/pause-big.svg?v=1'); } .icon-play { - background-image: url('../img/actions/play.svg'); + background-image: url('../img/actions/play.svg?v=1'); } .icon-play-add { - background-image: url('../img/actions/play-add.svg'); + background-image: url('../img/actions/play-add.svg?v=1'); } .icon-play-big { - background-image: url('../img/actions/play-big.svg'); + background-image: url('../img/actions/play-big.svg?v=1'); } .icon-play-next { - background-image: url('../img/actions/play-next.svg'); + background-image: url('../img/actions/play-next.svg?v=1'); } .icon-play-previous { - background-image: url('../img/actions/play-previous.svg'); + background-image: url('../img/actions/play-previous.svg?v=1'); } .icon-public { - background-image: url('../img/actions/public.svg'); + background-image: url('../img/actions/public.svg?v=1'); } .icon-rename { - background-image: url('../img/actions/rename.svg'); + background-image: url('../img/actions/rename.svg?v=1'); } .icon-search { - background-image: url('../img/actions/search.svg'); + background-image: url('../img/actions/search.svg?v=1'); } .icon-search-white { - background-image: url('../img/actions/search-white.svg'); + background-image: url('../img/actions/search-white.svg?v=1'); } .icon-settings { - background-image: url('../img/actions/settings.svg'); + background-image: url('../img/actions/settings.svg?v=1'); } .icon-share { - background-image: url('../img/actions/share.svg'); + background-image: url('../img/actions/share.svg?v=1'); } .icon-shared { - background-image: url('../img/actions/shared.svg'); + background-image: url('../img/actions/shared.svg?v=1'); } .icon-sound { - background-image: url('../img/actions/sound.svg'); + background-image: url('../img/actions/sound.svg?v=1'); } .icon-sound-off { - background-image: url('../img/actions/sound-off.svg'); + background-image: url('../img/actions/sound-off.svg?v=1'); } .icon-star, .icon-starred:hover, .icon-starred:focus { - background-image: url('../img/actions/star.svg'); + background-image: url('../img/actions/star.svg?v=1'); } .icon-starred, .icon-star:hover, .icon-star:focus { - background-image: url('../img/actions/starred.svg'); + background-image: url('../img/actions/starred.svg?v=1'); } .icon-toggle { - background-image: url('../img/actions/toggle.svg'); + background-image: url('../img/actions/toggle.svg?v=1'); } .icon-triangle-e { - background-image: url('../img/actions/triangle-e.svg'); + background-image: url('../img/actions/triangle-e.svg?v=1'); } .icon-triangle-n { - background-image: url('../img/actions/triangle-n.svg'); + background-image: url('../img/actions/triangle-n.svg?v=1'); } .icon-triangle-s { - background-image: url('../img/actions/triangle-s.svg'); + background-image: url('../img/actions/triangle-s.svg?v=1'); } .icon-upload { - background-image: url('../img/actions/upload.svg'); + background-image: url('../img/actions/upload.svg?v=1'); } .icon-upload-white { - background-image: url('../img/actions/upload-white.svg'); + background-image: url('../img/actions/upload-white.svg?v=1'); } .icon-user { - background-image: url('../img/actions/user.svg'); + background-image: url('../img/actions/user.svg?v=1'); } .icon-view-close { - background-image: url('../img/actions/view-close.svg'); + background-image: url('../img/actions/view-close.svg?v=1'); } .icon-view-download { - background-image: url('../img/actions/view-download.svg'); + background-image: url('../img/actions/view-download.svg?v=1'); } .icon-view-next { - background-image: url('../img/actions/view-next.svg'); + background-image: url('../img/actions/view-next.svg?v=1'); } .icon-view-pause { - background-image: url('../img/actions/view-pause.svg'); + background-image: url('../img/actions/view-pause.svg?v=1'); } .icon-view-play { - background-image: url('../img/actions/view-play.svg'); + background-image: url('../img/actions/view-play.svg?v=1'); } .icon-view-previous { - background-image: url('../img/actions/view-previous.svg'); + background-image: url('../img/actions/view-previous.svg?v=1'); } @@ -338,45 +334,45 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading- /* places icons */ .icon-calendar-dark { - background-image: url('../img/places/calendar-dark.svg'); + background-image: url('../img/places/calendar-dark.svg?v=1'); } .icon-contacts-dark { - background-image: url('../img/places/contacts-dark.svg'); + background-image: url('../img/places/contacts-dark.svg?v=1'); } .icon-files { - background-image: url('../img/places/files.svg'); + background-image: url('../img/places/files.svg?v=1'); } .icon-file, .icon-filetype-text { - background-image: url('../img/filetypes/text.svg'); + background-image: url('../img/filetypes/text.svg?v=1'); } .icon-folder, .icon-filetype-folder { - background-image: url('../img/filetypes/folder.svg'); + background-image: url('../img/filetypes/folder.svg?v=1'); } .icon-filetype-folder-drag-accept { - background-image: url('../img/filetypes/folder-drag-accept.svg')!important; + background-image: url('../img/filetypes/folder-drag-accept.svg?v=1')!important; } .icon-home { - background-image: url('../img/places/home.svg'); + background-image: url('../img/places/home.svg?v=1'); } .icon-link { - background-image: url('../img/places/link.svg'); + background-image: url('../img/places/link.svg?v=1'); } .icon-music { - background-image: url('../img/places/music.svg'); + background-image: url('../img/places/music.svg?v=1'); } .icon-picture { - background-image: url('../img/places/picture.svg'); + background-image: url('../img/places/picture.svg?v=1'); } .icon-clippy { - background-image: url('../img/actions/clippy.svg'); + background-image: url('../img/actions/clippy.svg?v=1'); } diff --git a/core/css/multiselect.css b/core/css/multiselect.css index ef56044fd05..cc1d6a3b468 100644 --- a/core/css/multiselect.css +++ b/core/css/multiselect.css @@ -42,6 +42,8 @@ ul.multiselectoptions > li input[type='checkbox']+label { width: 100%; padding: 5px 27px; margin-left: -27px; /* to have area around checkbox clickable as well */ + text-overflow: ellipsis; + overflow: hidden; } ul.multiselectoptions > li input[type='checkbox']:checked+label { font-weight: bold; diff --git a/core/css/share.css b/core/css/share.css index 047bb5eba50..0da3aa5359d 100644 --- a/core/css/share.css +++ b/core/css/share.css @@ -171,3 +171,7 @@ a.showCruds:hover,a.unshare:hover { padding-top: 12px; color: #999; } + +.shareTabView .mailView .icon-mail { + opacity: 0.5; +} diff --git a/core/css/styles.css b/core/css/styles.css index 7f4f7896c94..25bc2d086d5 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -26,20 +26,29 @@ body { #body-login { text-align: center; background-color: #0082c9; - background-image: url('../img/background.jpg'); + background-image: url('../img/background.jpg?v=1'); background-position: 50% 50%; background-repeat: no-repeat; background-size: cover; } +.two-factor-header { + text-align: center; +} + .two-factor-provider { text-align: center; - width: 100%; + width: 258px !important; display: inline-block; + margin-bottom: 0 !important; + background-color: rgba(0,0,0,0.3) !important; + border: none !important; } -a.two-factor-cancel { - color: #fff; +.two-factor-cancel { + display: inline-block; + padding: 12px; + color: rgba(255, 255, 255, .75); } .float-spinner { @@ -98,7 +107,7 @@ a.two-factor-cancel { font-size: 1.2em; padding: 3px; padding-left: 25px; - background: transparent url('../img/actions/search-white.svg') no-repeat 6px center; + background: transparent url('../img/actions/search-white.svg?v=1') no-repeat 6px center; color: #fff; border: 0; border-radius: 3px; @@ -292,7 +301,8 @@ a.two-factor-cancel { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; opacity: .7; } -#body-login input[type="password"] { +#body-login input[type="password"], +#body-login input[name="adminpass-clone"] { padding-right: 40px; box-sizing: border-box; min-width: 269px; @@ -465,7 +475,7 @@ label.infield { position: absolute !important; height: 20px; width: 24px; - background-image: url('../img/actions/toggle.svg'); + background-image: url('../img/actions/toggle.svg?v=1'); background-repeat: no-repeat; background-position: center; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"; @@ -757,15 +767,15 @@ a.bookmarklet { background-color:#ddd; border:1px solid #ccc; padding:5px;paddin .exception{color:#000;} .exception textarea{width:95%;height:200px;background:#ffe;border:0;} -.ui-icon-circle-triangle-e{ background-image:url('../img/actions/play-next.svg'); } -.ui-icon-circle-triangle-w{ background-image:url('../img/actions/play-previous.svg'); } +.ui-icon-circle-triangle-e{ background-image:url('../img/actions/play-next.svg?v=1'); } +.ui-icon-circle-triangle-w{ background-image:url('../img/actions/play-previous.svg?v=1'); } .ui-datepicker-prev,.ui-datepicker-next{ border:1px solid #ddd; background:#fff; } /* ---- DIALOGS ---- */ #oc-dialog-filepicker-content .dirtree {width:92%; overflow:hidden; } #oc-dialog-filepicker-content .dirtree .home { - background-image:url('../img/places/home.svg'); + background-image:url('../img/places/home.svg?v=1'); background-repeat:no-repeat; background-position: left center; width: 30px; @@ -848,7 +858,7 @@ span.ui-icon {float: left; margin: 3px 7px 30px 0;} } .popup.topright { top:7em; right:1em; } .popup.bottomleft { bottom:1em; left:33em; } -.popup .close { position:absolute; top:0.2em; right:0.2em; height:20px; width:20px; background:url('../img/actions/close.svg') no-repeat center; } +.popup .close { position:absolute; top:0.2em; right:0.2em; height:20px; width:20px; background:url('../img/actions/close.svg?v=1') no-repeat center; } .popup h2 { font-size:20px; } .arrow { border-bottom:10px solid white; border-left:10px solid transparent; border-right:10px solid transparent; display:block; height:0; position:absolute; width:0; z-index:201; } .arrow.left { left:-13px; bottom:1.2em; -webkit-transform:rotate(270deg); -ms-transform:rotate(270deg); transform:rotate(270deg); } @@ -860,7 +870,7 @@ span.ui-icon {float: left; margin: 3px 7px 30px 0;} div.crumb { float: left; display: block; - background-image: url('../img/breadcrumb.svg'); + background-image: url('../img/breadcrumb.svg?v=1'); background-repeat: no-repeat; background-position: right center; height: 44px; diff --git a/core/img/default-app-icon.svg b/core/img/default-app-icon.svg index b6ae35211a3..ad789050c9a 100644 --- a/core/img/default-app-icon.svg +++ b/core/img/default-app-icon.svg @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> +<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 32 32"> <path d="m13.733 0.00064c-0.52991 0-0.93331 0.40337-0.93331 0.93333v2.6666c-1.182 0.3034-2.243 0.7934-3.2668 1.4001l-1.9334-1.9334c-0.3747-0.3747-0.9586-0.3747-1.3333 0l-3.1999 3.2c-0.37473 0.37474-0.37473 0.95859 0 1.3333l1.9334 1.9335c-0.6067 1.0239-1.0967 2.0849-1.4001 3.2669h-2.6666c-0.52994 0-0.9333 0.403-0.9333 0.933v4.5333c2e-8 0.52996 0.40336 0.93333 0.93331 0.93333h2.6666c0.30335 1.1817 0.79332 2.2426 1.4 3.2666l-1.9334 1.9349c-0.37473 0.37474-0.37473 0.95859 0 1.3333l3.1999 3.2c0.37473 0.37474 0.95857 0.37474 1.3333 0l1.9334-1.9349c1.024 0.608 2.0849 1.0965 3.2665 1.3995v2.6667c0 0.53 0.403 0.933 0.933 0.933h4.5332c0.52991 0 0.93331-0.4032 0.93331-0.9344v-2.6667c1.1816-0.30336 2.2425-0.79335 3.2665-1.4l1.9333 1.9333c0.37473 0.37474 0.95857 0.37474 1.3333 0l3.1999-3.2c0.37473-0.37474 0.37473-0.95859 0-1.3333l-1.9327-1.9328c0.60798-1.024 1.0965-2.0845 1.3994-3.2661h2.6666c0.532 0 0.935-0.403 0.935-0.933v-4.534c0-0.53-0.403-0.933-0.934-0.933h-2.667c-0.303-1.182-0.791-2.243-1.399-3.2666l1.932-1.9334c0.37473-0.37474 0.37473-0.95859 0-1.3333l-3.2-3.2c-0.37473-0.37474-0.95857-0.37474-1.3333 0l-1.9327 1.9334c-1.024-0.6067-2.084-1.0967-3.266-1.4001v-2.6667c0-0.52993-0.403-0.9333-0.933-0.9333zm2.2666 8.8689c3.9361 0 7.1309 3.1947 7.1309 7.1311 0 3.9362-3.1946 7.1311-7.1309 7.1311-3.9361 0-7.1309-3.1955-7.1309-7.1317s3.1948-7.1311 7.1309-7.1311z" display="block" fill="#fff"/> </svg> diff --git a/core/img/facebook.svg b/core/img/facebook.svg new file mode 100644 index 00000000000..4de4ccf3002 --- /dev/null +++ b/core/img/facebook.svg @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'> +<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="512px" viewBox="0 0 512 512" width="512px" version="1.1" enable-background="new 0 0 512 512"><g clip-rule="evenodd" fill-rule="evenodd"><path d="m256.23 512c140.58 0 255.77-115.19 255.77-255.77 0-141.05-115.19-256.23-255.77-256.23-141.05 0-256.23 115.18-256.23 256.23 0 140.58 115.18 255.77 256.23 255.77z" fill="#3A5BA2"/><path d="m224.02 160.08c0-35.372 28.575-63.946 63.938-63.946h48.072v63.946h-32.199c-8.608 0-15.873 7.257-15.873 15.873v32.192h48.072v63.938h-48.072v144.22h-63.938v-144.22h-48.065v-63.93h48.065v-48.07z" fill="#fff"/></g></svg> diff --git a/core/img/googleplus.svg b/core/img/googleplus.svg new file mode 100644 index 00000000000..8a443e4b6da --- /dev/null +++ b/core/img/googleplus.svg @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'> +<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="128px" viewBox="0 0 128 128" width="128px" version="1.1" enable-background="new 0 0 128 128"><circle cy="64" cx="64" r="64" fill="#D95032"/><path d="m49.424 97.875c-19.018 0-34.491-15.193-34.491-33.874 0-18.68 15.473-33.875 34.491-33.875 8.318 0 16.354 2.952 22.624 8.309l-8.771 9.899c-3.838-3.279-8.758-5.086-13.853-5.086-11.652 0-21.13 9.31-21.13 20.752 0 11.441 9.479 20.75 21.13 20.75 9.858 0 16.311-4.723 18.407-13.197h-18.244v-13.121h32.347v6.562c0 19.665-13.065 32.881-32.51 32.881z" fill="#fff"/><polygon points="117.93 58.438 107.93 58.438 107.93 48.438 99.934 48.438 99.934 58.438 89.934 58.438 89.934 66.438 99.934 66.438 99.934 76.438 107.93 76.438 107.93 66.438 117.93 66.438" fill="#fff"/></svg> diff --git a/core/img/mail.svg b/core/img/mail.svg new file mode 100644 index 00000000000..21991dbf3ab --- /dev/null +++ b/core/img/mail.svg @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg xmlns="http://www.w3.org/2000/svg" height="150.24mm" width="150.24mm" version="1.1" viewBox="0 0 532.35042 532.35042"> + <g transform="translate(-101.02 -213.94)"> + <rect fill-rule="evenodd" ry="266.18" height="532.35" width="532.35" y="213.94" x="101.02" fill="#5cb85c"/> + <g fill="#fff"> + <path style="" d="m530.17 434.64c-5.4569 6.0026-11.641 11.278-18.19 15.825-30.377 20.554-60.936 41.291-90.585 62.755-15.279 11.278-34.197 25.102-54.023 25.102h-0.1819-0.1819c-19.827 0-38.744-13.824-54.023-25.102-29.649-21.646-60.208-42.2-90.403-62.755-6.7302-4.5474-12.915-9.8224-18.372-15.825v144.43c0 16.007 13.097 29.104 29.104 29.104h267.75c16.007 0 29.104-13.097 29.104-29.104v-144.43zm0-53.478c0-16.007-13.278-29.104-29.104-29.104h-267.75c-19.463 0-29.104 15.279-29.104 33.105 0 16.553 18.372 37.107 31.286 45.838 28.194 19.645 56.752 39.29 84.946 59.117 11.823 8.1854 31.832 24.92 46.566 24.92h0.1819 0.1819c14.734 0 34.742-16.735 46.566-24.92 28.194-19.827 56.752-39.472 85.128-59.117 16.007-11.096 31.104-29.467 31.104-49.84z"/> + </g> + </g> +</svg> diff --git a/core/img/rss.svg b/core/img/rss.svg new file mode 100644 index 00000000000..8126a97acd2 --- /dev/null +++ b/core/img/rss.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xml:space="preserve" enable-background="new 0 0 32 32" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32"><path d="m16 0c-8.837 0-16 7.163-16 16 0 8.836 7.163 16 16 16s16-7.164 16-16c0-8.837-7.163-16-16-16z" fill="#F8991D"/><path d="m21.705 22.647h2.942c0-8.434-6.861-15.3-15.294-15.3v2.934c6.81 0 12.352 5.548 12.352 12.366zm-10.315 0.005c1.128 0 2.039-0.906 2.039-2.029 0-1.117-0.911-2.033-2.039-2.033-1.123 0-2.036 0.916-2.036 2.033-0.001 1.123 0.912 2.029 2.036 2.029zm5.116-0.004h2.945c0-5.57-4.531-10.101-10.099-10.101v2.933c1.91 0 3.705 0.746 5.057 2.1 1.352 1.349 2.097 3.152 2.097 5.068z" fill="#fff"/><defs><path id="a" d="m50.696-47.198c-8.837 0-16 7.163-16 16 0 8.836 7.163 16 16 16s16-7.164 16-16c0-8.836-7.163-16-16-16z"/></defs><clipPath><use overflow="visible" xlink:href="#a"/></clipPath></svg> diff --git a/core/img/twitter.svg b/core/img/twitter.svg new file mode 100644 index 00000000000..8d96565ca27 --- /dev/null +++ b/core/img/twitter.svg @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'> +<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="512px" viewBox="0 0 512 512" width="512px" version="1.1" enable-background="new 0 0 512 512"><g clip-rule="evenodd" fill-rule="evenodd"><path d="m256.23 512c140.58 0 255.77-115.19 255.77-255.77 0-141.05-115.19-256.23-255.77-256.23-141.05 0-256.23 115.18-256.23 256.23 0 140.58 115.18 255.77 256.23 255.77z" fill="#1EBEF0"/><path d="m276.64 137.41c-9.077 6.351-15.873 15.42-20.865 25.396l-2.265 5.898c-1.359 4.077-2.273 8.163-2.726 12.241-0.453 2.265-0.453 4.085-0.906 5.898v3.625l0.453 5.898 0.906 7.71h-4.985c-22.224-0.453-43.987-5.445-63.04-14.061l-11.334-5.437c-2.265-0.914-4.078-2.273-6.351-3.632-12.694-7.257-24.028-16.78-34.012-27.208-6.343-6.804-12.241-14.061-17.232-21.771-5.438 10.437-8.616 22.677-8.616 35.379 0 4.531 0.453 9.069 1.359 13.6 0 2.265 0.453 4.085 0.914 5.898 4.078 13.6 11.334 25.849 21.31 34.918l4.992 4.539-6.351-1.367c-8.163-2.266-16.326-4.984-24.036-8.164 0.906 16.327 7.257 31.293 17.232 43.089 9.522 11.327 22.224 19.951 36.73 24.028l-16.779 0.906-14.054-0.453c10.429 25.403 34.465 43.995 63.033 46.261-26.302 19.498-58.955 30.388-93.873 30.388 25.849 15.873 55.33 25.841 87.521 27.653h20.865c99.31-5.438 177.77-87.522 177.77-188.2v-9.522c3.625-3.171 7.25-6.343 10.89-9.975 8.608-7.71 16.326-16.78 22.67-26.302-10.437 6.804-22.67 10.429-36.277 10.429h-0.906 0.453c12.232-8.163 21.763-20.404 26.747-34.465-9.515 4.992-20.404 8.616-31.294 11.796l-1.359 0.453-8.155 1.812c-11.795-12.702-28.575-20.865-47.167-20.865h-1.358c-4.984 0-9.983 0.453-14.968 1.367-7.249 1.812-14.514 4.984-20.404 8.616l-4.54 3.58z" fill="#fff"/></g></svg> diff --git a/core/js/js.js b/core/js/js.js index d2bbbae6362..799d2ba0b24 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -1506,12 +1506,20 @@ function initCore() { if(!$app.is('a')) { $app = $app.closest('a'); } - if(!event.ctrlKey) { + if(event.which === 1 && !event.ctrlKey && !event.metaKey) { $app.addClass('app-loading'); } else { // Close navigation when opening app in // a new tab - OC.hideMenus(); + OC.hideMenus(function(){return false}); + } + }); + + $navigation.delegate('a', 'mouseup', function(event) { + if(event.which === 2) { + // Close navigation when opening app in + // a new tab via middle click + OC.hideMenus(function(){return false}); } }); } @@ -1519,14 +1527,29 @@ function initCore() { function setupUserMenu() { var $menu = $('#header #settings'); + // show loading feedback $menu.delegate('a', 'click', function(event) { var $page = $(event.target); if (!$page.is('a')) { $page = $page.closest('a'); } - $page.find('img').remove(); - $page.find('div').remove(); // prevent odd double-clicks - $page.prepend($('<div/>').addClass('icon-loading-small-dark')); + if(event.which === 1 && !event.ctrlKey && !event.metaKey) { + $page.find('img').remove(); + $page.find('div').remove(); // prevent odd double-clicks + $page.prepend($('<div/>').addClass('icon-loading-small-dark')); + } else { + // Close navigation when opening menu entry in + // a new tab + OC.hideMenus(function(){return false}); + } + }); + + $menu.delegate('a', 'mouseup', function(event) { + if(event.which === 2) { + // Close navigation when opening app in + // a new tab via middle click + OC.hideMenus(function(){return false}); + } }); } @@ -1574,6 +1597,10 @@ function initCore() { $target.closest('.app-navigation-noclose').length) { return; } + if($target.is('.app-navigation-entry-utils-menu-button') || + $target.closest('.app-navigation-entry-utils-menu-button').length) { + return; + } if($target.is('.add-new') || $target.closest('.add-new').length) { return; diff --git a/core/js/mimetypelist.js b/core/js/mimetypelist.js index 89c6e8c4d4e..e1b9dba14af 100644 --- a/core/js/mimetypelist.js +++ b/core/js/mimetypelist.js @@ -56,13 +56,19 @@ OC.MimeTypeList={ "application/vnd.visio": "x-office/document", "application/vnd.wordperfect": "x-office/document", "application/x-7z-compressed": "package/x-generic", + "application/x-bzip2": "package/x-generic", "application/x-cbr": "text", "application/x-compressed": "package/x-generic", "application/x-dcraw": "image", "application/x-deb": "package/x-generic", + "application/x-fictionbook+xml": "text", "application/x-font": "image", "application/x-gimp": "image", "application/x-gzip": "package/x-generic", + "application/x-iwork-keynote-sffkey": "x-office/presentation", + "application/x-iwork-numbers-sffnumbers": "x-office/spreadsheet", + "application/x-iwork-pages-sffpages": "x-office/document", + "application/x-mobipocket-ebook": "text", "application/x-perl": "text/code", "application/x-photoshop": "image", "application/x-php": "text/code", diff --git a/core/js/multiselect.js b/core/js/multiselect.js index 71cf3e10a69..bdf420a2f7f 100644 --- a/core/js/multiselect.js +++ b/core/js/multiselect.js @@ -32,7 +32,7 @@ 'onuncheck':false, 'minWidth': 'default;' }; - var slideDuration = 200; + var slideDuration = 0; $(this).attr('data-msid', multiSelectId); $.extend(settings,options); $.each(this.children(),function(i,option) { @@ -75,6 +75,26 @@ var self = this; self.menuDirection = 'down'; + + function closeDropDown() { + if(!button.parent().data('preventHide')) { + // How can I save the effect in a var? + if(self.menuDirection === 'down') { + button.parent().children('ul').slideUp(slideDuration,function() { + button.parent().children('ul').remove(); + button.removeClass('active down'); + $(self).trigger($.Event('dropdownclosed', settings)); + }); + } else { + button.parent().children('ul').fadeOut(slideDuration,function() { + button.parent().children('ul').remove(); + button.removeClass('active up'); + $(self).trigger($.Event('dropdownclosed', settings)); + }); + } + } + } + button.click(function(event){ var button=$(this); @@ -83,21 +103,20 @@ button.parent().children('ul').slideUp(slideDuration,function() { button.parent().children('ul').remove(); button.removeClass('active down'); + $(self).trigger($.Event('dropdownclosed', settings)); }); } else { button.parent().children('ul').fadeOut(slideDuration,function() { button.parent().children('ul').remove(); button.removeClass('active up'); + $(self).trigger($.Event('dropdownclosed', settings)); }); } return; } + // tell other lists to shut themselves var lists=$('ul.multiselectoptions'); - lists.slideUp(slideDuration,function(){ - lists.remove(); - $('div.multiselect').removeClass('active'); - button.addClass('active'); - }); + lists.trigger($.Event('shut')); button.addClass('active'); event.stopPropagation(); var options=$(this).parent().next().children(); @@ -309,29 +328,16 @@ list.detach().insertBefore($(this)); list.addClass('up'); button.addClass('up'); - list.fadeIn(); + list.show(); self.menuDirection = 'up'; } list.click(function(event) { event.stopPropagation(); }); + list.one('shut', closeDropDown); }); - $(window).click(function() { - if(!button.parent().data('preventHide')) { - // How can I save the effect in a var? - if(self.menuDirection === 'down') { - button.parent().children('ul').slideUp(slideDuration,function() { - button.parent().children('ul').remove(); - button.removeClass('active down'); - }); - } else { - button.parent().children('ul').fadeOut(slideDuration,function() { - button.parent().children('ul').remove(); - button.removeClass('active up'); - }); - } - } - }); + + $(window).click(closeDropDown); return span; }; diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js index b77063a9eae..75c8ef9020e 100644 --- a/core/js/oc-dialogs.js +++ b/core/js/oc-dialogs.js @@ -218,6 +218,13 @@ var OCdialogs = { self.$filePicker = null; } }); + + // We can access primary class only from oc-dialog. + // Hence this is one of the approach to get the choose button. + var getOcDialog = self.$filePicker.closest('.oc-dialog'); + var buttonEnableDisable = getOcDialog.find('.primary'); + buttonEnableDisable.prop("disabled", "true"); + if (!OC.Util.hasSVGSupport()) { OC.Util.replaceSVG(self.$filePicker.parent()); } @@ -812,18 +819,25 @@ var OCdialogs = { var self = event.data; var dir = $(event.target).data('dir'); self._fillFilePicker(dir); + var getOcDialog = this.closest('.oc-dialog'); + var buttonEnableDisable = $('.primary', getOcDialog); + buttonEnableDisable.prop("disabled", true); }, /** * handle clicks made in the filepicker */ _handlePickerClick:function(event, $element) { + var getOcDialog = this.$filePicker.closest('.oc-dialog'); + var buttonEnableDisable = getOcDialog.find('.primary'); if ($element.data('type') === 'file') { if (this.$filePicker.data('multiselect') !== true || !event.ctrlKey) { this.$filelist.find('.filepicker_element_selected').removeClass('filepicker_element_selected'); } $element.toggleClass('filepicker_element_selected'); + buttonEnableDisable.prop("disabled", false); } else if ( $element.data('type') === 'dir' ) { this._fillFilePicker(this.$filePicker.data('path') + '/' + $element.data('entryname')); + buttonEnableDisable.prop("disabled", true); } } }; diff --git a/core/js/setupchecks.js b/core/js/setupchecks.js index 1f18c7b6fa7..936d742ce46 100644 --- a/core/js/setupchecks.js +++ b/core/js/setupchecks.js @@ -263,6 +263,7 @@ var messages = []; if (xhr.status === 200) { + var tipsUrl = OC.generateUrl('settings/admin/tips-tricks'); if(OC.getProtocol() === 'https') { // Extract the value of 'Strict-Transport-Security' var transportSecurityValidity = xhr.getResponseHeader('Strict-Transport-Security'); @@ -278,13 +279,13 @@ var minimumSeconds = 15552000; if(isNaN(transportSecurityValidity) || transportSecurityValidity <= (minimumSeconds - 1)) { messages.push({ - msg: t('core', '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>.', {'seconds': minimumSeconds, docUrl: '#admin-tips'}), + msg: t('core', '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>.', {'seconds': minimumSeconds, docUrl: tipsUrl}), type: OC.SetupChecks.MESSAGE_TYPE_WARNING }); } } else { messages.push({ - msg: t('core', '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>.', {docUrl: '#admin-tips'}), + msg: t('core', '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>.', {docUrl: tipsUrl}), type: OC.SetupChecks.MESSAGE_TYPE_WARNING }); } diff --git a/core/js/shareconfigmodel.js b/core/js/shareconfigmodel.js index b1bbde7a695..b04c2acae16 100644 --- a/core/js/shareconfigmodel.js +++ b/core/js/shareconfigmodel.js @@ -8,7 +8,7 @@ * */ -/* global moment */ +/* global moment, oc_appconfig, oc_config */ (function() { if (!OC.Share) { diff --git a/core/js/sharedialogexpirationview.js b/core/js/sharedialogexpirationview.js index fa5c0c00986..a9849ef9161 100644 --- a/core/js/sharedialogexpirationview.js +++ b/core/js/sharedialogexpirationview.js @@ -8,7 +8,7 @@ * */ -/* global moment */ +/* global moment, Handlebars */ (function() { if (!OC.Share) { @@ -93,9 +93,12 @@ this.$el.find('.expirationDateContainer').toggleClass('hidden', !state); if (!state) { // discard expiration date + this.model.get('linkShare').expiration = ''; this.model.saveLinkShare({ expireDate: '' }); + } else { + this.$el.find('#expirationDate').focus(); } }, @@ -104,8 +107,10 @@ $target.tooltip('hide'); $target.removeClass('error'); + var expiration = moment($target.val(), 'DD-MM-YYYY').format('YYYY-MM-DD'); + this.model.get('linkShare').expiration = expiration; this.model.saveLinkShare({ - expiration: moment($target.val(), 'DD-MM-YYYY').format('YYYY-MM-DD') + expiration: expiration }, { error: function(model, message) { if (!message) { diff --git a/core/js/sharedialoglinkshareview.js b/core/js/sharedialoglinkshareview.js index 8ad2e270099..1d6a0f03d4d 100644 --- a/core/js/sharedialoglinkshareview.js +++ b/core/js/sharedialoglinkshareview.js @@ -8,6 +8,8 @@ * */ +/* globals Clipboard, Handlebars */ + (function() { if (!OC.Share) { OC.Share = {}; @@ -131,7 +133,7 @@ var clipboard = new Clipboard('.clipboardButton'); clipboard.on('success', function(e) { - $input = $(e.trigger); + var $input = $(e.trigger); $input.tooltip({placement: 'bottom', trigger: 'manual', title: t('core', 'Copied!')}); $input.tooltip('show'); _.delay(function() { @@ -139,7 +141,7 @@ }, 3000); }); clipboard.on('error', function (e) { - $input = $(e.trigger); + var $input = $(e.trigger); var actionMsg = ''; if (/iPhone|iPad/i.test(navigator.userAgent)) { actionMsg = t('core', 'Not supported!'); @@ -206,7 +208,7 @@ }, onPasswordKeyUp: function(event) { - if(event.keyCode == 13) { + if(event.keyCode === 13) { this.onPasswordEntered(); } }, @@ -328,7 +330,7 @@ publicUpload: publicUpload && isLinkShare, publicUploadChecked: publicUploadChecked, hideFileListChecked: hideFileListChecked, - publicUploadLabel: t('core', 'Allow editing'), + publicUploadLabel: t('core', 'Allow upload and editing'), hideFileListLabel: t('core', 'Hide file listing'), mailPublicNotificationEnabled: isLinkShare && this.configModel.isMailPublicNotificationEnabled(), mailPrivatePlaceholder: t('core', 'Email link to person'), diff --git a/core/js/sharedialogmailview.js b/core/js/sharedialogmailview.js index 79741e92ac5..ce0893cb25c 100644 --- a/core/js/sharedialogmailview.js +++ b/core/js/sharedialogmailview.js @@ -8,6 +8,8 @@ * */ +/* globals escapeHTML, Handlebars */ + (function() { if (!OC.Share) { OC.Share = {}; @@ -18,7 +20,7 @@ ' {{#if mailPublicNotificationEnabled}}' + '<form id="emailPrivateLink" class="emailPrivateLinkForm oneline">' + ' <input id="email" class="emailField" value="{{email}}" placeholder="{{mailPrivatePlaceholder}}" type="text" />' + - ' <a id="emailButton" class="icon icon-mail-grey" />' + + ' <a id="emailButton" class="icon icon-mail hasTooltip" title="Send e-mail"></a>' + '</form>' + ' {{/if}}' + '{{/if}}' @@ -137,7 +139,7 @@ fetch: 'getShareWithEmail', search: search.term }, function(result) { - if (result.status == 'success' && result.data.length > 0) { + if (result.status === 'success' && result.data.length > 0) { response(result.data); } }); diff --git a/core/js/sharedialogresharerinfoview.js b/core/js/sharedialogresharerinfoview.js index 600e2ecbf56..654eebf4997 100644 --- a/core/js/sharedialogresharerinfoview.js +++ b/core/js/sharedialogresharerinfoview.js @@ -8,6 +8,8 @@ * */ +/* globals Handlebars */ + (function() { if (!OC.Share) { OC.Share = {}; diff --git a/core/js/sharedialogshareelistview.js b/core/js/sharedialogshareelistview.js index d156d30cecd..540bafa5c1c 100644 --- a/core/js/sharedialogshareelistview.js +++ b/core/js/sharedialogshareelistview.js @@ -8,6 +8,8 @@ * */ +/* globals Handlebars */ + (function() { if (!OC.Share) { OC.Share = {}; @@ -254,8 +256,6 @@ var $element = $(event.target); var $li = $element.closest('li'); var shareId = $li.data('share-id'); - var shareType = $li.data('share-type'); - var shareWith = $li.attr('data-share-with'); // adjust checkbox states var $checkboxes = $('.permissions', $li).not('input[name="edit"]').not('input[name="share"]'); diff --git a/core/js/sharedialogview.js b/core/js/sharedialogview.js index 5637ffc3a0a..2c60f216ef9 100644 --- a/core/js/sharedialogview.js +++ b/core/js/sharedialogview.js @@ -8,6 +8,8 @@ * */ +/* globals Handlebars */ + (function() { if(!OC.Share) { OC.Share = {}; @@ -148,7 +150,7 @@ function (result) { $loading.addClass('hidden'); $loading.removeClass('inlineblock'); - if (result.ocs.meta.statuscode == 100) { + if (result.ocs.meta.statuscode === 100) { var users = result.ocs.data.exact.users.concat(result.ocs.data.users); var groups = result.ocs.data.exact.groups.concat(result.ocs.data.groups); var remotes = result.ocs.data.exact.remotes.concat(result.ocs.data.remotes); @@ -404,7 +406,7 @@ if (this.configModel.get('isRemoteShareAllowed')) { sharePlaceholder = t('core', 'Share with users, groups or remote users…'); } else { - sharePlaceholder = t('core', 'Share with users or groups…') + sharePlaceholder = t('core', 'Share with users or groups…'); } } else if (this.configModel.get('isRemoteShareAllowed')) { sharePlaceholder = t('core', 'Share with users or remote users…'); diff --git a/core/js/tests/specs/setupchecksSpec.js b/core/js/tests/specs/setupchecksSpec.js index 7c59094caac..0972bf76fc3 100644 --- a/core/js/tests/specs/setupchecksSpec.js +++ b/core/js/tests/specs/setupchecksSpec.js @@ -496,7 +496,7 @@ describe('OC.SetupChecks tests', function() { async.done(function( data, s, x ){ expect(data).toEqual([{ - msg: '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="#admin-tips">security tips</a>.', + msg: '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="http://localhost/index.php/settings/admin/tips-tricks">security tips</a>.', type: OC.SetupChecks.MESSAGE_TYPE_WARNING }]); done(); @@ -542,7 +542,7 @@ describe('OC.SetupChecks tests', function() { async.done(function( data, s, x ){ expect(data).toEqual([{ - msg: 'The "Strict-Transport-Security" HTTP header is not configured to at least "15552000" seconds. For enhanced security we recommend enabling HSTS as described in our <a href="#admin-tips" rel="noreferrer">security tips</a>.', + msg: 'The "Strict-Transport-Security" HTTP header is not configured to at least "15552000" seconds. For enhanced security we recommend enabling HSTS as described in our <a href="http://localhost/index.php/settings/admin/tips-tricks" rel="noreferrer">security tips</a>.', type: OC.SetupChecks.MESSAGE_TYPE_WARNING }]); done(); @@ -567,7 +567,7 @@ describe('OC.SetupChecks tests', function() { async.done(function( data, s, x ){ expect(data).toEqual([{ - msg: 'The "Strict-Transport-Security" HTTP header is not configured to at least "15552000" seconds. For enhanced security we recommend enabling HSTS as described in our <a href="#admin-tips" rel="noreferrer">security tips</a>.', + msg: 'The "Strict-Transport-Security" HTTP header is not configured to at least "15552000" seconds. For enhanced security we recommend enabling HSTS as described in our <a href="http://localhost/index.php/settings/admin/tips-tricks" rel="noreferrer">security tips</a>.', type: OC.SetupChecks.MESSAGE_TYPE_WARNING }]); done(); @@ -592,7 +592,7 @@ describe('OC.SetupChecks tests', function() { async.done(function( data, s, x ){ expect(data).toEqual([{ - msg: 'The "Strict-Transport-Security" HTTP header is not configured to at least "15552000" seconds. For enhanced security we recommend enabling HSTS as described in our <a href="#admin-tips" rel="noreferrer">security tips</a>.', + msg: 'The "Strict-Transport-Security" HTTP header is not configured to at least "15552000" seconds. For enhanced security we recommend enabling HSTS as described in our <a href="http://localhost/index.php/settings/admin/tips-tricks" rel="noreferrer">security tips</a>.', type: OC.SetupChecks.MESSAGE_TYPE_WARNING }]); done(); diff --git a/core/l10n/cs_CZ.js b/core/l10n/cs_CZ.js index 9ce8dbb58b4..5a78a664b86 100644 --- a/core/l10n/cs_CZ.js +++ b/core/l10n/cs_CZ.js @@ -131,6 +131,7 @@ OC.L10N.register( "Strong password" : "Silné heslo", "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Váš webový server ještě není správně nastaven pro umožnění synchronizace souborů, protože rozhraní WebDAV je pravděpodobně rozbité.", "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>." : "Tento webový server není správně nastaven pro rozpoznání \"{url}\". Více informací lze nalézt v naší <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentaci</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." : "Tento server nemá funkční připojení k Internetu: Nedaří se připojit k vícero koncovým bodům. Některé moduly jako např. externí úložiště, oznámení o dostupných aktualizacích nebo instalace aplikací třetích stran nebudou fungovat. Přístup k souborům z jiných míst a odesílání oznamovacích emailů také nemusí fungovat. Pokud chcete využívat všechny možnosti tohoto serveru, doporučujeme povolit připojení k Internetu.", "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>." : "Nebyla nakonfigurována paměťová cache. Pokud je dostupná, nakonfigurujte ji prosím pro zlepšení výkonu. Další informace lze nalézt v naší <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentaci</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>." : "PHP nemá práva pro čtení v /dev/urandom, to je ale z bezpečnostních důvodů velmi doporučováno. Více informací lze nalézt v naší <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentaci</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." : "Aktuálně používáte PHP {version}. Doporučujeme aktualizovat verzi PHP, abyste mohli využít <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">výkonnostních a bezpečnostních aktualizací poskytovaných autory PHP</a> tak rychle, jak to vaše distribuce umožňuje.", @@ -218,10 +219,13 @@ OC.L10N.register( "Hello {name}" : "Vítej, {name}", "new" : "nový", "_download %n file_::_download %n files_" : ["stáhnout %n soubor","stáhnout %n soubory","stáhnout %n souborů"], + "The update is in progress, leaving this page might interrupt the process in some environments." : "Probíhá aktualizace, opuštění této stránky může v některých prostředích přerušit proces.", + "Update to {version}" : "Aktualizace na {version}", "An error occurred." : "Došlo k chybě.", "Please reload the page." : "Načtěte stránku znovu, prosím.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Aktualizace nebyla úspěšná. Pro více informací si <a href=\"{url}\">přečtěte komentáře ve fóru</a> pojednávající o tomto problému.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Aktualizace byla neúspěšná. Nahlaste prosím problém <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">komunitě Nextcloudu</a>", + "Continue to Nextcloud" : "Pokračovat do Nextcloud", "The update was successful. Redirecting you to Nextcloud now." : "Aktualizace byla úspěšná. Probíhá přesměrování na Nexcloud.", "Searching other places" : "Prohledávání ostatních umístění", "No search results in other folders" : "V ostatních adresářích nebylo nic nalezeno", @@ -319,6 +323,23 @@ OC.L10N.register( "Please use the command line updater because you have a big instance." : "Prosím použijte aktualizační příkazový řádek, protože máte velkou instanci.", "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Pro pomoc, shlédněte <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentaci</a>.", "This %s instance is currently in maintenance mode, which may take a while." : "Tato instalace %s je právě ve stavu údržby a to může chvíli trvat.", - "This page will refresh itself when the %s instance is available again." : "Tato stránka se automaticky načte poté, co bude opět dostupná instance %s." + "This page will refresh itself when the %s instance is available again." : "Tato stránka se automaticky načte poté, co bude opět dostupná instance %s.", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Tento server nemá funkční připojení k Internetu. Některé moduly jako např. externí úložiště, oznámení o dostupných aktualizacích nebo instalace aplikací třetích stran nebudou fungovat. Přístup k souborům z jiných míst a odesílání oznamovacích emailů také nemusí fungovat. Pokud chcete využívat všechny možnosti ownCloud, doporučujeme povolit pro tento server připojení k Internetu.", + "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Probíhá aktualizace, opuštění této stránky může v některých prostředích přerušit proces.", + "Updating to {version}" : "Aktualizace na {version}", + "The update was successful. There were warnings." : "Aktualizace byla úspěšná. Zachycen výskyt varování.", + "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Tento webový server není správně nastaven pro rozpoznání \"{url}\". Více informací lze nalézt v naší <a target=\"_blank\" href=\"{docLink}\">dokumentaci</a>.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Nebyla nakonfigurována paměťová cache. Pokud je dostupná, nakonfigurujte ji prosím pro zlepšení výkonu. Další informace lze nalézt v naší <a target=\"_blank\" href=\"{docLink}\">dokumentaci</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\" href=\"{docLink}\">documentation</a>." : "PHP nemá práva pro čtení v /dev/urandom, to je ale z bezpečnostních důvodů velmi doporučováno. Více informací lze nalézt v naší <a target=\"_blank\" href=\"{docLink}\">dokumentaci</a>.", + "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Aktuálně používáte PHP {version}. Doporučujeme aktualizovat verzi PHP, abyste mohli využít <a target=\"_blank\" href=\"{phpLink}\">výkonnostních a bezpečnostních aktualizací poskytovaných autory PHP</a> tak rychle, jak to vaše distribuce umožňuje.", + "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\" href=\"{docLink}\">documentation</a>." : "Konfigurace hlaviček reverzní proxy není správná nebo přistupujete na Nextcloud z důvěryhodné proxy. Pokud nepřistupujete k Nextcloud z důvěryhodné proxy, potom je toto bezpečností chyba a může útočníkovi umožnit falšovat IP adresu, kterou ownCloud vidí. Další informace lze nalézt v naší <a target=\"_blank\" href=\"{docLink}\">dokumentaci</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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Je nakonfigurován memcached jako distribuovaná cache, ale je nainstalovaný nesprávný PHP modul \"memcache\". \\OC\\Memcache\\Memcached podporuje pouze \"memcached\" a ne \"memcache\". Podívejte se na <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki o obou modulech</a>.", + "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Některé soubory neprošly kontrolou integrity. Více informací o tom jak tento problém vyřešit, lze nalézt v naší <a target=\"_blank\" href=\"{docLink}\">dokumentaci</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Seznam neplatných souborů…</a> / <a href=\"{rescanEndpoint}\">Znovu ověřit…</a>)", + "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP hlavička \"Strict-Transport-Security\" není nakonfigurována na minimum \"{seconds}\" sekund. Pro vylepšení bezpečnosti doporučujeme povolit HSTS dle popisu v našich <a href=\"{docUrl}\">bezpečnostních tipech</a>.", + "An error occured. Please try again" : "Došlo k chybě. Zkuste to prosím znovu", + "not assignable" : "nepřiřaditelné", + "Updating {productName} to version {version}, this may take a while." : "Aktualizace {productName} na verzi {version}, to chvíli potrvá.", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pro informace, jak správně nastavit váš server, se podívejte do <a href=\"%s\" target=\"_blank\">dokumentace</a>.", + "An internal error occured." : "Nastala vnitřní chyba." }, "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/core/l10n/cs_CZ.json b/core/l10n/cs_CZ.json index d671415cfde..2b92833e09e 100644 --- a/core/l10n/cs_CZ.json +++ b/core/l10n/cs_CZ.json @@ -129,6 +129,7 @@ "Strong password" : "Silné heslo", "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Váš webový server ještě není správně nastaven pro umožnění synchronizace souborů, protože rozhraní WebDAV je pravděpodobně rozbité.", "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>." : "Tento webový server není správně nastaven pro rozpoznání \"{url}\". Více informací lze nalézt v naší <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentaci</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." : "Tento server nemá funkční připojení k Internetu: Nedaří se připojit k vícero koncovým bodům. Některé moduly jako např. externí úložiště, oznámení o dostupných aktualizacích nebo instalace aplikací třetích stran nebudou fungovat. Přístup k souborům z jiných míst a odesílání oznamovacích emailů také nemusí fungovat. Pokud chcete využívat všechny možnosti tohoto serveru, doporučujeme povolit připojení k Internetu.", "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>." : "Nebyla nakonfigurována paměťová cache. Pokud je dostupná, nakonfigurujte ji prosím pro zlepšení výkonu. Další informace lze nalézt v naší <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentaci</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>." : "PHP nemá práva pro čtení v /dev/urandom, to je ale z bezpečnostních důvodů velmi doporučováno. Více informací lze nalézt v naší <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentaci</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." : "Aktuálně používáte PHP {version}. Doporučujeme aktualizovat verzi PHP, abyste mohli využít <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">výkonnostních a bezpečnostních aktualizací poskytovaných autory PHP</a> tak rychle, jak to vaše distribuce umožňuje.", @@ -216,10 +217,13 @@ "Hello {name}" : "Vítej, {name}", "new" : "nový", "_download %n file_::_download %n files_" : ["stáhnout %n soubor","stáhnout %n soubory","stáhnout %n souborů"], + "The update is in progress, leaving this page might interrupt the process in some environments." : "Probíhá aktualizace, opuštění této stránky může v některých prostředích přerušit proces.", + "Update to {version}" : "Aktualizace na {version}", "An error occurred." : "Došlo k chybě.", "Please reload the page." : "Načtěte stránku znovu, prosím.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Aktualizace nebyla úspěšná. Pro více informací si <a href=\"{url}\">přečtěte komentáře ve fóru</a> pojednávající o tomto problému.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Aktualizace byla neúspěšná. Nahlaste prosím problém <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">komunitě Nextcloudu</a>", + "Continue to Nextcloud" : "Pokračovat do Nextcloud", "The update was successful. Redirecting you to Nextcloud now." : "Aktualizace byla úspěšná. Probíhá přesměrování na Nexcloud.", "Searching other places" : "Prohledávání ostatních umístění", "No search results in other folders" : "V ostatních adresářích nebylo nic nalezeno", @@ -317,6 +321,23 @@ "Please use the command line updater because you have a big instance." : "Prosím použijte aktualizační příkazový řádek, protože máte velkou instanci.", "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Pro pomoc, shlédněte <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentaci</a>.", "This %s instance is currently in maintenance mode, which may take a while." : "Tato instalace %s je právě ve stavu údržby a to může chvíli trvat.", - "This page will refresh itself when the %s instance is available again." : "Tato stránka se automaticky načte poté, co bude opět dostupná instance %s." + "This page will refresh itself when the %s instance is available again." : "Tato stránka se automaticky načte poté, co bude opět dostupná instance %s.", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Tento server nemá funkční připojení k Internetu. Některé moduly jako např. externí úložiště, oznámení o dostupných aktualizacích nebo instalace aplikací třetích stran nebudou fungovat. Přístup k souborům z jiných míst a odesílání oznamovacích emailů také nemusí fungovat. Pokud chcete využívat všechny možnosti ownCloud, doporučujeme povolit pro tento server připojení k Internetu.", + "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Probíhá aktualizace, opuštění této stránky může v některých prostředích přerušit proces.", + "Updating to {version}" : "Aktualizace na {version}", + "The update was successful. There were warnings." : "Aktualizace byla úspěšná. Zachycen výskyt varování.", + "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Tento webový server není správně nastaven pro rozpoznání \"{url}\". Více informací lze nalézt v naší <a target=\"_blank\" href=\"{docLink}\">dokumentaci</a>.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Nebyla nakonfigurována paměťová cache. Pokud je dostupná, nakonfigurujte ji prosím pro zlepšení výkonu. Další informace lze nalézt v naší <a target=\"_blank\" href=\"{docLink}\">dokumentaci</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\" href=\"{docLink}\">documentation</a>." : "PHP nemá práva pro čtení v /dev/urandom, to je ale z bezpečnostních důvodů velmi doporučováno. Více informací lze nalézt v naší <a target=\"_blank\" href=\"{docLink}\">dokumentaci</a>.", + "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Aktuálně používáte PHP {version}. Doporučujeme aktualizovat verzi PHP, abyste mohli využít <a target=\"_blank\" href=\"{phpLink}\">výkonnostních a bezpečnostních aktualizací poskytovaných autory PHP</a> tak rychle, jak to vaše distribuce umožňuje.", + "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\" href=\"{docLink}\">documentation</a>." : "Konfigurace hlaviček reverzní proxy není správná nebo přistupujete na Nextcloud z důvěryhodné proxy. Pokud nepřistupujete k Nextcloud z důvěryhodné proxy, potom je toto bezpečností chyba a může útočníkovi umožnit falšovat IP adresu, kterou ownCloud vidí. Další informace lze nalézt v naší <a target=\"_blank\" href=\"{docLink}\">dokumentaci</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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Je nakonfigurován memcached jako distribuovaná cache, ale je nainstalovaný nesprávný PHP modul \"memcache\". \\OC\\Memcache\\Memcached podporuje pouze \"memcached\" a ne \"memcache\". Podívejte se na <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki o obou modulech</a>.", + "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Některé soubory neprošly kontrolou integrity. Více informací o tom jak tento problém vyřešit, lze nalézt v naší <a target=\"_blank\" href=\"{docLink}\">dokumentaci</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Seznam neplatných souborů…</a> / <a href=\"{rescanEndpoint}\">Znovu ověřit…</a>)", + "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP hlavička \"Strict-Transport-Security\" není nakonfigurována na minimum \"{seconds}\" sekund. Pro vylepšení bezpečnosti doporučujeme povolit HSTS dle popisu v našich <a href=\"{docUrl}\">bezpečnostních tipech</a>.", + "An error occured. Please try again" : "Došlo k chybě. Zkuste to prosím znovu", + "not assignable" : "nepřiřaditelné", + "Updating {productName} to version {version}, this may take a while." : "Aktualizace {productName} na verzi {version}, to chvíli potrvá.", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pro informace, jak správně nastavit váš server, se podívejte do <a href=\"%s\" target=\"_blank\">dokumentace</a>.", + "An internal error occured." : "Nastala vnitřní chyba." },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" }
\ No newline at end of file diff --git a/core/l10n/de.js b/core/l10n/de.js index 96e78831c24..2b94f41492b 100644 --- a/core/l10n/de.js +++ b/core/l10n/de.js @@ -219,10 +219,13 @@ OC.L10N.register( "Hello {name}" : "Hallo {name}", "new" : "neu", "_download %n file_::_download %n files_" : ["Lade %n Datei herunter","Lade %n Dateien herunter"], + "The update is in progress, leaving this page might interrupt the process in some environments." : "Die Aktualisierung wird durchgeführt, wenn Du dieses Fenster verlässt, kann dies den Aktualisierungsprozess in manchen Umgebungen unterbrechen.", + "Update to {version}" : "Aktualisierung auf {version}", "An error occurred." : "Es ist ein Fehler aufgetreten.", "Please reload the page." : "Bitte lade die Seite neu.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Das Update war nicht erfolgreich. Für weitere Informationen <a href=\"{url}\"> schaue bitte in unser Forum </a> um das Problem zu lösen.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Das Update ist fehlgeschlagen. Bitte melde dieses Problem an die <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud Community</a>.", + "Continue to Nextcloud" : "Weiter zur Nextcloud", "The update was successful. Redirecting you to Nextcloud now." : "Das Update war erfolgreich. Weiterleitung zu Nextcloud.", "Searching other places" : "Andere Orte durchsuchen", "No search results in other folders" : "Keine Suchergebnisse in anderen Ordnern", @@ -320,6 +323,23 @@ OC.L10N.register( "Please use the command line updater because you have a big instance." : "Da Du eine grosse Instanz nutzt, wird die Benutzung des Aktualisierungsprogrammes über die Kommandozeile empfohlen.", "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Für weitere Hilfen, schaue bitte in die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation</a>.", "This %s instance is currently in maintenance mode, which may take a while." : "Diese %s-Instanz befindet sich gerade im Wartungsmodus, was eine Weile dauern kann.", - "This page will refresh itself when the %s instance is available again." : "Diese Seite aktualisiert sich automatisch, wenn die %s-Instanz wieder verfügbar ist." + "This page will refresh itself when the %s instance is available again." : "Diese Seite aktualisiert sich automatisch, wenn die %s-Instanz wieder verfügbar ist.", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Dieser Server hat keine funktionierende Internetverbindung. Dies bedeutet, dass einige Funktionen wie das Einhängen externen Speicherplatzes, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren werden. Der Fernzugriff auf Dateien und der Versand von E-Mail-Benachrichtigungen kann ebenfalls nicht funktionieren. Es wird empfohlen, die Internetverbindung dieses Servers zu aktivieren, wenn du alle Funktionen nutzen möchtest.", + "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Das Update läuft gerade. Das Verlassen dieser Seite könnte den Update Prozess in einigen Umgebungen unterbrechen.", + "Updating to {version}" : "Aktualisierung auf {version}", + "The update was successful. There were warnings." : "Das Update war erfolgreich. Warnungen wurden ausgegeben.", + "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Dein Web-Server ist nicht richtig eingerichtet um die folgende URL richtig aufzulösen \"{url}\". Weitere Informationen findest du in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Es wurde kein PHP Memory Cache konfiguriert. Konfiguriere zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen findest du in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom ist von PHP nicht lesbar, wovon aus Sicherheitsgründen dringend abgeraten wird. Weitere Informationen hierzu findest du in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>.", + "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Du verwendest im Moment PHP {version}. Wir empfehlen ein Upgrade deiner PHP Version, um die <a target=\"_blank\" href=\"{phpLink}\">Geschwindigkeits- und Sicherheitsupdates zu nutzen, welche von der PHP Gruppe bereitgestellt werden</a>, sobald ihre Distribution diese unterstützt.", + "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\" href=\"{docLink}\">documentation</a>." : "Die Reverse-Proxy-Header Konfiguration ist falsch, oder du greifst auf die Nextcloud von einem vertrauenswürdigen Proxy zu. Wenn du auf die Nextcloud nicht von einem vertrauenswürdigen Proxy zugreifst, dann liegt ein Sicherheitsproblem vor, das einem Angreifer ermöglichen könnte, die für Nextcloud sichtbare IP-Adresse zu fälschen. Weitere Informationen hierzu findest du in der <a target=\"_blank\" href=\"{docLink}\">Dokumentation</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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached ist als distributed cache konfiguriert aber das falsche PHP-Modul \"memcache\" ist installiert. \\OC\\Memcache\\Memcached unterstützt nur \"memcached\" jedoch nicht \"memcache\". Im <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki nach beiden Modulen suchen</a>.", + "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Einige Dateien haben die Integritätsprüfung nicht bestanden. Weiterführende Information zum Lösen des Problems findest du in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Liste der ungültigen Dateien ...</a> / <a href=\"{rescanEndpoint}\">Erneut analysieren…</a>)", + "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Der \"Strict-Transport-Security\" HTTP-Header ist nicht auf mindestens \"{seconds}\" Sekunden eingestellt. Um die Sicherheit zu erhöhen, empfehlen wir das Aktivieren von HSTS, wie es in den <a href=\"{docUrl}\">Sicherheitshinweisen</a> beschrieben ist.", + "An error occured. Please try again" : "Es ist ein Fehler aufgetreten. Bitte versuche es noch einmal", + "not assignable" : "nicht zuweisbar", + "Updating {productName} to version {version}, this may take a while." : "Aktualisiere {productName} auf Version {version}, dies kann eine Weile dauern.", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Informationen zum richtigen Konfigurieren deines Servers kannst du der <a href=\"%s\" target=\"_blank\">Dokumentation</a> entnehmen.", + "An internal error occured." : "Es ist ein interner Fehler aufgetreten." }, "nplurals=2; plural=(n != 1);"); diff --git a/core/l10n/de.json b/core/l10n/de.json index c5373cb7ebc..8d6d01c6f46 100644 --- a/core/l10n/de.json +++ b/core/l10n/de.json @@ -217,10 +217,13 @@ "Hello {name}" : "Hallo {name}", "new" : "neu", "_download %n file_::_download %n files_" : ["Lade %n Datei herunter","Lade %n Dateien herunter"], + "The update is in progress, leaving this page might interrupt the process in some environments." : "Die Aktualisierung wird durchgeführt, wenn Du dieses Fenster verlässt, kann dies den Aktualisierungsprozess in manchen Umgebungen unterbrechen.", + "Update to {version}" : "Aktualisierung auf {version}", "An error occurred." : "Es ist ein Fehler aufgetreten.", "Please reload the page." : "Bitte lade die Seite neu.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Das Update war nicht erfolgreich. Für weitere Informationen <a href=\"{url}\"> schaue bitte in unser Forum </a> um das Problem zu lösen.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Das Update ist fehlgeschlagen. Bitte melde dieses Problem an die <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud Community</a>.", + "Continue to Nextcloud" : "Weiter zur Nextcloud", "The update was successful. Redirecting you to Nextcloud now." : "Das Update war erfolgreich. Weiterleitung zu Nextcloud.", "Searching other places" : "Andere Orte durchsuchen", "No search results in other folders" : "Keine Suchergebnisse in anderen Ordnern", @@ -318,6 +321,23 @@ "Please use the command line updater because you have a big instance." : "Da Du eine grosse Instanz nutzt, wird die Benutzung des Aktualisierungsprogrammes über die Kommandozeile empfohlen.", "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Für weitere Hilfen, schaue bitte in die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation</a>.", "This %s instance is currently in maintenance mode, which may take a while." : "Diese %s-Instanz befindet sich gerade im Wartungsmodus, was eine Weile dauern kann.", - "This page will refresh itself when the %s instance is available again." : "Diese Seite aktualisiert sich automatisch, wenn die %s-Instanz wieder verfügbar ist." + "This page will refresh itself when the %s instance is available again." : "Diese Seite aktualisiert sich automatisch, wenn die %s-Instanz wieder verfügbar ist.", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Dieser Server hat keine funktionierende Internetverbindung. Dies bedeutet, dass einige Funktionen wie das Einhängen externen Speicherplatzes, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren werden. Der Fernzugriff auf Dateien und der Versand von E-Mail-Benachrichtigungen kann ebenfalls nicht funktionieren. Es wird empfohlen, die Internetverbindung dieses Servers zu aktivieren, wenn du alle Funktionen nutzen möchtest.", + "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Das Update läuft gerade. Das Verlassen dieser Seite könnte den Update Prozess in einigen Umgebungen unterbrechen.", + "Updating to {version}" : "Aktualisierung auf {version}", + "The update was successful. There were warnings." : "Das Update war erfolgreich. Warnungen wurden ausgegeben.", + "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Dein Web-Server ist nicht richtig eingerichtet um die folgende URL richtig aufzulösen \"{url}\". Weitere Informationen findest du in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Es wurde kein PHP Memory Cache konfiguriert. Konfiguriere zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen findest du in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom ist von PHP nicht lesbar, wovon aus Sicherheitsgründen dringend abgeraten wird. Weitere Informationen hierzu findest du in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>.", + "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Du verwendest im Moment PHP {version}. Wir empfehlen ein Upgrade deiner PHP Version, um die <a target=\"_blank\" href=\"{phpLink}\">Geschwindigkeits- und Sicherheitsupdates zu nutzen, welche von der PHP Gruppe bereitgestellt werden</a>, sobald ihre Distribution diese unterstützt.", + "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\" href=\"{docLink}\">documentation</a>." : "Die Reverse-Proxy-Header Konfiguration ist falsch, oder du greifst auf die Nextcloud von einem vertrauenswürdigen Proxy zu. Wenn du auf die Nextcloud nicht von einem vertrauenswürdigen Proxy zugreifst, dann liegt ein Sicherheitsproblem vor, das einem Angreifer ermöglichen könnte, die für Nextcloud sichtbare IP-Adresse zu fälschen. Weitere Informationen hierzu findest du in der <a target=\"_blank\" href=\"{docLink}\">Dokumentation</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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached ist als distributed cache konfiguriert aber das falsche PHP-Modul \"memcache\" ist installiert. \\OC\\Memcache\\Memcached unterstützt nur \"memcached\" jedoch nicht \"memcache\". Im <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki nach beiden Modulen suchen</a>.", + "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Einige Dateien haben die Integritätsprüfung nicht bestanden. Weiterführende Information zum Lösen des Problems findest du in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Liste der ungültigen Dateien ...</a> / <a href=\"{rescanEndpoint}\">Erneut analysieren…</a>)", + "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Der \"Strict-Transport-Security\" HTTP-Header ist nicht auf mindestens \"{seconds}\" Sekunden eingestellt. Um die Sicherheit zu erhöhen, empfehlen wir das Aktivieren von HSTS, wie es in den <a href=\"{docUrl}\">Sicherheitshinweisen</a> beschrieben ist.", + "An error occured. Please try again" : "Es ist ein Fehler aufgetreten. Bitte versuche es noch einmal", + "not assignable" : "nicht zuweisbar", + "Updating {productName} to version {version}, this may take a while." : "Aktualisiere {productName} auf Version {version}, dies kann eine Weile dauern.", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Informationen zum richtigen Konfigurieren deines Servers kannst du der <a href=\"%s\" target=\"_blank\">Dokumentation</a> entnehmen.", + "An internal error occured." : "Es ist ein interner Fehler aufgetreten." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/core/l10n/de_DE.js b/core/l10n/de_DE.js index bb6d29e0252..f34a1d0e65c 100644 --- a/core/l10n/de_DE.js +++ b/core/l10n/de_DE.js @@ -219,10 +219,13 @@ OC.L10N.register( "Hello {name}" : "Hallo {name}", "new" : "Neu", "_download %n file_::_download %n files_" : ["Lade %n Datei herunter","Lade %n Dateien herunter"], + "The update is in progress, leaving this page might interrupt the process in some environments." : "Die Aktualisierung wird durchgeführt, wenn Sie dieses Fenster verlassen, kann dies den Aktualisierungsprozess in manchen Umgebungen unterbrechen.", + "Update to {version}" : "Aktualisierung auf {version}", "An error occurred." : "Ein Fehler ist aufgetreten.", "Please reload the page." : "Bitte die Seite neu laden.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Das Update war nicht erfolgreich. Für mehr Informationen <a href=\"{url}\">lesen Sie unseren Forenbeitrag</a> zu diesem Thema.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Das Update ist fehlgeschlagen. Bitte melden Sie dieses Problem an die <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud Community</a>.", + "Continue to Nextcloud" : "Weiter zur Nextcloud", "The update was successful. Redirecting you to Nextcloud now." : "Das Update war erfolgreich. Sie werden nun zu Nextcloud weitergeleitet.", "Searching other places" : "Andere Orte durchsuchen", "No search results in other folders" : "Keine Suchergebnisse in anderen Ordnern", @@ -294,7 +297,7 @@ OC.L10N.register( "New password" : "Neues Passwort", "New Password" : "Neues Passwort", "Reset password" : "Passwort zurücksetzen", - "This Nextcloud instance is currently in single user mode." : "Diese ownClound-Instanz befindet sich derzeit im Einzelbenutzermodus.", + "This Nextcloud instance is currently in single user mode." : "Diese ownCloundNextcloud-Instanz befindet sich derzeit im Einzelbenutzermodus.", "This means only administrators can use the instance." : "Das bedeutet, dass diese Instanz nur von Administratoren benutzt werden kann.", "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktieren Sie Ihren Systemadministrator, wenn diese Meldung dauerhaft oder unerwartet erscheint.", "Thank you for your patience." : "Vielen Dank für Ihre Geduld.", @@ -320,6 +323,23 @@ OC.L10N.register( "Please use the command line updater because you have a big instance." : "Da Sie eine große Instanz von Nextcloud besitzen, wird die Benutzung des Aktualisierungsprogrammes über die Kommandozeile empfohlen.", "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Für weitere Hilfen, schauen Sie bitte in die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation</a>.", "This %s instance is currently in maintenance mode, which may take a while." : "Diese %s-Instanz befindet sich gerade im Wartungsmodus, was eine Weile dauern kann.", - "This page will refresh itself when the %s instance is available again." : "Diese Seite aktualisiert sich automatisch, wenn die %s-Instanz wieder verfügbar ist." + "This page will refresh itself when the %s instance is available again." : "Diese Seite aktualisiert sich automatisch, wenn die %s-Instanz wieder verfügbar ist.", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Dieser Server hat keine funktionierende Internetverbindung. Dies bedeutet, dass einige Funktionen wie das Einhängen externen Speicherplatzes, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren werden. Der Fernzugriff auf Dateien und der Versand von E-Mail-Benachrichtigungen kann ebenfalls nicht funktionieren. Es wird empfohlen, die Internetverbindung dieses Servers zu aktivieren, wenn Sie alle Funktionen nutzen möchten.", + "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Die Aktualisierung wird durchgeführt, wenn Sie diese Seite verlassen, kann dies den Aktualisierungsprozess in manchen Umgebungen unterbrechen.", + "Updating to {version}" : "Aktualisiere auf {version}", + "The update was successful. There were warnings." : "Das Update war erfolgreich. Es wurden Warnungen ausgegeben.", + "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Ihr Webserver ist nicht richtig konfiguriert um \"{url}\" aufzulösen. Weitere Informationen hierzu finden Sie in unserer <a target=\"_blank\" href=\"[docLink}\">Dokumentation</a>.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Es wurde kein PHP Memory Cache konfiguriert. Konfigurieren Sie zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen finden Sie in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom ist von PHP nicht lesbar, wovon aus Sicherheitsgründen dringend abgeraten wird. Weitere Informationen hierzu finden Sie in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>.", + "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Sie verwenden im Moment PHP {version}. Wir empfehlen ein Upgrade ihrer PHP Version, um die <a target=\"_blank\" href=\"{phpLink}\">Geschwindigkeits- und Sicherheitsupdates zu nutzen, welche von der PHP Gruppe bereitgestellt werden</a>, sobald ihre Distribution diese unterstützt.", + "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\" href=\"{docLink}\">documentation</a>." : "Die Reverse-Proxy-Header Konfiguration ist falsch, oder Sie greifen auf die Nextcloud von einem vertrauenswürdigen Proxy zu. Wenn Sie auf die Nextcloud nicht von einem vertrauenswürdigen Proxy zugreifen, dann liegt ein Sicherheitsproblem vor, das einem Angreifer ermöglichen könnte, die für Nextcloud sichtbare IP-Adresse zu fälschen. Weitere Informationen hierzu finden Sie in der <a target=\"_blank\" href=\"{docLink}\">Dokumentation</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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached ist als distributed cache konfiguriert aber das falsche PHP-Modul \"memcache\" ist installiert. \\OC\\Memcache\\Memcached unterstützt nur \"memcached\" jedoch nicht \"memcache\". Im <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki nach beiden Modulen suchen</a>.", + "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Manche Dateien haben die Integritätsprüfung nicht bestanden. Weitere Informationen um den Fehler zu behen finden Sie in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Liste der ungültigen Dateien...</a> / <a href=\"{rescanEndpoint}\">Erneut scannen…</a>)", + "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Der „Strict-Transport-Security“-HTTP-Header ist nicht auf mindestens „{seconds}“ Sekunden eingestellt. Für mehr Sicherheit wird das Aktivieren von HSTS empfohlen, wie es in unseren <a href=\"{docUrl}\" >Sicherheitshinweisen</a> erläutert ist.", + "An error occured. Please try again" : "Fehler aufgetreten. Bitte erneut versuchen", + "not assignable" : "nicht zuweisbar", + "Updating {productName} to version {version}, this may take a while." : "Aktualisiere {productName} auf Version {version}, dies kann etwas dauern.", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Informationen zum richtigen Konfigurieren Ihres Servers können Sie der <a href=\"%s\" target=\"_blank\">Dokumentation</a> entnehmen.", + "An internal error occured." : "Es ist ein interner Fehler aufgetreten." }, "nplurals=2; plural=(n != 1);"); diff --git a/core/l10n/de_DE.json b/core/l10n/de_DE.json index 1920f2370e3..a2ad872fb1b 100644 --- a/core/l10n/de_DE.json +++ b/core/l10n/de_DE.json @@ -217,10 +217,13 @@ "Hello {name}" : "Hallo {name}", "new" : "Neu", "_download %n file_::_download %n files_" : ["Lade %n Datei herunter","Lade %n Dateien herunter"], + "The update is in progress, leaving this page might interrupt the process in some environments." : "Die Aktualisierung wird durchgeführt, wenn Sie dieses Fenster verlassen, kann dies den Aktualisierungsprozess in manchen Umgebungen unterbrechen.", + "Update to {version}" : "Aktualisierung auf {version}", "An error occurred." : "Ein Fehler ist aufgetreten.", "Please reload the page." : "Bitte die Seite neu laden.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Das Update war nicht erfolgreich. Für mehr Informationen <a href=\"{url}\">lesen Sie unseren Forenbeitrag</a> zu diesem Thema.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Das Update ist fehlgeschlagen. Bitte melden Sie dieses Problem an die <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud Community</a>.", + "Continue to Nextcloud" : "Weiter zur Nextcloud", "The update was successful. Redirecting you to Nextcloud now." : "Das Update war erfolgreich. Sie werden nun zu Nextcloud weitergeleitet.", "Searching other places" : "Andere Orte durchsuchen", "No search results in other folders" : "Keine Suchergebnisse in anderen Ordnern", @@ -292,7 +295,7 @@ "New password" : "Neues Passwort", "New Password" : "Neues Passwort", "Reset password" : "Passwort zurücksetzen", - "This Nextcloud instance is currently in single user mode." : "Diese ownClound-Instanz befindet sich derzeit im Einzelbenutzermodus.", + "This Nextcloud instance is currently in single user mode." : "Diese ownCloundNextcloud-Instanz befindet sich derzeit im Einzelbenutzermodus.", "This means only administrators can use the instance." : "Das bedeutet, dass diese Instanz nur von Administratoren benutzt werden kann.", "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktieren Sie Ihren Systemadministrator, wenn diese Meldung dauerhaft oder unerwartet erscheint.", "Thank you for your patience." : "Vielen Dank für Ihre Geduld.", @@ -318,6 +321,23 @@ "Please use the command line updater because you have a big instance." : "Da Sie eine große Instanz von Nextcloud besitzen, wird die Benutzung des Aktualisierungsprogrammes über die Kommandozeile empfohlen.", "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Für weitere Hilfen, schauen Sie bitte in die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation</a>.", "This %s instance is currently in maintenance mode, which may take a while." : "Diese %s-Instanz befindet sich gerade im Wartungsmodus, was eine Weile dauern kann.", - "This page will refresh itself when the %s instance is available again." : "Diese Seite aktualisiert sich automatisch, wenn die %s-Instanz wieder verfügbar ist." + "This page will refresh itself when the %s instance is available again." : "Diese Seite aktualisiert sich automatisch, wenn die %s-Instanz wieder verfügbar ist.", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Dieser Server hat keine funktionierende Internetverbindung. Dies bedeutet, dass einige Funktionen wie das Einhängen externen Speicherplatzes, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren werden. Der Fernzugriff auf Dateien und der Versand von E-Mail-Benachrichtigungen kann ebenfalls nicht funktionieren. Es wird empfohlen, die Internetverbindung dieses Servers zu aktivieren, wenn Sie alle Funktionen nutzen möchten.", + "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Die Aktualisierung wird durchgeführt, wenn Sie diese Seite verlassen, kann dies den Aktualisierungsprozess in manchen Umgebungen unterbrechen.", + "Updating to {version}" : "Aktualisiere auf {version}", + "The update was successful. There were warnings." : "Das Update war erfolgreich. Es wurden Warnungen ausgegeben.", + "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Ihr Webserver ist nicht richtig konfiguriert um \"{url}\" aufzulösen. Weitere Informationen hierzu finden Sie in unserer <a target=\"_blank\" href=\"[docLink}\">Dokumentation</a>.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Es wurde kein PHP Memory Cache konfiguriert. Konfigurieren Sie zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen finden Sie in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom ist von PHP nicht lesbar, wovon aus Sicherheitsgründen dringend abgeraten wird. Weitere Informationen hierzu finden Sie in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>.", + "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Sie verwenden im Moment PHP {version}. Wir empfehlen ein Upgrade ihrer PHP Version, um die <a target=\"_blank\" href=\"{phpLink}\">Geschwindigkeits- und Sicherheitsupdates zu nutzen, welche von der PHP Gruppe bereitgestellt werden</a>, sobald ihre Distribution diese unterstützt.", + "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\" href=\"{docLink}\">documentation</a>." : "Die Reverse-Proxy-Header Konfiguration ist falsch, oder Sie greifen auf die Nextcloud von einem vertrauenswürdigen Proxy zu. Wenn Sie auf die Nextcloud nicht von einem vertrauenswürdigen Proxy zugreifen, dann liegt ein Sicherheitsproblem vor, das einem Angreifer ermöglichen könnte, die für Nextcloud sichtbare IP-Adresse zu fälschen. Weitere Informationen hierzu finden Sie in der <a target=\"_blank\" href=\"{docLink}\">Dokumentation</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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached ist als distributed cache konfiguriert aber das falsche PHP-Modul \"memcache\" ist installiert. \\OC\\Memcache\\Memcached unterstützt nur \"memcached\" jedoch nicht \"memcache\". Im <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki nach beiden Modulen suchen</a>.", + "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Manche Dateien haben die Integritätsprüfung nicht bestanden. Weitere Informationen um den Fehler zu behen finden Sie in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Liste der ungültigen Dateien...</a> / <a href=\"{rescanEndpoint}\">Erneut scannen…</a>)", + "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Der „Strict-Transport-Security“-HTTP-Header ist nicht auf mindestens „{seconds}“ Sekunden eingestellt. Für mehr Sicherheit wird das Aktivieren von HSTS empfohlen, wie es in unseren <a href=\"{docUrl}\" >Sicherheitshinweisen</a> erläutert ist.", + "An error occured. Please try again" : "Fehler aufgetreten. Bitte erneut versuchen", + "not assignable" : "nicht zuweisbar", + "Updating {productName} to version {version}, this may take a while." : "Aktualisiere {productName} auf Version {version}, dies kann etwas dauern.", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Informationen zum richtigen Konfigurieren Ihres Servers können Sie der <a href=\"%s\" target=\"_blank\">Dokumentation</a> entnehmen.", + "An internal error occured." : "Es ist ein interner Fehler aufgetreten." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/core/l10n/fi_FI.js b/core/l10n/fi_FI.js index 9de205fe01f..00704902469 100644 --- a/core/l10n/fi_FI.js +++ b/core/l10n/fi_FI.js @@ -151,6 +151,7 @@ OC.L10N.register( "Password protect" : "Suojaa salasanalla", "Password" : "Salasana", "Allow editing" : "Salli muokkaus", + "Hide file listing" : "Piilota tiedostolistaus", "Email link to person" : "Lähetä linkki sähköpostitse", "Send" : "Lähetä", "Sending ..." : "Lähetetään...", diff --git a/core/l10n/fi_FI.json b/core/l10n/fi_FI.json index c53c4973621..ff5d234d418 100644 --- a/core/l10n/fi_FI.json +++ b/core/l10n/fi_FI.json @@ -149,6 +149,7 @@ "Password protect" : "Suojaa salasanalla", "Password" : "Salasana", "Allow editing" : "Salli muokkaus", + "Hide file listing" : "Piilota tiedostolistaus", "Email link to person" : "Lähetä linkki sähköpostitse", "Send" : "Lähetä", "Sending ..." : "Lähetetään...", diff --git a/core/l10n/id.js b/core/l10n/id.js index 782a958cc7f..cdba9c43ccb 100644 --- a/core/l10n/id.js +++ b/core/l10n/id.js @@ -219,10 +219,13 @@ OC.L10N.register( "Hello {name}" : "Halo {name}", "new" : "baru", "_download %n file_::_download %n files_" : ["unduh %n berkas"], + "The update is in progress, leaving this page might interrupt the process in some environments." : "Pembaruan sedang dalam proses, meninggalkan halaman ini mungkin dapat mengganggu proses di beberapa lingkungan.", + "Update to {version}" : "Perbarui ke {version}", "An error occurred." : "Terjadi kesalahan.", "Please reload the page." : "Silakan muat ulang halaman.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Pembaruan gagal. Untuk informasi berikutnya <a href=\"{url}\">cek posting di forum</a> yang mencakup masalah kami.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Pembaruan gagal. Laporkan masalah ini ke <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">komunitas Nextcloud</a>.", + "Continue to Nextcloud" : "Lanjutkan ke Nextcloud", "The update was successful. Redirecting you to Nextcloud now." : "Pembaruan berhasil. Mengarahkan Anda ke Nextcloud.", "Searching other places" : "Mencari tempat lainnya", "No search results in other folders" : "Tidak ada hasil penelusuran didalam folder yang lain", @@ -320,6 +323,23 @@ OC.L10N.register( "Please use the command line updater because you have a big instance." : "Gunakan pembaruan command-line karena Anda mempunyai instansi yang besar.", "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Untuk bantuan, lihat <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentasi</a>.", "This %s instance is currently in maintenance mode, which may take a while." : "Instansi %s ini sedang dalam modus pemeliharaan, mungkin memerlukan beberapa saat.", - "This page will refresh itself when the %s instance is available again." : "Halaman ini akan disegarkan dengan sendiri saat instansi %s tersebut tersedia kembali." + "This page will refresh itself when the %s instance is available again." : "Halaman ini akan disegarkan dengan sendiri saat instansi %s tersebut tersedia kembali.", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Server ini tidak tersambung ke internet. Ini berarti beberapa fitur seperti me-mount penyimpanan eksternal, notifikasi pembaruan atau instalasi aplikasi pihak ketiga tidak akan bekerja. Mengakses berkas secara remote dan mengirim notifikasi email juga tidak bekerja. Kami menyarankan untuk mengaktifkan koneksi internet untuk server ini jika Anda ingin memiliki fitur ini.", + "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Pembaruan sedang dalam proses, meninggalkan halaman ini mungkin dapat mengganggu proses di beberapa lingkungan.", + "Updating to {version}" : "Memperbarui ke {version}", + "The update was successful. There were warnings." : "Pembaruan telah berhasil. Terdapat peringatan.", + "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Server web Anda tidak diatur secara baik untuk menyelesaikan \"{url}\". Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" href=\"{docLink}\">dokumentasi</a> kami.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Tidak ada memory cache telah dikonfigurasi. Untuk meningkatkan kinerja, mohon mengkonfigurasi memcache jika tersedia. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" href=\"{docLink}\">dokumentasi</a> kami.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom tidak bisa dibaca oleh PHP dan sangat tidak disarankan untuk alasan keamanan. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" href=\"{docLink}\">dokumentasi</a> kami.", + "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Anda sekarang menjalankan PHP {version}. Kami menyarankan Anda untuk perbarui versi PHP Anda untuk memanfaatkan <a target=\"_blank\" href=\"{phpLink}\">performa dan pembaruan keamanan yang disediakan oleh PHP Group</a> saat distribusi Anda mendukungnya.", + "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\" href=\"{docLink}\">documentation</a>." : "Konfigurasi proxy header terbalik salah, atau Anda mengakses Nextcloud dari proxy terpercaya. Apabila Anda tidak mengakses Nextcloud dari proxy terpercaya, ini adalah masalah keamanan dan penyerang dapat memalsukan alamat IP mereka ke Nextcloud. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" href=\"{docLink}\">dokumentasi</a> kami.", + "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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached terkonfigurasi sebagai cache terdistribusi, tetapi modul PHP \"memcache\" yang salah terpasang. \\OC\\Memcache\\Memcached hanya mendukung \"memcached\" dan bukan \"memcache\". Lihat <a target=\"_blank\" href=\"{wikiLink}\">wiki memcached tentang kedua modul</a>.", + "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Beberapa berkas tidak lulus cek integritas. Informasi lebih lanjut tentang cara mengatasi masalah ini dapat ditemukan di <a target=\"_blank\" href=\"{docLink}\">dokumentasi</a> kami. (<a href=\"{codeIntegrityDownloadEndpoint}\">Daftar berkas yang tidak valid…</a> / <a href=\"{rescanEndpoint}\">Pindai ulang…</a>)", + "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Header \"Strict-Transport-Security\" HTTP tidak terkonfigurasi ke setidaknya \"{seconds}\" detik. Untuk meningkatkan kemanan kami merekomendasikan mengaktifkan HSTS seperti yang dijelaskan di <a href=\"{docUrl}\">saran keamanan</a> kami.", + "An error occured. Please try again" : "Terjadi kesalahan. Silakan coba lagi", + "not assignable" : "tidak dapat disematkan", + "Updating {productName} to version {version}, this may take a while." : "Memperbarui {productName} ke versi {version}, ini dapat memakan waktu.", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Untuk informasi bagaimana menkonfigurasi server Anda dengan benar, silakan lihat <a href=\"%s\" target=\"_blank\">dokumentasi</a>.", + "An internal error occured." : "Terjadi kesalahan internal." }, "nplurals=1; plural=0;"); diff --git a/core/l10n/id.json b/core/l10n/id.json index 093ea64c99c..9ff11883de9 100644 --- a/core/l10n/id.json +++ b/core/l10n/id.json @@ -217,10 +217,13 @@ "Hello {name}" : "Halo {name}", "new" : "baru", "_download %n file_::_download %n files_" : ["unduh %n berkas"], + "The update is in progress, leaving this page might interrupt the process in some environments." : "Pembaruan sedang dalam proses, meninggalkan halaman ini mungkin dapat mengganggu proses di beberapa lingkungan.", + "Update to {version}" : "Perbarui ke {version}", "An error occurred." : "Terjadi kesalahan.", "Please reload the page." : "Silakan muat ulang halaman.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Pembaruan gagal. Untuk informasi berikutnya <a href=\"{url}\">cek posting di forum</a> yang mencakup masalah kami.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Pembaruan gagal. Laporkan masalah ini ke <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">komunitas Nextcloud</a>.", + "Continue to Nextcloud" : "Lanjutkan ke Nextcloud", "The update was successful. Redirecting you to Nextcloud now." : "Pembaruan berhasil. Mengarahkan Anda ke Nextcloud.", "Searching other places" : "Mencari tempat lainnya", "No search results in other folders" : "Tidak ada hasil penelusuran didalam folder yang lain", @@ -318,6 +321,23 @@ "Please use the command line updater because you have a big instance." : "Gunakan pembaruan command-line karena Anda mempunyai instansi yang besar.", "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Untuk bantuan, lihat <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentasi</a>.", "This %s instance is currently in maintenance mode, which may take a while." : "Instansi %s ini sedang dalam modus pemeliharaan, mungkin memerlukan beberapa saat.", - "This page will refresh itself when the %s instance is available again." : "Halaman ini akan disegarkan dengan sendiri saat instansi %s tersebut tersedia kembali." + "This page will refresh itself when the %s instance is available again." : "Halaman ini akan disegarkan dengan sendiri saat instansi %s tersebut tersedia kembali.", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Server ini tidak tersambung ke internet. Ini berarti beberapa fitur seperti me-mount penyimpanan eksternal, notifikasi pembaruan atau instalasi aplikasi pihak ketiga tidak akan bekerja. Mengakses berkas secara remote dan mengirim notifikasi email juga tidak bekerja. Kami menyarankan untuk mengaktifkan koneksi internet untuk server ini jika Anda ingin memiliki fitur ini.", + "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Pembaruan sedang dalam proses, meninggalkan halaman ini mungkin dapat mengganggu proses di beberapa lingkungan.", + "Updating to {version}" : "Memperbarui ke {version}", + "The update was successful. There were warnings." : "Pembaruan telah berhasil. Terdapat peringatan.", + "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Server web Anda tidak diatur secara baik untuk menyelesaikan \"{url}\". Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" href=\"{docLink}\">dokumentasi</a> kami.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Tidak ada memory cache telah dikonfigurasi. Untuk meningkatkan kinerja, mohon mengkonfigurasi memcache jika tersedia. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" href=\"{docLink}\">dokumentasi</a> kami.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom tidak bisa dibaca oleh PHP dan sangat tidak disarankan untuk alasan keamanan. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" href=\"{docLink}\">dokumentasi</a> kami.", + "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Anda sekarang menjalankan PHP {version}. Kami menyarankan Anda untuk perbarui versi PHP Anda untuk memanfaatkan <a target=\"_blank\" href=\"{phpLink}\">performa dan pembaruan keamanan yang disediakan oleh PHP Group</a> saat distribusi Anda mendukungnya.", + "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\" href=\"{docLink}\">documentation</a>." : "Konfigurasi proxy header terbalik salah, atau Anda mengakses Nextcloud dari proxy terpercaya. Apabila Anda tidak mengakses Nextcloud dari proxy terpercaya, ini adalah masalah keamanan dan penyerang dapat memalsukan alamat IP mereka ke Nextcloud. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" href=\"{docLink}\">dokumentasi</a> kami.", + "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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached terkonfigurasi sebagai cache terdistribusi, tetapi modul PHP \"memcache\" yang salah terpasang. \\OC\\Memcache\\Memcached hanya mendukung \"memcached\" dan bukan \"memcache\". Lihat <a target=\"_blank\" href=\"{wikiLink}\">wiki memcached tentang kedua modul</a>.", + "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Beberapa berkas tidak lulus cek integritas. Informasi lebih lanjut tentang cara mengatasi masalah ini dapat ditemukan di <a target=\"_blank\" href=\"{docLink}\">dokumentasi</a> kami. (<a href=\"{codeIntegrityDownloadEndpoint}\">Daftar berkas yang tidak valid…</a> / <a href=\"{rescanEndpoint}\">Pindai ulang…</a>)", + "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Header \"Strict-Transport-Security\" HTTP tidak terkonfigurasi ke setidaknya \"{seconds}\" detik. Untuk meningkatkan kemanan kami merekomendasikan mengaktifkan HSTS seperti yang dijelaskan di <a href=\"{docUrl}\">saran keamanan</a> kami.", + "An error occured. Please try again" : "Terjadi kesalahan. Silakan coba lagi", + "not assignable" : "tidak dapat disematkan", + "Updating {productName} to version {version}, this may take a while." : "Memperbarui {productName} ke versi {version}, ini dapat memakan waktu.", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Untuk informasi bagaimana menkonfigurasi server Anda dengan benar, silakan lihat <a href=\"%s\" target=\"_blank\">dokumentasi</a>.", + "An internal error occured." : "Terjadi kesalahan internal." },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/core/l10n/is.js b/core/l10n/is.js index 5d678bb125a..c503a2a3eb7 100644 --- a/core/l10n/is.js +++ b/core/l10n/is.js @@ -30,6 +30,7 @@ OC.L10N.register( "[%d / %d]: %s" : "[%d / %d]: %s", "Repair warning: " : "Viðvörun vegna viðgerðar: ", "Repair error: " : "Villa í viðgerð:", + "Please use the command line updater because automatic updating is disabled in the config.php." : "Endilega notaðu uppfærslutólið af skipanalínu, því sjálfvirkar uppfærslur eru gerðar óvirkar í config.php.", "[%d / %d]: Checking table %s" : "[%d / %d]: Athuga töflu %s", "Turned on maintenance mode" : "Kveikt á viðhaldsham", "Turned off maintenance mode" : "Slökkt á viðhaldsham", @@ -218,10 +219,13 @@ OC.L10N.register( "Hello {name}" : "Halló {name}", "new" : "nýtt", "_download %n file_::_download %n files_" : ["sækja %n skrá","sækja %n skrár"], + "The update is in progress, leaving this page might interrupt the process in some environments." : "Uppfærslan er í gangi, ef farið er af þessari síðu gæti það truflað ferlið á sumum kerfum.", + "Update to {version}" : "Uppfæra í {version}", "An error occurred." : "Villa átti sér stað.", "Please reload the page." : "Þú ættir að hlaða síðunni aftur inn.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Uppfærslan tókst ekki. Til að fá frekari upplýsingar <a href=\"{url}\">skoðaðu færslu á spjallsvæðinu okkar</a> sem fjallar um þetta mál.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Uppfærslan tókst ekki. Skoðaðu annálana á kerfisstjórnunarsíðunni og sendu inn tilkynningu um vandamálið til <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud samfélagsins</a>.", + "Continue to Nextcloud" : "Halda áfram í Nextcloud", "The update was successful. Redirecting you to Nextcloud now." : "Uppfærslan heppnaðist. Beini þér til Nextcloud nú.", "Searching other places" : "Leitað á öðrum stöðum", "No search results in other folders" : "Engar leitarniðurstöður í öðrum möppum", @@ -298,7 +302,10 @@ OC.L10N.register( "Contact your system administrator if this message persists or appeared unexpectedly." : "Hafðu samband við kerfisstjóra ef þessi skilaboð eru viðvarandi eða birtust óvænt.", "Thank you for your patience." : "Þakka þér fyrir biðlundina.", "Two-step verification" : "Tveggja þrepa sannvottun", + "Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Aukið öryggi var virkjað fyrir aðganginn þinn. Auðkenndu þig með aukaþrepi.", "Cancel login" : "Hætta við innskráningu", + "Please authenticate using the selected factor." : "Auðkenndu þig með völdu þrepi.", + "An error occured while verifying the token" : "Villa kom upp við að sannreyna teiknið", "You are accessing the server from an untrusted domain." : "Þú ert að tengjast þjóninum frá ótreystu léni.", "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Hafðu samband við kerfisstjóra. Ef þú ert stjórnandi á þessu tilviki, stilltu \"trusted_domains\" setninguna í config/config.php. Dæmi um stillingar má sjá í config/config.sample.php.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Það fer eftir stillingum þínum, sem stjórnandi þá gætir þú einnig notað hnappinn hér fyrir neðan til að treysta þessu léni.", @@ -313,8 +320,26 @@ OC.L10N.register( "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Til að forðast að falla á tímamörkum með stærri uppsetningar, getur þú í staðinn keyrt eftirfarandi skipun úr uppsetningarmöppunni:", "Detailed logs" : "Ítarlegir annálar", "Update needed" : "Þarfnast uppfærslu", + "Please use the command line updater because you have a big instance." : "Endilega notaðu uppfærslutólið af skipanalínu, því þú ert með mjög stóra uppsetningu.", "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Til að fá hjálp er best að skoða fyrst <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">hjálparskjölin</a>.", "This %s instance is currently in maintenance mode, which may take a while." : "Þessi %s er nú í viðhaldsham, sem getur tekið smá stund.", - "This page will refresh itself when the %s instance is available again." : "Þessi síða mun uppfæra sig þegar %s er í boði á ný." + "This page will refresh itself when the %s instance is available again." : "Þessi síða mun uppfæra sig þegar %s er í boði á ný.", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Þessi þjónn er ekki með virka nettengingu. Þetta þýðir að sumir eiginleikar eins og að virkja ytri gagnageymslu, tilkynningar um uppfærslur eða uppsetningu á forritum þriðja aðila, mun ekki virka. Fjartengdur aðgangur að skrám og sending tilkynninga í tölvupósti virka líklega ekki heldur. Við leggjum til að internettenging sé virkjuð fyrir þennan vefþjón ef þú vilt hafa alla eiginleika tiltæka.", + "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Uppfærslan er í gangi, ef farið er af þessari síðu gæti það truflað ferlið á sumum kerfum.", + "Updating to {version}" : "Uppfæri í {version}", + "The update was successful. There were warnings." : "Uppfærslan tókst. Það voru viðvaranir.", + "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Vefþjónninn þinn er ekki uppsettur þannig að hann geti leyst \"{url}\". Frekari upplýsingar er að finna í <a target=\"_blank\" href=\"{docLink}\">hjálparskjölum</a> okkar.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Ekkert skyndiminni (cache) hefur verið stillt. Til að auka afköst ættirðu að setja upp skyndiminni (með memcache) ef það er tiltækt. Hægt er að finna nánari upplýsingar um þetta í <a target=\"_blank\" href=\"{docLink}\">hjálparskjölum</a> okkar.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom er ekki lesanlegt af PHP sem er mjög óráðlegt af öryggisástæðum. Hægt er að finna nánari upplýsingar um þetta í <a target=\"_blank\" href=\"{docLink}\">hjálparskjölum</a> okkar.", + "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Þú ert að keyra PHP {version}. Við hvetjum þig til að uppfæra PHP útgáfuna til að njóta <a target=\"_blank\" href=\"{phpLink}\">afkastaaukningar og öryggisuppfærslna frá PHP Group</a> um leið og dreifingin þín styður það.", + "The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Uppsetning gagnstæðs milliþjónshauss (reverse proxy header) er röng, eða að þú ert að tengjast Nextcloud frá treystum milliþjóni Ef þú ert ekki að tengjast Nextcloud frá treystum milliþjóni, þá er þetta er öryggisvandamál og getur leyft árásaraðilum að dulbúa IP-vistfang þeirra sem sýnilegt Nextcloud. Nánari upplýsingar má finna í <a target=\"_blank\" href=\"{docLink}\">hjálparskjölum</a> okkar.", + "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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached er sett upp sem dreift skyndiminni, en hinsvegar er ranga PHP-einingin \"memcache\" uppsett. \\OC\\Memcache\\Memcached styður einungis \"memcached\" en ekki \"memcache\". Skoðaðu <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki-síðurnar um báðar einingarnar</a>.", + "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Sumar skrár hafa ekki staðist áreiðanleikaprófun. Hægt er að finna nánari upplýsingar um þetta í <a target=\"_blank\" href=\"{docLink}\">hjálparskjölum</a> okkar. (<a href=\"{codeIntegrityDownloadEndpoint}\">Listi yfir ógildar skrár…</a> / <a href=\"{rescanEndpoint}\">Endurskanna…</a>)", + "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">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}\">öryggisleiðbeiningum</a>.", + "An error occured. Please try again" : "Villa kom upp. Endilega reyndu aftur", + "not assignable" : "ekki úthlutanlegt", + "Updating {productName} to version {version}, this may take a while." : "Uppfæri {productName} í útgáfu {version}, þetta getur tekið smá stund.", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Til að fá upplýsingar hvernig á að stilla miðlara almennilega, skaltu skoða <a href=\"%s\" target=\"_blank\">hjálparskjölin</a>.", + "An internal error occured." : "Innri villa kom upp." }, "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/core/l10n/is.json b/core/l10n/is.json index 79943968ebf..287bc14d17b 100644 --- a/core/l10n/is.json +++ b/core/l10n/is.json @@ -28,6 +28,7 @@ "[%d / %d]: %s" : "[%d / %d]: %s", "Repair warning: " : "Viðvörun vegna viðgerðar: ", "Repair error: " : "Villa í viðgerð:", + "Please use the command line updater because automatic updating is disabled in the config.php." : "Endilega notaðu uppfærslutólið af skipanalínu, því sjálfvirkar uppfærslur eru gerðar óvirkar í config.php.", "[%d / %d]: Checking table %s" : "[%d / %d]: Athuga töflu %s", "Turned on maintenance mode" : "Kveikt á viðhaldsham", "Turned off maintenance mode" : "Slökkt á viðhaldsham", @@ -216,10 +217,13 @@ "Hello {name}" : "Halló {name}", "new" : "nýtt", "_download %n file_::_download %n files_" : ["sækja %n skrá","sækja %n skrár"], + "The update is in progress, leaving this page might interrupt the process in some environments." : "Uppfærslan er í gangi, ef farið er af þessari síðu gæti það truflað ferlið á sumum kerfum.", + "Update to {version}" : "Uppfæra í {version}", "An error occurred." : "Villa átti sér stað.", "Please reload the page." : "Þú ættir að hlaða síðunni aftur inn.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Uppfærslan tókst ekki. Til að fá frekari upplýsingar <a href=\"{url}\">skoðaðu færslu á spjallsvæðinu okkar</a> sem fjallar um þetta mál.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Uppfærslan tókst ekki. Skoðaðu annálana á kerfisstjórnunarsíðunni og sendu inn tilkynningu um vandamálið til <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud samfélagsins</a>.", + "Continue to Nextcloud" : "Halda áfram í Nextcloud", "The update was successful. Redirecting you to Nextcloud now." : "Uppfærslan heppnaðist. Beini þér til Nextcloud nú.", "Searching other places" : "Leitað á öðrum stöðum", "No search results in other folders" : "Engar leitarniðurstöður í öðrum möppum", @@ -296,7 +300,10 @@ "Contact your system administrator if this message persists or appeared unexpectedly." : "Hafðu samband við kerfisstjóra ef þessi skilaboð eru viðvarandi eða birtust óvænt.", "Thank you for your patience." : "Þakka þér fyrir biðlundina.", "Two-step verification" : "Tveggja þrepa sannvottun", + "Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Aukið öryggi var virkjað fyrir aðganginn þinn. Auðkenndu þig með aukaþrepi.", "Cancel login" : "Hætta við innskráningu", + "Please authenticate using the selected factor." : "Auðkenndu þig með völdu þrepi.", + "An error occured while verifying the token" : "Villa kom upp við að sannreyna teiknið", "You are accessing the server from an untrusted domain." : "Þú ert að tengjast þjóninum frá ótreystu léni.", "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Hafðu samband við kerfisstjóra. Ef þú ert stjórnandi á þessu tilviki, stilltu \"trusted_domains\" setninguna í config/config.php. Dæmi um stillingar má sjá í config/config.sample.php.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Það fer eftir stillingum þínum, sem stjórnandi þá gætir þú einnig notað hnappinn hér fyrir neðan til að treysta þessu léni.", @@ -311,8 +318,26 @@ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Til að forðast að falla á tímamörkum með stærri uppsetningar, getur þú í staðinn keyrt eftirfarandi skipun úr uppsetningarmöppunni:", "Detailed logs" : "Ítarlegir annálar", "Update needed" : "Þarfnast uppfærslu", + "Please use the command line updater because you have a big instance." : "Endilega notaðu uppfærslutólið af skipanalínu, því þú ert með mjög stóra uppsetningu.", "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Til að fá hjálp er best að skoða fyrst <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">hjálparskjölin</a>.", "This %s instance is currently in maintenance mode, which may take a while." : "Þessi %s er nú í viðhaldsham, sem getur tekið smá stund.", - "This page will refresh itself when the %s instance is available again." : "Þessi síða mun uppfæra sig þegar %s er í boði á ný." + "This page will refresh itself when the %s instance is available again." : "Þessi síða mun uppfæra sig þegar %s er í boði á ný.", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Þessi þjónn er ekki með virka nettengingu. Þetta þýðir að sumir eiginleikar eins og að virkja ytri gagnageymslu, tilkynningar um uppfærslur eða uppsetningu á forritum þriðja aðila, mun ekki virka. Fjartengdur aðgangur að skrám og sending tilkynninga í tölvupósti virka líklega ekki heldur. Við leggjum til að internettenging sé virkjuð fyrir þennan vefþjón ef þú vilt hafa alla eiginleika tiltæka.", + "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Uppfærslan er í gangi, ef farið er af þessari síðu gæti það truflað ferlið á sumum kerfum.", + "Updating to {version}" : "Uppfæri í {version}", + "The update was successful. There were warnings." : "Uppfærslan tókst. Það voru viðvaranir.", + "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Vefþjónninn þinn er ekki uppsettur þannig að hann geti leyst \"{url}\". Frekari upplýsingar er að finna í <a target=\"_blank\" href=\"{docLink}\">hjálparskjölum</a> okkar.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Ekkert skyndiminni (cache) hefur verið stillt. Til að auka afköst ættirðu að setja upp skyndiminni (með memcache) ef það er tiltækt. Hægt er að finna nánari upplýsingar um þetta í <a target=\"_blank\" href=\"{docLink}\">hjálparskjölum</a> okkar.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom er ekki lesanlegt af PHP sem er mjög óráðlegt af öryggisástæðum. Hægt er að finna nánari upplýsingar um þetta í <a target=\"_blank\" href=\"{docLink}\">hjálparskjölum</a> okkar.", + "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Þú ert að keyra PHP {version}. Við hvetjum þig til að uppfæra PHP útgáfuna til að njóta <a target=\"_blank\" href=\"{phpLink}\">afkastaaukningar og öryggisuppfærslna frá PHP Group</a> um leið og dreifingin þín styður það.", + "The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Uppsetning gagnstæðs milliþjónshauss (reverse proxy header) er röng, eða að þú ert að tengjast Nextcloud frá treystum milliþjóni Ef þú ert ekki að tengjast Nextcloud frá treystum milliþjóni, þá er þetta er öryggisvandamál og getur leyft árásaraðilum að dulbúa IP-vistfang þeirra sem sýnilegt Nextcloud. Nánari upplýsingar má finna í <a target=\"_blank\" href=\"{docLink}\">hjálparskjölum</a> okkar.", + "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\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached er sett upp sem dreift skyndiminni, en hinsvegar er ranga PHP-einingin \"memcache\" uppsett. \\OC\\Memcache\\Memcached styður einungis \"memcached\" en ekki \"memcache\". Skoðaðu <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki-síðurnar um báðar einingarnar</a>.", + "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Sumar skrár hafa ekki staðist áreiðanleikaprófun. Hægt er að finna nánari upplýsingar um þetta í <a target=\"_blank\" href=\"{docLink}\">hjálparskjölum</a> okkar. (<a href=\"{codeIntegrityDownloadEndpoint}\">Listi yfir ógildar skrár…</a> / <a href=\"{rescanEndpoint}\">Endurskanna…</a>)", + "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">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}\">öryggisleiðbeiningum</a>.", + "An error occured. Please try again" : "Villa kom upp. Endilega reyndu aftur", + "not assignable" : "ekki úthlutanlegt", + "Updating {productName} to version {version}, this may take a while." : "Uppfæri {productName} í útgáfu {version}, þetta getur tekið smá stund.", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Til að fá upplýsingar hvernig á að stilla miðlara almennilega, skaltu skoða <a href=\"%s\" target=\"_blank\">hjálparskjölin</a>.", + "An internal error occured." : "Innri villa kom upp." },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" }
\ No newline at end of file diff --git a/core/l10n/it.js b/core/l10n/it.js index e02f22836d2..fd04b5c7e2b 100644 --- a/core/l10n/it.js +++ b/core/l10n/it.js @@ -219,10 +219,13 @@ OC.L10N.register( "Hello {name}" : "Ciao {name}", "new" : "nuovo", "_download %n file_::_download %n files_" : ["scarica %n file","scarica %s file"], + "The update is in progress, leaving this page might interrupt the process in some environments." : "L'aggiornamento è in corso, l'abbandono di questa pagina potrebbe interrompere il processo in alcuni ambienti.", + "Update to {version}" : "Aggiorna a {version}", "An error occurred." : "Si è verificato un errore.", "Please reload the page." : "Ricarica la pagina.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "L'aggiornamento non è riuscito. Per ulteriori informazioni <a href=\"{url}\">controlla l'articolo del nostro forum</a> che riguarda questo problema.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "L'aggiornamento non è riuscito. Segnala il problema alla <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">comunità di Nextcloud </a>.", + "Continue to Nextcloud" : "Continua su Nextcloud", "The update was successful. Redirecting you to Nextcloud now." : "L'aggiornamento è stato effettuato correttamente. Reindirizzamento immediato a Nextcloud.", "Searching other places" : "Ricerca in altre posizioni", "No search results in other folders" : "Nessun risultato di ricerca in altre cartelle", @@ -320,6 +323,11 @@ OC.L10N.register( "Please use the command line updater because you have a big instance." : "Utilizza lo strumento da riga di comando per la grandezza della tua istanza.", "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Per la guida, vedi la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentazione</a>.", "This %s instance is currently in maintenance mode, which may take a while." : "Questa istanza di %s è attualmente in manutenzione, potrebbe richiedere del tempo.", - "This page will refresh itself when the %s instance is available again." : "Questa pagina si aggiornerà quando l'istanza di %s sarà nuovamente disponibile." + "This page will refresh itself when the %s instance is available again." : "Questa pagina si aggiornerà quando l'istanza di %s sarà nuovamente disponibile.", + "Updating to {version}" : "Aggiornamento a {version}", + "The update was successful. There were warnings." : "L'aggiornamento è stato effettuato correttamente. Ci sono degli avvisi.", + "not assignable" : "non assegnabile", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Per informazioni su come configurare correttamente il tuo server, vedi la <a href=\"%s\" target=\"_blank\">documentazione</a>.", + "An internal error occured." : "Si è verificato un errore interno." }, "nplurals=2; plural=(n != 1);"); diff --git a/core/l10n/it.json b/core/l10n/it.json index 1dd8803d534..65e1693c0b3 100644 --- a/core/l10n/it.json +++ b/core/l10n/it.json @@ -217,10 +217,13 @@ "Hello {name}" : "Ciao {name}", "new" : "nuovo", "_download %n file_::_download %n files_" : ["scarica %n file","scarica %s file"], + "The update is in progress, leaving this page might interrupt the process in some environments." : "L'aggiornamento è in corso, l'abbandono di questa pagina potrebbe interrompere il processo in alcuni ambienti.", + "Update to {version}" : "Aggiorna a {version}", "An error occurred." : "Si è verificato un errore.", "Please reload the page." : "Ricarica la pagina.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "L'aggiornamento non è riuscito. Per ulteriori informazioni <a href=\"{url}\">controlla l'articolo del nostro forum</a> che riguarda questo problema.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "L'aggiornamento non è riuscito. Segnala il problema alla <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">comunità di Nextcloud </a>.", + "Continue to Nextcloud" : "Continua su Nextcloud", "The update was successful. Redirecting you to Nextcloud now." : "L'aggiornamento è stato effettuato correttamente. Reindirizzamento immediato a Nextcloud.", "Searching other places" : "Ricerca in altre posizioni", "No search results in other folders" : "Nessun risultato di ricerca in altre cartelle", @@ -318,6 +321,11 @@ "Please use the command line updater because you have a big instance." : "Utilizza lo strumento da riga di comando per la grandezza della tua istanza.", "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Per la guida, vedi la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentazione</a>.", "This %s instance is currently in maintenance mode, which may take a while." : "Questa istanza di %s è attualmente in manutenzione, potrebbe richiedere del tempo.", - "This page will refresh itself when the %s instance is available again." : "Questa pagina si aggiornerà quando l'istanza di %s sarà nuovamente disponibile." + "This page will refresh itself when the %s instance is available again." : "Questa pagina si aggiornerà quando l'istanza di %s sarà nuovamente disponibile.", + "Updating to {version}" : "Aggiornamento a {version}", + "The update was successful. There were warnings." : "L'aggiornamento è stato effettuato correttamente. Ci sono degli avvisi.", + "not assignable" : "non assegnabile", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Per informazioni su come configurare correttamente il tuo server, vedi la <a href=\"%s\" target=\"_blank\">documentazione</a>.", + "An internal error occured." : "Si è verificato un errore interno." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/core/l10n/nl.js b/core/l10n/nl.js index bf3ded6efe8..24d1cbd73ff 100644 --- a/core/l10n/nl.js +++ b/core/l10n/nl.js @@ -219,10 +219,13 @@ OC.L10N.register( "Hello {name}" : "Hallo {name}", "new" : "nieuw", "_download %n file_::_download %n files_" : ["download %n bestand","download %n bestanden"], + "The update is in progress, leaving this page might interrupt the process in some environments." : "De update is bezig, deze pagina verlaten kan het updateproces in sommige omgevingen onderbreken.", + "Update to {version}" : "Bijwerken naar {version}", "An error occurred." : "Er heeft zich een fout voorgedaan.", "Please reload the page." : "Herlaad deze pagina.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "De update was niet succesvol. Voor meer informatie <a href=\"{url}\">zie ons bericht op het forum</a> over dit probleem.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "De update is mislukt. Meld dit probleem aan de <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>.", + "Continue to Nextcloud" : "Ga door naar Nextcloud", "The update was successful. Redirecting you to Nextcloud now." : "De update is geslaagd. Je wordt nu doorgeleid naar Nextcloud.", "Searching other places" : "Zoeken op andere plaatsen", "No search results in other folders" : "Geen zoekresultaten in andere mappen", diff --git a/core/l10n/nl.json b/core/l10n/nl.json index c6f2dce325a..57bdc633f88 100644 --- a/core/l10n/nl.json +++ b/core/l10n/nl.json @@ -217,10 +217,13 @@ "Hello {name}" : "Hallo {name}", "new" : "nieuw", "_download %n file_::_download %n files_" : ["download %n bestand","download %n bestanden"], + "The update is in progress, leaving this page might interrupt the process in some environments." : "De update is bezig, deze pagina verlaten kan het updateproces in sommige omgevingen onderbreken.", + "Update to {version}" : "Bijwerken naar {version}", "An error occurred." : "Er heeft zich een fout voorgedaan.", "Please reload the page." : "Herlaad deze pagina.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "De update was niet succesvol. Voor meer informatie <a href=\"{url}\">zie ons bericht op het forum</a> over dit probleem.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "De update is mislukt. Meld dit probleem aan de <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>.", + "Continue to Nextcloud" : "Ga door naar Nextcloud", "The update was successful. Redirecting you to Nextcloud now." : "De update is geslaagd. Je wordt nu doorgeleid naar Nextcloud.", "Searching other places" : "Zoeken op andere plaatsen", "No search results in other folders" : "Geen zoekresultaten in andere mappen", diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js index 4bd931efc1c..9a7c600aa35 100644 --- a/core/l10n/pt_BR.js +++ b/core/l10n/pt_BR.js @@ -219,10 +219,13 @@ OC.L10N.register( "Hello {name}" : "Olá {name}", "new" : "novo", "_download %n file_::_download %n files_" : ["baixar %n arquivo","baixar %n arquivos"], + "The update is in progress, leaving this page might interrupt the process in some environments." : "A atualização está em andamento. Se sair desta página, o processo poderá ser interrompido em alguns ambientes.", + "Update to {version}" : "Atualizar para {version}", "An error occurred." : "Ocorreu um erro.", "Please reload the page." : "Por favor recarregue a página", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "A atualização não foi realizada com sucesso. Para mais informações <a href=\"{url}\">verifique o nosso post no fórum</a> que abrange esta questão.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Atualizado com sucesso. Por favor, informe este problema para a <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">comunidade Nextcloud</a>.", + "Continue to Nextcloud" : "Continuar no Nextcloud", "The update was successful. Redirecting you to Nextcloud now." : "Atualizado com sucesso. Redirecionando para Nextcloud.", "Searching other places" : "Pesquisando em outros lugares", "No search results in other folders" : "Nenhum resultado de pesquisa em outras pastas", @@ -320,6 +323,15 @@ OC.L10N.register( "Please use the command line updater because you have a big instance." : "Por favor, use a atualização de linha de comando, porque você tem um grande exemplo.", "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Para obter ajuda, consulte a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação</a>.", "This %s instance is currently in maintenance mode, which may take a while." : "Esta instância %s está em modo de manutenção, o que pode demorar um pouco.", - "This page will refresh itself when the %s instance is available again." : "Esta página será atualizada automaticamente quando esta instância %s estiver disponível novamente." + "This page will refresh itself when the %s instance is available again." : "Esta página será atualizada automaticamente quando esta instância %s estiver disponível novamente.", + "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "A atualização está em andamento. Sair desta página poderá interromper o processo em alguns ambientes.", + "Updating to {version}" : "Atualizando para {version}", + "The update was successful. There were warnings." : "A atualização foi concluída com sucesso. Existem avisos.", + "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Seu servidor web não está configurado corretamente para abrir a URL \"{url}\". Mais informações podem ser encontradas em nossa <a target=\"_blank\" href=\"{docLink}\">documentação</a>.", + "An error occured. Please try again" : "Ocorreu um erro. Tente novamente", + "not assignable" : "não atribuível", + "Updating {productName} to version {version}, this may take a while." : "Atualizando o {productName} para a versão {version}. Isso pode levar algum tempo.", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para obter informações sobre como configurar corretamente o seu servidor, leia a <a href=\"%s\" target=\"_blank\">documentação</a>.", + "An internal error occured." : "Ocorreu um erro interno." }, "nplurals=2; plural=(n > 1);"); diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json index 49370b740af..317672760a0 100644 --- a/core/l10n/pt_BR.json +++ b/core/l10n/pt_BR.json @@ -217,10 +217,13 @@ "Hello {name}" : "Olá {name}", "new" : "novo", "_download %n file_::_download %n files_" : ["baixar %n arquivo","baixar %n arquivos"], + "The update is in progress, leaving this page might interrupt the process in some environments." : "A atualização está em andamento. Se sair desta página, o processo poderá ser interrompido em alguns ambientes.", + "Update to {version}" : "Atualizar para {version}", "An error occurred." : "Ocorreu um erro.", "Please reload the page." : "Por favor recarregue a página", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "A atualização não foi realizada com sucesso. Para mais informações <a href=\"{url}\">verifique o nosso post no fórum</a> que abrange esta questão.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Atualizado com sucesso. Por favor, informe este problema para a <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">comunidade Nextcloud</a>.", + "Continue to Nextcloud" : "Continuar no Nextcloud", "The update was successful. Redirecting you to Nextcloud now." : "Atualizado com sucesso. Redirecionando para Nextcloud.", "Searching other places" : "Pesquisando em outros lugares", "No search results in other folders" : "Nenhum resultado de pesquisa em outras pastas", @@ -318,6 +321,15 @@ "Please use the command line updater because you have a big instance." : "Por favor, use a atualização de linha de comando, porque você tem um grande exemplo.", "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Para obter ajuda, consulte a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação</a>.", "This %s instance is currently in maintenance mode, which may take a while." : "Esta instância %s está em modo de manutenção, o que pode demorar um pouco.", - "This page will refresh itself when the %s instance is available again." : "Esta página será atualizada automaticamente quando esta instância %s estiver disponível novamente." + "This page will refresh itself when the %s instance is available again." : "Esta página será atualizada automaticamente quando esta instância %s estiver disponível novamente.", + "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "A atualização está em andamento. Sair desta página poderá interromper o processo em alguns ambientes.", + "Updating to {version}" : "Atualizando para {version}", + "The update was successful. There were warnings." : "A atualização foi concluída com sucesso. Existem avisos.", + "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Seu servidor web não está configurado corretamente para abrir a URL \"{url}\". Mais informações podem ser encontradas em nossa <a target=\"_blank\" href=\"{docLink}\">documentação</a>.", + "An error occured. Please try again" : "Ocorreu um erro. Tente novamente", + "not assignable" : "não atribuível", + "Updating {productName} to version {version}, this may take a while." : "Atualizando o {productName} para a versão {version}. Isso pode levar algum tempo.", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para obter informações sobre como configurar corretamente o seu servidor, leia a <a href=\"%s\" target=\"_blank\">documentação</a>.", + "An internal error occured." : "Ocorreu um erro interno." },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/core/l10n/ru.js b/core/l10n/ru.js index 92246d344fa..15cc8d0ed5a 100644 --- a/core/l10n/ru.js +++ b/core/l10n/ru.js @@ -219,10 +219,13 @@ OC.L10N.register( "Hello {name}" : "Здравствуйте {name}", "new" : "новый", "_download %n file_::_download %n files_" : ["скачать %n файл","скачать %n файла","скачать %n файлов","скачать %n файлов"], + "The update is in progress, leaving this page might interrupt the process in some environments." : "Идет обновление, покидая эту страницу, вы можете прервать процесс в некоторых окружениях.", + "Update to {version}" : "Обновление до {version}", "An error occurred." : "Произошла ошибка.", "Please reload the page." : "Пожалуйста, обновите страницу.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Обновление прошло не успешно. Больше информации о данной проблеме можно найти <a href=\"{url}\">в сообщении на нащем форуме</a>.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Обновление не удалось. Пожалуйста, сообщите об этой проблеме <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">сообществу Nextcloud</a>.", + "Continue to Nextcloud" : "Продолжить в Nextcloud", "The update was successful. Redirecting you to Nextcloud now." : "Обновление прошло успешно. Перенаправляем вас на Nextcloud прямо сейчас.", "Searching other places" : "Идет поиск в других местах", "No search results in other folders" : "В других папках ничего не найдено", diff --git a/core/l10n/ru.json b/core/l10n/ru.json index a22f6640946..1f7d61f1fe3 100644 --- a/core/l10n/ru.json +++ b/core/l10n/ru.json @@ -217,10 +217,13 @@ "Hello {name}" : "Здравствуйте {name}", "new" : "новый", "_download %n file_::_download %n files_" : ["скачать %n файл","скачать %n файла","скачать %n файлов","скачать %n файлов"], + "The update is in progress, leaving this page might interrupt the process in some environments." : "Идет обновление, покидая эту страницу, вы можете прервать процесс в некоторых окружениях.", + "Update to {version}" : "Обновление до {version}", "An error occurred." : "Произошла ошибка.", "Please reload the page." : "Пожалуйста, обновите страницу.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Обновление прошло не успешно. Больше информации о данной проблеме можно найти <a href=\"{url}\">в сообщении на нащем форуме</a>.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Обновление не удалось. Пожалуйста, сообщите об этой проблеме <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">сообществу Nextcloud</a>.", + "Continue to Nextcloud" : "Продолжить в Nextcloud", "The update was successful. Redirecting you to Nextcloud now." : "Обновление прошло успешно. Перенаправляем вас на Nextcloud прямо сейчас.", "Searching other places" : "Идет поиск в других местах", "No search results in other folders" : "В других папках ничего не найдено", diff --git a/core/routes.php b/core/routes.php index 98454946d45..b04b0db4ce7 100644 --- a/core/routes.php +++ b/core/routes.php @@ -53,6 +53,11 @@ $application->registerRoutes($this, [ ['name' => 'TwoFactorChallenge#showChallenge', 'url' => '/login/challenge/{challengeProviderId}', 'verb' => 'GET'], ['name' => 'TwoFactorChallenge#solveChallenge', 'url' => '/login/challenge/{challengeProviderId}', 'verb' => 'POST'], ], + 'ocs' => [ + ['root' => '/cloud', 'name' => 'OCS#getCapabilities', 'url' => '/capabilities', 'verb' => 'GET'], + ['root' => '/cloud', 'name' => 'OCS#getCurrentUser', 'url' => '/user', 'verb' => 'GET'], + ['root' => '', 'name' => 'OCS#getConfig', 'url' => '/config', 'verb' => 'GET'], + ], ]); // Post installation check @@ -65,46 +70,6 @@ $this->create('search_ajax_search', '/core/search') // AppConfig $this->create('core_ajax_appconfig', '/core/ajax/appconfig.php') ->actionInclude('core/ajax/appconfig.php'); -// Share -$this->create('core_ajax_share', '/core/ajax/share.php') - ->actionInclude('core/ajax/share.php'); -// Tags -$this->create('core_tags_tags', '/tags/{type}') - ->get() - ->action('OC\Core\Tags\Controller', 'getTags') - ->requirements(array('type')); -$this->create('core_tags_favorites', '/tags/{type}/favorites') - ->get() - ->action('OC\Core\Tags\Controller', 'getFavorites') - ->requirements(array('type')); -$this->create('core_tags_ids_for_tag', '/tags/{type}/ids') - ->get() - ->action('OC\Core\Tags\Controller', 'getIdsForTag') - ->requirements(array('type')); -$this->create('core_tags_favorite', '/tags/{type}/favorite/{id}/') - ->post() - ->action('OC\Core\Tags\Controller', 'favorite') - ->requirements(array('type', 'id')); -$this->create('core_tags_unfavorite', '/tags/{type}/unfavorite/{id}/') - ->post() - ->action('OC\Core\Tags\Controller', 'unFavorite') - ->requirements(array('type', 'id')); -$this->create('core_tags_tag', '/tags/{type}/tag/{id}/') - ->post() - ->action('OC\Core\Tags\Controller', 'tagAs') - ->requirements(array('type', 'id')); -$this->create('core_tags_untag', '/tags/{type}/untag/{id}/') - ->post() - ->action('OC\Core\Tags\Controller', 'unTag') - ->requirements(array('type', 'id')); -$this->create('core_tags_add', '/tags/{type}/add') - ->post() - ->action('OC\Core\Tags\Controller', 'addTag') - ->requirements(array('type')); -$this->create('core_tags_delete', '/tags/{type}/delete') - ->post() - ->action('OC\Core\Tags\Controller', 'deleteTags') - ->requirements(array('type')); // oC JS config $this->create('js_config', '/core/js/oc.js') ->actionInclude('core/js/config.php'); @@ -117,9 +82,9 @@ $this->create('core_ajax_update', '/core/ajax/update.php') ->actionInclude('core/ajax/update.php'); // File routes -$this->create('files.viewcontroller.showFile', '/f/{fileId}')->action(function($urlParams) { +$this->create('files.viewcontroller.showFile', '/f/{fileid}')->action(function($urlParams) { $app = new \OCA\Files\AppInfo\Application($urlParams); - $app->dispatch('ViewController', 'showFile'); + $app->dispatch('ViewController', 'index'); }); // Sharing routes diff --git a/core/templates/internalmail.php b/core/templates/internalmail.php index c2d84184d38..9bb10fb5455 100644 --- a/core/templates/internalmail.php +++ b/core/templates/internalmail.php @@ -10,7 +10,7 @@ <tr><td colspan="2"> </td></tr> <tr> <td width="20px"> </td> -<td style="font-weight:normal; font-size:0.8em; line-height:1.2em; font-family:verdana,'arial',sans;"> +<td style="font-weight:normal; font-size:0.8em; line-height:1.2em; font-family:'Open Sans',Frutiger,Calibri,'Myriad Pro',Myriad,sans-serif;"> <?php print_unescaped($l->t('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>', array($_['user_displayname'], $_['filename'], $_['link']))); if ( isset($_['expiration']) ) { diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php index be5c769ab76..17f895bc17d 100644 --- a/core/templates/layout.user.php +++ b/core/templates/layout.user.php @@ -81,14 +81,14 @@ <li> <a href="<?php print_unescaped($entry['href']); ?>" <?php if( $entry["active"] ): ?> class="active"<?php endif; ?>> - <img alt="" src="<?php print_unescaped($entry['icon']); ?>"> + <img alt="" src="<?php print_unescaped($entry['icon'] . '?v=' . $_['versionHash']); ?>"> <?php p($entry['name']) ?> </a> </li> <?php endforeach; ?> <li> <a id="logout" <?php print_unescaped(OC_User::getLogoutAttribute()); ?>> - <img alt="" src="<?php print_unescaped(image_path('', 'actions/logout.svg')); ?>"> + <img alt="" src="<?php print_unescaped(image_path('', 'actions/logout.svg') . '?v=' . $_['versionHash']); ?>"> <?php p($l->t('Log out'));?> </a> </li> @@ -114,8 +114,8 @@ <a href="<?php print_unescaped($entry['href']); ?>" tabindex="3" <?php if( $entry['active'] ): ?> class="active"<?php endif; ?>> <svg width="32" height="32" viewBox="0 0 32 32"> - <defs><filter id="invert"><feColorMatrix in="SourceGraphic" type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" /></filter></defs> - <image x="0" y="0" width="32" height="32" preserveAspectRatio="xMinYMin meet" filter="url(#invert)" xlink:href="<?php print_unescaped($entry['icon']); ?>" class="app-icon"/> + <defs><filter id="invert"><feColorMatrix in="SourceGraphic" type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0"></feColorMatrix></filter></defs> + <image x="0" y="0" width="32" height="32" preserveAspectRatio="xMinYMin meet" filter="url(#invert)" xlink:href="<?php print_unescaped($entry['icon'] . '?v=' . $_['versionHash']); ?>" class="app-icon"></image> </svg> <div class="icon-loading-dark" style="display:none;"></div> <span> @@ -132,8 +132,8 @@ <a href="<?php print_unescaped(\OC::$server->getURLGenerator()->linkToRoute('settings.AppSettings.viewApps')); ?>" tabindex="4" <?php if( $_['appsmanagement_active'] ): ?> class="active"<?php endif; ?>> <svg width="32" height="32" viewBox="0 0 32 32" class="app-icon"> - <defs><filter id="invert"><feColorMatrix in="SourceGraphic" type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" /></filter></defs> - <image x="0" y="0" width="32" height="32" preserveAspectRatio="xMinYMin meet" filter="url(#invert)" xlink:href="<?php print_unescaped(image_path('settings', 'apps.svg')); ?>"/> + <defs><filter id="invert"><feColorMatrix in="SourceGraphic" type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0"></feColorMatrix></filter></defs> + <image x="0" y="0" width="32" height="32" preserveAspectRatio="xMinYMin meet" filter="url(#invert)" xlink:href="<?php print_unescaped(image_path('settings', 'apps.svg') . '?v=' . $_['versionHash']); ?>"></image> </svg> <div class="icon-loading-dark" style="display:none;"></div> <span> diff --git a/core/templates/message.html b/core/templates/message.html index a98fd31a7fe..06f8a789599 100644 --- a/core/templates/message.html +++ b/core/templates/message.html @@ -1,3 +1,3 @@ -<div id="{dialog_name}" title="{title} "><?php /* the ' ' after {title} fixes ie8, see http://stackoverflow.com/a/5313137/828717 */ ?> +<div id="{dialog_name}" title="{title} "> <p><span class="ui-icon ui-icon-{type}"></span>{message}</p> </div> diff --git a/core/templates/twofactorselectchallenge.php b/core/templates/twofactorselectchallenge.php index 4209beac4e6..1948499e604 100644 --- a/core/templates/twofactorselectchallenge.php +++ b/core/templates/twofactorselectchallenge.php @@ -1,22 +1,22 @@ -<fieldset class="warning"> - <legend><strong><?php p($l->t('Two-step verification')) ?></strong></legend> - <p><?php p($l->t('Enhanced security has been enabled for your account. Please authenticate using a second factor.')) ?></p> -</fieldset> -<fieldset class="warning"> -<ul> -<?php foreach ($_['providers'] as $provider): ?> - <li> - <a class="two-factor-provider" - href="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.TwoFactorChallenge.showChallenge', - [ - 'challengeProviderId' => $provider->getId(), - 'redirect_url' => $_['redirect_url'], - ] - )) ?>"> - <?php p($provider->getDescription()) ?> - </a> - </li> -<?php endforeach; ?> -</ul> -</fieldset> -<a class="two-factor-cancel" <?php print_unescaped($_['logout_attribute']); ?>><?php p($l->t('Cancel login')) ?></a> +<div class="warning"> + <h2 class="two-factor-header"><?php p($l->t('Two-factor authentication')) ?></h2> + <p><?php p($l->t('Enhanced security is enabled for your account. Please authenticate using a second factor.')) ?></p> + <p> + <ul> + <?php foreach ($_['providers'] as $provider): ?> + <li> + <a class="button two-factor-provider" + href="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.TwoFactorChallenge.showChallenge', + [ + 'challengeProviderId' => $provider->getId(), + 'redirect_url' => $_['redirect_url'], + ] + )) ?>"> + <?php p($provider->getDescription()) ?> + </a> + </li> + <?php endforeach; ?> + </ul> + </p> +</div> +<a class="two-factor-cancel" <?php print_unescaped($_['logout_attribute']); ?>><?php p($l->t('Cancel log in')) ?></a> diff --git a/core/templates/twofactorshowchallenge.php b/core/templates/twofactorshowchallenge.php index c5ee9aca4b4..fb161921675 100644 --- a/core/templates/twofactorshowchallenge.php +++ b/core/templates/twofactorshowchallenge.php @@ -9,12 +9,11 @@ $provider = $_['provider']; $template = $_['template']; ?> -<fieldset class="warning"> - <legend><strong><?php p($provider->getDisplayName()); ?></strong></legend> - <p><?php p($l->t('Please authenticate using the selected factor.')) ?></p> -</fieldset> -<?php if ($error): ?> -<span class="warning"><?php p($l->t('An error occured while verifying the token')); ?></span> -<?php endif; ?> -<?php print_unescaped($template); ?> -<a class="two-factor-cancel" <?php print_unescaped($_['logout_attribute']); ?>><?php p($l->t('Cancel login')) ?></a> +<div class="warning"> + <h2 class="two-factor-header"><?php p($provider->getDisplayName()); ?></h2> + <?php if ($error): ?> + <p><strong><?php p($l->t('Error while validating your second factor')); ?></strong></p> + <?php endif; ?> + <?php print_unescaped($template); ?> +</div> +<a class="two-factor-cancel" <?php print_unescaped($_['logout_attribute']); ?>><?php p($l->t('Cancel log in')) ?></a> diff --git a/core/templates/untrustedDomain.php b/core/templates/untrustedDomain.php index 46bad216822..735f83fedec 100644 --- a/core/templates/untrustedDomain.php +++ b/core/templates/untrustedDomain.php @@ -10,7 +10,7 @@ <?php p($l->t('Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain.')); ?> <br><br> <p style="text-align:center;"> - <a href="<?php print_unescaped(\OC::$server->getURLGenerator()->getAbsoluteURL(\OCP\Util::linkToRoute('settings_admin'))); ?>?trustDomain=<?php p($_['domain']); ?>" class="button"> + <a href="<?php print_unescaped(\OC::$server->getURLGenerator()->getAbsoluteURL(\OCP\Util::linkToRoute('settings.AdminSettings.index'))); ?>?trustDomain=<?php p($_['domain']); ?>" class="button"> <?php p($l->t('Add "%s" as trusted domain', array($_['domain']))); ?> </a> </p> diff --git a/db_structure.xml b/db_structure.xml index 04c91ea494f..77f6d768986 100644 --- a/db_structure.xml +++ b/db_structure.xml @@ -1976,4 +1976,125 @@ </table> + <table> + <!-- Extra admin settings sections --> + <name>*dbprefix*admin_sections</name> + + <declaration> + + <field> + <name>id</name> + <type>text</type> + <default></default> + <notnull>false</notnull> + <length>64</length> + </field> + + <field> + <name>class</name> + <type>text</type> + <default></default> + <notnull>true</notnull> + <length>255</length> + </field> + + <field> + <name>priority</name> + <type>integer</type> + <default></default> + <notnull>true</notnull> + <length>1</length> + </field> + + <index> + <name>admin_sections_id_index</name> + <primary>true</primary> + <field> + <name>id</name> + <sorting>ascending</sorting> + </field> + </index> + + <index> + <name>admin_sections_class</name> + <unique>true</unique> + <field> + <name>class</name> + <sorting>ascending</sorting> + </field> + </index> + + </declaration> + </table> + + <table> + <!-- Extra admin settings --> + <name>*dbprefix*admin_settings</name> + + <declaration> + + <field> + <name>id</name> + <type>integer</type> + <default>0</default> + <notnull>true</notnull> + <autoincrement>1</autoincrement> + <length>4</length> + </field> + + <field> + <name>class</name> + <type>text</type> + <default></default> + <notnull>true</notnull> + <length>255</length> + </field> + + <!-- id of the section, foreign key: admin_sections.id --> + <field> + <name>section</name> + <type>text</type> + <default></default> + <notnull>false</notnull> + <length>64</length> + </field> + + <field> + <name>priority</name> + <type>integer</type> + <default></default> + <notnull>true</notnull> + <length>1</length> + </field> + + <index> + <name>admin_settings_id_index</name> + <primary>true</primary> + <field> + <name>id</name> + <sorting>ascending</sorting> + </field> + </index> + + <index> + <name>admin_settings_class</name> + <unique>true</unique> + <field> + <name>class</name> + <sorting>ascending</sorting> + </field> + </index> + + <index> + <name>admin_settings_section</name> + <unique>false</unique> + <field> + <name>section</name> + <sorting>ascending</sorting> + </field> + </index> + + </declaration> + </table> + </database> diff --git a/index.php b/index.php index 2b344dadfff..8c3066d2409 100644 --- a/index.php +++ b/index.php @@ -25,14 +25,22 @@ * */ -// Show warning if a PHP version below 5.4.0 is used, this has to happen here -// because base.php will already use 5.4 syntax. -if (version_compare(PHP_VERSION, '5.4.0') === -1) { - echo 'This version of ownCloud requires at least PHP 5.4.0<br/>'; +// Show warning if a PHP version below 5.6.0 is used, this has to happen here +// because base.php will already use 5.6 syntax. +if (version_compare(PHP_VERSION, '5.6.0') === -1) { + echo 'This version of Nextcloud requires at least PHP 5.6.0<br/>'; echo 'You are currently running ' . PHP_VERSION . '. Please update your PHP version.'; return; } +// Show warning if PHP 7.1 is used as Nextcloud is not compatible with PHP 7.1 for now +// @see https://github.com/nextcloud/docker-ci/issues/10 +if (version_compare(PHP_VERSION, '7.1.0') !== -1) { + echo 'This version of Nextcloud is not compatible with PHP 7.1.<br/>'; + echo 'You are currently running ' . PHP_VERSION . '.'; + return; +} + try { require_once 'lib/base.php'; diff --git a/lib/base.php b/lib/base.php index 3457a74e989..fe7419e6ff3 100644 --- a/lib/base.php +++ b/lib/base.php @@ -268,7 +268,7 @@ class OC { if (OC::$CLI) { throw new Exception('Not installed'); } else { - $url = 'http://' . $_SERVER['SERVER_NAME'] . OC::$WEBROOT . '/index.php'; + $url = OC::$WEBROOT . '/index.php'; header('Location: ' . $url); } exit(); @@ -725,6 +725,7 @@ class OC { self::registerLogRotate(); self::registerEncryptionWrapper(); self::registerEncryptionHooks(); + self::registerSettingsHooks(); //make sure temporary files are cleaned up $tmpManager = \OC::$server->getTempManager(); @@ -803,6 +804,22 @@ class OC { } } + public static function registerSettingsHooks() { + $dispatcher = \OC::$server->getEventDispatcher(); + $dispatcher->addListener(OCP\App\ManagerEvent::EVENT_APP_DISABLE, function($event) { + /** @var \OCP\App\ManagerEvent $event */ + \OC::$server->getSettingsManager()->onAppDisabled($event->getAppID()); + }); + $dispatcher->addListener(OCP\App\ManagerEvent::EVENT_APP_UPDATE, function($event) { + /** @var \OCP\App\ManagerEvent $event */ + $jobList = \OC::$server->getJobList(); + $job = 'OC\\Settings\\RemoveOrphaned'; + if(!($jobList->has($job, null))) { + $jobList->add($job); + } + }); + } + private static function registerEncryptionWrapper() { $manager = self::$server->getEncryptionManager(); \OCP\Util::connectHook('OC_Filesystem', 'preSetup', $manager, 'setupStorage'); @@ -905,6 +922,9 @@ class OC { $request = \OC::$server->getRequest(); $requestPath = $request->getRawPathInfo(); + if ($requestPath === '/heartbeat') { + return; + } if (substr($requestPath, -3) !== '.js') { // we need these files during the upgrade self::checkMaintenanceMode(); self::checkUpgrade(); diff --git a/lib/composer/autoload.php b/lib/composer/autoload.php index d99c5074e69..610dbf34bca 100644 --- a/lib/composer/autoload.php +++ b/lib/composer/autoload.php @@ -1,26 +1,5 @@ <?php -/** - * - * @author Joas Schilling <coding@schilljs.com> - * @author Roeland Jago Douma <roeland@famdouma.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/>. - * - */ // autoload.php @generated by Composer require_once __DIR__ . '/composer' . '/autoload_real.php'; diff --git a/lib/composer/composer/ClassLoader.php b/lib/composer/composer/ClassLoader.php index e5cea955291..ff6ecfb822f 100644 --- a/lib/composer/composer/ClassLoader.php +++ b/lib/composer/composer/ClassLoader.php @@ -1,24 +1,13 @@ <?php -/** +/* + * This file is part of Composer. * - * @author Roeland Jago Douma <roeland@famdouma.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/>. + * (c) Nils Adermann <naderman@naderman.de> + * Jordi Boggiano <j.boggiano@seld.be> * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. */ namespace Composer\Autoload; diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php index 7f2a0bfdc83..1363d96349e 100644 --- a/lib/composer/composer/autoload_classmap.php +++ b/lib/composer/composer/autoload_classmap.php @@ -1,26 +1,5 @@ <?php -/** - * - * @author Joas Schilling <coding@schilljs.com> - * @author Roeland Jago Douma <roeland@famdouma.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/>. - * - */ // autoload_classmap.php @generated by Composer $vendorDir = dirname(dirname(__FILE__)); @@ -60,6 +39,10 @@ return array( 'OCP\\AppFramework\\IAppContainer' => $baseDir . '/lib/public/AppFramework/IAppContainer.php', 'OCP\\AppFramework\\Middleware' => $baseDir . '/lib/public/AppFramework/Middleware.php', 'OCP\\AppFramework\\OCSController' => $baseDir . '/lib/public/AppFramework/OCSController.php', + 'OCP\\AppFramework\\OCS\\OCSBadRequestException' => $baseDir . '/lib/public/AppFramework/OCS/OCSBadRequestException.php', + 'OCP\\AppFramework\\OCS\\OCSException' => $baseDir . '/lib/public/AppFramework/OCS/OCSException.php', + 'OCP\\AppFramework\\OCS\\OCSForbiddenException' => $baseDir . '/lib/public/AppFramework/OCS/OCSForbiddenException.php', + 'OCP\\AppFramework\\OCS\\OCSNotFoundException' => $baseDir . '/lib/public/AppFramework/OCS/OCSNotFoundException.php', 'OCP\\AppFramework\\QueryException' => $baseDir . '/lib/public/AppFramework/QueryException.php', 'OCP\\AppFramework\\Utility\\IControllerMethodReflector' => $baseDir . '/lib/public/AppFramework/Utility/IControllerMethodReflector.php', 'OCP\\AppFramework\\Utility\\ITimeFactory' => $baseDir . '/lib/public/AppFramework/Utility/ITimeFactory.php', @@ -147,6 +130,7 @@ return array( 'OCP\\Files\\StorageNotAvailableException' => $baseDir . '/lib/public/Files/StorageNotAvailableException.php', 'OCP\\Files\\StorageTimeoutException' => $baseDir . '/lib/public/Files/StorageTimeoutException.php', 'OCP\\Files\\Storage\\ILockingStorage' => $baseDir . '/lib/public/Files/Storage/ILockingStorage.php', + 'OCP\\Files\\Storage\\INotifyStorage' => $baseDir . '/lib/public/Files/Storage/INotifyStorage.php', 'OCP\\Files\\Storage\\IStorage' => $baseDir . '/lib/public/Files/Storage/IStorage.php', 'OCP\\Files\\Storage\\IStorageFactory' => $baseDir . '/lib/public/Files/Storage/IStorageFactory.php', 'OCP\\Files\\UnseekableException' => $baseDir . '/lib/public/Files/UnseekableException.php', @@ -194,6 +178,9 @@ return array( 'OCP\\Image' => $baseDir . '/lib/public/Image.php', 'OCP\\JSON' => $baseDir . '/lib/public/JSON.php', 'OCP\\L10N\\IFactory' => $baseDir . '/lib/public/L10N/IFactory.php', + 'OCP\\LDAP\\IDeletionFlagSupport' => $baseDir . '/lib/public/LDAP/IDeletionFlagSupport.php', + 'OCP\\LDAP\\ILDAPProvider' => $baseDir . '/lib/public/LDAP/ILDAPProvider.php', + 'OCP\\LDAP\\ILDAPProviderFactory' => $baseDir . '/lib/public/LDAP/ILDAPProviderFactory.php', 'OCP\\Lock\\ILockingProvider' => $baseDir . '/lib/public/Lock/ILockingProvider.php', 'OCP\\Lock\\LockedException' => $baseDir . '/lib/public/Lock/LockedException.php', 'OCP\\Mail\\IMailer' => $baseDir . '/lib/public/Mail/IMailer.php', @@ -221,6 +208,9 @@ return array( 'OCP\\Security\\ISecureRandom' => $baseDir . '/lib/public/Security/ISecureRandom.php', 'OCP\\Security\\StringUtils' => $baseDir . '/lib/public/Security/StringUtils.php', 'OCP\\Session\\Exceptions\\SessionNotAvailableException' => $baseDir . '/lib/public/Session/Exceptions/SessionNotAvailableException.php', + 'OCP\\Settings\\IManager' => $baseDir . '/lib/public/Settings/IManager.php', + 'OCP\\Settings\\ISection' => $baseDir . '/lib/public/Settings/ISection.php', + 'OCP\\Settings\\ISettings' => $baseDir . '/lib/public/Settings/ISettings.php', 'OCP\\Share' => $baseDir . '/lib/public/Share.php', 'OCP\\Share\\Exceptions\\GenericShareException' => $baseDir . '/lib/public/Share/Exceptions/GenericShareException.php', 'OCP\\Share\\Exceptions\\IllegalIDChangeException' => $baseDir . '/lib/public/Share/Exceptions/IllegalIDChangeException.php', @@ -238,12 +228,16 @@ return array( 'OCP\\SystemTag\\ISystemTagObjectMapper' => $baseDir . '/lib/public/SystemTag/ISystemTagObjectMapper.php', 'OCP\\SystemTag\\ManagerEvent' => $baseDir . '/lib/public/SystemTag/ManagerEvent.php', 'OCP\\SystemTag\\MapperEvent' => $baseDir . '/lib/public/SystemTag/MapperEvent.php', + 'OCP\\SystemTag\\SystemTagsEntityEvent' => $baseDir . '/lib/public/SystemTag/SystemTagsEntityEvent.php', 'OCP\\SystemTag\\TagAlreadyExistsException' => $baseDir . '/lib/public/SystemTag/TagAlreadyExistsException.php', 'OCP\\SystemTag\\TagNotFoundException' => $baseDir . '/lib/public/SystemTag/TagNotFoundException.php', 'OCP\\Template' => $baseDir . '/lib/public/Template.php', 'OCP\\User' => $baseDir . '/lib/public/User.php', 'OCP\\UserInterface' => $baseDir . '/lib/public/UserInterface.php', 'OCP\\Util' => $baseDir . '/lib/public/Util.php', + 'OCP\\WorkflowEngine\\ICheck' => $baseDir . '/lib/public/WorkflowEngine/ICheck.php', + 'OCP\\WorkflowEngine\\IManager' => $baseDir . '/lib/public/WorkflowEngine/IManager.php', + 'OCP\\WorkflowEngine\\IOperation' => $baseDir . '/lib/public/WorkflowEngine/IOperation.php', 'OC\\Activity\\Event' => $baseDir . '/lib/private/Activity/Event.php', 'OC\\Activity\\Manager' => $baseDir . '/lib/private/Activity/Manager.php', 'OC\\AllConfig' => $baseDir . '/lib/private/AllConfig.php', @@ -257,12 +251,14 @@ return array( 'OC\\AppFramework\\Http\\Output' => $baseDir . '/lib/private/AppFramework/Http/Output.php', 'OC\\AppFramework\\Http\\Request' => $baseDir . '/lib/private/AppFramework/Http/Request.php', 'OC\\AppFramework\\Middleware\\MiddlewareDispatcher' => $baseDir . '/lib/private/AppFramework/Middleware/MiddlewareDispatcher.php', + 'OC\\AppFramework\\Middleware\\OCSMiddleware' => $baseDir . '/lib/private/AppFramework/Middleware/OCSMiddleware.php', 'OC\\AppFramework\\Middleware\\Security\\CORSMiddleware' => $baseDir . '/lib/private/AppFramework/Middleware/Security/CORSMiddleware.php', 'OC\\AppFramework\\Middleware\\Security\\Exceptions\\AppNotEnabledException' => $baseDir . '/lib/private/AppFramework/Middleware/Security/Exceptions/AppNotEnabledException.php', 'OC\\AppFramework\\Middleware\\Security\\Exceptions\\CrossSiteRequestForgeryException' => $baseDir . '/lib/private/AppFramework/Middleware/Security/Exceptions/CrossSiteRequestForgeryException.php', 'OC\\AppFramework\\Middleware\\Security\\Exceptions\\NotAdminException' => $baseDir . '/lib/private/AppFramework/Middleware/Security/Exceptions/NotAdminException.php', 'OC\\AppFramework\\Middleware\\Security\\Exceptions\\NotLoggedInException' => $baseDir . '/lib/private/AppFramework/Middleware/Security/Exceptions/NotLoggedInException.php', 'OC\\AppFramework\\Middleware\\Security\\Exceptions\\SecurityException' => $baseDir . '/lib/private/AppFramework/Middleware/Security/Exceptions/SecurityException.php', + 'OC\\AppFramework\\Middleware\\Security\\Exceptions\\StrictCookieMissingException' => $baseDir . '/lib/private/AppFramework/Middleware/Security/Exceptions/StrictCookieMissingException.php', 'OC\\AppFramework\\Middleware\\Security\\SecurityMiddleware' => $baseDir . '/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php', 'OC\\AppFramework\\Middleware\\SessionMiddleware' => $baseDir . '/lib/private/AppFramework/Middleware/SessionMiddleware.php', 'OC\\AppFramework\\Routing\\RouteActionHandler' => $baseDir . '/lib/private/AppFramework/Routing/RouteActionHandler.php', @@ -356,13 +352,16 @@ return array( 'OC\\Core\\Command\\Encryption\\SetDefaultModule' => $baseDir . '/core/Command/Encryption/SetDefaultModule.php', 'OC\\Core\\Command\\Encryption\\ShowKeyStorageRoot' => $baseDir . '/core/Command/Encryption/ShowKeyStorageRoot.php', 'OC\\Core\\Command\\Encryption\\Status' => $baseDir . '/core/Command/Encryption/Status.php', + 'OC\\Core\\Command\\Group\\AddUser' => $baseDir . '/core/Command/Group/AddUser.php', + 'OC\\Core\\Command\\Group\\ListCommand' => $baseDir . '/core/Command/Group/ListCommand.php', + 'OC\\Core\\Command\\Group\\RemoveUser' => $baseDir . '/core/Command/Group/RemoveUser.php', 'OC\\Core\\Command\\Integrity\\CheckApp' => $baseDir . '/core/Command/Integrity/CheckApp.php', 'OC\\Core\\Command\\Integrity\\CheckCore' => $baseDir . '/core/Command/Integrity/CheckCore.php', 'OC\\Core\\Command\\Integrity\\SignApp' => $baseDir . '/core/Command/Integrity/SignApp.php', 'OC\\Core\\Command\\Integrity\\SignCore' => $baseDir . '/core/Command/Integrity/SignCore.php', 'OC\\Core\\Command\\L10n\\CreateJs' => $baseDir . '/core/Command/L10n/CreateJs.php', + 'OC\\Core\\Command\\Log\\File' => $baseDir . '/core/Command/Log/File.php', 'OC\\Core\\Command\\Log\\Manage' => $baseDir . '/core/Command/Log/Manage.php', - 'OC\\Core\\Command\\Log\\OwnCloud' => $baseDir . '/core/Command/Log/OwnCloud.php', 'OC\\Core\\Command\\Maintenance\\DataFingerprint' => $baseDir . '/core/Command/Maintenance/DataFingerprint.php', 'OC\\Core\\Command\\Maintenance\\Install' => $baseDir . '/core/Command/Maintenance/Install.php', 'OC\\Core\\Command\\Maintenance\\Mimetype\\UpdateDB' => $baseDir . '/core/Command/Maintenance/Mimetype/UpdateDB.php', @@ -382,19 +381,21 @@ return array( 'OC\\Core\\Command\\User\\Delete' => $baseDir . '/core/Command/User/Delete.php', 'OC\\Core\\Command\\User\\Disable' => $baseDir . '/core/Command/User/Disable.php', 'OC\\Core\\Command\\User\\Enable' => $baseDir . '/core/Command/User/Enable.php', + 'OC\\Core\\Command\\User\\Info' => $baseDir . '/core/Command/User/Info.php', 'OC\\Core\\Command\\User\\LastSeen' => $baseDir . '/core/Command/User/LastSeen.php', + 'OC\\Core\\Command\\User\\ListCommand' => $baseDir . '/core/Command/User/ListCommand.php', 'OC\\Core\\Command\\User\\Report' => $baseDir . '/core/Command/User/Report.php', 'OC\\Core\\Command\\User\\ResetPassword' => $baseDir . '/core/Command/User/ResetPassword.php', 'OC\\Core\\Command\\User\\Setting' => $baseDir . '/core/Command/User/Setting.php', 'OC\\Core\\Controller\\AvatarController' => $baseDir . '/core/Controller/AvatarController.php', 'OC\\Core\\Controller\\LoginController' => $baseDir . '/core/Controller/LoginController.php', 'OC\\Core\\Controller\\LostController' => $baseDir . '/core/Controller/LostController.php', + 'OC\\Core\\Controller\\OCSController' => $baseDir . '/core/Controller/OCSController.php', 'OC\\Core\\Controller\\SetupController' => $baseDir . '/core/Controller/SetupController.php', 'OC\\Core\\Controller\\TokenController' => $baseDir . '/core/Controller/TokenController.php', 'OC\\Core\\Controller\\TwoFactorChallengeController' => $baseDir . '/core/Controller/TwoFactorChallengeController.php', 'OC\\Core\\Controller\\UserController' => $baseDir . '/core/Controller/UserController.php', 'OC\\Core\\Middleware\\TwoFactorMiddleware' => $baseDir . '/core/Middleware/TwoFactorMiddleware.php', - 'OC\\Core\\Tags\\Controller' => $baseDir . '/core/Tags/Controller.php', 'OC\\DB\\Adapter' => $baseDir . '/lib/private/DB/Adapter.php', 'OC\\DB\\AdapterMySQL' => $baseDir . '/lib/private/DB/AdapterMySQL.php', 'OC\\DB\\AdapterOCI8' => $baseDir . '/lib/private/DB/AdapterOCI8.php', @@ -557,7 +558,7 @@ return array( 'OC\\Log' => $baseDir . '/lib/private/Log.php', 'OC\\Log\\ErrorHandler' => $baseDir . '/lib/private/Log/ErrorHandler.php', 'OC\\Log\\Errorlog' => $baseDir . '/lib/private/Log/Errorlog.php', - 'OC\\Log\\Owncloud' => $baseDir . '/lib/private/Log/Owncloud.php', + 'OC\\Log\\File' => $baseDir . '/lib/private/Log/File.php', 'OC\\Log\\Rotate' => $baseDir . '/lib/private/Log/Rotate.php', 'OC\\Log\\Syslog' => $baseDir . '/lib/private/Log/Syslog.php', 'OC\\Mail\\Mailer' => $baseDir . '/lib/private/Mail/Mailer.php', @@ -583,8 +584,6 @@ return array( 'OC\\Notification\\Manager' => $baseDir . '/lib/private/Notification/Manager.php', 'OC\\Notification\\Notification' => $baseDir . '/lib/private/Notification/Notification.php', 'OC\\OCSClient' => $baseDir . '/lib/private/OCSClient.php', - 'OC\\OCS\\Cloud' => $baseDir . '/lib/private/OCS/Cloud.php', - 'OC\\OCS\\Config' => $baseDir . '/lib/private/OCS/Config.php', 'OC\\OCS\\CoreCapabilities' => $baseDir . '/lib/private/OCS/CoreCapabilities.php', 'OC\\OCS\\Exception' => $baseDir . '/lib/private/OCS/Exception.php', 'OC\\OCS\\Person' => $baseDir . '/lib/private/OCS/Person.php', @@ -637,6 +636,7 @@ return array( 'OC\\Repair\\RepairInvalidShares' => $baseDir . '/lib/private/Repair/RepairInvalidShares.php', 'OC\\Repair\\RepairLegacyStorages' => $baseDir . '/lib/private/Repair/RepairLegacyStorages.php', 'OC\\Repair\\RepairMimeTypes' => $baseDir . '/lib/private/Repair/RepairMimeTypes.php', + 'OC\\Repair\\RepairUnmergedShares' => $baseDir . '/lib/private/Repair/RepairUnmergedShares.php', 'OC\\Repair\\SearchLuceneTables' => $baseDir . '/lib/private/Repair/SearchLuceneTables.php', 'OC\\Repair\\SharePropagation' => $baseDir . '/lib/private/Repair/SharePropagation.php', 'OC\\Repair\\SqliteAutoincrement' => $baseDir . '/lib/private/Repair/SqliteAutoincrement.php', @@ -651,6 +651,7 @@ return array( 'OC\\Search\\Result\\File' => $baseDir . '/lib/private/Search/Result/File.php', 'OC\\Search\\Result\\Folder' => $baseDir . '/lib/private/Search/Result/Folder.php', 'OC\\Search\\Result\\Image' => $baseDir . '/lib/private/Search/Result/Image.php', + 'OC\\Security\\Bruteforce\\Throttler' => $baseDir . '/lib/private/Security/Bruteforce/Throttler.php', 'OC\\Security\\CSP\\ContentSecurityPolicy' => $baseDir . '/lib/private/Security/CSP/ContentSecurityPolicy.php', 'OC\\Security\\CSP\\ContentSecurityPolicyManager' => $baseDir . '/lib/private/Security/CSP/ContentSecurityPolicyManager.php', 'OC\\Security\\CSRF\\CsrfToken' => $baseDir . '/lib/private/Security/CSRF/CsrfToken.php', @@ -673,11 +674,18 @@ return array( 'OC\\Session\\Internal' => $baseDir . '/lib/private/Session/Internal.php', 'OC\\Session\\Memory' => $baseDir . '/lib/private/Session/Memory.php', 'OC\\Session\\Session' => $baseDir . '/lib/private/Session/Session.php', + 'OC\\Settings\\Admin\\Additional' => $baseDir . '/lib/private/Settings/Admin/Additional.php', + 'OC\\Settings\\Admin\\Encryption' => $baseDir . '/lib/private/Settings/Admin/Encryption.php', + 'OC\\Settings\\Admin\\Logging' => $baseDir . '/lib/private/Settings/Admin/Logging.php', + 'OC\\Settings\\Admin\\Server' => $baseDir . '/lib/private/Settings/Admin/Server.php', + '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\\ChangePassword\\Controller' => $baseDir . '/settings/ChangePassword/Controller.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', 'OC\\Settings\\Controller\\CertificateController' => $baseDir . '/settings/Controller/CertificateController.php', + 'OC\\Settings\\Controller\\ChangePasswordController' => $baseDir . '/settings/Controller/ChangePasswordController.php', 'OC\\Settings\\Controller\\CheckSetupController' => $baseDir . '/settings/Controller/CheckSetupController.php', 'OC\\Settings\\Controller\\EncryptionController' => $baseDir . '/settings/Controller/EncryptionController.php', 'OC\\Settings\\Controller\\GroupsController' => $baseDir . '/settings/Controller/GroupsController.php', @@ -685,7 +693,10 @@ return array( 'OC\\Settings\\Controller\\MailSettingsController' => $baseDir . '/settings/Controller/MailSettingsController.php', 'OC\\Settings\\Controller\\SecuritySettingsController' => $baseDir . '/settings/Controller/SecuritySettingsController.php', 'OC\\Settings\\Controller\\UsersController' => $baseDir . '/settings/Controller/UsersController.php', + 'OC\\Settings\\Manager' => $baseDir . '/lib/private/Settings/Manager.php', 'OC\\Settings\\Middleware\\SubadminMiddleware' => $baseDir . '/settings/Middleware/SubadminMiddleware.php', + 'OC\\Settings\\RemoveOrphaned' => $baseDir . '/lib/private/Settings/RemoveOrphaned.php', + 'OC\\Settings\\Section' => $baseDir . '/lib/private/Settings/Section.php', 'OC\\Setup' => $baseDir . '/lib/private/Setup.php', 'OC\\Setup\\AbstractDatabase' => $baseDir . '/lib/private/Setup/AbstractDatabase.php', 'OC\\Setup\\MySQL' => $baseDir . '/lib/private/Setup/MySQL.php', diff --git a/lib/composer/composer/autoload_namespaces.php b/lib/composer/composer/autoload_namespaces.php index 3f901596d5b..4a9c20beed0 100644 --- a/lib/composer/composer/autoload_namespaces.php +++ b/lib/composer/composer/autoload_namespaces.php @@ -1,26 +1,5 @@ <?php -/** - * - * @author Joas Schilling <coding@schilljs.com> - * @author Roeland Jago Douma <roeland@famdouma.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/>. - * - */ // autoload_namespaces.php @generated by Composer $vendorDir = dirname(dirname(__FILE__)); diff --git a/lib/composer/composer/autoload_psr4.php b/lib/composer/composer/autoload_psr4.php index 5bf20ca807a..2561f0048c5 100644 --- a/lib/composer/composer/autoload_psr4.php +++ b/lib/composer/composer/autoload_psr4.php @@ -1,27 +1,5 @@ <?php -/** - * - * @author Joas Schilling <coding@schilljs.com> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Roeland Jago Douma <roeland@famdouma.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/>. - * - */ // autoload_psr4.php @generated by Composer $vendorDir = dirname(dirname(__FILE__)); diff --git a/lib/composer/composer/autoload_real.php b/lib/composer/composer/autoload_real.php index 0e7b95703de..43d67606954 100644 --- a/lib/composer/composer/autoload_real.php +++ b/lib/composer/composer/autoload_real.php @@ -1,26 +1,5 @@ <?php -/** - * - * @author Joas Schilling <coding@schilljs.com> - * @author Roeland Jago Douma <roeland@famdouma.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/>. - * - */ // autoload_real.php @generated by Composer class ComposerAutoloaderInit53792487c5a8370acc0b06b1a864ff4c diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php index a76d6799a72..42b6fc83217 100644 --- a/lib/composer/composer/autoload_static.php +++ b/lib/composer/composer/autoload_static.php @@ -1,26 +1,5 @@ <?php -/** - * - * @author Joas Schilling <coding@schilljs.com> - * @author Roeland Jago Douma <roeland@famdouma.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/>. - * - */ // autoload_static.php @generated by Composer namespace Composer\Autoload; @@ -90,6 +69,10 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OCP\\AppFramework\\IAppContainer' => __DIR__ . '/../../..' . '/lib/public/AppFramework/IAppContainer.php', 'OCP\\AppFramework\\Middleware' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Middleware.php', 'OCP\\AppFramework\\OCSController' => __DIR__ . '/../../..' . '/lib/public/AppFramework/OCSController.php', + 'OCP\\AppFramework\\OCS\\OCSBadRequestException' => __DIR__ . '/../../..' . '/lib/public/AppFramework/OCS/OCSBadRequestException.php', + 'OCP\\AppFramework\\OCS\\OCSException' => __DIR__ . '/../../..' . '/lib/public/AppFramework/OCS/OCSException.php', + 'OCP\\AppFramework\\OCS\\OCSForbiddenException' => __DIR__ . '/../../..' . '/lib/public/AppFramework/OCS/OCSForbiddenException.php', + 'OCP\\AppFramework\\OCS\\OCSNotFoundException' => __DIR__ . '/../../..' . '/lib/public/AppFramework/OCS/OCSNotFoundException.php', 'OCP\\AppFramework\\QueryException' => __DIR__ . '/../../..' . '/lib/public/AppFramework/QueryException.php', 'OCP\\AppFramework\\Utility\\IControllerMethodReflector' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Utility/IControllerMethodReflector.php', 'OCP\\AppFramework\\Utility\\ITimeFactory' => __DIR__ . '/../../..' . '/lib/public/AppFramework/Utility/ITimeFactory.php', @@ -177,6 +160,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OCP\\Files\\StorageNotAvailableException' => __DIR__ . '/../../..' . '/lib/public/Files/StorageNotAvailableException.php', 'OCP\\Files\\StorageTimeoutException' => __DIR__ . '/../../..' . '/lib/public/Files/StorageTimeoutException.php', 'OCP\\Files\\Storage\\ILockingStorage' => __DIR__ . '/../../..' . '/lib/public/Files/Storage/ILockingStorage.php', + 'OCP\\Files\\Storage\\INotifyStorage' => __DIR__ . '/../../..' . '/lib/public/Files/Storage/INotifyStorage.php', 'OCP\\Files\\Storage\\IStorage' => __DIR__ . '/../../..' . '/lib/public/Files/Storage/IStorage.php', 'OCP\\Files\\Storage\\IStorageFactory' => __DIR__ . '/../../..' . '/lib/public/Files/Storage/IStorageFactory.php', 'OCP\\Files\\UnseekableException' => __DIR__ . '/../../..' . '/lib/public/Files/UnseekableException.php', @@ -224,6 +208,9 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OCP\\Image' => __DIR__ . '/../../..' . '/lib/public/Image.php', 'OCP\\JSON' => __DIR__ . '/../../..' . '/lib/public/JSON.php', 'OCP\\L10N\\IFactory' => __DIR__ . '/../../..' . '/lib/public/L10N/IFactory.php', + 'OCP\\LDAP\\IDeletionFlagSupport' => __DIR__ . '/../../..' . '/lib/public/LDAP/IDeletionFlagSupport.php', + 'OCP\\LDAP\\ILDAPProvider' => __DIR__ . '/../../..' . '/lib/public/LDAP/ILDAPProvider.php', + 'OCP\\LDAP\\ILDAPProviderFactory' => __DIR__ . '/../../..' . '/lib/public/LDAP/ILDAPProviderFactory.php', 'OCP\\Lock\\ILockingProvider' => __DIR__ . '/../../..' . '/lib/public/Lock/ILockingProvider.php', 'OCP\\Lock\\LockedException' => __DIR__ . '/../../..' . '/lib/public/Lock/LockedException.php', 'OCP\\Mail\\IMailer' => __DIR__ . '/../../..' . '/lib/public/Mail/IMailer.php', @@ -251,6 +238,9 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OCP\\Security\\ISecureRandom' => __DIR__ . '/../../..' . '/lib/public/Security/ISecureRandom.php', 'OCP\\Security\\StringUtils' => __DIR__ . '/../../..' . '/lib/public/Security/StringUtils.php', 'OCP\\Session\\Exceptions\\SessionNotAvailableException' => __DIR__ . '/../../..' . '/lib/public/Session/Exceptions/SessionNotAvailableException.php', + 'OCP\\Settings\\IManager' => __DIR__ . '/../../..' . '/lib/public/Settings/IManager.php', + 'OCP\\Settings\\ISection' => __DIR__ . '/../../..' . '/lib/public/Settings/ISection.php', + 'OCP\\Settings\\ISettings' => __DIR__ . '/../../..' . '/lib/public/Settings/ISettings.php', 'OCP\\Share' => __DIR__ . '/../../..' . '/lib/public/Share.php', 'OCP\\Share\\Exceptions\\GenericShareException' => __DIR__ . '/../../..' . '/lib/public/Share/Exceptions/GenericShareException.php', 'OCP\\Share\\Exceptions\\IllegalIDChangeException' => __DIR__ . '/../../..' . '/lib/public/Share/Exceptions/IllegalIDChangeException.php', @@ -268,12 +258,16 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OCP\\SystemTag\\ISystemTagObjectMapper' => __DIR__ . '/../../..' . '/lib/public/SystemTag/ISystemTagObjectMapper.php', 'OCP\\SystemTag\\ManagerEvent' => __DIR__ . '/../../..' . '/lib/public/SystemTag/ManagerEvent.php', 'OCP\\SystemTag\\MapperEvent' => __DIR__ . '/../../..' . '/lib/public/SystemTag/MapperEvent.php', + 'OCP\\SystemTag\\SystemTagsEntityEvent' => __DIR__ . '/../../..' . '/lib/public/SystemTag/SystemTagsEntityEvent.php', 'OCP\\SystemTag\\TagAlreadyExistsException' => __DIR__ . '/../../..' . '/lib/public/SystemTag/TagAlreadyExistsException.php', 'OCP\\SystemTag\\TagNotFoundException' => __DIR__ . '/../../..' . '/lib/public/SystemTag/TagNotFoundException.php', 'OCP\\Template' => __DIR__ . '/../../..' . '/lib/public/Template.php', 'OCP\\User' => __DIR__ . '/../../..' . '/lib/public/User.php', 'OCP\\UserInterface' => __DIR__ . '/../../..' . '/lib/public/UserInterface.php', 'OCP\\Util' => __DIR__ . '/../../..' . '/lib/public/Util.php', + 'OCP\\WorkflowEngine\\ICheck' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/ICheck.php', + 'OCP\\WorkflowEngine\\IManager' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/IManager.php', + 'OCP\\WorkflowEngine\\IOperation' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/IOperation.php', 'OC\\Activity\\Event' => __DIR__ . '/../../..' . '/lib/private/Activity/Event.php', 'OC\\Activity\\Manager' => __DIR__ . '/../../..' . '/lib/private/Activity/Manager.php', 'OC\\AllConfig' => __DIR__ . '/../../..' . '/lib/private/AllConfig.php', @@ -287,12 +281,14 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\AppFramework\\Http\\Output' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Http/Output.php', 'OC\\AppFramework\\Http\\Request' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Http/Request.php', 'OC\\AppFramework\\Middleware\\MiddlewareDispatcher' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/MiddlewareDispatcher.php', + 'OC\\AppFramework\\Middleware\\OCSMiddleware' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/OCSMiddleware.php', 'OC\\AppFramework\\Middleware\\Security\\CORSMiddleware' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/Security/CORSMiddleware.php', 'OC\\AppFramework\\Middleware\\Security\\Exceptions\\AppNotEnabledException' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/Security/Exceptions/AppNotEnabledException.php', 'OC\\AppFramework\\Middleware\\Security\\Exceptions\\CrossSiteRequestForgeryException' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/Security/Exceptions/CrossSiteRequestForgeryException.php', 'OC\\AppFramework\\Middleware\\Security\\Exceptions\\NotAdminException' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/Security/Exceptions/NotAdminException.php', 'OC\\AppFramework\\Middleware\\Security\\Exceptions\\NotLoggedInException' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/Security/Exceptions/NotLoggedInException.php', 'OC\\AppFramework\\Middleware\\Security\\Exceptions\\SecurityException' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/Security/Exceptions/SecurityException.php', + 'OC\\AppFramework\\Middleware\\Security\\Exceptions\\StrictCookieMissingException' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/Security/Exceptions/StrictCookieMissingException.php', 'OC\\AppFramework\\Middleware\\Security\\SecurityMiddleware' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php', 'OC\\AppFramework\\Middleware\\SessionMiddleware' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Middleware/SessionMiddleware.php', 'OC\\AppFramework\\Routing\\RouteActionHandler' => __DIR__ . '/../../..' . '/lib/private/AppFramework/Routing/RouteActionHandler.php', @@ -386,13 +382,16 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\Core\\Command\\Encryption\\SetDefaultModule' => __DIR__ . '/../../..' . '/core/Command/Encryption/SetDefaultModule.php', 'OC\\Core\\Command\\Encryption\\ShowKeyStorageRoot' => __DIR__ . '/../../..' . '/core/Command/Encryption/ShowKeyStorageRoot.php', 'OC\\Core\\Command\\Encryption\\Status' => __DIR__ . '/../../..' . '/core/Command/Encryption/Status.php', + 'OC\\Core\\Command\\Group\\AddUser' => __DIR__ . '/../../..' . '/core/Command/Group/AddUser.php', + 'OC\\Core\\Command\\Group\\ListCommand' => __DIR__ . '/../../..' . '/core/Command/Group/ListCommand.php', + 'OC\\Core\\Command\\Group\\RemoveUser' => __DIR__ . '/../../..' . '/core/Command/Group/RemoveUser.php', 'OC\\Core\\Command\\Integrity\\CheckApp' => __DIR__ . '/../../..' . '/core/Command/Integrity/CheckApp.php', 'OC\\Core\\Command\\Integrity\\CheckCore' => __DIR__ . '/../../..' . '/core/Command/Integrity/CheckCore.php', 'OC\\Core\\Command\\Integrity\\SignApp' => __DIR__ . '/../../..' . '/core/Command/Integrity/SignApp.php', 'OC\\Core\\Command\\Integrity\\SignCore' => __DIR__ . '/../../..' . '/core/Command/Integrity/SignCore.php', 'OC\\Core\\Command\\L10n\\CreateJs' => __DIR__ . '/../../..' . '/core/Command/L10n/CreateJs.php', + 'OC\\Core\\Command\\Log\\File' => __DIR__ . '/../../..' . '/core/Command/Log/File.php', 'OC\\Core\\Command\\Log\\Manage' => __DIR__ . '/../../..' . '/core/Command/Log/Manage.php', - 'OC\\Core\\Command\\Log\\OwnCloud' => __DIR__ . '/../../..' . '/core/Command/Log/OwnCloud.php', 'OC\\Core\\Command\\Maintenance\\DataFingerprint' => __DIR__ . '/../../..' . '/core/Command/Maintenance/DataFingerprint.php', 'OC\\Core\\Command\\Maintenance\\Install' => __DIR__ . '/../../..' . '/core/Command/Maintenance/Install.php', 'OC\\Core\\Command\\Maintenance\\Mimetype\\UpdateDB' => __DIR__ . '/../../..' . '/core/Command/Maintenance/Mimetype/UpdateDB.php', @@ -412,19 +411,21 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\Core\\Command\\User\\Delete' => __DIR__ . '/../../..' . '/core/Command/User/Delete.php', 'OC\\Core\\Command\\User\\Disable' => __DIR__ . '/../../..' . '/core/Command/User/Disable.php', 'OC\\Core\\Command\\User\\Enable' => __DIR__ . '/../../..' . '/core/Command/User/Enable.php', + 'OC\\Core\\Command\\User\\Info' => __DIR__ . '/../../..' . '/core/Command/User/Info.php', 'OC\\Core\\Command\\User\\LastSeen' => __DIR__ . '/../../..' . '/core/Command/User/LastSeen.php', + 'OC\\Core\\Command\\User\\ListCommand' => __DIR__ . '/../../..' . '/core/Command/User/ListCommand.php', 'OC\\Core\\Command\\User\\Report' => __DIR__ . '/../../..' . '/core/Command/User/Report.php', 'OC\\Core\\Command\\User\\ResetPassword' => __DIR__ . '/../../..' . '/core/Command/User/ResetPassword.php', 'OC\\Core\\Command\\User\\Setting' => __DIR__ . '/../../..' . '/core/Command/User/Setting.php', 'OC\\Core\\Controller\\AvatarController' => __DIR__ . '/../../..' . '/core/Controller/AvatarController.php', 'OC\\Core\\Controller\\LoginController' => __DIR__ . '/../../..' . '/core/Controller/LoginController.php', 'OC\\Core\\Controller\\LostController' => __DIR__ . '/../../..' . '/core/Controller/LostController.php', + 'OC\\Core\\Controller\\OCSController' => __DIR__ . '/../../..' . '/core/Controller/OCSController.php', 'OC\\Core\\Controller\\SetupController' => __DIR__ . '/../../..' . '/core/Controller/SetupController.php', 'OC\\Core\\Controller\\TokenController' => __DIR__ . '/../../..' . '/core/Controller/TokenController.php', 'OC\\Core\\Controller\\TwoFactorChallengeController' => __DIR__ . '/../../..' . '/core/Controller/TwoFactorChallengeController.php', 'OC\\Core\\Controller\\UserController' => __DIR__ . '/../../..' . '/core/Controller/UserController.php', 'OC\\Core\\Middleware\\TwoFactorMiddleware' => __DIR__ . '/../../..' . '/core/Middleware/TwoFactorMiddleware.php', - 'OC\\Core\\Tags\\Controller' => __DIR__ . '/../../..' . '/core/Tags/Controller.php', 'OC\\DB\\Adapter' => __DIR__ . '/../../..' . '/lib/private/DB/Adapter.php', 'OC\\DB\\AdapterMySQL' => __DIR__ . '/../../..' . '/lib/private/DB/AdapterMySQL.php', 'OC\\DB\\AdapterOCI8' => __DIR__ . '/../../..' . '/lib/private/DB/AdapterOCI8.php', @@ -587,7 +588,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\Log' => __DIR__ . '/../../..' . '/lib/private/Log.php', 'OC\\Log\\ErrorHandler' => __DIR__ . '/../../..' . '/lib/private/Log/ErrorHandler.php', 'OC\\Log\\Errorlog' => __DIR__ . '/../../..' . '/lib/private/Log/Errorlog.php', - 'OC\\Log\\Owncloud' => __DIR__ . '/../../..' . '/lib/private/Log/Owncloud.php', + 'OC\\Log\\File' => __DIR__ . '/../../..' . '/lib/private/Log/File.php', 'OC\\Log\\Rotate' => __DIR__ . '/../../..' . '/lib/private/Log/Rotate.php', 'OC\\Log\\Syslog' => __DIR__ . '/../../..' . '/lib/private/Log/Syslog.php', 'OC\\Mail\\Mailer' => __DIR__ . '/../../..' . '/lib/private/Mail/Mailer.php', @@ -613,8 +614,6 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\Notification\\Manager' => __DIR__ . '/../../..' . '/lib/private/Notification/Manager.php', 'OC\\Notification\\Notification' => __DIR__ . '/../../..' . '/lib/private/Notification/Notification.php', 'OC\\OCSClient' => __DIR__ . '/../../..' . '/lib/private/OCSClient.php', - 'OC\\OCS\\Cloud' => __DIR__ . '/../../..' . '/lib/private/OCS/Cloud.php', - 'OC\\OCS\\Config' => __DIR__ . '/../../..' . '/lib/private/OCS/Config.php', 'OC\\OCS\\CoreCapabilities' => __DIR__ . '/../../..' . '/lib/private/OCS/CoreCapabilities.php', 'OC\\OCS\\Exception' => __DIR__ . '/../../..' . '/lib/private/OCS/Exception.php', 'OC\\OCS\\Person' => __DIR__ . '/../../..' . '/lib/private/OCS/Person.php', @@ -667,6 +666,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\Repair\\RepairInvalidShares' => __DIR__ . '/../../..' . '/lib/private/Repair/RepairInvalidShares.php', 'OC\\Repair\\RepairLegacyStorages' => __DIR__ . '/../../..' . '/lib/private/Repair/RepairLegacyStorages.php', 'OC\\Repair\\RepairMimeTypes' => __DIR__ . '/../../..' . '/lib/private/Repair/RepairMimeTypes.php', + 'OC\\Repair\\RepairUnmergedShares' => __DIR__ . '/../../..' . '/lib/private/Repair/RepairUnmergedShares.php', 'OC\\Repair\\SearchLuceneTables' => __DIR__ . '/../../..' . '/lib/private/Repair/SearchLuceneTables.php', 'OC\\Repair\\SharePropagation' => __DIR__ . '/../../..' . '/lib/private/Repair/SharePropagation.php', 'OC\\Repair\\SqliteAutoincrement' => __DIR__ . '/../../..' . '/lib/private/Repair/SqliteAutoincrement.php', @@ -681,6 +681,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\Search\\Result\\File' => __DIR__ . '/../../..' . '/lib/private/Search/Result/File.php', 'OC\\Search\\Result\\Folder' => __DIR__ . '/../../..' . '/lib/private/Search/Result/Folder.php', 'OC\\Search\\Result\\Image' => __DIR__ . '/../../..' . '/lib/private/Search/Result/Image.php', + 'OC\\Security\\Bruteforce\\Throttler' => __DIR__ . '/../../..' . '/lib/private/Security/Bruteforce/Throttler.php', 'OC\\Security\\CSP\\ContentSecurityPolicy' => __DIR__ . '/../../..' . '/lib/private/Security/CSP/ContentSecurityPolicy.php', 'OC\\Security\\CSP\\ContentSecurityPolicyManager' => __DIR__ . '/../../..' . '/lib/private/Security/CSP/ContentSecurityPolicyManager.php', 'OC\\Security\\CSRF\\CsrfToken' => __DIR__ . '/../../..' . '/lib/private/Security/CSRF/CsrfToken.php', @@ -703,11 +704,18 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\Session\\Internal' => __DIR__ . '/../../..' . '/lib/private/Session/Internal.php', 'OC\\Session\\Memory' => __DIR__ . '/../../..' . '/lib/private/Session/Memory.php', 'OC\\Session\\Session' => __DIR__ . '/../../..' . '/lib/private/Session/Session.php', + 'OC\\Settings\\Admin\\Additional' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Additional.php', + 'OC\\Settings\\Admin\\Encryption' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Encryption.php', + 'OC\\Settings\\Admin\\Logging' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Logging.php', + 'OC\\Settings\\Admin\\Server' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Server.php', + '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\\ChangePassword\\Controller' => __DIR__ . '/../../..' . '/settings/ChangePassword/Controller.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', 'OC\\Settings\\Controller\\CertificateController' => __DIR__ . '/../../..' . '/settings/Controller/CertificateController.php', + 'OC\\Settings\\Controller\\ChangePasswordController' => __DIR__ . '/../../..' . '/settings/Controller/ChangePasswordController.php', 'OC\\Settings\\Controller\\CheckSetupController' => __DIR__ . '/../../..' . '/settings/Controller/CheckSetupController.php', 'OC\\Settings\\Controller\\EncryptionController' => __DIR__ . '/../../..' . '/settings/Controller/EncryptionController.php', 'OC\\Settings\\Controller\\GroupsController' => __DIR__ . '/../../..' . '/settings/Controller/GroupsController.php', @@ -715,7 +723,10 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\Settings\\Controller\\MailSettingsController' => __DIR__ . '/../../..' . '/settings/Controller/MailSettingsController.php', 'OC\\Settings\\Controller\\SecuritySettingsController' => __DIR__ . '/../../..' . '/settings/Controller/SecuritySettingsController.php', 'OC\\Settings\\Controller\\UsersController' => __DIR__ . '/../../..' . '/settings/Controller/UsersController.php', + 'OC\\Settings\\Manager' => __DIR__ . '/../../..' . '/lib/private/Settings/Manager.php', 'OC\\Settings\\Middleware\\SubadminMiddleware' => __DIR__ . '/../../..' . '/settings/Middleware/SubadminMiddleware.php', + 'OC\\Settings\\RemoveOrphaned' => __DIR__ . '/../../..' . '/lib/private/Settings/RemoveOrphaned.php', + 'OC\\Settings\\Section' => __DIR__ . '/../../..' . '/lib/private/Settings/Section.php', 'OC\\Setup' => __DIR__ . '/../../..' . '/lib/private/Setup.php', 'OC\\Setup\\AbstractDatabase' => __DIR__ . '/../../..' . '/lib/private/Setup/AbstractDatabase.php', 'OC\\Setup\\MySQL' => __DIR__ . '/../../..' . '/lib/private/Setup/MySQL.php', diff --git a/lib/l10n/cs_CZ.js b/lib/l10n/cs_CZ.js index 2a5faddedaf..39de37b4e94 100644 --- a/lib/l10n/cs_CZ.js +++ b/lib/l10n/cs_CZ.js @@ -168,6 +168,14 @@ OC.L10N.register( "Storage incomplete configuration. %s" : "Nekompletní konfigurace úložiště. %s", "Storage connection error. %s" : "Chyba připojení úložiště. %s", "Storage not available" : "Úložiště není dostupné", - "Storage connection timeout. %s" : "Vypršení připojení k úložišti. %s" + "Storage connection timeout. %s" : "Vypršení připojení k úložišti. %s", + "ownCloud %s or higher is required." : "Vyžadován ownCloud %s nebo vyšší.", + "ownCloud %s or lower is required." : "Vyžadován ownCloud %s nebo nižší.", + "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "Aplikaci \"%s\" nelze nainstalovat, protože není kompatibilní s touto verzí Nextcloud.", + "App can't be installed because it is not compatible with this version of Nextcloud" : "Aplikaci nelze nainstalovat, protože není kompatibilní s touto verzí Nextcloud", + "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "Aplikace nemůže být nainstalována, protože verze uvedená v info.xml/version nesouhlasí s verzí hlášenou z úložiště aplikací.", + "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Tip: Aktualizaci můžete urychlit manuálním spuštěním následujícího SQL příkazu: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;", + "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Provozování Nextcloud Serveru na platformě Microsoft Windows není podporováno. Doporučujeme, abyste použili linuxový server ve virtuálním stroji, pokud nemáte možnost migrovat server jako takový. Linuxové balíčky i jednoduše použitelné obrazy virtuálních strojů lze nalézt na <a href=\"%s\">%s</a>. Pro migraci stávajících instalací na Linux můžete nalézt tipy a migrační skript v <a href=\"%s\">naší dokumentaci</a>.", + "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Toto může být obvykle opraveno <a href=\"%s\" target=\"_blank\">nastavením přístupových práv webového serveru pro zápis do kořenového adresáře</a>." }, "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/lib/l10n/cs_CZ.json b/lib/l10n/cs_CZ.json index 9b964100551..70f5a613257 100644 --- a/lib/l10n/cs_CZ.json +++ b/lib/l10n/cs_CZ.json @@ -166,6 +166,14 @@ "Storage incomplete configuration. %s" : "Nekompletní konfigurace úložiště. %s", "Storage connection error. %s" : "Chyba připojení úložiště. %s", "Storage not available" : "Úložiště není dostupné", - "Storage connection timeout. %s" : "Vypršení připojení k úložišti. %s" + "Storage connection timeout. %s" : "Vypršení připojení k úložišti. %s", + "ownCloud %s or higher is required." : "Vyžadován ownCloud %s nebo vyšší.", + "ownCloud %s or lower is required." : "Vyžadován ownCloud %s nebo nižší.", + "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "Aplikaci \"%s\" nelze nainstalovat, protože není kompatibilní s touto verzí Nextcloud.", + "App can't be installed because it is not compatible with this version of Nextcloud" : "Aplikaci nelze nainstalovat, protože není kompatibilní s touto verzí Nextcloud", + "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "Aplikace nemůže být nainstalována, protože verze uvedená v info.xml/version nesouhlasí s verzí hlášenou z úložiště aplikací.", + "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Tip: Aktualizaci můžete urychlit manuálním spuštěním následujícího SQL příkazu: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;", + "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Provozování Nextcloud Serveru na platformě Microsoft Windows není podporováno. Doporučujeme, abyste použili linuxový server ve virtuálním stroji, pokud nemáte možnost migrovat server jako takový. Linuxové balíčky i jednoduše použitelné obrazy virtuálních strojů lze nalézt na <a href=\"%s\">%s</a>. Pro migraci stávajících instalací na Linux můžete nalézt tipy a migrační skript v <a href=\"%s\">naší dokumentaci</a>.", + "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Toto může být obvykle opraveno <a href=\"%s\" target=\"_blank\">nastavením přístupových práv webového serveru pro zápis do kořenového adresáře</a>." },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" }
\ No newline at end of file diff --git a/lib/l10n/de.js b/lib/l10n/de.js index 48a6ad427fc..8ecec466908 100644 --- a/lib/l10n/de.js +++ b/lib/l10n/de.js @@ -52,6 +52,14 @@ OC.L10N.register( "App can't be installed because it is not compatible with this version of the server" : "Die App kann nicht installiert werden, da sie mit dieser Serverversion nicht kompatibel ist.", "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Die App kann nicht installiert werden, weil sie die <shipped>true</shipped>-Bezeichnung enthält, die bei Apps, die nicht zum Standardumfang gehören, nicht erlaubt ist", "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Diese App kann nicht installiert werden, da die Version in info.xml nicht die gleiche Version wie die aus dem App Store ist.", + "APCu" : "APCu", + "Redis" : "Redis", + "Server settings" : "Servereinstellungen", + "Sharing" : "Teilen", + "Encryption" : "Verschlüsselung", + "Logging" : "Protokollierung", + "Additional settings" : "Zusätzliche Einstellungen", + "Tips & tricks" : "Tipps & Tricks", "%s enter the database username and name." : "%s bitte gib den Datenbank Benutzernamen und den Datenbank Namen ein.", "%s enter the database username." : "%s gib den Datenbank-Benutzernamen an.", "%s enter the database name." : "%s gib den Datenbanknamen an.", @@ -125,7 +133,7 @@ OC.L10N.register( "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Die App „%s“ kann nicht installiert werden, da die folgenden Abhängigkeiten nicht erfüllt sind: %s", "No app name specified" : "Es wurde kein App-Name angegeben", "App '%s' could not be installed!" : "'%s' - App konnte nicht installiert werden!", - "a safe home for all your data" : "ein sicherer Ort für all deine Daten", + "a safe home for all your data" : "ein sicherer Ort für all Deine Daten", "File is currently busy, please try again later" : "Die Datei ist zur Zeit in Benutzung, bitte versuche es später noch einmal", "Can't read file" : "Datei kann nicht gelesen werden", "Application is not enabled" : "Die App ist nicht aktiviert", @@ -157,7 +165,7 @@ OC.L10N.register( "Please ask your server administrator to restart the web server." : "Bitte kontaktiere Deinen Server-Administrator und bitte um den Neustart des Webservers.", "PostgreSQL >= 9 required" : "PostgreSQL >= 9 benötigt", "Please upgrade your database version" : "Bitte aktualisiere deine Datenbankversion", - "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Bitte ändere die Berechtigungen auf 0770 sodass das Verzeichnis nicht von anderen Nutzer angezeigt werden kann.", + "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Bitte ändere die Berechtigungen auf 0770, sodass das Verzeichnis nicht von anderen Nutzer angezeigt werden kann.", "Data directory (%s) is readable by other users" : "Daten-Verzeichnis (%s) ist von anderen Nutzern lesbar", "Data directory (%s) must be an absolute path" : "Das Datenverzeichnis (%s) muss ein absoluter Pfad sein", "Check the value of \"datadirectory\" in your configuration" : "Überprüfe bitte die Angabe unter „datadirectory“ in Deiner Konfiguration", @@ -168,6 +176,14 @@ OC.L10N.register( "Storage incomplete configuration. %s" : "Unvollständige Konfiguration des Storage. %s", "Storage connection error. %s" : "Verbindungsfehler zum Speicherplatz. %s", "Storage not available" : "Speicher nicht verfügbar", - "Storage connection timeout. %s" : "Zeitüberschreitung der Verbindung zum Speicherplatz. %s" + "Storage connection timeout. %s" : "Zeitüberschreitung der Verbindung zum Speicherplatz. %s", + "ownCloud %s or higher is required." : "ownCloud %s oder höher ist erforderlich.", + "ownCloud %s or lower is required." : "ownCloud %s oder niedriger ist erforderlich.", + "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "Die App \"%s\" kann nicht installiert werden, da sie mit dieser Version von Nextcloud nicht kompatibel ist.", + "App can't be installed because it is not compatible with this version of Nextcloud" : "Die App kann nicht installiert werden, da sie mit dieser Version von Nextcloud nicht kompatibel ist", + "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "App kann nicht installiert werden, da die in info.xml/version angegebene Version von der vom App-Store berichteten abweicht", + "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Tipp: Du kannst die Aktualisierung beschleunigen indem Du folgenden SQL-Befehl manuell ausführst: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;", + "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Der Betrieb eines Nextcloud-Servers unter Microsoft Windows ist nicht unterstützt. Bitte ziehe Betracht einen Linux-Server im Rahmen einer virtuellen Maschine aufzusetzen, wenn du keine Möglichkeit hast, den Server selbst zu migrieren. Finde Linux-Pakete sowie einfach bereitzustellende Images für virtuelle Maschinen unter <a href=\"%s\">%s</a>. Zur Migration existierender Installationen auf Linux findest du in unserer <a href=\"%s\">our Dokumentation</a> einige Tipps und Migrationsscripts.", + "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Dies kann normalerweise repariert werden, indem dem Webserver <a href=\"%s\" target=\"_blank\">Schreibzugriff auf das Wurzelverzeichnis gegeben wird</a>." }, "nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/de.json b/lib/l10n/de.json index 8f806af36c6..2a72be9450f 100644 --- a/lib/l10n/de.json +++ b/lib/l10n/de.json @@ -50,6 +50,14 @@ "App can't be installed because it is not compatible with this version of the server" : "Die App kann nicht installiert werden, da sie mit dieser Serverversion nicht kompatibel ist.", "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Die App kann nicht installiert werden, weil sie die <shipped>true</shipped>-Bezeichnung enthält, die bei Apps, die nicht zum Standardumfang gehören, nicht erlaubt ist", "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Diese App kann nicht installiert werden, da die Version in info.xml nicht die gleiche Version wie die aus dem App Store ist.", + "APCu" : "APCu", + "Redis" : "Redis", + "Server settings" : "Servereinstellungen", + "Sharing" : "Teilen", + "Encryption" : "Verschlüsselung", + "Logging" : "Protokollierung", + "Additional settings" : "Zusätzliche Einstellungen", + "Tips & tricks" : "Tipps & Tricks", "%s enter the database username and name." : "%s bitte gib den Datenbank Benutzernamen und den Datenbank Namen ein.", "%s enter the database username." : "%s gib den Datenbank-Benutzernamen an.", "%s enter the database name." : "%s gib den Datenbanknamen an.", @@ -123,7 +131,7 @@ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Die App „%s“ kann nicht installiert werden, da die folgenden Abhängigkeiten nicht erfüllt sind: %s", "No app name specified" : "Es wurde kein App-Name angegeben", "App '%s' could not be installed!" : "'%s' - App konnte nicht installiert werden!", - "a safe home for all your data" : "ein sicherer Ort für all deine Daten", + "a safe home for all your data" : "ein sicherer Ort für all Deine Daten", "File is currently busy, please try again later" : "Die Datei ist zur Zeit in Benutzung, bitte versuche es später noch einmal", "Can't read file" : "Datei kann nicht gelesen werden", "Application is not enabled" : "Die App ist nicht aktiviert", @@ -155,7 +163,7 @@ "Please ask your server administrator to restart the web server." : "Bitte kontaktiere Deinen Server-Administrator und bitte um den Neustart des Webservers.", "PostgreSQL >= 9 required" : "PostgreSQL >= 9 benötigt", "Please upgrade your database version" : "Bitte aktualisiere deine Datenbankversion", - "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Bitte ändere die Berechtigungen auf 0770 sodass das Verzeichnis nicht von anderen Nutzer angezeigt werden kann.", + "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Bitte ändere die Berechtigungen auf 0770, sodass das Verzeichnis nicht von anderen Nutzer angezeigt werden kann.", "Data directory (%s) is readable by other users" : "Daten-Verzeichnis (%s) ist von anderen Nutzern lesbar", "Data directory (%s) must be an absolute path" : "Das Datenverzeichnis (%s) muss ein absoluter Pfad sein", "Check the value of \"datadirectory\" in your configuration" : "Überprüfe bitte die Angabe unter „datadirectory“ in Deiner Konfiguration", @@ -166,6 +174,14 @@ "Storage incomplete configuration. %s" : "Unvollständige Konfiguration des Storage. %s", "Storage connection error. %s" : "Verbindungsfehler zum Speicherplatz. %s", "Storage not available" : "Speicher nicht verfügbar", - "Storage connection timeout. %s" : "Zeitüberschreitung der Verbindung zum Speicherplatz. %s" + "Storage connection timeout. %s" : "Zeitüberschreitung der Verbindung zum Speicherplatz. %s", + "ownCloud %s or higher is required." : "ownCloud %s oder höher ist erforderlich.", + "ownCloud %s or lower is required." : "ownCloud %s oder niedriger ist erforderlich.", + "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "Die App \"%s\" kann nicht installiert werden, da sie mit dieser Version von Nextcloud nicht kompatibel ist.", + "App can't be installed because it is not compatible with this version of Nextcloud" : "Die App kann nicht installiert werden, da sie mit dieser Version von Nextcloud nicht kompatibel ist", + "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "App kann nicht installiert werden, da die in info.xml/version angegebene Version von der vom App-Store berichteten abweicht", + "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Tipp: Du kannst die Aktualisierung beschleunigen indem Du folgenden SQL-Befehl manuell ausführst: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;", + "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Der Betrieb eines Nextcloud-Servers unter Microsoft Windows ist nicht unterstützt. Bitte ziehe Betracht einen Linux-Server im Rahmen einer virtuellen Maschine aufzusetzen, wenn du keine Möglichkeit hast, den Server selbst zu migrieren. Finde Linux-Pakete sowie einfach bereitzustellende Images für virtuelle Maschinen unter <a href=\"%s\">%s</a>. Zur Migration existierender Installationen auf Linux findest du in unserer <a href=\"%s\">our Dokumentation</a> einige Tipps und Migrationsscripts.", + "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Dies kann normalerweise repariert werden, indem dem Webserver <a href=\"%s\" target=\"_blank\">Schreibzugriff auf das Wurzelverzeichnis gegeben wird</a>." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/lib/l10n/de_DE.js b/lib/l10n/de_DE.js index 333f3a8981a..140c46a453e 100644 --- a/lib/l10n/de_DE.js +++ b/lib/l10n/de_DE.js @@ -52,6 +52,14 @@ OC.L10N.register( "App can't be installed because it is not compatible with this version of the server" : "Die App kann nicht installiert werden, da sie mit dieser Serverversion nicht kompatibel ist.", "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Die App kann nicht installiert werden, weil sie den <shipped>true</shipped>-Tag enthält, der bei Apps, die nicht zum Standardumfang gehören, nicht erlaubt ist", "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Die App konnte nicht installiert werden, da die Version in der info.xml nicht die gleiche Version wie im App-Store ist.", + "APCu" : "APCu", + "Redis" : "Redis", + "Server settings" : "Servereinstellungen", + "Sharing" : "Teilen", + "Encryption" : "Verschlüsselung", + "Logging" : "Protokollierung", + "Additional settings" : "Zusätzliche Einstellungen", + "Tips & tricks" : "Tipps & Tricks", "%s enter the database username and name." : "%s geben Sie den Datenbank-Benutzernamen und den Datenbanknamen an.", "%s enter the database username." : "%s geben Sie den Datenbank-Benutzernamen an.", "%s enter the database name." : "%s geben Sie den Datenbank-Namen an.", @@ -139,7 +147,7 @@ OC.L10N.register( "Cannot write into \"apps\" directory" : "Das Schreiben in das „apps“-Verzeichnis ist nicht möglich", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dies kann normalerweise behoben werden, %sindem dem Webserver Schreibzugriff auf das App-Verzeichnis gegeben wird%s oder der App Store in der Konfigurationsdatei deaktiviert wird.", "Cannot create \"data\" directory (%s)" : "Das Erstellen des „data“-Verzeichnisses ist nicht möglich (%s)", - "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Dies kann normalerweise repariert werden, indem dem Webserver <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\"> Schreibzugriff auf das Wurzelverzeichnis gegeben wird</a>.", + "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Dies kann normalerweise repariert werden, indem dem Webserver <a href=\"%s\" target=\"_blank\">Schreibzugriff auf das Wurzelverzeichnis gegeben wird</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Berechtigungen können normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das Wurzelverzeichnis %s gegeben wird.", "Setting locale to %s failed" : "Das Setzen der Umgebungslokale auf %s fehlgeschlagen", "Please install one of these locales on your system and restart your webserver." : "Bitte installieren Sie eine dieser Sprachen auf Ihrem System und starten Sie den Webserver neu.", @@ -168,6 +176,14 @@ OC.L10N.register( "Storage incomplete configuration. %s" : "Speicher-Konfiguration unvollständig. %s", "Storage connection error. %s" : "Speicher-Verbindungsfehler. %s", "Storage not available" : "Speicher nicht verfügbar", - "Storage connection timeout. %s" : "Speicher-Verbindungszeitüberschreitung. %s" + "Storage connection timeout. %s" : "Speicher-Verbindungszeitüberschreitung. %s", + "ownCloud %s or higher is required." : "ownCloud %s oder neuer erforderlich", + "ownCloud %s or lower is required." : "ownCloud %s oder älter erforderlich", + "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "Die App \"%s\" kann nicht installiert werden, da sie mit dieser Version von Nextcloud nicht kompatibel ist.", + "App can't be installed because it is not compatible with this version of Nextcloud" : "Die App kann nicht installiert werden, da sie mit dieser Version von Nextcloud nicht kompatibel ist", + "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "App kann nicht installiert werden, da die in info.xml/version angegebene Version von der vom App-Store berichteten abweicht", + "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Tipp: Sie können die Aktualisierung beschleunigen indem Sie folgenden SQL-Befehl manuell ausführen: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;", + "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Der Betrieb eines Nextcloud-Servers unter Microsoft Windows ist nicht unterstützt. Bitte ziehen Sie Betracht einen Linux-Server im Rahmen einer virtuellen Maschine aufzusetzen, wenn Sie keine Möglichkeit haben, den Server selbst zu migrieren. Finden Sie Linux-Pakete sowie einfach bereitzustellende Images für virtuelle Maschinen unter <a href=\"%s\">%s</a>. Zur Migration existierender Installationen auf Linux finden Sie in unserer <a href=\"%s\">unserer Dokumentation</a> einige Tipps und Migrationsscripts.", + "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Dies kann normalerweise repariert werden, indem dem Webserver <a href=\"%s\" target=\"_blank\" > Schreibzugriff auf das Wurzelverzeichnis gegeben wird</a>." }, "nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/de_DE.json b/lib/l10n/de_DE.json index 2fe0f17e051..b6ead19e435 100644 --- a/lib/l10n/de_DE.json +++ b/lib/l10n/de_DE.json @@ -50,6 +50,14 @@ "App can't be installed because it is not compatible with this version of the server" : "Die App kann nicht installiert werden, da sie mit dieser Serverversion nicht kompatibel ist.", "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Die App kann nicht installiert werden, weil sie den <shipped>true</shipped>-Tag enthält, der bei Apps, die nicht zum Standardumfang gehören, nicht erlaubt ist", "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Die App konnte nicht installiert werden, da die Version in der info.xml nicht die gleiche Version wie im App-Store ist.", + "APCu" : "APCu", + "Redis" : "Redis", + "Server settings" : "Servereinstellungen", + "Sharing" : "Teilen", + "Encryption" : "Verschlüsselung", + "Logging" : "Protokollierung", + "Additional settings" : "Zusätzliche Einstellungen", + "Tips & tricks" : "Tipps & Tricks", "%s enter the database username and name." : "%s geben Sie den Datenbank-Benutzernamen und den Datenbanknamen an.", "%s enter the database username." : "%s geben Sie den Datenbank-Benutzernamen an.", "%s enter the database name." : "%s geben Sie den Datenbank-Namen an.", @@ -137,7 +145,7 @@ "Cannot write into \"apps\" directory" : "Das Schreiben in das „apps“-Verzeichnis ist nicht möglich", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dies kann normalerweise behoben werden, %sindem dem Webserver Schreibzugriff auf das App-Verzeichnis gegeben wird%s oder der App Store in der Konfigurationsdatei deaktiviert wird.", "Cannot create \"data\" directory (%s)" : "Das Erstellen des „data“-Verzeichnisses ist nicht möglich (%s)", - "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Dies kann normalerweise repariert werden, indem dem Webserver <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\"> Schreibzugriff auf das Wurzelverzeichnis gegeben wird</a>.", + "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Dies kann normalerweise repariert werden, indem dem Webserver <a href=\"%s\" target=\"_blank\">Schreibzugriff auf das Wurzelverzeichnis gegeben wird</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Berechtigungen können normalerweise repariert werden, indem dem Webserver %s Schreibzugriff auf das Wurzelverzeichnis %s gegeben wird.", "Setting locale to %s failed" : "Das Setzen der Umgebungslokale auf %s fehlgeschlagen", "Please install one of these locales on your system and restart your webserver." : "Bitte installieren Sie eine dieser Sprachen auf Ihrem System und starten Sie den Webserver neu.", @@ -166,6 +174,14 @@ "Storage incomplete configuration. %s" : "Speicher-Konfiguration unvollständig. %s", "Storage connection error. %s" : "Speicher-Verbindungsfehler. %s", "Storage not available" : "Speicher nicht verfügbar", - "Storage connection timeout. %s" : "Speicher-Verbindungszeitüberschreitung. %s" + "Storage connection timeout. %s" : "Speicher-Verbindungszeitüberschreitung. %s", + "ownCloud %s or higher is required." : "ownCloud %s oder neuer erforderlich", + "ownCloud %s or lower is required." : "ownCloud %s oder älter erforderlich", + "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "Die App \"%s\" kann nicht installiert werden, da sie mit dieser Version von Nextcloud nicht kompatibel ist.", + "App can't be installed because it is not compatible with this version of Nextcloud" : "Die App kann nicht installiert werden, da sie mit dieser Version von Nextcloud nicht kompatibel ist", + "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "App kann nicht installiert werden, da die in info.xml/version angegebene Version von der vom App-Store berichteten abweicht", + "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Tipp: Sie können die Aktualisierung beschleunigen indem Sie folgenden SQL-Befehl manuell ausführen: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;", + "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Der Betrieb eines Nextcloud-Servers unter Microsoft Windows ist nicht unterstützt. Bitte ziehen Sie Betracht einen Linux-Server im Rahmen einer virtuellen Maschine aufzusetzen, wenn Sie keine Möglichkeit haben, den Server selbst zu migrieren. Finden Sie Linux-Pakete sowie einfach bereitzustellende Images für virtuelle Maschinen unter <a href=\"%s\">%s</a>. Zur Migration existierender Installationen auf Linux finden Sie in unserer <a href=\"%s\">unserer Dokumentation</a> einige Tipps und Migrationsscripts.", + "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Dies kann normalerweise repariert werden, indem dem Webserver <a href=\"%s\" target=\"_blank\" > Schreibzugriff auf das Wurzelverzeichnis gegeben wird</a>." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/lib/l10n/id.js b/lib/l10n/id.js index c45e3d90a87..dcb829c77c2 100644 --- a/lib/l10n/id.js +++ b/lib/l10n/id.js @@ -168,6 +168,14 @@ OC.L10N.register( "Storage incomplete configuration. %s" : "Konfigurasi penyimpanan tidak terselesaikan. %s", "Storage connection error. %s" : "Koneksi penyimpanan bermasalah. %s", "Storage not available" : "Penyimpanan tidak tersedia", - "Storage connection timeout. %s" : "Koneksi penyimpanan waktu-habis. %s" + "Storage connection timeout. %s" : "Koneksi penyimpanan waktu-habis. %s", + "ownCloud %s or higher is required." : "Diperlukan ownCloud %s atau yang lebih tinggi.", + "ownCloud %s or lower is required." : "Diperlukan ownCloud %s atau yang lebih rendah.", + "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "Aplikasi \"%s\" tidak dapat dipasang karena tidak kompatibel dengan versi Nextcloud ini.", + "App can't be installed because it is not compatible with this version of Nextcloud" : "Aplikasi tidak dapat dipasang karena tidak kompatibel dengan versi Nextcloud ini.", + "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "Aplikasi tidak dapat dipasang karena versi dalam info.xml/version tidak sama dengan versi yang ada dari toko aplikasi", + "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Petunjuk: Anda dapat mempercepat pembaruan dengan mengeksekusi perintah SQL secara manual: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;", + "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Menjalankan Nextcloud Server pada platform Microsoft Windows tidak didukung. Kami menyarankan Anda menggunakan server Linux di mesin virtual jika Anda tidak memiliki pilihan untuk migrasi server itu sendiri. Mencari paket Linux semudah men-deploy ke mesin virtual di <a href=\"%s\">%s</a>. Untuk memigrasi pemasangan ke Linux Anda dapat mencari tips dan skrip migrasi di <a href=\"%s\">dokumentasi kami</a>.", + "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Biasanya ini dapat diperbaiki dengan <a href=\"%s\" target=\"_blank\">memberi server web akses tulis ke direktori root</a>" }, "nplurals=1; plural=0;"); diff --git a/lib/l10n/id.json b/lib/l10n/id.json index da6d1f848e6..783426a6e03 100644 --- a/lib/l10n/id.json +++ b/lib/l10n/id.json @@ -166,6 +166,14 @@ "Storage incomplete configuration. %s" : "Konfigurasi penyimpanan tidak terselesaikan. %s", "Storage connection error. %s" : "Koneksi penyimpanan bermasalah. %s", "Storage not available" : "Penyimpanan tidak tersedia", - "Storage connection timeout. %s" : "Koneksi penyimpanan waktu-habis. %s" + "Storage connection timeout. %s" : "Koneksi penyimpanan waktu-habis. %s", + "ownCloud %s or higher is required." : "Diperlukan ownCloud %s atau yang lebih tinggi.", + "ownCloud %s or lower is required." : "Diperlukan ownCloud %s atau yang lebih rendah.", + "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "Aplikasi \"%s\" tidak dapat dipasang karena tidak kompatibel dengan versi Nextcloud ini.", + "App can't be installed because it is not compatible with this version of Nextcloud" : "Aplikasi tidak dapat dipasang karena tidak kompatibel dengan versi Nextcloud ini.", + "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "Aplikasi tidak dapat dipasang karena versi dalam info.xml/version tidak sama dengan versi yang ada dari toko aplikasi", + "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Petunjuk: Anda dapat mempercepat pembaruan dengan mengeksekusi perintah SQL secara manual: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;", + "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Menjalankan Nextcloud Server pada platform Microsoft Windows tidak didukung. Kami menyarankan Anda menggunakan server Linux di mesin virtual jika Anda tidak memiliki pilihan untuk migrasi server itu sendiri. Mencari paket Linux semudah men-deploy ke mesin virtual di <a href=\"%s\">%s</a>. Untuk memigrasi pemasangan ke Linux Anda dapat mencari tips dan skrip migrasi di <a href=\"%s\">dokumentasi kami</a>.", + "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Biasanya ini dapat diperbaiki dengan <a href=\"%s\" target=\"_blank\">memberi server web akses tulis ke direktori root</a>" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/lib/l10n/it.js b/lib/l10n/it.js index 9be3da55090..c153483e757 100644 --- a/lib/l10n/it.js +++ b/lib/l10n/it.js @@ -168,6 +168,9 @@ OC.L10N.register( "Storage incomplete configuration. %s" : "Configurazione dell'archiviazione incompleta.%s", "Storage connection error. %s" : "Errore di connessione all'archiviazione. %s", "Storage not available" : "Archiviazione non disponibile", - "Storage connection timeout. %s" : "Timeout di connessione all'archiviazione. %s" + "Storage connection timeout. %s" : "Timeout di connessione all'archiviazione. %s", + "ownCloud %s or higher is required." : "È richiesta la versione %s o successiva di ownCloud.", + "ownCloud %s or lower is required." : "È richiesta la versione %s o precedente di ownCloud.", + "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Ciò può essere normalmente corretto <a href=\"%s\" target=\"_blank\">fornendo al server web accesso in scrittura alla cartella radice</a>." }, "nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/it.json b/lib/l10n/it.json index 20bc25cb21d..0e4fab913f2 100644 --- a/lib/l10n/it.json +++ b/lib/l10n/it.json @@ -166,6 +166,9 @@ "Storage incomplete configuration. %s" : "Configurazione dell'archiviazione incompleta.%s", "Storage connection error. %s" : "Errore di connessione all'archiviazione. %s", "Storage not available" : "Archiviazione non disponibile", - "Storage connection timeout. %s" : "Timeout di connessione all'archiviazione. %s" + "Storage connection timeout. %s" : "Timeout di connessione all'archiviazione. %s", + "ownCloud %s or higher is required." : "È richiesta la versione %s o successiva di ownCloud.", + "ownCloud %s or lower is required." : "È richiesta la versione %s o precedente di ownCloud.", + "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Ciò può essere normalmente corretto <a href=\"%s\" target=\"_blank\">fornendo al server web accesso in scrittura alla cartella radice</a>." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/lib/private/App/CodeChecker/InfoChecker.php b/lib/private/App/CodeChecker/InfoChecker.php index 3ee99dc6478..77bf7e8182d 100644 --- a/lib/private/App/CodeChecker/InfoChecker.php +++ b/lib/private/App/CodeChecker/InfoChecker.php @@ -80,7 +80,7 @@ class InfoChecker extends BasicEmitter { $info = $this->infoParser->parse($appPath . '/appinfo/info.xml'); - if (isset($info['dependencies']['owncloud']['@attributes']['min-version']) && ($info['requiremin'] || $info['require'])) { + if (isset($info['dependencies']['owncloud']['@attributes']['min-version']) && (isset($info['requiremin']) || isset($info['require']))) { $this->emit('InfoChecker', 'duplicateRequirement', ['min']); $errors[] = [ 'type' => 'duplicateRequirement', @@ -90,7 +90,7 @@ class InfoChecker extends BasicEmitter { $this->emit('InfoChecker', 'missingRequirement', ['min']); } - if (isset($info['dependencies']['owncloud']['@attributes']['max-version']) && $info['requiremax']) { + if (isset($info['dependencies']['owncloud']['@attributes']['max-version']) && isset($info['requiremax'])) { $this->emit('InfoChecker', 'duplicateRequirement', ['max']); $errors[] = [ 'type' => 'duplicateRequirement', diff --git a/lib/private/AppFramework/DependencyInjection/DIContainer.php b/lib/private/AppFramework/DependencyInjection/DIContainer.php index 66ca59d26e2..20351d1321c 100644 --- a/lib/private/AppFramework/DependencyInjection/DIContainer.php +++ b/lib/private/AppFramework/DependencyInjection/DIContainer.php @@ -124,6 +124,10 @@ class DIContainer extends SimpleContainer implements IAppContainer { return $this->getServer()->getDateTimeZone(); }); + $this->registerService('OCP\\IDateTimeFormatter', function($c) { + return $this->getServer()->getDateTimeFormatter(); + }); + $this->registerService('OCP\\IDb', function($c) { return $this->getServer()->getDb(); }); @@ -148,6 +152,10 @@ class DIContainer extends SimpleContainer implements IAppContainer { return $this->getServer()->getMountProviderCollection(); }); + $this->registerService('OCP\\Files\\Config\\IUserMountCache', function($c) { + return $this->getServer()->getUserMountCache(); + }); + $this->registerService('OCP\\Files\\IRootFolder', function($c) { return $this->getServer()->getRootFolder(); }); @@ -306,6 +314,10 @@ class DIContainer extends SimpleContainer implements IAppContainer { return $c->query('ServerContainer')->getWebRoot(); }); + $this->registerService('OCP\Encryption\IManager', function ($c) { + return $this->getServer()->getEncryptionManager(); + }); + /** * App Framework APIs @@ -396,6 +408,7 @@ class DIContainer extends SimpleContainer implements IAppContainer { $this->registerService('MiddlewareDispatcher', function($c) use (&$middleWares) { $dispatcher = new MiddlewareDispatcher(); $dispatcher->registerMiddleware($c['CORSMiddleware']); + $dispatcher->registerMiddleware($c['OCSMiddleware']); $dispatcher->registerMiddleware($c['SecurityMiddleware']); $dispatcher->registerMiddleWare($c['TwoFactorMiddleware']); @@ -404,7 +417,6 @@ class DIContainer extends SimpleContainer implements IAppContainer { } $dispatcher->registerMiddleware($c['SessionMiddleware']); - $dispatcher->registerMiddleware($c['OCSMiddleware']); return $dispatcher; }); diff --git a/lib/private/AppFramework/Http/Request.php b/lib/private/AppFramework/Http/Request.php index 679ee5bc27c..ba8a48381bd 100644 --- a/lib/private/AppFramework/Http/Request.php +++ b/lib/private/AppFramework/Http/Request.php @@ -56,7 +56,6 @@ use OCP\Security\ISecureRandom; class Request implements \ArrayAccess, \Countable, IRequest { const USER_AGENT_IE = '/(MSIE)|(Trident)/'; - const USER_AGENT_IE_8 = '/MSIE 8.0/'; // Microsoft Edge User Agent from https://msdn.microsoft.com/en-us/library/hh869301(v=vs.85).aspx const USER_AGENT_MS_EDGE = '/^Mozilla\/5\.0 \([^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\) Chrome\/[0-9.]+ (Mobile Safari|Safari)\/[0-9.]+ Edge\/[0-9.]+$/'; // Firefox User Agent from https://developer.mozilla.org/en-US/docs/Web/HTTP/Gecko_user_agent_string_reference @@ -714,10 +713,6 @@ class Request implements \ArrayAccess, \Countable, IRequest { * @return string|false Path info or false when not found */ public function getPathInfo() { - if(isset($this->server['PATH_INFO'])) { - return $this->server['PATH_INFO']; - } - $pathInfo = $this->getRawPathInfo(); // following is taken from \Sabre\HTTP\URLUtil::decodePathSegment $pathInfo = rawurldecode($pathInfo); diff --git a/lib/private/AppFramework/Middleware/OCSMiddleware.php b/lib/private/AppFramework/Middleware/OCSMiddleware.php index e07d100d8ac..68445bbcc51 100644 --- a/lib/private/AppFramework/Middleware/OCSMiddleware.php +++ b/lib/private/AppFramework/Middleware/OCSMiddleware.php @@ -23,8 +23,14 @@ namespace OC\AppFramework\Middleware; use OC\AppFramework\Http; +use OCP\API; +use OCP\AppFramework\Http\DataResponse; +use OCP\AppFramework\Http\JSONResponse; use OCP\AppFramework\Http\OCSResponse; +use OCP\AppFramework\Http\Response; use OCP\AppFramework\OCS\OCSException; +use OCP\AppFramework\OCS\OCSForbiddenException; +use OCP\AppFramework\OCS\OCSNotFoundException; use OCP\AppFramework\OCSController; use OCP\IRequest; use OCP\AppFramework\Middleware; @@ -54,12 +60,35 @@ class OCSMiddleware extends Middleware { $code = $exception->getCode(); if ($code === 0) { - $code = Http::STATUS_INTERNAL_SERVER_ERROR; + $code = API::RESPOND_UNKNOWN_ERROR; } + + // Build the response $response = new OCSResponse($format, $code, $exception->getMessage()); + // Forbidden always sets 401 (even on v1.php) + if ($exception instanceof OCSForbiddenException || $code === API::RESPOND_UNAUTHORISED) { + $response->setStatus(Http::STATUS_UNAUTHORIZED); + } + + // On v2.php we set actual HTTP error codes if (substr_compare($this->request->getScriptName(), '/ocs/v2.php', -strlen('/ocs/v2.php')) === 0) { - $response->setStatus($code); + if ($code === API::RESPOND_NOT_FOUND) { + $response->setStatus(Http::STATUS_NOT_FOUND); + } else if ($code === API::RESPOND_SERVER_ERROR) { + $response->setStatus(Http::STATUS_INTERNAL_SERVER_ERROR); + } else if ($code === API::RESPOND_UNKNOWN_ERROR) { + $response->setStatus(Http::STATUS_INTERNAL_SERVER_ERROR); + } else if ($code === API::RESPOND_UNAUTHORISED) { + // Already set + } + // 4xx and 5xx codes are forwarded as is. + else if ($code >= 400 && $code < 600) { + $response->setStatus($code); + } else { + // All other codes get a bad request + $response->setStatus(Http::STATUS_BAD_REQUEST); + } } return $response; } @@ -69,6 +98,35 @@ class OCSMiddleware extends Middleware { /** * @param \OCP\AppFramework\Controller $controller + * @param string $methodName + * @param Response $response + * @return \OCP\AppFramework\Http\Response + */ + public function afterController($controller, $methodName, Response $response) { + /* + * If a different middleware has detected that a request unauthorized or forbidden + * we need to catch the response and convert it to a proper OCS response. + */ + if ($controller instanceof OCSController && !($response instanceof OCSResponse)) { + if ($response->getStatus() === Http::STATUS_UNAUTHORIZED || + $response->getStatus() === Http::STATUS_FORBIDDEN) { + $format = $this->getFormat($controller); + + $message = ''; + if ($response instanceof JSONResponse) { + /** @var DataResponse $response */ + $message = $response->getData()['message']; + } + $response = new OCSResponse($format, \OCP\API::RESPOND_UNAUTHORISED, $message); + $response->setStatus(Http::STATUS_UNAUTHORIZED); + } + } + + return $response; + } + + /** + * @param \OCP\AppFramework\Controller $controller * @return string */ private function getFormat($controller) { diff --git a/lib/private/AppFramework/Routing/RouteConfig.php b/lib/private/AppFramework/Routing/RouteConfig.php index 066c0da1138..e94f2e50c1d 100644 --- a/lib/private/AppFramework/Routing/RouteConfig.php +++ b/lib/private/AppFramework/Routing/RouteConfig.php @@ -86,7 +86,13 @@ class RouteConfig { $postfix = $ocsRoute['postfix']; } - $url = $ocsRoute['url']; + if (isset($ocsRoute['root'])) { + $root = $ocsRoute['root']; + } else { + $root = '/apps/'.$this->appName; + } + + $url = $root . $ocsRoute['url']; $verb = isset($ocsRoute['verb']) ? strtoupper($ocsRoute['verb']) : 'GET'; $split = explode('#', $name, 2); diff --git a/lib/private/Authentication/TwoFactorAuth/Manager.php b/lib/private/Authentication/TwoFactorAuth/Manager.php index 66bcafbce71..143fe7dc927 100644 --- a/lib/private/Authentication/TwoFactorAuth/Manager.php +++ b/lib/private/Authentication/TwoFactorAuth/Manager.php @@ -165,10 +165,24 @@ class Manager { /** * Check if the currently logged in user needs to pass 2FA * + * @param IUser $user the currently logged in user * @return boolean */ - public function needsSecondFactor() { - return $this->session->exists(self::SESSION_UID_KEY); + public function needsSecondFactor(IUser $user = null) { + if (is_null($user) || !$this->session->exists(self::SESSION_UID_KEY)) { + return false; + } + + if (!$this->isTwoFactorAuthenticated($user)) { + // There is no second factor any more -> let the user pass + // This prevents infinite redirect loops when a user is about + // to solve the 2FA challenge, and the provider app is + // disabled the same time + $this->session->remove(self::SESSION_UID_KEY); + return false; + } + + return true; } /** diff --git a/lib/private/CapabilitiesManager.php b/lib/private/CapabilitiesManager.php index 99a37d652a1..159fa97c708 100644 --- a/lib/private/CapabilitiesManager.php +++ b/lib/private/CapabilitiesManager.php @@ -22,15 +22,22 @@ namespace OC; +use OCP\AppFramework\QueryException; use OCP\Capabilities\ICapability; +use OCP\ILogger; class CapabilitiesManager { - /** - * @var \Closure[] - */ + /** @var \Closure[] */ private $capabilities = array(); + /** @var ILogger */ + private $logger; + + public function __construct(ILogger $logger) { + $this->logger = $logger; + } + /** * Get an array of al the capabilities that are registered at this manager * @@ -40,7 +47,13 @@ class CapabilitiesManager { public function getCapabilities() { $capabilities = []; foreach($this->capabilities as $capability) { - $c = $capability(); + try { + $c = $capability(); + } catch (QueryException $e) { + $this->logger->error('CapabilitiesManager: {message}', ['app' => 'core', 'message' => $e->getMessage()]); + continue; + } + if ($c instanceof ICapability) { $capabilities = array_replace_recursive($capabilities, $c->getCapabilities()); } else { diff --git a/lib/private/Comments/Comment.php b/lib/private/Comments/Comment.php index d640c606f8e..f6f0801c683 100644 --- a/lib/private/Comments/Comment.php +++ b/lib/private/Comments/Comment.php @@ -47,8 +47,8 @@ class Comment implements IComment { /** * Comment constructor. * - * @param [] $data optional, array with keys according to column names from - * the comments database scheme + * @param array $data optional, array with keys according to column names from + * the comments database scheme */ public function __construct(array $data = null) { if(is_array($data)) { @@ -358,7 +358,7 @@ class Comment implements IComment { * sets the comment data based on an array with keys as taken from the * database. * - * @param [] $data + * @param array $data * @return IComment */ protected function fromArray($data) { diff --git a/lib/private/Diagnostics/Query.php b/lib/private/Diagnostics/Query.php index 908ad17f9db..8ac2cc0eeac 100644 --- a/lib/private/Diagnostics/Query.php +++ b/lib/private/Diagnostics/Query.php @@ -34,15 +34,18 @@ class Query implements IQuery { private $end; + private $stack; + /** * @param string $sql * @param array $params * @param int $start */ - public function __construct($sql, $params, $start) { + public function __construct($sql, $params, $start, array $stack) { $this->sql = $sql; $this->params = $params; $this->start = $start; + $this->stack = $stack; } public function end($time) { @@ -69,4 +72,12 @@ class Query implements IQuery { public function getDuration() { return $this->end - $this->start; } + + public function getStartTime() { + return $this->start; + } + + public function getStacktrace() { + return $this->stack; + } } diff --git a/lib/private/Diagnostics/QueryLogger.php b/lib/private/Diagnostics/QueryLogger.php index 5cf7e0689f8..a30f8c7b02a 100644 --- a/lib/private/Diagnostics/QueryLogger.php +++ b/lib/private/Diagnostics/QueryLogger.php @@ -42,7 +42,15 @@ class QueryLogger implements IQueryLogger { * @param array $types */ public function startQuery($sql, array $params = null, array $types = null) { - $this->activeQuery = new Query($sql, $params, microtime(true)); + $this->activeQuery = new Query($sql, $params, microtime(true), $this->getStack()); + } + + private function getStack() { + $stack = debug_backtrace(); + array_shift($stack); + array_shift($stack); + array_shift($stack); + return $stack; } public function stopQuery() { diff --git a/lib/private/Encryption/DecryptAll.php b/lib/private/Encryption/DecryptAll.php index 6e309b5c892..b84395b9e17 100644 --- a/lib/private/Encryption/DecryptAll.php +++ b/lib/private/Encryption/DecryptAll.php @@ -210,6 +210,10 @@ class DecryptAll { while ($root = array_pop($directories)) { $content = $this->rootView->getDirectoryContent($root); foreach ($content as $file) { + // only decrypt files owned by the user + if($file->getStorage()->instanceOfStorage('OC\Files\Storage\Shared')) { + continue; + } $path = $root . '/' . $file['name']; if ($this->rootView->is_dir($path)) { $directories[] = $path; diff --git a/lib/private/Files/Cache/Storage.php b/lib/private/Files/Cache/Storage.php index 99b127ab220..8a076084ac5 100644 --- a/lib/private/Files/Cache/Storage.php +++ b/lib/private/Files/Cache/Storage.php @@ -57,15 +57,15 @@ class Storage { $this->storageId = self::adjustStorageId($this->storageId); if ($row = self::getStorageById($this->storageId)) { - $this->numericId = $row['numeric_id']; + $this->numericId = (int)$row['numeric_id']; } else { $connection = \OC::$server->getDatabaseConnection(); $available = $isAvailable ? 1 : 0; if ($connection->insertIfNotExist('*PREFIX*storages', ['id' => $this->storageId, 'available' => $available])) { - $this->numericId = $connection->lastInsertId('*PREFIX*storages'); + $this->numericId = (int)$connection->lastInsertId('*PREFIX*storages'); } else { if ($row = self::getStorageById($this->storageId)) { - $this->numericId = $row['numeric_id']; + $this->numericId = (int)$row['numeric_id']; } else { throw new \RuntimeException('Storage could neither be inserted nor be selected from the database'); } @@ -132,7 +132,7 @@ class Storage { $storageId = self::adjustStorageId($storageId); if ($row = self::getStorageById($storageId)) { - return $row['numeric_id']; + return (int)$row['numeric_id']; } else { return null; } diff --git a/lib/private/Files/Config/LazyStorageMountInfo.php b/lib/private/Files/Config/LazyStorageMountInfo.php index 2e9639f5f08..4df813d57d0 100644 --- a/lib/private/Files/Config/LazyStorageMountInfo.php +++ b/lib/private/Files/Config/LazyStorageMountInfo.php @@ -48,11 +48,7 @@ class LazyStorageMountInfo extends CachedMountInfo { */ public function getStorageId() { if (!$this->storageId) { - $storage = $this->mount->getStorage(); - if (!$storage) { - return -1; - } - $this->storageId = $storage->getStorageCache()->getNumericId(); + $this->storageId = $this->mount->getNumericStorageId(); } return parent::getStorageId(); } diff --git a/lib/private/Files/Config/UserMountCache.php b/lib/private/Files/Config/UserMountCache.php index ab58a976873..bd8343fa440 100644 --- a/lib/private/Files/Config/UserMountCache.php +++ b/lib/private/Files/Config/UserMountCache.php @@ -159,7 +159,8 @@ class UserMountCache implements IUserMountCache { 'mount_id' => $mount->getMountId() ], ['root_id', 'user_id']); } else { - $this->logger->error('Error getting storage info for mount at ' . $mount->getMountPoint()); + // in some cases this is legitimate, like orphaned shares + $this->logger->debug('Could not get storage info for mount at ' . $mount->getMountPoint()); } } diff --git a/lib/private/Files/Mount/MountPoint.php b/lib/private/Files/Mount/MountPoint.php index d6a6a5565ad..42b79596c98 100644 --- a/lib/private/Files/Mount/MountPoint.php +++ b/lib/private/Files/Mount/MountPoint.php @@ -41,6 +41,7 @@ class MountPoint implements IMountPoint { protected $storage = null; protected $class; protected $storageId; + protected $rootId = null; /** * Configuration options for the storage backend @@ -70,7 +71,7 @@ class MountPoint implements IMountPoint { */ private $invalidStorage = false; - /** @var int|null */ + /** @var int|null */ protected $mountId; /** @@ -132,18 +133,20 @@ class MountPoint implements IMountPoint { /** * create the storage that is mounted - * - * @return \OC\Files\Storage\Storage */ private function createStorage() { if ($this->invalidStorage) { - return null; + return; } if (class_exists($this->class)) { try { - return $this->loader->getInstance($this, $this->class, $this->arguments); + $class = $this->class; + // prevent recursion by setting the storage before applying wrappers + $this->storage = new $class($this->arguments); + $this->storage = $this->loader->wrap($this, $this->storage); } catch (\Exception $exception) { + $this->storage = null; $this->invalidStorage = true; if ($this->mountPoint === '/') { // the root storage could not be initialized, show the user! @@ -151,12 +154,12 @@ class MountPoint implements IMountPoint { } else { \OCP\Util::writeLog('core', $exception->getMessage(), \OCP\Util::ERROR); } - return null; + return; } } else { \OCP\Util::writeLog('core', 'storage backend ' . $this->class . ' not found', \OCP\Util::ERROR); $this->invalidStorage = true; - return null; + return; } } @@ -165,7 +168,7 @@ class MountPoint implements IMountPoint { */ public function getStorage() { if (is_null($this->storage)) { - $this->storage = $this->createStorage(); + $this->createStorage(); } return $this->storage; } @@ -192,6 +195,13 @@ class MountPoint implements IMountPoint { } /** + * @return int + */ + public function getNumericStorageId() { + return $this->getStorage()->getStorageCache()->getNumericId(); + } + + /** * @param string $path * @return string */ @@ -255,7 +265,10 @@ class MountPoint implements IMountPoint { * @return int */ public function getStorageRootId() { - return (int)$this->getStorage()->getCache()->getId(''); + if (is_null($this->rootId)) { + $this->rootId = (int)$this->getStorage()->getCache()->getId(''); + } + return $this->rootId; } public function getMountId() { diff --git a/lib/private/Files/Node/LazyRoot.php b/lib/private/Files/Node/LazyRoot.php index 317b8144653..1fb3f6448bc 100644 --- a/lib/private/Files/Node/LazyRoot.php +++ b/lib/private/Files/Node/LazyRoot.php @@ -139,7 +139,7 @@ class LazyRoot implements IRootFolder { * @inheritDoc */ public function get($path) { - $this->__call(__FUNCTION__, func_get_args()); + return $this->__call(__FUNCTION__, func_get_args()); } /** diff --git a/lib/private/Files/Node/Root.php b/lib/private/Files/Node/Root.php index bad865a7987..007847fb513 100644 --- a/lib/private/Files/Node/Root.php +++ b/lib/private/Files/Node/Root.php @@ -28,6 +28,7 @@ namespace OC\Files\Node; +use OC\Cache\CappedMemoryCache; use OC\Files\Mount\Manager; use OC\Files\Mount\MountPoint; use OCP\Files\NotFoundException; @@ -71,6 +72,8 @@ class Root extends Folder implements IRootFolder { */ private $user; + private $userFolderCache; + /** * @param \OC\Files\Mount\Manager $manager * @param \OC\Files\View $view @@ -81,6 +84,7 @@ class Root extends Folder implements IRootFolder { $this->mountManager = $manager; $this->user = $user; $this->emitter = new PublicEmitter(); + $this->userFolderCache = new CappedMemoryCache(); } /** @@ -335,25 +339,26 @@ class Root extends Folder implements IRootFolder { * @return \OCP\Files\Folder */ public function getUserFolder($userId) { - \OC\Files\Filesystem::initMountPoints($userId); - $dir = '/' . $userId; - $folder = null; - - try { - $folder = $this->get($dir); - } catch (NotFoundException $e) { - $folder = $this->newFolder($dir); - } + if (!$this->userFolderCache->hasKey($userId)) { + \OC\Files\Filesystem::initMountPoints($userId); + + try { + $folder = $this->get('/' . $userId . '/files'); + } catch (NotFoundException $e) { + if (!$this->nodeExists('/' . $userId)) { + $this->newFolder('/' . $userId); + } + $folder = $this->newFolder('/' . $userId . '/files'); + \OC_Util::copySkeleton($userId, $folder); + } - $dir = '/files'; - try { - $folder = $folder->get($dir); - } catch (NotFoundException $e) { - $folder = $folder->newFolder($dir); - \OC_Util::copySkeleton($userId, $folder); + $this->userFolderCache->set($userId, $folder); } - return $folder; + return $this->userFolderCache->get($userId); + } + public function clearCache() { + $this->userFolderCache = new CappedMemoryCache(); } } diff --git a/lib/private/Files/Storage/Wrapper/Jail.php b/lib/private/Files/Storage/Wrapper/Jail.php index 5b9085799b9..8615d73f346 100644 --- a/lib/private/Files/Storage/Wrapper/Jail.php +++ b/lib/private/Files/Storage/Wrapper/Jail.php @@ -68,7 +68,7 @@ class Jail extends Wrapper { * @return bool */ public function mkdir($path) { - return $this->storage->mkdir($this->getSourcePath($path)); + return $this->getWrapperStorage()->mkdir($this->getSourcePath($path)); } /** @@ -78,7 +78,7 @@ class Jail extends Wrapper { * @return bool */ public function rmdir($path) { - return $this->storage->rmdir($this->getSourcePath($path)); + return $this->getWrapperStorage()->rmdir($this->getSourcePath($path)); } /** @@ -88,7 +88,7 @@ class Jail extends Wrapper { * @return resource */ public function opendir($path) { - return $this->storage->opendir($this->getSourcePath($path)); + return $this->getWrapperStorage()->opendir($this->getSourcePath($path)); } /** @@ -98,7 +98,7 @@ class Jail extends Wrapper { * @return bool */ public function is_dir($path) { - return $this->storage->is_dir($this->getSourcePath($path)); + return $this->getWrapperStorage()->is_dir($this->getSourcePath($path)); } /** @@ -108,7 +108,7 @@ class Jail extends Wrapper { * @return bool */ public function is_file($path) { - return $this->storage->is_file($this->getSourcePath($path)); + return $this->getWrapperStorage()->is_file($this->getSourcePath($path)); } /** @@ -119,7 +119,7 @@ class Jail extends Wrapper { * @return array */ public function stat($path) { - return $this->storage->stat($this->getSourcePath($path)); + return $this->getWrapperStorage()->stat($this->getSourcePath($path)); } /** @@ -129,7 +129,7 @@ class Jail extends Wrapper { * @return bool */ public function filetype($path) { - return $this->storage->filetype($this->getSourcePath($path)); + return $this->getWrapperStorage()->filetype($this->getSourcePath($path)); } /** @@ -140,7 +140,7 @@ class Jail extends Wrapper { * @return int */ public function filesize($path) { - return $this->storage->filesize($this->getSourcePath($path)); + return $this->getWrapperStorage()->filesize($this->getSourcePath($path)); } /** @@ -150,7 +150,7 @@ class Jail extends Wrapper { * @return bool */ public function isCreatable($path) { - return $this->storage->isCreatable($this->getSourcePath($path)); + return $this->getWrapperStorage()->isCreatable($this->getSourcePath($path)); } /** @@ -160,7 +160,7 @@ class Jail extends Wrapper { * @return bool */ public function isReadable($path) { - return $this->storage->isReadable($this->getSourcePath($path)); + return $this->getWrapperStorage()->isReadable($this->getSourcePath($path)); } /** @@ -170,7 +170,7 @@ class Jail extends Wrapper { * @return bool */ public function isUpdatable($path) { - return $this->storage->isUpdatable($this->getSourcePath($path)); + return $this->getWrapperStorage()->isUpdatable($this->getSourcePath($path)); } /** @@ -180,7 +180,7 @@ class Jail extends Wrapper { * @return bool */ public function isDeletable($path) { - return $this->storage->isDeletable($this->getSourcePath($path)); + return $this->getWrapperStorage()->isDeletable($this->getSourcePath($path)); } /** @@ -190,7 +190,7 @@ class Jail extends Wrapper { * @return bool */ public function isSharable($path) { - return $this->storage->isSharable($this->getSourcePath($path)); + return $this->getWrapperStorage()->isSharable($this->getSourcePath($path)); } /** @@ -201,7 +201,7 @@ class Jail extends Wrapper { * @return int */ public function getPermissions($path) { - return $this->storage->getPermissions($this->getSourcePath($path)); + return $this->getWrapperStorage()->getPermissions($this->getSourcePath($path)); } /** @@ -211,7 +211,7 @@ class Jail extends Wrapper { * @return bool */ public function file_exists($path) { - return $this->storage->file_exists($this->getSourcePath($path)); + return $this->getWrapperStorage()->file_exists($this->getSourcePath($path)); } /** @@ -221,7 +221,7 @@ class Jail extends Wrapper { * @return int */ public function filemtime($path) { - return $this->storage->filemtime($this->getSourcePath($path)); + return $this->getWrapperStorage()->filemtime($this->getSourcePath($path)); } /** @@ -231,7 +231,7 @@ class Jail extends Wrapper { * @return string */ public function file_get_contents($path) { - return $this->storage->file_get_contents($this->getSourcePath($path)); + return $this->getWrapperStorage()->file_get_contents($this->getSourcePath($path)); } /** @@ -242,7 +242,7 @@ class Jail extends Wrapper { * @return bool */ public function file_put_contents($path, $data) { - return $this->storage->file_put_contents($this->getSourcePath($path), $data); + return $this->getWrapperStorage()->file_put_contents($this->getSourcePath($path), $data); } /** @@ -252,7 +252,7 @@ class Jail extends Wrapper { * @return bool */ public function unlink($path) { - return $this->storage->unlink($this->getSourcePath($path)); + return $this->getWrapperStorage()->unlink($this->getSourcePath($path)); } /** @@ -263,7 +263,7 @@ class Jail extends Wrapper { * @return bool */ public function rename($path1, $path2) { - return $this->storage->rename($this->getSourcePath($path1), $this->getSourcePath($path2)); + return $this->getWrapperStorage()->rename($this->getSourcePath($path1), $this->getSourcePath($path2)); } /** @@ -274,7 +274,7 @@ class Jail extends Wrapper { * @return bool */ public function copy($path1, $path2) { - return $this->storage->copy($this->getSourcePath($path1), $this->getSourcePath($path2)); + return $this->getWrapperStorage()->copy($this->getSourcePath($path1), $this->getSourcePath($path2)); } /** @@ -285,7 +285,7 @@ class Jail extends Wrapper { * @return resource */ public function fopen($path, $mode) { - return $this->storage->fopen($this->getSourcePath($path), $mode); + return $this->getWrapperStorage()->fopen($this->getSourcePath($path), $mode); } /** @@ -296,7 +296,7 @@ class Jail extends Wrapper { * @return string */ public function getMimeType($path) { - return $this->storage->getMimeType($this->getSourcePath($path)); + return $this->getWrapperStorage()->getMimeType($this->getSourcePath($path)); } /** @@ -308,7 +308,7 @@ class Jail extends Wrapper { * @return string */ public function hash($type, $path, $raw = false) { - return $this->storage->hash($type, $this->getSourcePath($path), $raw); + return $this->getWrapperStorage()->hash($type, $this->getSourcePath($path), $raw); } /** @@ -318,7 +318,7 @@ class Jail extends Wrapper { * @return int */ public function free_space($path) { - return $this->storage->free_space($this->getSourcePath($path)); + return $this->getWrapperStorage()->free_space($this->getSourcePath($path)); } /** @@ -328,7 +328,7 @@ class Jail extends Wrapper { * @return array */ public function search($query) { - return $this->storage->search($query); + return $this->getWrapperStorage()->search($query); } /** @@ -340,7 +340,7 @@ class Jail extends Wrapper { * @return bool */ public function touch($path, $mtime = null) { - return $this->storage->touch($this->getSourcePath($path), $mtime); + return $this->getWrapperStorage()->touch($this->getSourcePath($path), $mtime); } /** @@ -351,7 +351,7 @@ class Jail extends Wrapper { * @return string */ public function getLocalFile($path) { - return $this->storage->getLocalFile($this->getSourcePath($path)); + return $this->getWrapperStorage()->getLocalFile($this->getSourcePath($path)); } /** @@ -365,7 +365,7 @@ class Jail extends Wrapper { * returning true for other changes in the folder is optional */ public function hasUpdated($path, $time) { - return $this->storage->hasUpdated($this->getSourcePath($path), $time); + return $this->getWrapperStorage()->hasUpdated($this->getSourcePath($path), $time); } /** @@ -377,9 +377,9 @@ class Jail extends Wrapper { */ public function getCache($path = '', $storage = null) { if (!$storage) { - $storage = $this->storage; + $storage = $this->getWrapperStorage(); } - $sourceCache = $this->storage->getCache($this->getSourcePath($path), $storage); + $sourceCache = $this->getWrapperStorage()->getCache($this->getSourcePath($path), $storage); return new CacheJail($sourceCache, $this->rootPath); } @@ -390,7 +390,7 @@ class Jail extends Wrapper { * @return string */ public function getOwner($path) { - return $this->storage->getOwner($this->getSourcePath($path)); + return $this->getWrapperStorage()->getOwner($this->getSourcePath($path)); } /** @@ -404,7 +404,7 @@ class Jail extends Wrapper { if (!$storage) { $storage = $this; } - return $this->storage->getWatcher($this->getSourcePath($path), $storage); + return $this->getWrapperStorage()->getWatcher($this->getSourcePath($path), $storage); } /** @@ -414,7 +414,7 @@ class Jail extends Wrapper { * @return string */ public function getETag($path) { - return $this->storage->getETag($this->getSourcePath($path)); + return $this->getWrapperStorage()->getETag($this->getSourcePath($path)); } /** @@ -422,7 +422,7 @@ class Jail extends Wrapper { * @return array */ public function getMetaData($path) { - return $this->storage->getMetaData($this->getSourcePath($path)); + return $this->getWrapperStorage()->getMetaData($this->getSourcePath($path)); } /** @@ -432,7 +432,7 @@ class Jail extends Wrapper { * @throws \OCP\Lock\LockedException */ public function acquireLock($path, $type, ILockingProvider $provider) { - $this->storage->acquireLock($this->getSourcePath($path), $type, $provider); + $this->getWrapperStorage()->acquireLock($this->getSourcePath($path), $type, $provider); } /** @@ -441,7 +441,7 @@ class Jail extends Wrapper { * @param \OCP\Lock\ILockingProvider $provider */ public function releaseLock($path, $type, ILockingProvider $provider) { - $this->storage->releaseLock($this->getSourcePath($path), $type, $provider); + $this->getWrapperStorage()->releaseLock($this->getSourcePath($path), $type, $provider); } /** @@ -450,7 +450,7 @@ class Jail extends Wrapper { * @param \OCP\Lock\ILockingProvider $provider */ public function changeLock($path, $type, ILockingProvider $provider) { - $this->storage->changeLock($this->getSourcePath($path), $type, $provider); + $this->getWrapperStorage()->changeLock($this->getSourcePath($path), $type, $provider); } /** @@ -460,7 +460,7 @@ class Jail extends Wrapper { * @return array */ public function resolvePath($path) { - return [$this->storage, $this->getSourcePath($path)]; + return [$this->getWrapperStorage(), $this->getSourcePath($path)]; } /** @@ -473,7 +473,7 @@ class Jail extends Wrapper { if ($sourceStorage === $this) { return $this->copy($sourceInternalPath, $targetInternalPath); } - return $this->storage->copyFromStorage($sourceStorage, $sourceInternalPath, $this->getSourcePath($targetInternalPath)); + return $this->getWrapperStorage()->copyFromStorage($sourceStorage, $sourceInternalPath, $this->getSourcePath($targetInternalPath)); } /** @@ -486,6 +486,6 @@ class Jail extends Wrapper { if ($sourceStorage === $this) { return $this->rename($sourceInternalPath, $targetInternalPath); } - return $this->storage->moveFromStorage($sourceStorage, $sourceInternalPath, $this->getSourcePath($targetInternalPath)); + return $this->getWrapperStorage()->moveFromStorage($sourceStorage, $sourceInternalPath, $this->getSourcePath($targetInternalPath)); } } diff --git a/lib/private/Files/Storage/Wrapper/Wrapper.php b/lib/private/Files/Storage/Wrapper/Wrapper.php index 706023a2893..c52b3394832 100644 --- a/lib/private/Files/Storage/Wrapper/Wrapper.php +++ b/lib/private/Files/Storage/Wrapper/Wrapper.php @@ -64,7 +64,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return string */ public function getId() { - return $this->storage->getId(); + return $this->getWrapperStorage()->getId(); } /** @@ -74,7 +74,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return bool */ public function mkdir($path) { - return $this->storage->mkdir($path); + return $this->getWrapperStorage()->mkdir($path); } /** @@ -84,7 +84,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return bool */ public function rmdir($path) { - return $this->storage->rmdir($path); + return $this->getWrapperStorage()->rmdir($path); } /** @@ -94,7 +94,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return resource */ public function opendir($path) { - return $this->storage->opendir($path); + return $this->getWrapperStorage()->opendir($path); } /** @@ -104,7 +104,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return bool */ public function is_dir($path) { - return $this->storage->is_dir($path); + return $this->getWrapperStorage()->is_dir($path); } /** @@ -114,7 +114,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return bool */ public function is_file($path) { - return $this->storage->is_file($path); + return $this->getWrapperStorage()->is_file($path); } /** @@ -125,7 +125,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return array */ public function stat($path) { - return $this->storage->stat($path); + return $this->getWrapperStorage()->stat($path); } /** @@ -135,7 +135,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return bool */ public function filetype($path) { - return $this->storage->filetype($path); + return $this->getWrapperStorage()->filetype($path); } /** @@ -146,7 +146,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return int */ public function filesize($path) { - return $this->storage->filesize($path); + return $this->getWrapperStorage()->filesize($path); } /** @@ -156,7 +156,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return bool */ public function isCreatable($path) { - return $this->storage->isCreatable($path); + return $this->getWrapperStorage()->isCreatable($path); } /** @@ -166,7 +166,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return bool */ public function isReadable($path) { - return $this->storage->isReadable($path); + return $this->getWrapperStorage()->isReadable($path); } /** @@ -176,7 +176,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return bool */ public function isUpdatable($path) { - return $this->storage->isUpdatable($path); + return $this->getWrapperStorage()->isUpdatable($path); } /** @@ -186,7 +186,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return bool */ public function isDeletable($path) { - return $this->storage->isDeletable($path); + return $this->getWrapperStorage()->isDeletable($path); } /** @@ -196,7 +196,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return bool */ public function isSharable($path) { - return $this->storage->isSharable($path); + return $this->getWrapperStorage()->isSharable($path); } /** @@ -207,7 +207,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return int */ public function getPermissions($path) { - return $this->storage->getPermissions($path); + return $this->getWrapperStorage()->getPermissions($path); } /** @@ -217,7 +217,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return bool */ public function file_exists($path) { - return $this->storage->file_exists($path); + return $this->getWrapperStorage()->file_exists($path); } /** @@ -227,7 +227,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return int */ public function filemtime($path) { - return $this->storage->filemtime($path); + return $this->getWrapperStorage()->filemtime($path); } /** @@ -237,7 +237,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return string */ public function file_get_contents($path) { - return $this->storage->file_get_contents($path); + return $this->getWrapperStorage()->file_get_contents($path); } /** @@ -248,7 +248,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return bool */ public function file_put_contents($path, $data) { - return $this->storage->file_put_contents($path, $data); + return $this->getWrapperStorage()->file_put_contents($path, $data); } /** @@ -258,7 +258,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return bool */ public function unlink($path) { - return $this->storage->unlink($path); + return $this->getWrapperStorage()->unlink($path); } /** @@ -269,7 +269,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return bool */ public function rename($path1, $path2) { - return $this->storage->rename($path1, $path2); + return $this->getWrapperStorage()->rename($path1, $path2); } /** @@ -280,7 +280,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return bool */ public function copy($path1, $path2) { - return $this->storage->copy($path1, $path2); + return $this->getWrapperStorage()->copy($path1, $path2); } /** @@ -291,7 +291,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return resource */ public function fopen($path, $mode) { - return $this->storage->fopen($path, $mode); + return $this->getWrapperStorage()->fopen($path, $mode); } /** @@ -302,7 +302,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return string */ public function getMimeType($path) { - return $this->storage->getMimeType($path); + return $this->getWrapperStorage()->getMimeType($path); } /** @@ -314,7 +314,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return string */ public function hash($type, $path, $raw = false) { - return $this->storage->hash($type, $path, $raw); + return $this->getWrapperStorage()->hash($type, $path, $raw); } /** @@ -324,7 +324,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return int */ public function free_space($path) { - return $this->storage->free_space($path); + return $this->getWrapperStorage()->free_space($path); } /** @@ -334,7 +334,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return array */ public function search($query) { - return $this->storage->search($query); + return $this->getWrapperStorage()->search($query); } /** @@ -346,7 +346,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return bool */ public function touch($path, $mtime = null) { - return $this->storage->touch($path, $mtime); + return $this->getWrapperStorage()->touch($path, $mtime); } /** @@ -357,7 +357,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return string */ public function getLocalFile($path) { - return $this->storage->getLocalFile($path); + return $this->getWrapperStorage()->getLocalFile($path); } /** @@ -371,7 +371,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * returning true for other changes in the folder is optional */ public function hasUpdated($path, $time) { - return $this->storage->hasUpdated($path, $time); + return $this->getWrapperStorage()->hasUpdated($path, $time); } /** @@ -385,7 +385,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { if (!$storage) { $storage = $this; } - return $this->storage->getCache($path, $storage); + return $this->getWrapperStorage()->getCache($path, $storage); } /** @@ -399,7 +399,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { if (!$storage) { $storage = $this; } - return $this->storage->getScanner($path, $storage); + return $this->getWrapperStorage()->getScanner($path, $storage); } @@ -410,7 +410,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return string */ public function getOwner($path) { - return $this->storage->getOwner($path); + return $this->getWrapperStorage()->getOwner($path); } /** @@ -424,28 +424,28 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { if (!$storage) { $storage = $this; } - return $this->storage->getWatcher($path, $storage); + return $this->getWrapperStorage()->getWatcher($path, $storage); } public function getPropagator($storage = null) { if (!$storage) { $storage = $this; } - return $this->storage->getPropagator($storage); + return $this->getWrapperStorage()->getPropagator($storage); } public function getUpdater($storage = null) { if (!$storage) { $storage = $this; } - return $this->storage->getUpdater($storage); + return $this->getWrapperStorage()->getUpdater($storage); } /** * @return \OC\Files\Cache\Storage */ public function getStorageCache() { - return $this->storage->getStorageCache(); + return $this->getWrapperStorage()->getStorageCache(); } /** @@ -455,7 +455,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return string */ public function getETag($path) { - return $this->storage->getETag($path); + return $this->getWrapperStorage()->getETag($path); } /** @@ -464,7 +464,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return true */ public function test() { - return $this->storage->test(); + return $this->getWrapperStorage()->test(); } /** @@ -473,7 +473,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return bool wrapped storage's isLocal() value */ public function isLocal() { - return $this->storage->isLocal(); + return $this->getWrapperStorage()->isLocal(); } /** @@ -483,7 +483,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return bool */ public function instanceOfStorage($class) { - return is_a($this, $class) or $this->storage->instanceOfStorage($class); + return is_a($this, $class) or $this->getWrapperStorage()->instanceOfStorage($class); } /** @@ -494,7 +494,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return mixed */ public function __call($method, $args) { - return call_user_func_array(array($this->storage, $method), $args); + return call_user_func_array(array($this->getWrapperStorage(), $method), $args); } /** @@ -506,7 +506,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return array */ public function getDirectDownload($path) { - return $this->storage->getDirectDownload($path); + return $this->getWrapperStorage()->getDirectDownload($path); } /** @@ -515,7 +515,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return array [ available, last_checked ] */ public function getAvailability() { - return $this->storage->getAvailability(); + return $this->getWrapperStorage()->getAvailability(); } /** @@ -524,7 +524,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @param bool $isAvailable */ public function setAvailability($isAvailable) { - $this->storage->setAvailability($isAvailable); + $this->getWrapperStorage()->setAvailability($isAvailable); } /** @@ -534,7 +534,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @throws InvalidPathException */ public function verifyPath($path, $fileName) { - $this->storage->verifyPath($path, $fileName); + $this->getWrapperStorage()->verifyPath($path, $fileName); } /** @@ -548,7 +548,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { return $this->copy($sourceInternalPath, $targetInternalPath); } - return $this->storage->copyFromStorage($sourceStorage, $sourceInternalPath, $targetInternalPath); + return $this->getWrapperStorage()->copyFromStorage($sourceStorage, $sourceInternalPath, $targetInternalPath); } /** @@ -562,7 +562,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { return $this->rename($sourceInternalPath, $targetInternalPath); } - return $this->storage->moveFromStorage($sourceStorage, $sourceInternalPath, $targetInternalPath); + return $this->getWrapperStorage()->moveFromStorage($sourceStorage, $sourceInternalPath, $targetInternalPath); } /** @@ -570,7 +570,7 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @return array */ public function getMetaData($path) { - return $this->storage->getMetaData($path); + return $this->getWrapperStorage()->getMetaData($path); } /** @@ -580,8 +580,8 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @throws \OCP\Lock\LockedException */ public function acquireLock($path, $type, ILockingProvider $provider) { - if ($this->storage->instanceOfStorage('\OCP\Files\Storage\ILockingStorage')) { - $this->storage->acquireLock($path, $type, $provider); + if ($this->getWrapperStorage()->instanceOfStorage('\OCP\Files\Storage\ILockingStorage')) { + $this->getWrapperStorage()->acquireLock($path, $type, $provider); } } @@ -591,8 +591,8 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @param \OCP\Lock\ILockingProvider $provider */ public function releaseLock($path, $type, ILockingProvider $provider) { - if ($this->storage->instanceOfStorage('\OCP\Files\Storage\ILockingStorage')) { - $this->storage->releaseLock($path, $type, $provider); + if ($this->getWrapperStorage()->instanceOfStorage('\OCP\Files\Storage\ILockingStorage')) { + $this->getWrapperStorage()->releaseLock($path, $type, $provider); } } @@ -602,8 +602,8 @@ class Wrapper implements \OC\Files\Storage\Storage, ILockingStorage { * @param \OCP\Lock\ILockingProvider $provider */ public function changeLock($path, $type, ILockingProvider $provider) { - if ($this->storage->instanceOfStorage('\OCP\Files\Storage\ILockingStorage')) { - $this->storage->changeLock($path, $type, $provider); + if ($this->getWrapperStorage()->instanceOfStorage('\OCP\Files\Storage\ILockingStorage')) { + $this->getWrapperStorage()->changeLock($path, $type, $provider); } } } diff --git a/lib/private/Files/Utils/Scanner.php b/lib/private/Files/Utils/Scanner.php index f672cc75744..d26c601be1a 100644 --- a/lib/private/Files/Utils/Scanner.php +++ b/lib/private/Files/Utils/Scanner.php @@ -139,9 +139,10 @@ class Scanner extends PublicEmitter { $this->triggerPropagator($storage, $path); }); - $storage->getPropagator()->beginBatch(); + $propagator = $storage->getPropagator(); + $propagator->beginBatch(); $scanner->backgroundScan(); - $storage->getPropagator()->commitBatch(); + $propagator->commitBatch(); } } @@ -190,14 +191,15 @@ class Scanner extends PublicEmitter { $this->db->beginTransaction(); } try { - $storage->getPropagator()->beginBatch(); + $propagator = $storage->getPropagator(); + $propagator->beginBatch(); $scanner->scan($relativePath, \OC\Files\Cache\Scanner::SCAN_RECURSIVE, \OC\Files\Cache\Scanner::REUSE_ETAG | \OC\Files\Cache\Scanner::REUSE_SIZE); $cache = $storage->getCache(); if ($cache instanceof Cache) { // only re-calculate for the root folder we scanned, anything below that is taken care of by the scanner $cache->correctFolderSize($relativePath); } - $storage->getPropagator()->commitBatch(); + $propagator->commitBatch(); } catch (StorageNotAvailableException $e) { $this->logger->error('Storage ' . $storage->getId() . ' not available'); $this->logger->logException($e); diff --git a/lib/private/Installer.php b/lib/private/Installer.php index eed97e18d94..3d8a923417a 100644 --- a/lib/private/Installer.php +++ b/lib/private/Installer.php @@ -593,6 +593,12 @@ class Installer { OC_App::setAppTypes($info['id']); + if(isset($info['settings']) && is_array($info['settings'])) { + // requires that autoloading was registered for the app, + // as happens before running the install.php some lines above + \OC::$server->getSettingsManager()->setupSettings($info['settings']); + } + return $info['id']; } diff --git a/lib/private/Log.php b/lib/private/Log.php index 0a707f3d4ea..3e0734965b0 100644 --- a/lib/private/Log.php +++ b/lib/private/Log.php @@ -86,6 +86,9 @@ class Log implements ILogger { 'calculateHMAC', 'encrypt', 'decrypt', + + //LoginController + 'tryLogin' ]; /** diff --git a/lib/private/Notification/Manager.php b/lib/private/Notification/Manager.php index 240cb1e11ff..a079561f5c9 100644 --- a/lib/private/Notification/Manager.php +++ b/lib/private/Notification/Manager.php @@ -33,7 +33,7 @@ class Manager implements IManager { /** @var IApp[] */ protected $apps; - /** @var INotifier */ + /** @var INotifier[] */ protected $notifiers; /** @var array[] */ diff --git a/lib/private/Notification/Notification.php b/lib/private/Notification/Notification.php index 62a48f434fe..9b5877a3058 100644 --- a/lib/private/Notification/Notification.php +++ b/lib/private/Notification/Notification.php @@ -397,9 +397,13 @@ class Notification implements INotification { } $this->hasPrimaryParsedAction = true; + + // Make sure the primary action is always the first one + array_unshift($this->actionsParsed, $action); + } else { + $this->actionsParsed[] = $action; } - $this->actionsParsed[] = $action; return $this; } diff --git a/lib/private/OCS/Cloud.php b/lib/private/OCS/Cloud.php deleted file mode 100644 index 84fcfe6e512..00000000000 --- a/lib/private/OCS/Cloud.php +++ /dev/null @@ -1,55 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * @author Tom Needham <tom@owncloud.com> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace OC\OCS; - -class Cloud { - - public static function getCapabilities() { - $result = array(); - list($major, $minor, $micro) = \OCP\Util::getVersion(); - $result['version'] = array( - 'major' => $major, - 'minor' => $minor, - 'micro' => $micro, - 'string' => \OC_Util::getVersionString(), - 'edition' => \OC_Util::getEditionString(), - ); - - $result['capabilities'] = \OC::$server->getCapabilitiesManager()->getCapabilities(); - - return new Result($result); - } - - public static function getCurrentUser() { - $userObject = \OC::$server->getUserManager()->get(\OC_User::getUser()); - $data = array( - 'id' => $userObject->getUID(), - 'display-name' => $userObject->getDisplayName(), - 'email' => $userObject->getEMailAddress(), - ); - return new Result($data); - } -} diff --git a/lib/private/OCS/Config.php b/lib/private/OCS/Config.php deleted file mode 100644 index a8bf8c325c3..00000000000 --- a/lib/private/OCS/Config.php +++ /dev/null @@ -1,39 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Bart Visscher <bartv@thisnet.nl> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Tom Needham <tom@owncloud.com> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -namespace OC\OCS; - -class Config { - - public static function apiConfig() { - $xml['version'] = '1.7'; - $xml['website'] = 'ownCloud'; - $xml['host'] = \OCP\Util::getServerHost(); - $xml['contact'] = ''; - $xml['ssl'] = 'false'; - return new Result($xml); - } - -} diff --git a/lib/private/Preview.php b/lib/private/Preview.php index 70b000a30ee..67838a8d4a3 100644 --- a/lib/private/Preview.php +++ b/lib/private/Preview.php @@ -763,7 +763,7 @@ class Preview { $this->preview = null; $fileInfo = $this->getFileInfo(); - if ($fileInfo === null || $fileInfo === false) { + if ($fileInfo === null || $fileInfo === false || !$fileInfo->isReadable()) { return new \OC_Image(); } diff --git a/lib/private/Repair/RepairUnmergedShares.php b/lib/private/Repair/RepairUnmergedShares.php index 353877bb873..d57bc3779f8 100644 --- a/lib/private/Repair/RepairUnmergedShares.php +++ b/lib/private/Repair/RepairUnmergedShares.php @@ -93,7 +93,7 @@ class RepairUnmergedShares implements IRepairStep { */ $query = $this->connection->getQueryBuilder(); $query - ->select('item_source', 'id', 'file_target', 'permissions', 'parent', 'share_type') + ->select('item_source', 'id', 'file_target', 'permissions', 'parent', 'share_type', 'stime') ->from('share') ->where($query->expr()->eq('share_type', $query->createParameter('shareType'))) ->andWhere($query->expr()->in('share_with', $query->createParameter('shareWiths'))) @@ -148,6 +148,52 @@ class RepairUnmergedShares implements IRepairStep { return $groupedShares; } + private function isPotentialDuplicateName($name) { + return (preg_match('/\(\d+\)(\.[^\.]+)?$/', $name) === 1); + } + + /** + * Decide on the best target name based on all group shares and subshares, + * goal is to increase the likeliness that the chosen name matches what + * the user is expecting. + * + * For this, we discard the entries with parenthesis "(2)". + * In case the user also renamed the duplicates to a legitimate name, this logic + * will still pick the most recent one as it's the one the user is most likely to + * remember renaming. + * + * If no suitable subshare is found, use the least recent group share instead. + * + * @param array $groupShares group share entries + * @param array $subShares sub share entries + * + * @return string chosen target name + */ + private function findBestTargetName($groupShares, $subShares) { + $pickedShare = null; + // sort by stime, this also properly sorts the direct user share if any + @usort($subShares, function($a, $b) { + return ((int)$a['stime'] - (int)$b['stime']); + }); + + foreach ($subShares as $subShare) { + // skip entries that have parenthesis with numbers + if ($this->isPotentialDuplicateName($subShare['file_target'])) { + continue; + } + // pick any share found that would match, the last being the most recent + $pickedShare = $subShare; + } + + // no suitable subshare found + if ($pickedShare === null) { + // use least recent group share target instead + $pickedShare = $groupShares[0]; + } + + return $pickedShare['file_target']; + } + /** * Fix the given received share represented by the set of group shares * and matching sub shares @@ -171,7 +217,7 @@ class RepairUnmergedShares implements IRepairStep { return false; } - $targetPath = $groupShares[0]['file_target']; + $targetPath = $this->findBestTargetName($groupShares, $subShares); // check whether the user opted out completely of all subshares $optedOut = true; diff --git a/lib/private/Route/Router.php b/lib/private/Route/Router.php index ac42c4025c2..59f403d66e8 100644 --- a/lib/private/Route/Router.php +++ b/lib/private/Route/Router.php @@ -154,7 +154,7 @@ class Router implements IRouter { // Also add the OCS collection $collection = $this->getCollection($app.'.ocs'); - $collection->addPrefix('/ocsapp/apps/' . $app); + $collection->addPrefix('/ocsapp'); $this->root->addCollection($collection); } } @@ -163,6 +163,11 @@ class Router implements IRouter { $this->useCollection('root'); require_once __DIR__ . '/../../../settings/routes.php'; require_once __DIR__ . '/../../../core/routes.php'; + + // Also add the OCS collection + $collection = $this->getCollection('root.ocs'); + $collection->addPrefix('/ocsapp'); + $this->root->addCollection($collection); } if ($this->loaded) { // include ocs routes, must be loaded last for /ocs prefix diff --git a/lib/private/Security/Bruteforce/Throttler.php b/lib/private/Security/Bruteforce/Throttler.php index 11a343918c6..031c5ffd411 100644 --- a/lib/private/Security/Bruteforce/Throttler.php +++ b/lib/private/Security/Bruteforce/Throttler.php @@ -225,8 +225,11 @@ class Throttler { * Will sleep for the defined amount of time * * @param string $ip + * @return int the time spent sleeping */ public function sleepDelay($ip) { - usleep($this->getDelay($ip) * 1000); + $delay = $this->getDelay($ip); + usleep($delay * 1000); + return $delay; } } diff --git a/lib/private/Server.php b/lib/private/Server.php index d5808d7f17c..6f6d403210d 100644 --- a/lib/private/Server.php +++ b/lib/private/Server.php @@ -82,7 +82,7 @@ use OC\Security\SecureRandom; use OC\Security\TrustedDomainHelper; use OC\Session\CryptoWrapper; use OC\Tagging\TagMapper; -use OCA\Theming\Template; +use OCA\Theming\ThemingDefaults; use OCP\IL10N; use OCP\IServerContainer; use OCP\Security\IContentSecurityPolicyManager; @@ -185,7 +185,7 @@ class Server extends ServerContainer implements IServerContainer { }); $this->registerService('LazyRootFolder', function(Server $c) { return new LazyRoot(function() use ($c) { - return $c->getRootFolder(); + return $c->query('RootFolder'); }); }); $this->registerService('UserManager', function (Server $c) { @@ -629,7 +629,7 @@ class Server extends ServerContainer implements IServerContainer { return new Manager(); }); $this->registerService('CapabilitiesManager', function (Server $c) { - $manager = new \OC\CapabilitiesManager(); + $manager = new \OC\CapabilitiesManager($c->getLogger()); $manager->registerCapability(function () use ($c) { return new \OC\OCS\CoreCapabilities($c->getConfig()); }); @@ -643,19 +643,26 @@ class Server extends ServerContainer implements IServerContainer { return $factory->getManager(); }); $this->registerService('ThemingDefaults', function(Server $c) { - try { - $classExists = class_exists('OCA\Theming\Template'); - } catch (\OCP\AutoloadNotAllowedException $e) { - // App disabled or in maintenance mode + /* + * Dark magic for autoloader. + * If we do a class_exists it will try to load the class which will + * make composer cache the result. Resulting in errors when enabling + * the theming app. + */ + $prefixes = \OC::$composerAutoloader->getPrefixesPsr4(); + if (isset($prefixes['OCA\\Theming\\'])) { + $classExists = true; + } else { $classExists = false; } - if ($classExists && $this->getConfig()->getSystemValue('installed', false) && $this->getAppManager()->isInstalled('theming')) { - return new Template( - $this->getConfig(), - $this->getL10N('theming'), - $this->getURLGenerator(), - new \OC_Defaults() + if ($classExists && $c->getConfig()->getSystemValue('installed', false) && $c->getAppManager()->isInstalled('theming')) { + return new ThemingDefaults( + $c->getConfig(), + $c->getL10N('theming'), + $c->getURLGenerator(), + new \OC_Defaults(), + $c->getLazyRootFolder() ); } return new \OC_Defaults(); @@ -722,6 +729,18 @@ class Server extends ServerContainer implements IServerContainer { return $manager; }); + $this->registerService('SettingsManager', function(Server $c) { + $manager = new \OC\Settings\Manager( + $c->getLogger(), + $c->getDatabaseConnection(), + $c->getL10N('core'), + $c->getConfig(), + $c->getEncryptionManager(), + $c->getUserManager(), + $c->getLockingProvider() + ); + return $manager; + }); } /** @@ -820,7 +839,7 @@ class Server extends ServerContainer implements IServerContainer { * @return \OCP\Files\IRootFolder */ public function getRootFolder() { - return $this->query('RootFolder'); + return $this->query('LazyRootFolder'); } /** @@ -1277,6 +1296,11 @@ class Server extends ServerContainer implements IServerContainer { return $this->query('MountManager'); } + /** @return \OCP\Files\Config\IUserMountCache */ + function getUserMountCache() { + return $this->query('UserMountCache'); + } + /** * Get the MimeTypeDetector * @@ -1332,7 +1356,6 @@ class Server extends ServerContainer implements IServerContainer { } /** - * @internal Not public by intention. * @return \OC_Defaults */ public function getThemingDefaults() { @@ -1380,7 +1403,7 @@ class Server extends ServerContainer implements IServerContainer { * @return \OCA\Files_External\Service\BackendService */ public function getStoragesBackendService() { - return \OC_Mount_Config::$app->getContainer()->query('OCA\\Files_External\\Service\\BackendService'); + return $this->query('OCA\\Files_External\\Service\\BackendService'); } /** @@ -1389,7 +1412,7 @@ class Server extends ServerContainer implements IServerContainer { * @return \OCA\Files_External\Service\GlobalStoragesService */ public function getGlobalStoragesService() { - return \OC_Mount_Config::$app->getContainer()->query('OCA\\Files_External\\Service\\GlobalStoragesService'); + return $this->query('OCA\\Files_External\\Service\\GlobalStoragesService'); } /** @@ -1398,7 +1421,7 @@ class Server extends ServerContainer implements IServerContainer { * @return \OCA\Files_External\Service\UserGlobalStoragesService */ public function getUserGlobalStoragesService() { - return \OC_Mount_Config::$app->getContainer()->query('OCA\\Files_External\\Service\\UserGlobalStoragesService'); + return $this->query('OCA\\Files_External\\Service\\UserGlobalStoragesService'); } /** @@ -1407,7 +1430,7 @@ class Server extends ServerContainer implements IServerContainer { * @return \OCA\Files_External\Service\UserStoragesService */ public function getUserStoragesService() { - return \OC_Mount_Config::$app->getContainer()->query('OCA\\Files_External\\Service\\UserStoragesService'); + return $this->query('OCA\\Files_External\\Service\\UserStoragesService'); } /** @@ -1425,4 +1448,11 @@ class Server extends ServerContainer implements IServerContainer { public function getLDAPProvider() { return $this->query('LDAPProvider'); } + + /** + * @return \OCP\Settings\IManager + */ + public function getSettingsManager() { + return $this->query('SettingsManager'); + } } diff --git a/lib/private/ServerContainer.php b/lib/private/ServerContainer.php index 1bab2587e8d..df0293addf7 100644 --- a/lib/private/ServerContainer.php +++ b/lib/private/ServerContainer.php @@ -23,6 +23,7 @@ namespace OC; +use OC\AppFramework\App; use OC\AppFramework\DependencyInjection\DIContainer; use OC\AppFramework\Utility\SimpleContainer; use OCP\AppFramework\QueryException; @@ -49,7 +50,7 @@ class ServerContainer extends SimpleContainer { * @param DIContainer $container */ public function registerAppContainer($appName, DIContainer $container) { - $this->appContainers[$appName] = $container; + $this->appContainers[strtolower(App::buildAppNamespace($appName, ''))] = $container; } /** diff --git a/lib/private/Settings/Admin/Additional.php b/lib/private/Settings/Admin/Additional.php new file mode 100644 index 00000000000..d133e4737a7 --- /dev/null +++ b/lib/private/Settings/Admin/Additional.php @@ -0,0 +1,88 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OC\Settings\Admin; + +use Doctrine\DBAL\Connection; +use Doctrine\DBAL\DBALException; +use Doctrine\DBAL\Platforms\SqlitePlatform; +use OC\Lock\DBLockingProvider; +use OC\Lock\NoopLockingProvider; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\IConfig; +use OCP\IDBConnection; +use OCP\IL10N; +use OCP\Lock\ILockingProvider; +use OCP\Settings\ISettings; + +class Additional implements ISettings { + /** @var IConfig */ + private $config; + + /** + * @param IConfig $config + */ + public function __construct(IConfig $config) { + $this->config = $config; + } + + /** + * @return TemplateResponse + */ + public function getForm() { + $parameters = [ + // Mail + 'sendmail_is_available' => (bool) \OC_Helper::findBinaryPath('sendmail'), + 'mail_domain' => $this->config->getSystemValue('mail_domain', ''), + 'mail_from_address' => $this->config->getSystemValue('mail_from_address', ''), + 'mail_smtpmode' => $this->config->getSystemValue('mail_smtpmode', ''), + 'mail_smtpsecure' => $this->config->getSystemValue('mail_smtpsecure', ''), + 'mail_smtphost' => $this->config->getSystemValue('mail_smtphost', ''), + 'mail_smtpport' => $this->config->getSystemValue('mail_smtpport', ''), + 'mail_smtpauthtype' => $this->config->getSystemValue('mail_smtpauthtype', ''), + 'mail_smtpauth' => $this->config->getSystemValue('mail_smtpauth', false), + 'mail_smtpname' => $this->config->getSystemValue('mail_smtpname', ''), + 'mail_smtppassword' => $this->config->getSystemValue('mail_smtppassword', ''), + ]; + + return new TemplateResponse('settings', 'admin/additional-mail', $parameters, ''); + } + + /** + * @return string the section ID, e.g. 'sharing' + */ + public function getSection() { + return 'additional'; + } + + /** + * @return int whether the form should be rather on the top or bottom of + * the admin section. The forms are arranged in ascending order of the + * priority values. It is required to return a value between 0 and 100. + * + * E.g.: 70 + */ + public function getPriority() { + return 0; + } +} diff --git a/lib/private/Settings/Admin/Encryption.php b/lib/private/Settings/Admin/Encryption.php new file mode 100644 index 00000000000..6e93407f1a3 --- /dev/null +++ b/lib/private/Settings/Admin/Encryption.php @@ -0,0 +1,91 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OC\Settings\Admin; + +use OC\Encryption\Manager; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\IUserManager; +use OCP\Settings\ISettings; + +class Encryption implements ISettings { + /** @var Manager */ + private $manager; + + /** @var IUserManager */ + private $userManager; + + /** + * @param Manager $manager + * @param IUserManager $userManager + */ + public function __construct(Manager $manager, IUserManager $userManager) { + $this->manager = $manager; + $this->userManager = $userManager; + } + + /** + * @return TemplateResponse + */ + public function getForm() { + $encryptionModules = $this->manager->getEncryptionModules(); + $defaultEncryptionModuleId = $this->manager->getDefaultEncryptionModuleId(); + $encryptionModuleList = []; + foreach ($encryptionModules as $module) { + $encryptionModuleList[$module['id']]['displayName'] = $module['displayName']; + $encryptionModuleList[$module['id']]['default'] = false; + if ($module['id'] === $defaultEncryptionModuleId) { + $encryptionModuleList[$module['id']]['default'] = true; + } + } + + $parameters = [ + // Encryption API + 'encryptionEnabled' => $this->manager->isEnabled(), + 'encryptionReady' => $this->manager->isReady(), + 'externalBackendsEnabled' => count($this->userManager->getBackends()) > 1, + // Modules + 'encryptionModules' => $encryptionModuleList, + ]; + + return new TemplateResponse('settings', 'admin/encryption', $parameters, ''); + } + + /** + * @return string the section ID, e.g. 'sharing' + */ + public function getSection() { + return 'encryption'; + } + + /** + * @return int whether the form should be rather on the top or bottom of + * the admin section. The forms are arranged in ascending order of the + * priority values. It is required to return a value between 0 and 100. + * + * E.g.: 70 + */ + public function getPriority() { + return 0; + } +} diff --git a/lib/private/Settings/Admin/Logging.php b/lib/private/Settings/Admin/Logging.php new file mode 100644 index 00000000000..407248ac4b1 --- /dev/null +++ b/lib/private/Settings/Admin/Logging.php @@ -0,0 +1,86 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OC\Settings\Admin; + +use OC\Log\File as LogFile; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\IConfig; +use OCP\Settings\ISettings; + +class Logging implements ISettings { + /** @var IConfig */ + private $config; + + /** + * @param IConfig $config + */ + public function __construct(IConfig $config) { + $this->config = $config; + } + + /** + * @return TemplateResponse + */ + public function getForm() { + $logType = $this->config->getSystemValue('log_type', 'file'); + $showLog = ($logType === 'file' || $logType === 'owncloud'); + + $numEntriesToLoad = 5; + $entries = LogFile::getEntries($numEntriesToLoad + 1); + $entriesRemaining = count($entries) > $numEntriesToLoad; + $entries = array_slice($entries, 0, $numEntriesToLoad); + + $logFileExists = file_exists(LogFile::getLogFilePath()) ; + $logFileSize = $logFileExists ? filesize(LogFile::getLogFilePath()) : 0; + + $parameters = [ + 'loglevel' => $this->config->getSystemValue('loglevel', 2), + 'entries' => $entries, + 'entriesremain' => $entriesRemaining, + 'doesLogFileExist' => $logFileExists, + 'logFileSize' => $logFileSize, + 'showLog' => $showLog, + ]; + + return new TemplateResponse('settings', 'admin/logging', $parameters, ''); + } + + /** + * @return string the section ID, e.g. 'sharing' + */ + public function getSection() { + return 'logging'; + } + + /** + * @return int whether the form should be rather on the top or bottom of + * the admin section. The forms are arranged in ascending order of the + * priority values. It is required to return a value between 0 and 100. + * + * E.g.: 70 + */ + public function getPriority() { + return 0; + } +} diff --git a/lib/private/Settings/Admin/Server.php b/lib/private/Settings/Admin/Server.php new file mode 100644 index 00000000000..6b381ab48ed --- /dev/null +++ b/lib/private/Settings/Admin/Server.php @@ -0,0 +1,149 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OC\Settings\Admin; + +use Doctrine\DBAL\Connection; +use Doctrine\DBAL\DBALException; +use Doctrine\DBAL\Platforms\SqlitePlatform; +use OC\Lock\DBLockingProvider; +use OC\Lock\NoopLockingProvider; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\IConfig; +use OCP\IDBConnection; +use OCP\IL10N; +use OCP\Lock\ILockingProvider; +use OCP\Settings\ISettings; + +class Server implements ISettings { + /** @var IDBConnection|Connection */ + private $db; + /** @var IConfig */ + private $config; + /** @var ILockingProvider */ + private $lockingProvider; + /** @var IL10N */ + private $l; + + /** + * @param IDBConnection $db + * @param IConfig $config + * @param ILockingProvider $lockingProvider + * @param IL10N $l + */ + public function __construct(IDBConnection $db, + IConfig $config, + ILockingProvider $lockingProvider, + IL10N $l) { + $this->db = $db; + $this->config = $config; + $this->lockingProvider = $lockingProvider; + $this->l = $l; + } + + /** + * @return TemplateResponse + */ + public function getForm() { + try { + if ($this->db->getDatabasePlatform() instanceof SqlitePlatform) { + $invalidTransactionIsolationLevel = false; + } else { + $invalidTransactionIsolationLevel = $this->db->getTransactionIsolation() !== Connection::TRANSACTION_READ_COMMITTED; + } + } catch (DBALException $e) { + // ignore + $invalidTransactionIsolationLevel = false; + } + + $envPath = getenv('PATH'); + + // warn if outdated version of a memcache module is used + $caches = [ + 'apcu' => ['name' => $this->l->t('APCu'), 'version' => '4.0.6'], + 'redis' => ['name' => $this->l->t('Redis'), 'version' => '2.2.5'], + ]; + $outdatedCaches = []; + foreach ($caches as $php_module => $data) { + $isOutdated = extension_loaded($php_module) && version_compare(phpversion($php_module), $data['version'], '<'); + if ($isOutdated) { + $outdatedCaches[$php_module] = $data; + } + } + + if ($this->lockingProvider instanceof NoopLockingProvider) { + $fileLockingType = 'none'; + } else if ($this->lockingProvider instanceof DBLockingProvider) { + $fileLockingType = 'db'; + } else { + $fileLockingType = 'cache'; + } + + // If the current web root is non-empty but the web root from the config is, + // and system cron is used, the URL generator fails to build valid URLs. + $shouldSuggestOverwriteCliUrl = $this->config->getAppValue('core', 'backgroundjobs_mode', 'ajax') === 'cron' + && \OC::$WEBROOT && \OC::$WEBROOT !== '/' + && !$this->config->getSystemValue('overwrite.cli.url', ''); + $suggestedOverwriteCliUrl = ($shouldSuggestOverwriteCliUrl) ? \OC::$WEBROOT : ''; + + $parameters = [ + // Diagnosis + 'readOnlyConfigEnabled' => \OC_Helper::isReadOnlyConfigEnabled(), + 'isLocaleWorking' => \OC_Util::isSetLocaleWorking(), + 'isAnnotationsWorking' => \OC_Util::isAnnotationsWorking(), + 'checkForWorkingWellKnownSetup' => $this->config->getSystemValue('check_for_working_wellknown_setup', true), + 'has_fileinfo' => \OC_Util::fileInfoLoaded(), + 'invalidTransactionIsolationLevel' => $invalidTransactionIsolationLevel, + 'getenvServerNotWorking' => empty($envPath), + 'OutdatedCacheWarning' => $outdatedCaches, + 'fileLockingType' => $fileLockingType, + 'suggestedOverwriteCliUrl' => $suggestedOverwriteCliUrl, + + // Background jobs + 'backgroundjobs_mode' => $this->config->getAppValue('core', 'backgroundjobs_mode', 'ajax'), + 'cron_log' => $this->config->getSystemValue('cron_log', true), + 'lastcron' => $this->config->getAppValue('core', 'lastcron', false), + 'cronErrors' => $this->config->getAppValue('core', 'cronErrors'), + ]; + + return new TemplateResponse('settings', 'admin/server', $parameters, ''); + } + + /** + * @return string the section ID, e.g. 'sharing' + */ + public function getSection() { + return 'server'; + } + + /** + * @return int whether the form should be rather on the top or bottom of + * the admin section. The forms are arranged in ascending order of the + * priority values. It is required to return a value between 0 and 100. + * + * E.g.: 70 + */ + public function getPriority() { + return 0; + } +} diff --git a/lib/private/Settings/Admin/Sharing.php b/lib/private/Settings/Admin/Sharing.php new file mode 100644 index 00000000000..8d3ddc9b3b5 --- /dev/null +++ b/lib/private/Settings/Admin/Sharing.php @@ -0,0 +1,90 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OC\Settings\Admin; + +use OC\Share\Share; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\IConfig; +use OCP\Settings\ISettings; +use OCP\Util; + +class Sharing implements ISettings { + /** @var IConfig */ + private $config; + + /** + * @param IConfig $config + */ + public function __construct(IConfig $config) { + $this->config = $config; + } + + /** + * @return TemplateResponse + */ + public function getForm() { + $excludedGroups = $this->config->getAppValue('core', 'shareapi_exclude_groups_list', ''); + $excludeGroupsList = !is_null(json_decode($excludedGroups)) + ? implode('|', json_decode($excludedGroups, true)) : ''; + + $parameters = [ + // Built-In Sharing + 'allowGroupSharing' => $this->config->getAppValue('core', 'shareapi_allow_group_sharing', 'yes'), + 'allowLinks' => $this->config->getAppValue('core', 'shareapi_allow_links', 'yes'), + 'allowMailNotification' => $this->config->getAppValue('core', 'shareapi_allow_mail_notification', 'no'), + 'allowPublicMailNotification' => $this->config->getAppValue('core', 'shareapi_allow_public_notification', 'no'), + 'allowPublicUpload' => $this->config->getAppValue('core', 'shareapi_allow_public_upload', 'yes'), + 'allowResharing' => $this->config->getAppValue('core', 'shareapi_allow_resharing', 'yes'), + 'allowShareDialogUserEnumeration' => $this->config->getAppValue('core', 'shareapi_allow_share_dialog_user_enumeration', 'yes'), + 'enforceLinkPassword' => Util::isPublicLinkPasswordRequired(), + 'onlyShareWithGroupMembers' => Share::shareWithGroupMembersOnly(), + 'shareAPIEnabled' => $this->config->getAppValue('core', 'shareapi_enabled', 'yes'), + 'shareDefaultExpireDateSet' => $this->config->getAppValue('core', 'shareapi_default_expire_date', 'no'), + 'shareExpireAfterNDays' => $this->config->getAppValue('core', 'shareapi_expire_after_n_days', '7'), + 'shareEnforceExpireDate' => $this->config->getAppValue('core', 'shareapi_enforce_expire_date', 'no'), + 'shareExcludeGroups' => $this->config->getAppValue('core', 'shareapi_exclude_groups', 'no') === 'yes' ? true : false, + 'shareExcludedGroupsList' => $excludeGroupsList, + ]; + + return new TemplateResponse('settings', 'admin/sharing', $parameters, ''); + } + + /** + * @return string the section ID, e.g. 'sharing' + */ + public function getSection() { + return 'sharing'; + } + + /** + * @return int whether the form should be rather on the top or bottom of + * the admin section. The forms are arranged in ascending order of the + * priority values. It is required to return a value between 0 and 100. + * + * E.g.: 70 + */ + public function getPriority() { + return 0; + } +} diff --git a/lib/private/Settings/Admin/TipsTricks.php b/lib/private/Settings/Admin/TipsTricks.php new file mode 100644 index 00000000000..fd0fd595844 --- /dev/null +++ b/lib/private/Settings/Admin/TipsTricks.php @@ -0,0 +1,71 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OC\Settings\Admin; + +use OCP\AppFramework\Http\TemplateResponse; +use OCP\IConfig; +use OCP\Settings\ISettings; + +class TipsTricks implements ISettings { + /** @var IConfig */ + private $config; + + /** + * @param IConfig $config + */ + public function __construct(IConfig $config) { + $this->config = $config; + } + + /** + * @return TemplateResponse + */ + public function getForm() { + $databaseOverload = (strpos($this->config->getSystemValue('dbtype'), 'sqlite') !== false); + + $parameters = [ + 'databaseOverload' => $databaseOverload, + ]; + + return new TemplateResponse('settings', 'admin/tipstricks', $parameters, ''); + } + + /** + * @return string the section ID, e.g. 'sharing' + */ + public function getSection() { + return 'tips-tricks'; + } + + /** + * @return int whether the form should be rather on the top or bottom of + * the admin section. The forms are arranged in ascending order of the + * priority values. It is required to return a value between 0 and 100. + * + * E.g.: 70 + */ + public function getPriority() { + return 0; + } +} diff --git a/lib/private/Settings/Manager.php b/lib/private/Settings/Manager.php new file mode 100644 index 00000000000..df2f52f816d --- /dev/null +++ b/lib/private/Settings/Manager.php @@ -0,0 +1,435 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OC\Settings; + +use OCP\AppFramework\QueryException; +use OCP\Encryption\IManager as EncryptionManager; +use OCP\IConfig; +use OCP\IDBConnection; +use OCP\IL10N; +use OCP\ILogger; +use OCP\IUserManager; +use OCP\Lock\ILockingProvider; +use OCP\Settings\ISettings; +use OCP\Settings\IManager; +use OCP\Settings\ISection; + +class Manager implements IManager { + const TABLE_ADMIN_SETTINGS = 'admin_settings'; + const TABLE_ADMIN_SECTIONS = 'admin_sections'; + + /** @var ILogger */ + private $log; + /** @var IDBConnection */ + private $dbc; + /** @var IL10N */ + private $l; + /** @var IConfig */ + private $config; + /** @var EncryptionManager */ + private $encryptionManager; + /** @var IUserManager */ + private $userManager; + /** @var ILockingProvider */ + private $lockingProvider; + + /** + * @param ILogger $log + * @param IDBConnection $dbc + * @param IL10N $l + * @param IConfig $config + * @param EncryptionManager $encryptionManager + * @param IUserManager $userManager + * @param ILockingProvider $lockingProvider + */ + public function __construct( + ILogger $log, + IDBConnection $dbc, + IL10N $l, + IConfig $config, + EncryptionManager $encryptionManager, + IUserManager $userManager, + ILockingProvider $lockingProvider + ) { + $this->log = $log; + $this->dbc = $dbc; + $this->l = $l; + $this->config = $config; + $this->encryptionManager = $encryptionManager; + $this->userManager = $userManager; + $this->lockingProvider = $lockingProvider; + } + + /** + * @inheritdoc + */ + public function setupSettings(array $settings) { + if(isset($settings[IManager::KEY_ADMIN_SECTION])) { + $this->setupAdminSection($settings[IManager::KEY_ADMIN_SECTION]); + } + if(isset($settings[IManager::KEY_ADMIN_SETTINGS])) { + $this->setupAdminSettings($settings[IManager::KEY_ADMIN_SETTINGS]); + } + } + + /** + * attempts to remove an apps section and/or settings entry. A listener is + * added centrally making sure that this method is called ones an app was + * disabled. + * + * @param string $appId + * @since 9.1.0 + */ + public function onAppDisabled($appId) { + $appInfo = \OC_App::getAppInfo($appId); // hello static legacy + + if(isset($appInfo['settings'][IManager::KEY_ADMIN_SECTION])) { + $this->remove(self::TABLE_ADMIN_SECTIONS, $appInfo['settings'][IManager::KEY_ADMIN_SECTION]); + } + if(isset($appInfo['settings'][IManager::KEY_ADMIN_SETTINGS])) { + $this->remove(self::TABLE_ADMIN_SETTINGS, $appInfo['settings'][IManager::KEY_ADMIN_SETTINGS]); + } + } + + public function checkForOrphanedClassNames() { + $tables = [ self::TABLE_ADMIN_SECTIONS, self::TABLE_ADMIN_SETTINGS ]; + foreach ($tables as $table) { + $classes = $this->getClasses($table); + foreach($classes as $className) { + try { + \OC::$server->query($className); + } catch (QueryException $e) { + $this->remove($table, $className); + } + } + } + } + + /** + * returns the registerd classes in the given table + * + * @param $table + * @return string[] + */ + private function getClasses($table) { + $q = $this->dbc->getQueryBuilder(); + $resultStatement = $q->select('class') + ->from($table) + ->execute(); + $data = $resultStatement->fetchAll(); + $resultStatement->closeCursor(); + + return array_map(function($row) { return $row['class']; }, $data); + } + + /** + * @param string $sectionClassName + */ + private function setupAdminSection($sectionClassName) { + if(!class_exists($sectionClassName)) { + $this->log->debug('Could not find admin section class ' . $sectionClassName); + return; + } + try { + $section = $this->query($sectionClassName); + } catch (QueryException $e) { + // cancel + return; + } + + if(!$section instanceof ISection) { + $this->log->error( + 'Admin section instance must implement \OCP\ISection. Invalid class: {class}', + ['class' => $sectionClassName] + ); + return; + } + if(!$this->hasAdminSection(get_class($section))) { + $this->addAdminSection($section); + } else { + $this->updateAdminSection($section); + } + } + + private function addAdminSection(ISection $section) { + $this->add(self::TABLE_ADMIN_SECTIONS, [ + 'id' => $section->getID(), + 'class' => get_class($section), + 'priority' => $section->getPriority(), + ]); + } + + private function addAdminSettings(ISettings $settings) { + $this->add(self::TABLE_ADMIN_SETTINGS, [ + 'class' => get_class($settings), + 'section' => $settings->getSection(), + 'priority' => $settings->getPriority(), + ]); + } + + /** + * @param string $table + * @param array $values + */ + private function add($table, array $values) { + $query = $this->dbc->getQueryBuilder(); + $values = array_map(function($value) use ($query) { + return $query->createNamedParameter($value); + }, $values); + $query->insert($table)->values($values); + $query->execute(); + } + + private function updateAdminSettings(ISettings $settings) { + $this->update( + self::TABLE_ADMIN_SETTINGS, + 'class', + get_class($settings), + [ + 'section' => $settings->getSection(), + 'priority' => $settings->getPriority(), + ] + ); + } + + private function updateAdminSection(ISection $section) { + $this->update( + self::TABLE_ADMIN_SECTIONS, + 'class', + get_class($section), + [ + 'id' => $section->getID(), + 'priority' => $section->getPriority(), + ] + ); + } + + private function update($table, $idCol, $id, $values) { + $query = $this->dbc->getQueryBuilder(); + $query->update($table); + foreach($values as $key => $value) { + $query->set($key, $query->createNamedParameter($value)); + } + $query + ->where($query->expr()->eq($idCol, $query->createParameter($idCol))) + ->setParameter($idCol, $id) + ->execute(); + } + + /** + * @param string $className + * @return bool + */ + private function hasAdminSection($className) { + return $this->has(self::TABLE_ADMIN_SECTIONS, $className); + } + + /** + * @param string $className + * @return bool + */ + private function hasAdminSettings($className) { + return $this->has(self::TABLE_ADMIN_SETTINGS, $className); + } + + /** + * @param string $table + * @param string $className + * @return bool + */ + private function has($table, $className) { + $query = $this->dbc->getQueryBuilder(); + $query->select('class') + ->from($table) + ->where($query->expr()->eq('class', $query->createNamedParameter($className))) + ->setMaxResults(1); + + $result = $query->execute(); + $row = $result->fetch(); + $result->closeCursor(); + + return (bool) $row; + } + + /** + * deletes an settings or admin entry from the given table + * + * @param $table + * @param $className + */ + private function remove($table, $className) { + $query = $this->dbc->getQueryBuilder(); + $query->delete($table) + ->where($query->expr()->eq('class', $query->createNamedParameter($className))); + + $query->execute(); + } + + private function setupAdminSettings($settingsClassName) { + if(!class_exists($settingsClassName)) { + $this->log->debug('Could not find admin section class ' . $settingsClassName); + return; + } + + try { + /** @var ISettings $settings */ + $settings = $this->query($settingsClassName); + } catch (QueryException $e) { + // cancel + return; + } + + if(!$settings instanceof ISettings) { + $this->log->error( + 'Admin section instance must implement \OCP\ISection. Invalid class: {class}', + ['class' => $settingsClassName] + ); + return; + } + if(!$this->hasAdminSettings(get_class($settings))) { + $this->addAdminSettings($settings); + } else { + $this->updateAdminSettings($settings); + } + } + + private function query($className) { + try { + return \OC::$server->query($className); + } catch (QueryException $e) { + $this->log->logException($e); + throw $e; + } + } + + /** + * @inheritdoc + */ + public function getAdminSections() { + // built-in sections + $sections = [ + 0 => [new Section('server', $this->l->t('Server settings'), 0)], + 5 => [new Section('sharing', $this->l->t('Sharing'), 0)], + 45 => [new Section('encryption', $this->l->t('Encryption'), 0)], + 90 => [new Section('logging', $this->l->t('Logging'), 0)], + 98 => [new Section('additional', $this->l->t('Additional settings'), 0)], + 99 => [new Section('tips-tricks', $this->l->t('Tips & tricks'), 0)], + ]; + + $query = $this->dbc->getQueryBuilder(); + $query->selectDistinct('s.class') + ->addSelect('s.priority') + ->from(self::TABLE_ADMIN_SECTIONS, 's') + ->from(self::TABLE_ADMIN_SETTINGS, 'f') + ->where($query->expr()->eq('s.id', 'f.section')) + ; + $result = $query->execute(); + + while($row = $result->fetch()) { + if(!isset($sections[$row['priority']])) { + $sections[$row['priority']] = []; + } + try { + $sections[$row['priority']][] = $this->query($row['class']); + } catch (QueryException $e) { + // skip + } + } + $result->closeCursor(); + + ksort($sections); + return $sections; + } + + private function getBuiltInAdminSettings($section) { + $forms = []; + try { + if($section === 'server') { + /** @var ISettings $form */ + $form = new Admin\Server($this->dbc, $this->config, $this->lockingProvider, $this->l); + $forms[$form->getPriority()] = [$form]; + } + if($section === 'encryption') { + /** @var ISettings $form */ + $form = new Admin\Encryption($this->encryptionManager, $this->userManager); + $forms[$form->getPriority()] = [$form]; + } + if($section === 'sharing') { + /** @var ISettings $form */ + $form = new Admin\Sharing($this->config); + $forms[$form->getPriority()] = [$form]; + } + if($section === 'logging') { + /** @var ISettings $form */ + $form = new Admin\Logging($this->config); + $forms[$form->getPriority()] = [$form]; + } + if($section === 'additional') { + /** @var ISettings $form */ + $form = new Admin\Additional($this->config); + $forms[$form->getPriority()] = [$form]; + } + if($section === 'tips-tricks') { + /** @var ISettings $form */ + $form = new Admin\TipsTricks($this->config); + $forms[$form->getPriority()] = [$form]; + } + } catch (QueryException $e) { + // skip + } + return $forms; + } + + private function getAdminSettingsFromDB($section, &$settings) { + $query = $this->dbc->getQueryBuilder(); + $query->select(['class', 'priority']) + ->from(self::TABLE_ADMIN_SETTINGS) + ->where($query->expr()->eq('section', $this->dbc->getQueryBuilder()->createParameter('section'))) + ->setParameter('section', $section); + + $result = $query->execute(); + while($row = $result->fetch()) { + if(!isset($settings[$row['priority']])) { + $settings[$row['priority']] = []; + } + try { + $settings[$row['priority']][] = $this->query($row['class']); + } catch (QueryException $e) { + // skip + } + } + $result->closeCursor(); + + ksort($settings); + } + + /** + * @inheritdoc + */ + public function getAdminSettings($section) { + $settings = $this->getBuiltInAdminSettings($section); + $this->getAdminSettingsFromDB($section, $settings); + return $settings; + } +} diff --git a/lib/private/Settings/RemoveOrphaned.php b/lib/private/Settings/RemoveOrphaned.php new file mode 100644 index 00000000000..fbee95c8879 --- /dev/null +++ b/lib/private/Settings/RemoveOrphaned.php @@ -0,0 +1,91 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OC\Settings; + +use OC\BackgroundJob\JobList; +use OC\BackgroundJob\TimedJob; +use OC\NeedsUpdateException; +use OCP\BackgroundJob\IJobList; +use OCP\ILogger; + +/** + * Class RemoveOrphaned + * + * @package OC\Settings + */ +class RemoveOrphaned extends TimedJob { + + /** @var IJobList */ + private $jobList; + + /** @var ILogger */ + private $logger; + + /** @var Manager */ + private $manager; + + public function __construct(Manager $manager = null) { + if($manager !== null) { + $this->manager = $manager; + } else { + // fix DI for Jobs + $this->manager = \OC::$server->getSettingsManager(); + } + } + + /** + * run the job, then remove it from the job list + * + * @param JobList $jobList + * @param ILogger $logger + */ + public function execute($jobList, ILogger $logger = null) { + // add an interval of 15 mins + $this->setInterval(15*60); + + $this->jobList = $jobList; + $this->logger = $logger; + parent::execute($jobList, $logger); + } + + /** + * @param array $argument + * @throws \Exception + * @throws \OC\NeedsUpdateException + */ + protected function run($argument) { + try { + \OC_App::loadApps(); + } catch (NeedsUpdateException $ex) { + // only run when apps are up to date + return; + } + + $this->manager->checkForOrphanedClassNames(); + + // remove the job once executed successfully + $this->jobList->remove($this); + } + +} diff --git a/lib/private/Settings/Section.php b/lib/private/Settings/Section.php new file mode 100644 index 00000000000..b3cf242279f --- /dev/null +++ b/lib/private/Settings/Section.php @@ -0,0 +1,77 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OC\Settings; + +use OCP\Settings\ISection; + +class Section implements ISection { + /** @var string */ + private $id; + /** @var string */ + private $name; + /** @var int */ + private $priority; + + /** + * @param string $id + * @param string $name + * @param int $priority + */ + public function __construct($id, $name, $priority) { + $this->id = $id; + $this->name = $name; + $this->priority = $priority; + } + + /** + * returns the ID of the section. It is supposed to be a lower case string, + * e.g. 'ldap' + * + * @returns string + */ + public function getID() { + return $this->id; + } + + /** + * returns the translated name as it should be displayed, e.g. 'LDAP / AD + * integration'. Use the L10N service to translate it. + * + * @return string + */ + public function getName() { + return $this->name; + } + + /** + * @return int whether the form should be rather on the top or bottom of + * the settings navigation. The sections are arranged in ascending order of + * the priority values. It is required to return a value between 0 and 99. + * + * E.g.: 70 + */ + public function getPriority() { + return $this->priority; + } +} diff --git a/lib/private/TemplateLayout.php b/lib/private/TemplateLayout.php index 9e3bbf88470..7e5c120717f 100644 --- a/lib/private/TemplateLayout.php +++ b/lib/private/TemplateLayout.php @@ -153,6 +153,7 @@ class TemplateLayout extends \OC_Template { $cssFiles = self::findStylesheetFiles(\OC_Util::$styles); $this->assign('cssfiles', array()); $this->assign('printcssfiles', []); + $this->assign('versionHash', self::$versionHash); foreach($cssFiles as $info) { $web = $info[1]; $file = $info[2]; diff --git a/lib/private/Updater.php b/lib/private/Updater.php index 0a6d9c9a31d..609e965bfad 100644 --- a/lib/private/Updater.php +++ b/lib/private/Updater.php @@ -184,6 +184,18 @@ class Updater extends BasicEmitter { } /** + * Return vendor from which this version was published + * + * @return string Get the vendor + */ + private function getVendor() { + // this should really be a JSON file + require \OC::$SERVERROOT . '/version.php'; + /** @var string $vendor */ + return (string) $vendor; + } + + /** * Whether an upgrade to a specified version is possible * @param string $oldVersion * @param string $newVersion @@ -191,8 +203,22 @@ class Updater extends BasicEmitter { * @return bool */ public function isUpgradePossible($oldVersion, $newVersion, $allowedPreviousVersion) { - return (version_compare($allowedPreviousVersion, $oldVersion, '<=') + $allowedUpgrade = (version_compare($allowedPreviousVersion, $oldVersion, '<=') && (version_compare($oldVersion, $newVersion, '<=') || $this->config->getSystemValue('debug', false))); + + if ($allowedUpgrade) { + return $allowedUpgrade; + } + + // Upgrade not allowed, someone switching vendor? + if ($this->getVendor() !== $this->config->getAppValue('core', 'vendor', '')) { + $oldVersion = explode('.', $oldVersion); + $newVersion = explode('.', $newVersion); + + return $oldVersion[0] === $newVersion[0] && $oldVersion[1] === $newVersion[1]; + } + + return false; } /** @@ -279,6 +305,7 @@ class Updater extends BasicEmitter { // only set the final version if everything went well $this->config->setSystemValue('version', implode('.', \OCP\Util::getVersion())); + $this->config->setAppValue('core', 'vendor', $this->getVendor()); } } diff --git a/lib/private/User/Backend.php b/lib/private/User/Backend.php index da86a4b0534..374ec5876e1 100644 --- a/lib/private/User/Backend.php +++ b/lib/private/User/Backend.php @@ -22,11 +22,13 @@ namespace OC\User; +use \OCP\UserInterface; + /** * Abstract base class for user management. Provides methods for querying backend * capabilities. */ -abstract class Backend implements \OCP\UserInterface { +abstract class Backend implements UserInterface { /** * error code for functions not provided by the user backend */ diff --git a/lib/private/User/Database.php b/lib/private/User/Database.php index e2cbebab2e4..eba7beffeae 100644 --- a/lib/private/User/Database.php +++ b/lib/private/User/Database.php @@ -53,19 +53,25 @@ namespace OC\User; use OC\Cache\CappedMemoryCache; +use OCP\IUserBackend; +use OCP\Util; use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\EventDispatcher\GenericEvent; /** * Class for user management in a SQL Database (e.g. MySQL, SQLite) */ -class Database extends \OC\User\Backend implements \OCP\IUserBackend { +class Database extends Backend implements IUserBackend { /** @var CappedMemoryCache */ private $cache; + /** @var EventDispatcher */ private $eventDispatcher; + /** - * OC_User_Database constructor. + * \OC\User\Database constructor. + * + * @param EventDispatcher $eventDispatcher */ public function __construct($eventDispatcher = null) { $this->cache = new CappedMemoryCache(); @@ -233,7 +239,7 @@ class Database extends \OC\User\Backend implements \OCP\IUserBackend { $result = $query->execute(array($uid)); if ($result === false) { - \OCP\Util::writeLog('core', \OC_DB::getErrorMessage(), \OCP\Util::ERROR); + Util::writeLog('core', \OC_DB::getErrorMessage(), Util::ERROR); return false; } @@ -310,7 +316,7 @@ class Database extends \OC\User\Backend implements \OCP\IUserBackend { $query = \OC_DB::prepare('SELECT COUNT(*) FROM `*PREFIX*users`'); $result = $query->execute(); if ($result === false) { - \OCP\Util::writeLog('core', \OC_DB::getErrorMessage(), \OCP\Util::ERROR); + Util::writeLog('core', \OC_DB::getErrorMessage(), Util::ERROR); return false; } return $result->fetchOne(); @@ -345,7 +351,7 @@ class Database extends \OC\User\Backend implements \OCP\IUserBackend { $backends = \OC::$server->getUserManager()->getBackends(); foreach ($backends as $backend) { - if ($backend instanceof \OC\User\Database) { + if ($backend instanceof Database) { /** @var \OC\User\Database $backend */ $uid = $backend->loginName2UserName($param['uid']); if ($uid !== false) { diff --git a/lib/private/User/Manager.php b/lib/private/User/Manager.php index eb2f1ce1da3..7d8c6d48b2c 100644 --- a/lib/private/User/Manager.php +++ b/lib/private/User/Manager.php @@ -157,6 +157,16 @@ class Manager extends PublicEmitter implements IUserManager { return $this->cachedUsers[$uid]; } + if (method_exists($backend, 'loginName2UserName')) { + $loginName = $backend->loginName2UserName($uid); + if ($loginName !== false) { + $uid = $loginName; + } + if (isset($this->cachedUsers[$uid])) { + return $this->cachedUsers[$uid]; + } + } + $user = new User($uid, $backend, $this, $this->config); if ($cacheUser) { $this->cachedUsers[$uid] = $user; @@ -187,7 +197,7 @@ class Manager extends PublicEmitter implements IUserManager { $password = str_replace("\0", '', $password); foreach ($this->backends as $backend) { - if ($backend->implementsActions(\OC\User\Backend::CHECK_PASSWORD)) { + if ($backend->implementsActions(Backend::CHECK_PASSWORD)) { $uid = $backend->checkPassword($loginName, $password); if ($uid !== false) { return $this->getUserObject($uid, $backend); @@ -291,7 +301,7 @@ class Manager extends PublicEmitter implements IUserManager { $this->emit('\OC\User', 'preCreateUser', array($uid, $password)); foreach ($this->backends as $backend) { - if ($backend->implementsActions(\OC\User\Backend::CREATE_USER)) { + if ($backend->implementsActions(Backend::CREATE_USER)) { $backend->createUser($uid, $password); $user = $this->getUserObject($uid, $backend); $this->emit('\OC\User', 'postCreateUser', array($user, $password)); @@ -309,7 +319,7 @@ class Manager extends PublicEmitter implements IUserManager { public function countUsers() { $userCountStatistics = array(); foreach ($this->backends as $backend) { - if ($backend->implementsActions(\OC\User\Backend::COUNT_USERS)) { + if ($backend->implementsActions(Backend::COUNT_USERS)) { $backendUsers = $backend->countUsers(); if($backendUsers !== false) { if($backend instanceof IUserBackend) { diff --git a/lib/private/User/Session.php b/lib/private/User/Session.php index 3db6cd1a11a..dec959820f8 100644 --- a/lib/private/User/Session.php +++ b/lib/private/User/Session.php @@ -167,7 +167,7 @@ class Session implements IUserSession, Emitter { /** * set the currently active user * - * @param User|null $user + * @param IUser|null $user */ public function setUser($user) { if (is_null($user)) { @@ -287,10 +287,8 @@ class Session implements IUserSession, Emitter { $this->session->regenerateId(); if ($this->validateToken($password, $uid)) { return $this->loginWithToken($password); - } else { - return $this->loginWithPassword($uid, $password); } - return false; + return $this->loginWithPassword($uid, $password); } /** @@ -311,8 +309,7 @@ class Session implements IUserSession, Emitter { $password, IRequest $request, OC\Security\Bruteforce\Throttler $throttler) { - $currentDelay = $throttler->getDelay($request->getRemoteAddress()); - $throttler->sleepDelay($request->getRemoteAddress()); + $currentDelay = $throttler->sleepDelay($request->getRemoteAddress()); $isTokenPassword = $this->isTokenPassword($password); if (!$isTokenPassword && $this->isTokenAuthEnforced()) { @@ -464,7 +461,6 @@ class Session implements IUserSession, Emitter { $message = \OC::$server->getL10N('lib')->t('User disabled'); throw new LoginException($message); } - return false; } /** @@ -652,6 +648,7 @@ class Session implements IUserSession, Emitter { /** * Tries to login the user with auth token header * + * @param IRequest $request * @todo check remember me cookie * @return boolean */ diff --git a/lib/private/User/User.php b/lib/private/User/User.php index 4d403535bf3..94ac8c13621 100644 --- a/lib/private/User/User.php +++ b/lib/private/User/User.php @@ -30,6 +30,7 @@ namespace OC\User; +use OC\Files\Cache\Storage; use OC\Hooks\Emitter; use OC_Helper; use OCP\IAvatarManager; @@ -38,6 +39,7 @@ use OCP\IURLGenerator; use OCP\IUser; use OCP\IConfig; use OCP\UserInterface; +use \OCP\IUserBackend; class User implements IUser { /** @var string $uid */ @@ -111,7 +113,7 @@ class User implements IUser { public function getDisplayName() { if (!isset($this->displayName)) { $displayName = ''; - if ($this->backend and $this->backend->implementsActions(\OC\User\Backend::GET_DISPLAYNAME)) { + if ($this->backend and $this->backend->implementsActions(Backend::GET_DISPLAYNAME)) { // get display name and strip whitespace from the beginning and end of it $backendDisplayName = $this->backend->getDisplayName($this->uid); if (is_string($backendDisplayName)) { @@ -136,7 +138,7 @@ class User implements IUser { */ public function setDisplayName($displayName) { $displayName = trim($displayName); - if ($this->backend->implementsActions(\OC\User\Backend::SET_DISPLAYNAME) && !empty($displayName)) { + if ($this->backend->implementsActions(Backend::SET_DISPLAYNAME) && !empty($displayName)) { $result = $this->backend->setDisplayName($this->uid, $displayName); if ($result) { $this->displayName = $displayName; @@ -198,17 +200,17 @@ class User implements IUser { // FIXME: Feels like an hack - suggestions? // We have to delete the user from all groups - foreach (\OC_Group::getUserGroups($this->uid) as $i) { - \OC_Group::removeFromGroup($this->uid, $i); + foreach (\OC::$server->getGroupManager()->getUserGroupIds($this) as $groupId) { + \OC_Group::removeFromGroup($this->uid, $groupId); } // Delete the user's keys in preferences \OC::$server->getConfig()->deleteAllUserValues($this->uid); // Delete user files in /data/ - \OC_Helper::rmdirr(\OC_User::getHome($this->uid)); + \OC_Helper::rmdirr($this->getHome()); // Delete the users entry in the storage table - \OC\Files\Cache\Storage::remove('home::' . $this->uid); + Storage::remove('home::' . $this->uid); \OC::$server->getCommentsManager()->deleteReferencesOfActor('users', $this->uid); \OC::$server->getCommentsManager()->deleteReadMarksFromUser($this); @@ -231,7 +233,7 @@ class User implements IUser { if ($this->emitter) { $this->emitter->emit('\OC\User', 'preSetPassword', array($this, $password, $recoveryPassword)); } - if ($this->backend->implementsActions(\OC\User\Backend::SET_PASSWORD)) { + if ($this->backend->implementsActions(Backend::SET_PASSWORD)) { $result = $this->backend->setPassword($this->uid, $password); if ($this->emitter) { $this->emitter->emit('\OC\User', 'postSetPassword', array($this, $password, $recoveryPassword)); @@ -249,7 +251,7 @@ class User implements IUser { */ public function getHome() { if (!$this->home) { - if ($this->backend->implementsActions(\OC\User\Backend::GET_HOME) and $home = $this->backend->getHome($this->uid)) { + if ($this->backend->implementsActions(Backend::GET_HOME) and $home = $this->backend->getHome($this->uid)) { $this->home = $home; } elseif ($this->config) { $this->home = $this->config->getSystemValue('datadirectory') . '/' . $this->uid; @@ -266,7 +268,7 @@ class User implements IUser { * @return string */ public function getBackendClassName() { - if($this->backend instanceof \OCP\IUserBackend) { + if($this->backend instanceof IUserBackend) { return $this->backend->getBackendName(); } return get_class($this->backend); @@ -278,7 +280,7 @@ class User implements IUser { * @return bool */ public function canChangeAvatar() { - if ($this->backend->implementsActions(\OC\User\Backend::PROVIDE_AVATAR)) { + if ($this->backend->implementsActions(Backend::PROVIDE_AVATAR)) { return $this->backend->canChangeAvatar($this->uid); } return true; @@ -290,7 +292,7 @@ class User implements IUser { * @return bool */ public function canChangePassword() { - return $this->backend->implementsActions(\OC\User\Backend::SET_PASSWORD); + return $this->backend->implementsActions(Backend::SET_PASSWORD); } /** @@ -302,7 +304,7 @@ class User implements IUser { if ($this->config->getSystemValue('allow_user_to_change_display_name') === false) { return false; } - return $this->backend->implementsActions(\OC\User\Backend::SET_DISPLAYNAME); + return $this->backend->implementsActions(Backend::SET_DISPLAYNAME); } /** diff --git a/lib/private/legacy/api.php b/lib/private/legacy/api.php index 30083294861..17ee9c5d468 100644 --- a/lib/private/legacy/api.php +++ b/lib/private/legacy/api.php @@ -311,7 +311,7 @@ class OC_API { // reuse existing login $loggedIn = \OC::$server->getUserSession()->isLoggedIn(); if ($loggedIn === true) { - if (\OC::$server->getTwoFactorAuthManager()->needsSecondFactor()) { + if (\OC::$server->getTwoFactorAuthManager()->needsSecondFactor(\OC::$server->getUserSession()->getUser())) { // Do not allow access to OCS until the 2FA challenge was solved successfully return false; } diff --git a/lib/private/legacy/app.php b/lib/private/legacy/app.php index 5395d1daeee..0593f440eb0 100644 --- a/lib/private/legacy/app.php +++ b/lib/private/legacy/app.php @@ -51,6 +51,7 @@ use OC\App\Platform; use OC\Installer; use OC\OCSClient; use OC\Repair; +use OCP\App\ManagerEvent; /** * This class manages the apps. It allows them to register and integrate in the @@ -65,6 +66,7 @@ class OC_App { static private $appTypes = array(); static private $loadedApps = array(); static private $altLogin = array(); + static private $alreadyRegistered = []; const officialApp = 200; /** @@ -166,6 +168,11 @@ class OC_App { * @param string $path */ public static function registerAutoloading($app, $path) { + $key = $app . '-' . $path; + if(isset(self::$alreadyRegistered[$key])) { + return; + } + self::$alreadyRegistered[$key] = true; // Register on PSR-4 composer autoloader $appNamespace = \OC\AppFramework\App::buildAppNamespace($app); \OC::$composerAutoloader->addPsr4($appNamespace . '\\', $path . '/lib/', true); @@ -345,6 +352,13 @@ class OC_App { } else { $appManager->enableApp($app); } + + $info = self::getAppInfo($app); + if(isset($info['settings']) && is_array($info['settings'])) { + $appPath = self::getAppPath($app); + self::registerAutoloading($app, $appPath); + \OC::$server->getSettingsManager()->setupSettings($info['settings']); + } } /** @@ -429,7 +443,7 @@ class OC_App { $settings = array( array( "id" => "help", - "order" => 1000, + "order" => 4, "href" => $urlGenerator->linkToRoute('settings_help'), "name" => $l->t("Help"), "icon" => $urlGenerator->imagePath("settings", "help.svg") @@ -458,7 +472,7 @@ class OC_App { // admin users menu $settings[] = array( "id" => "core_users", - "order" => 2, + "order" => 3, "href" => $urlGenerator->linkToRoute('settings_users'), "name" => $l->t("Users"), "icon" => $urlGenerator->imagePath("settings", "users.svg") @@ -470,8 +484,8 @@ class OC_App { // admin settings $settings[] = array( "id" => "admin", - "order" => 1000, - "href" => $urlGenerator->linkToRoute('settings_admin'), + "order" => 2, + "href" => $urlGenerator->linkToRoute('settings.AdminSettings.index'), "name" => $l->t("Admin"), "icon" => $urlGenerator->imagePath("settings", "admin.svg") ); @@ -989,7 +1003,7 @@ class OC_App { $currentVersion = OC_App::getAppVersion($app); if ($currentVersion && isset($versions[$app])) { $installedVersion = $versions[$app]; - if (version_compare($currentVersion, $installedVersion, '>')) { + if (!version_compare($currentVersion, $installedVersion, '=')) { return true; } } @@ -1162,6 +1176,13 @@ class OC_App { if (isset($appData['id'])) { $config->setAppValue($app, 'ocsid', $appData['id']); } + + if(isset($info['settings']) && is_array($info['settings'])) { + $appPath = self::getAppPath($app); + self::registerAutoloading($app, $appPath); + \OC::$server->getSettingsManager()->setupSettings($info['settings']); + } + \OC_Hook::emit('OC_App', 'post_enable', array('app' => $app)); } else { if(empty($appName) ) { @@ -1199,6 +1220,11 @@ class OC_App { include $appPath . '/appinfo/update.php'; } self::setupBackgroundJobs($appData['background-jobs']); + if(isset($appData['settings']) && is_array($appData['settings'])) { + $appPath = self::getAppPath($appId); + self::registerAutoloading($appId, $appPath); + \OC::$server->getSettingsManager()->setupSettings($appData['settings']); + } //set remote/public handlers if (array_key_exists('ocsid', $appData)) { @@ -1218,6 +1244,10 @@ class OC_App { $version = \OC_App::getAppVersion($appId); \OC::$server->getAppConfig()->setValue($appId, 'installed_version', $version); + \OC::$server->getEventDispatcher()->dispatch(ManagerEvent::EVENT_APP_UPDATE, new ManagerEvent( + ManagerEvent::EVENT_APP_UPDATE, $appId + )); + return true; } diff --git a/lib/private/legacy/helper.php b/lib/private/legacy/helper.php index 62814e495d5..b19e58a9e6c 100644 --- a/lib/private/legacy/helper.php +++ b/lib/private/legacy/helper.php @@ -588,7 +588,19 @@ class OC_Helper { $sourceStorage = $storage->getSourceStorage(); } if ($includeExtStorage) { - $quota = OC_Util::getUserQuota(\OCP\User::getUser()); + if ($storage->instanceOfStorage('\OC\Files\Storage\Home') + || $storage->instanceOfStorage('\OC\Files\ObjectStore\HomeObjectStoreStorage') + ) { + /** @var \OC\Files\Storage\Home $storage */ + $user = $storage->getUser(); + } else { + $user = \OC::$server->getUserSession()->getUser()->getUID(); + } + if ($user) { + $quota = OC_Util::getUserQuota($user); + } else { + $quota = \OCP\Files\FileInfo::SPACE_UNLIMITED; + } if ($quota !== \OCP\Files\FileInfo::SPACE_UNLIMITED) { // always get free space / total space from root + mount points return self::getGlobalStorageInfo(); @@ -600,7 +612,7 @@ class OC_Helper { /** @var \OC\Files\Storage\Wrapper\Quota $storage */ $quota = $sourceStorage->getQuota(); } - $free = $sourceStorage->free_space(''); + $free = $sourceStorage->free_space($rootInfo->getInternalPath()); if ($free >= 0) { $total = $free + $used; } else { diff --git a/lib/private/legacy/image.php b/lib/private/legacy/image.php index 2c20daf5d44..fee1a805c40 100644 --- a/lib/private/legacy/image.php +++ b/lib/private/legacy/image.php @@ -84,11 +84,6 @@ class OC_Image implements \OCP\IImage { $this->logger = \OC::$server->getLogger(); } - if (!extension_loaded('gd') || !function_exists('gd_info')) { - $this->logger->error(__METHOD__ . '(): GD module not installed', array('app' => 'core')); - return false; - } - if (\OC_Util::fileInfoLoaded()) { $this->fileInfo = new finfo(FILEINFO_MIME_TYPE); } @@ -802,8 +797,8 @@ class OC_Image implements \OCP\IImage { $this->logger->error(__METHOD__ . '(): No image loaded', array('app' => 'core')); return false; } - $widthOrig = imageSX($this->resource); - $heightOrig = imageSY($this->resource); + $widthOrig = imagesx($this->resource); + $heightOrig = imagesy($this->resource); $ratioOrig = $widthOrig / $heightOrig; if ($ratioOrig > 1) { @@ -828,8 +823,8 @@ class OC_Image implements \OCP\IImage { $this->logger->error(__METHOD__ . '(): No image loaded', array('app' => 'core')); return false; } - $widthOrig = imageSX($this->resource); - $heightOrig = imageSY($this->resource); + $widthOrig = imagesx($this->resource); + $heightOrig = imagesy($this->resource); $process = imagecreatetruecolor($width, $height); if ($process == false) { @@ -867,8 +862,8 @@ class OC_Image implements \OCP\IImage { $this->logger->error('OC_Image->centerCrop, No image loaded', array('app' => 'core')); return false; } - $widthOrig = imageSX($this->resource); - $heightOrig = imageSY($this->resource); + $widthOrig = imagesx($this->resource); + $heightOrig = imagesy($this->resource); if ($widthOrig === $heightOrig and $size == 0) { return true; } @@ -967,8 +962,8 @@ class OC_Image implements \OCP\IImage { $this->logger->error(__METHOD__ . '(): No image loaded', array('app' => 'core')); return false; } - $widthOrig = imageSX($this->resource); - $heightOrig = imageSY($this->resource); + $widthOrig = imagesx($this->resource); + $heightOrig = imagesy($this->resource); $ratio = $widthOrig / $heightOrig; $newWidth = min($maxWidth, $ratio * $maxHeight); @@ -990,8 +985,8 @@ class OC_Image implements \OCP\IImage { $this->logger->error(__METHOD__ . '(): No image loaded', array('app' => 'core')); return false; } - $widthOrig = imageSX($this->resource); - $heightOrig = imageSY($this->resource); + $widthOrig = imagesx($this->resource); + $heightOrig = imagesy($this->resource); if ($widthOrig > $maxWidth || $heightOrig > $maxHeight) { return $this->fitIn($maxWidth, $maxHeight); @@ -1024,6 +1019,7 @@ if (!function_exists('imagebmp')) { * @link http://www.programmierer-forum.de/imagebmp-gute-funktion-gefunden-t143716.htm * @author mgutt <marc@gutt.it> * @version 1.00 + * @param resource $im * @param string $fileName [optional] <p>The path to save the file to.</p> * @param int $bit [optional] <p>Bit depth, (default is 24).</p> * @param int $compression [optional] diff --git a/lib/private/legacy/json.php b/lib/private/legacy/json.php index 2882ac94ea9..f386d03ab1b 100644 --- a/lib/private/legacy/json.php +++ b/lib/private/legacy/json.php @@ -68,7 +68,7 @@ class OC_JSON{ public static function checkLoggedIn() { $twoFactorAuthManger = \OC::$server->getTwoFactorAuthManager(); if( !OC_User::isLoggedIn() - || $twoFactorAuthManger->needsSecondFactor()) { + || $twoFactorAuthManger->needsSecondFactor(\OC::$server->getUserSession()->getUser())) { $l = \OC::$server->getL10N('lib'); http_response_code(\OCP\AppFramework\Http::STATUS_UNAUTHORIZED); self::error(array( 'data' => array( 'message' => $l->t('Authentication error'), 'error' => 'authentication_error' ))); diff --git a/lib/private/legacy/ocs/cloud.php b/lib/private/legacy/ocs/cloud.php deleted file mode 100644 index 11152958301..00000000000 --- a/lib/private/legacy/ocs/cloud.php +++ /dev/null @@ -1,28 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -/** - * @deprecated Since 9.1.0 use \OC\OCS\Cloud - */ -class OC_OCS_Cloud extends \OC\OCS\Cloud { -} diff --git a/lib/private/legacy/ocs/config.php b/lib/private/legacy/ocs/config.php deleted file mode 100644 index dba9a061bb7..00000000000 --- a/lib/private/legacy/ocs/config.php +++ /dev/null @@ -1,28 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -/** - * @deprecated Since 9.1.0 use \OC\OCS\Config - */ -class OC_OCS_Config extends \OC\OCS\Config { -} diff --git a/lib/private/legacy/util.php b/lib/private/legacy/util.php index 83274f82792..648be70cf0d 100644 --- a/lib/private/legacy/util.php +++ b/lib/private/legacy/util.php @@ -165,6 +165,7 @@ class OC_Util { // install storage availability wrapper, before most other wrappers \OC\Files\Filesystem::addStorageWrapper('oc_availability', function ($mountPoint, $storage) { + /** @var \OCP\Files\Storage $storage */ if (!$storage->instanceOfStorage('\OC\Files\Storage\Shared') && !$storage->isLocal()) { return new \OC\Files\Storage\Wrapper\Availability(['storage' => $storage]); } @@ -172,7 +173,7 @@ class OC_Util { }); \OC\Files\Filesystem::addStorageWrapper('oc_encoding', function ($mountPoint, \OCP\Files\Storage $storage, \OCP\Files\Mount\IMountPoint $mount) { - if ($mount->getOption('encoding_compatibility', true) && !$storage->instanceOfStorage('\OC\Files\Storage\Shared') && !$storage->isLocal()) { + if ($mount->getOption('encoding_compatibility', false) && !$storage->instanceOfStorage('\OC\Files\Storage\Shared') && !$storage->isLocal()) { return new \OC\Files\Storage\Wrapper\Encoding(['storage' => $storage]); } return $storage; @@ -290,16 +291,19 @@ class OC_Util { /** * Get the quota of a user * - * @param string $user + * @param string $userId * @return int Quota bytes */ - public static function getUserQuota($user) { - $userQuota = \OC::$server->getUserManager()->get($user)->getQuota(); + public static function getUserQuota($userId) { + $user = \OC::$server->getUserManager()->get($userId); + if (is_null($user)) { + return \OCP\Files\FileInfo::SPACE_UNLIMITED; + } + $userQuota = $user->getQuota(); if($userQuota === 'none') { return \OCP\Files\FileInfo::SPACE_UNLIMITED; - }else{ - return OC_Helper::computerFileSize($userQuota); } + return OC_Helper::computerFileSize($userQuota); } /** @@ -352,6 +356,7 @@ class OC_Util { */ public static function tearDownFS() { \OC\Files\Filesystem::tearDown(); + \OC::$server->getRootFolder()->clearCache(); self::$fsSetup = false; self::$rootMounted = false; } @@ -971,7 +976,7 @@ class OC_Util { exit(); } // Redirect to index page if 2FA challenge was not solved yet - if (\OC::$server->getTwoFactorAuthManager()->needsSecondFactor()) { + if (\OC::$server->getTwoFactorAuthManager()->needsSecondFactor(\OC::$server->getUserSession()->getUser())) { header('Location: ' . \OCP\Util::linkToAbsolute('', 'index.php')); exit(); } diff --git a/lib/public/App/ManagerEvent.php b/lib/public/App/ManagerEvent.php index a70345b62fd..b25ea55aee6 100644 --- a/lib/public/App/ManagerEvent.php +++ b/lib/public/App/ManagerEvent.php @@ -36,6 +36,11 @@ class ManagerEvent extends Event { const EVENT_APP_ENABLE_FOR_GROUPS = 'OCP\App\IAppManager::enableAppForGroups'; const EVENT_APP_DISABLE = 'OCP\App\IAppManager::disableApp'; + /** + * @since 9.1.0 + */ + const EVENT_APP_UPDATE = 'OCP\App\IAppManager::updateApp'; + /** @var string */ protected $event; /** @var string */ diff --git a/lib/public/AppFramework/OCSController.php b/lib/public/AppFramework/OCSController.php index bd50f0a4017..6036fc6a5a8 100644 --- a/lib/public/AppFramework/OCSController.php +++ b/lib/public/AppFramework/OCSController.php @@ -88,26 +88,19 @@ abstract class OCSController extends ApiController { /** * Unwrap data and build ocs response * @param string $format json or xml - * @param array|DataResponse $data the data which should be transformed + * @param DataResponse $data the data which should be transformed * @since 8.1.0 + * @return OCSResponse */ - private function buildOCSResponse($format, $data) { - if ($data instanceof DataResponse) { - $data = $data->getData(); - } - + private function buildOCSResponse($format, DataResponse $data) { $params = [ 'statuscode' => 100, 'message' => 'OK', - 'data' => [], + 'data' => $data->getData(), 'itemscount' => '', 'itemsperpage' => '' ]; - foreach ($data as $key => $value) { - $params[$key] = $value; - } - return new OCSResponse( $format, $params['statuscode'], $params['message'], $params['data'], diff --git a/lib/public/Diagnostics/IQuery.php b/lib/public/Diagnostics/IQuery.php index 9aaf7c423b9..0bd1a6d9685 100644 --- a/lib/public/Diagnostics/IQuery.php +++ b/lib/public/Diagnostics/IQuery.php @@ -47,4 +47,16 @@ interface IQuery { * @since 8.0.0 */ public function getDuration(); + + /** + * @return float + * @since 9.2.0 + */ + public function getStartTime(); + + /** + * @return array + * @since 9.2.0 + */ + public function getStacktrace(); } diff --git a/lib/public/Files/FileInfo.php b/lib/public/Files/FileInfo.php index 04790d41556..b6718efba34 100644 --- a/lib/public/Files/FileInfo.php +++ b/lib/public/Files/FileInfo.php @@ -53,7 +53,7 @@ interface FileInfo { */ const SPACE_UNKNOWN = -2; /** - * @const \OCP\Files\FileInfo::SPACE_UNKNOWN Return value for unlimited space + * @const \OCP\Files\FileInfo::SPACE_UNLIMITED Return value for unlimited space * @since 8.0.0 */ const SPACE_UNLIMITED = -3; diff --git a/lib/public/Files/Mount/IMountPoint.php b/lib/public/Files/Mount/IMountPoint.php index f9a00af7cb5..0876d8b11d6 100644 --- a/lib/public/Files/Mount/IMountPoint.php +++ b/lib/public/Files/Mount/IMountPoint.php @@ -62,6 +62,14 @@ interface IMountPoint { public function getStorageId(); /** + * Get the id of the storages + * + * @return int + * @since 9.1.0 + */ + public function getNumericStorageId(); + + /** * Get the path relative to the mountpoint * * @param string $path absolute path to a file or folder diff --git a/lib/public/IL10N.php b/lib/public/IL10N.php index 68bbb5a51fa..0dfe28c2ce8 100644 --- a/lib/public/IL10N.php +++ b/lib/public/IL10N.php @@ -76,10 +76,10 @@ interface IL10N { /** * Localization * @param string $type Type of localization - * @param int|string $data parameters for this localization + * @param \DateTime|int|string $data parameters for this localization * @param array $options currently supports following options: * - 'width': handed into \Punic\Calendar::formatDate as second parameter - * @return string|false + * @return string|int|false * * Returns the localized data. * diff --git a/lib/public/Settings/IManager.php b/lib/public/Settings/IManager.php new file mode 100644 index 00000000000..a406915ad09 --- /dev/null +++ b/lib/public/Settings/IManager.php @@ -0,0 +1,98 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCP\Settings; + +/** + * @since 9.1 + */ +interface IManager { + /** + * @since 9.1.0 + */ + const KEY_ADMIN_SETTINGS = 'admin'; + + /** + * @since 9.1.0 + */ + const KEY_ADMIN_SECTION = 'admin-section'; + + /** + * sets up settings according to data specified by an apps info.xml, within + * the <settings> element. + * + * @param array $settings an associative array, allowed keys are as specified + * by the KEY_ constant of this interface. The value + * must always be a class name, implement either + * IAdmin or ISection. I.e. only one section and admin + * setting can be configured per app. + * @since 9.1.0 + */ + public function setupSettings(array $settings); + + /** + * attempts to remove an apps section and/or settings entry. A listener is + * added centrally making sure that this method is called ones an app was + * disabled. + * + * What this does not help with is when applications change their settings + * or section classes during their life time. New entries will be added, + * but inactive ones will still reside in the database. + * + * @param string $appId + * @since 9.1.0 + */ + public function onAppDisabled($appId); + + /** + * The method should check all registered classes whether they are still + * instantiable and remove them, if not. This method is called by a + * background job once, after one or more apps were updated. + * + * An app`s info.xml can change during an update and make it unknown whether + * a registered class name was changed or not. An old one would just stay + * registered. Another case is if an admin takes a radical approach and + * simply removes an app from the app folder. These unregular checks will + * take care of such situations. + * + * @since 9.1.0 + */ + public function checkForOrphanedClassNames(); + + /** + * returns a list of the admin sections + * + * @return array array of ISection[] where key is the priority + * @since 9.1.0 + */ + public function getAdminSections(); + + /** + * returns a list of the admin settings + * + * @param string $section the section id for which to load the settings + * @return array array of IAdmin[] where key is the priority + * @since 9.1.0 + */ + public function getAdminSettings($section); +} diff --git a/lib/public/Settings/ISection.php b/lib/public/Settings/ISection.php new file mode 100644 index 00000000000..5edf5de0ca4 --- /dev/null +++ b/lib/public/Settings/ISection.php @@ -0,0 +1,57 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCP\Settings; + +/** + * @since 9.1 + */ +interface ISection { + /** + * returns the ID of the section. It is supposed to be a lower case string, + * e.g. 'ldap' + * + * @returns string + * @since 9.1 + */ + public function getID(); + + /** + * returns the translated name as it should be displayed, e.g. 'LDAP / AD + * integration'. Use the L10N service to translate it. + * + * @return string + * @since 9.1 + */ + public function getName(); + + /** + * @return int whether the form should be rather on the top or bottom of + * the settings navigation. The sections are arranged in ascending order of + * the priority values. It is required to return a value between 0 and 99. + * + * E.g.: 70 + * @since 9.1 + */ + public function getPriority(); +} diff --git a/lib/public/Settings/ISettings.php b/lib/public/Settings/ISettings.php new file mode 100644 index 00000000000..611bb713b33 --- /dev/null +++ b/lib/public/Settings/ISettings.php @@ -0,0 +1,54 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCP\Settings; + +use OCP\AppFramework\Http\TemplateResponse; + +/** + * @since 9.1 + */ +interface ISettings { + + /** + * @return TemplateResponse returns the instance with all parameters set, ready to be rendered + * @since 9.1 + */ + public function getForm(); + + /** + * @return string the section ID, e.g. 'sharing' + * @since 9.1 + */ + public function getSection(); + + /** + * @return int whether the form should be rather on the top or bottom of + * the admin section. The forms are arranged in ascending order of the + * priority values. It is required to return a value between 0 and 100. + * + * E.g.: 70 + * @since 9.1 + */ + public function getPriority(); +} diff --git a/apps/systemtags/lib/AppInfo/Application.php b/lib/public/WorkflowEngine/IOperation.php index 7cd49d6424b..c75e5d940c5 100644 --- a/apps/systemtags/lib/AppInfo/Application.php +++ b/lib/public/WorkflowEngine/IOperation.php @@ -19,19 +19,21 @@ * */ -namespace OCA\SystemTags\AppInfo; - -use OCP\AppFramework\App; - -class Application extends App { - public function __construct() { - parent::__construct('systemtags'); - } +namespace OCP\WorkflowEngine; +/** + * Interface IOperation + * + * @package OCP\WorkflowEngine + * @since 9.1 + */ +interface IOperation { /** - * Register admin settings + * @param string $name + * @param array[] $checks + * @param string $operation + * @throws \UnexpectedValueException + * @since 9.1 */ - public function registerAdminPage() { - \OCP\App::registerAdmin($this->getContainer()->getAppName(), 'admin'); - } + public function validateOperation($name, array $checks, $operation); } diff --git a/ocs/routes.php b/ocs/routes.php index 0606fe3e309..3085cd9db65 100644 --- a/ocs/routes.php +++ b/ocs/routes.php @@ -29,14 +29,6 @@ use OCP\API; -// Config -API::register( - 'get', - '/config', - array('OC_OCS_Config', 'apiConfig'), - 'core', - API::GUEST_AUTH - ); // Person API::register( 'post', @@ -83,91 +75,3 @@ API::register( 'core', API::USER_AUTH ); -// cloud -API::register( - 'get', - '/cloud/capabilities', - array('OC_OCS_Cloud', 'getCapabilities'), - 'core', - API::USER_AUTH - ); -API::register( - 'get', - '/cloud/user', - array('OC_OCS_Cloud', 'getCurrentUser'), - 'core', - API::USER_AUTH -); - -// Server-to-Server Sharing -if (\OC::$server->getAppManager()->isEnabledForUser('files_sharing')) { - $federatedSharingApp = new \OCA\FederatedFileSharing\AppInfo\Application(); - $addressHandler = new \OCA\FederatedFileSharing\AddressHandler( - \OC::$server->getURLGenerator(), - \OC::$server->getL10N('federatedfilesharing') - ); - $notification = new \OCA\FederatedFileSharing\Notifications( - $addressHandler, - \OC::$server->getHTTPClientService(), - new \OCA\FederatedFileSharing\DiscoveryManager(\OC::$server->getMemCacheFactory(), \OC::$server->getHTTPClientService()), - \OC::$server->getJobList() - ); - $s2s = new OCA\FederatedFileSharing\RequestHandler( - $federatedSharingApp->getFederatedShareProvider(), - \OC::$server->getDatabaseConnection(), - \OC::$server->getShareManager(), - \OC::$server->getRequest(), - $notification, - $addressHandler, - \OC::$server->getUserManager() - ); - API::register('post', - '/cloud/shares', - array($s2s, 'createShare'), - 'files_sharing', - API::GUEST_AUTH - ); - - API::register('post', - '/cloud/shares/{id}/reshare', - array($s2s, 'reShare'), - 'files_sharing', - API::GUEST_AUTH - ); - - API::register('post', - '/cloud/shares/{id}/permissions', - array($s2s, 'updatePermissions'), - 'files_sharing', - API::GUEST_AUTH - ); - - - API::register('post', - '/cloud/shares/{id}/accept', - array($s2s, 'acceptShare'), - 'files_sharing', - API::GUEST_AUTH - ); - - API::register('post', - '/cloud/shares/{id}/decline', - array($s2s, 'declineShare'), - 'files_sharing', - API::GUEST_AUTH - ); - - API::register('post', - '/cloud/shares/{id}/unshare', - array($s2s, 'unshare'), - 'files_sharing', - API::GUEST_AUTH - ); - - API::register('post', - '/cloud/shares/{id}/revoke', - array($s2s, 'revoke'), - 'files_sharing', - API::GUEST_AUTH - ); -} diff --git a/resources/config/mimetypealiases.dist.json b/resources/config/mimetypealiases.dist.json index 8445198e32c..602f70393ae 100644 --- a/resources/config/mimetypealiases.dist.json +++ b/resources/config/mimetypealiases.dist.json @@ -1,7 +1,7 @@ { "_comment" : "Array of mimetype aliases.", - "_comment2": "Any changes you make here will be overwritten on an update of ownCloud.", - "_comment3": "Put any custom mappings in a new file mimetypealiases.json in the config/ folder of ownCloud", + "_comment2": "Any changes you make here will be overwritten on an update of Nextcloud.", + "_comment3": "Put any custom mappings in a new file mimetypealiases.json in the config/ folder of Nextcloud", "_comment4": "After any change to mimetypealiases.json run:", "_comment5": "./occ maintenance:mimetype:update-js", @@ -65,6 +65,10 @@ "application/x-font": "image", "application/x-gimp": "image", "application/x-gzip": "package/x-generic", + "application/x-iwork-keynote-sffkey": "x-office/presentation", + "application/x-iwork-numbers-sffnumbers": "x-office/spreadsheet", + "application/x-iwork-pages-sffpages": "x-office/document", + "application/x-mobipocket-ebook": "text", "application/x-perl": "text/code", "application/x-photoshop": "image", "application/x-php": "text/code", diff --git a/resources/config/mimetypemapping.dist.json b/resources/config/mimetypemapping.dist.json index 00c4e8bf12f..a49a04e43f2 100644 --- a/resources/config/mimetypemapping.dist.json +++ b/resources/config/mimetypemapping.dist.json @@ -3,8 +3,8 @@ "_comment2": "The first index in the mime type array is the assumed correct mimetype", "_comment3": "and the second (if present] is a secure alternative", - "_comment4": "Any changes you make here will be overwritten on an update of ownCloud", - "_comment5": "Put any custom mappings in a new file mimetypemapping.json in the config/ folder of ownCloud", + "_comment4": "Any changes you make here will be overwritten on an update of Nextcloud", + "_comment5": "Put any custom mappings in a new file mimetypemapping.json in the config/ folder of Nextcloud", "3gp": ["video/3gpp"], diff --git a/settings/Application.php b/settings/Application.php index 6db5e2aabf6..eceb2b6937c 100644 --- a/settings/Application.php +++ b/settings/Application.php @@ -32,6 +32,7 @@ namespace OC\Settings; use OC\Files\View; use OC\Server; +use OC\Settings\Controller\AdminSettingsController; use OC\Settings\Controller\AppSettingsController; use OC\Settings\Controller\AuthSettingsController; use OC\Settings\Controller\CertificateController; @@ -178,6 +179,14 @@ class Application extends App { $c->query('Logger') ); }); + $container->registerService('AdminSettingsController', function(IContainer $c) { + return new AdminSettingsController( + $c->query('AppName'), + $c->query('Request'), + $c->query('INavigationManager'), + $c->query('SettingsManager') + ); + }); /** * Middleware @@ -269,5 +278,14 @@ class Application extends App { $server = $c->query('ServerContainer'); return $server->getIntegrityCodeChecker(); }); + $container->registerService('EventDispatcher', function (IContainer $c) { + return $c->query('ServerContainer')->getEventDispatcher(); + }); + $container->registerService('EncryptionManager', function (IContainer $c) { + return $c->query('ServerContainer')->getEncryptionManager(); + }); + $container->registerService('SettingsManager', function (IContainer $c) { + return $c->query('ServerContainer')->getSettingsManager(); + }); } } diff --git a/settings/ChangePassword/Controller.php b/settings/ChangePassword/Controller.php deleted file mode 100644 index 496b2f8208c..00000000000 --- a/settings/ChangePassword/Controller.php +++ /dev/null @@ -1,173 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Arthur Schiwon <blizzz@arthur-schiwon.de> - * @author Bjoern Schiessle <bjoern@schiessle.org> - * @author Björn Schießle <bjoern@schiessle.org> - * @author Christopher Schäpers <kondou@ts.unde.re> - * @author Clark Tomlinson <fallen013@gmail.com> - * @author cmeh <cmeh@users.noreply.github.com> - * @author Florin Peter <github@florin-peter.de> - * @author Jakob Sack <mail@jakobsack.de> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Robin Appelman <robin@icewind.nl> - * @author Sam Tuke <mail@samtuke.com> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ -namespace OC\Settings\ChangePassword; - -use OC\HintException; - -class Controller { - public static function changePersonalPassword($args) { - // Check if we are an user - \OC_JSON::callCheck(); - \OC_JSON::checkLoggedIn(); - - $username = \OC_User::getUser(); - $password = isset($_POST['personal-password']) ? $_POST['personal-password'] : null; - $oldPassword = isset($_POST['oldpassword']) ? $_POST['oldpassword'] : ''; - $l = new \OC_L10n('settings'); - - if (!\OC_User::checkPassword($username, $oldPassword)) { - \OC_JSON::error(array("data" => array("message" => $l->t("Wrong password")) )); - exit(); - } - - try { - if (!is_null($password) && \OC_User::setPassword($username, $password)) { - \OC::$server->getUserSession()->updateSessionTokenPassword($password); - \OC_JSON::success(['data' => ['message' => $l->t('Saved')]]); - } else { - \OC_JSON::error(); - } - } catch (HintException $e) { - \OC_JSON::error(['data' => ['message' => $e->getHint()]]); - } - } - - public static function changeUserPassword($args) { - // Check if we are an user - \OC_JSON::callCheck(); - \OC_JSON::checkLoggedIn(); - - $l = new \OC_L10n('settings'); - if (isset($_POST['username'])) { - $username = $_POST['username']; - } else { - \OC_JSON::error(array('data' => array('message' => $l->t('No user supplied')) )); - exit(); - } - - $password = isset($_POST['password']) ? $_POST['password'] : null; - $recoveryPassword = isset($_POST['recoveryPassword']) ? $_POST['recoveryPassword'] : null; - - $isUserAccessible = false; - $currentUserObject = \OC::$server->getUserSession()->getUser(); - $targetUserObject = \OC::$server->getUserManager()->get($username); - if($currentUserObject !== null && $targetUserObject !== null) { - $isUserAccessible = \OC::$server->getGroupManager()->getSubAdmin()->isUserAccessible($currentUserObject, $targetUserObject); - } - - if (\OC_User::isAdminUser(\OC_User::getUser())) { - $userstatus = 'admin'; - } elseif ($isUserAccessible) { - $userstatus = 'subadmin'; - } else { - \OC_JSON::error(array('data' => array('message' => $l->t('Authentication error')) )); - exit(); - } - - if (\OC_App::isEnabled('encryption')) { - //handle the recovery case - $crypt = new \OCA\Encryption\Crypto\Crypt( - \OC::$server->getLogger(), - \OC::$server->getUserSession(), - \OC::$server->getConfig(), - \OC::$server->getL10N('encryption')); - $keyStorage = \OC::$server->getEncryptionKeyStorage(); - $util = new \OCA\Encryption\Util( - new \OC\Files\View(), - $crypt, - \OC::$server->getLogger(), - \OC::$server->getUserSession(), - \OC::$server->getConfig(), - \OC::$server->getUserManager()); - $keyManager = new \OCA\Encryption\KeyManager( - $keyStorage, - $crypt, - \OC::$server->getConfig(), - \OC::$server->getUserSession(), - new \OCA\Encryption\Session(\OC::$server->getSession()), - \OC::$server->getLogger(), - $util); - $recovery = new \OCA\Encryption\Recovery( - \OC::$server->getUserSession(), - $crypt, - \OC::$server->getSecureRandom(), - $keyManager, - \OC::$server->getConfig(), - $keyStorage, - \OC::$server->getEncryptionFilesHelper(), - new \OC\Files\View()); - $recoveryAdminEnabled = $recovery->isRecoveryKeyEnabled(); - - $validRecoveryPassword = false; - $recoveryEnabledForUser = false; - if ($recoveryAdminEnabled) { - $validRecoveryPassword = $keyManager->checkRecoveryPassword($recoveryPassword); - $recoveryEnabledForUser = $recovery->isRecoveryEnabledForUser($username); - } - - if ($recoveryEnabledForUser && $recoveryPassword === '') { - \OC_JSON::error(array('data' => array( - 'message' => $l->t('Please provide an admin recovery password, otherwise all user data will be lost') - ))); - } elseif ($recoveryEnabledForUser && ! $validRecoveryPassword) { - \OC_JSON::error(array('data' => array( - 'message' => $l->t('Wrong admin recovery password. Please check the password and try again.') - ))); - } else { // now we know that everything is fine regarding the recovery password, let's try to change the password - $result = \OC_User::setPassword($username, $password, $recoveryPassword); - if (!$result && $recoveryEnabledForUser) { - \OC_JSON::error(array( - "data" => array( - "message" => $l->t("Backend doesn't support password change, but the user's encryption key was successfully updated.") - ) - )); - } elseif (!$result && !$recoveryEnabledForUser) { - \OC_JSON::error(array("data" => array( "message" => $l->t("Unable to change password" ) ))); - } else { - \OC_JSON::success(array("data" => array( "username" => $username ))); - } - - } - } else { // if encryption is disabled, proceed - try { - if (!is_null($password) && \OC_User::setPassword($username, $password)) { - \OC_JSON::success(array('data' => array('username' => $username))); - } else { - \OC_JSON::error(array('data' => array('message' => $l->t('Unable to change password')))); - } - } catch (HintException $e) { - \OC_JSON::error(array('data' => array('message' => $e->getHint()))); - } - } - } -} diff --git a/settings/Controller/AdminSettingsController.php b/settings/Controller/AdminSettingsController.php new file mode 100644 index 00000000000..ef70caf5690 --- /dev/null +++ b/settings/Controller/AdminSettingsController.php @@ -0,0 +1,148 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * @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 OC\Settings\Controller; + +use OCP\AppFramework\Controller; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\INavigationManager; +use OCP\IRequest; +use OCP\Settings\IManager as ISettingsManager; +use OCP\Template; + +/** + * @package OC\Settings\Controller + */ +class AdminSettingsController extends Controller { + /** @var INavigationManager */ + private $navigationManager; + /** @var ISettingsManager */ + private $settingsManager; + + /** + * @param string $appName + * @param IRequest $request + * @param INavigationManager $navigationManager + * @param ISettingsManager $settingsManager + */ + public function __construct( + $appName, + IRequest $request, + INavigationManager $navigationManager, + ISettingsManager $settingsManager + ) { + parent::__construct($appName, $request); + $this->navigationManager = $navigationManager; + $this->settingsManager = $settingsManager; + } + + /** + * @param string $section + * @return TemplateResponse + * + * @NoCSRFRequired + */ + public function index($section) { + $this->navigationManager->setActiveEntry('admin'); + + $templateParams = []; + $templateParams = array_merge($templateParams, $this->getNavigationParameters($section)); + $templateParams = array_merge($templateParams, $this->getSettings($section)); + + return new TemplateResponse('settings', 'admin/frame', $templateParams); + } + + /** + * @param string $section + * @return array + */ + private function getSettings($section) { + $html = ''; + $settings = $this->settingsManager->getAdminSettings($section); + foreach ($settings as $prioritizedSettings) { + foreach ($prioritizedSettings as $setting) { + /** @var \OCP\Settings\ISettings $setting */ + $form = $setting->getForm(); + $html .= $form->renderAs('')->render(); + } + } + if($section === 'additional') { + $html .= $this->getLegacyForms(); + } + return ['content' => $html]; + } + + /** + * @return bool|string + */ + private function getLegacyForms() { + $forms = \OC_App::getForms('admin'); + + $forms = 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); + + return array( + 'anchor' => $anchor, + 'section-name' => $sectionName, + 'form' => $form + ); + } + return array( + 'form' => $form + ); + }, $forms); + + $out = new Template('settings', 'admin/additional'); + $out->assign('forms', $forms); + + return $out->fetchPage(); + } + + /** + * @param string $currentSection + * @return array + */ + private function getNavigationParameters($currentSection) { + $sections = $this->settingsManager->getAdminSections(); + $templateParameters = []; + /** @var \OC\Settings\Section[] $prioritizedSections */ + foreach($sections as $prioritizedSections) { + foreach ($prioritizedSections as $section) { + $templateParameters[] = [ + 'anchor' => $section->getID(), + 'section-name' => $section->getName(), + 'active' => $section->getID() === $currentSection, + ]; + } + } + + return [ + 'forms' => $templateParameters + ]; + } +} diff --git a/settings/Controller/CertificateController.php b/settings/Controller/CertificateController.php index 4a527036a7f..1cf9e03effb 100644 --- a/settings/Controller/CertificateController.php +++ b/settings/Controller/CertificateController.php @@ -82,14 +82,10 @@ class CertificateController extends Controller { * Add a new root certificate to a trust store * * @param ICertificateManager $certificateManager - * @return array + * @return DataResponse */ private function addCertificate(ICertificateManager $certificateManager) { $headers = []; - if ($this->request->isUserAgent([\OC\AppFramework\Http\Request::USER_AGENT_IE_8])) { - // due to upload iframe workaround, need to set content-type to text/plain - $headers['Content-Type'] = 'text/plain'; - } if ($this->isCertificateImportAllowed() === false) { return new DataResponse(['message' => 'Individual certificate management disabled'], Http::STATUS_FORBIDDEN, $headers); diff --git a/settings/Controller/ChangePasswordController.php b/settings/Controller/ChangePasswordController.php new file mode 100644 index 00000000000..df170b62f1a --- /dev/null +++ b/settings/Controller/ChangePasswordController.php @@ -0,0 +1,264 @@ +<?php +/** + * + * @author Roeland Jago Douma <roeland@famdouma.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 OC\Settings\Controller; + +use OC\HintException; +use OCP\App\IAppManager; +use OCP\AppFramework\Controller; +use OCP\AppFramework\Http\JSONResponse; +use OCP\IGroupManager; +use OCP\IL10N; +use OCP\IRequest; +use OCP\IUser; +use OCP\IUserManager; +use OCP\IUserSession; + +class ChangePasswordController extends Controller { + + /** @var string */ + private $userId; + + /** @var IUserManager */ + private $userManager; + + /** @var IL10N */ + private $l; + + /** @var IGroupManager */ + private $groupManager; + + /** @var IUserSession */ + private $userSession; + + /** @var IAppManager */ + private $appManager; + + /** + * ChangePasswordController constructor. + * + * @param string $appName + * @param IRequest $request + * @param $userId + * @param IUserManager $userManager + * @param IUserSession $userSession + * @param IGroupManager $groupManager + * @param IAppManager $appManager + * @param IL10N $l + */ + public function __construct($appName, + IRequest $request, + $userId, + IUserManager $userManager, + IUserSession $userSession, + IGroupManager $groupManager, + IAppManager $appManager, + IL10N $l) { + parent::__construct($appName, $request); + + $this->userId = $userId; + $this->userManager = $userManager; + $this->userSession = $userSession; + $this->groupManager = $groupManager; + $this->appManager = $appManager; + $this->l = $l; + } + + /** + * @NoAdminRequired + * + * @param string $oldpassword + * @param string $newpassword + * + * @return JSONResponse + */ + public function changePersonalPassword($oldpassword = '', $newpassword = null) { + $user = $this->userManager->checkPassword($this->userId, $oldpassword); + if ($user === false) { + return new JSONResponse([ + 'status' => 'error', + 'data' => [ + 'message' => $this->l->t('Wrong password'), + ], + ]); + } + + /** @var IUser $user */ + if ($newpassword === null || $user->setPassword($newpassword) === false) { + return new JSONResponse([ + 'status' => 'error' + ]); + } + + $this->userSession->updateSessionTokenPassword($newpassword); + + return new JSONResponse([ + 'status' => 'success', + 'data' => [ + 'message' => $this->l->t('Saved'), + ], + ]); + } + + /** + * @NoAdminRequired + * + * @param string $username + * @param string $password + * @param string $recoveryPassword + * + * @return JSONResponse + */ + public function changeUserPassword($username = null, $password = null, $recoveryPassword = null) { + if ($username === null) { + return new JSONResponse([ + 'status' => 'error', + 'data' => [ + 'message' => $this->l->t('No user supplied'), + ], + ]); + } + + if ($password === null) { + return new JSONResponse([ + 'status' => 'error', + 'data' => [ + 'message' => $this->l->t('Unable to change password'), + ], + ]); + } + + $currentUser = $this->userSession->getUser(); + $targetUser = $this->userManager->get($username); + if ($currentUser === null || $targetUser === null || + !($this->groupManager->isAdmin($this->userId) || + $this->groupManager->getSubAdmin()->isUserAccessible($currentUser, $targetUser)) + ) { + return new JSONResponse([ + 'status' => 'error', + 'data' => [ + 'message' => $this->l->t('Authentication error'), + ], + ]); + } + + if ($this->appManager->isEnabledForUser('encryption')) { + //handle the recovery case + $crypt = new \OCA\Encryption\Crypto\Crypt( + \OC::$server->getLogger(), + \OC::$server->getUserSession(), + \OC::$server->getConfig(), + \OC::$server->getL10N('encryption')); + $keyStorage = \OC::$server->getEncryptionKeyStorage(); + $util = new \OCA\Encryption\Util( + new \OC\Files\View(), + $crypt, + \OC::$server->getLogger(), + \OC::$server->getUserSession(), + \OC::$server->getConfig(), + \OC::$server->getUserManager()); + $keyManager = new \OCA\Encryption\KeyManager( + $keyStorage, + $crypt, + \OC::$server->getConfig(), + \OC::$server->getUserSession(), + new \OCA\Encryption\Session(\OC::$server->getSession()), + \OC::$server->getLogger(), + $util); + $recovery = new \OCA\Encryption\Recovery( + \OC::$server->getUserSession(), + $crypt, + \OC::$server->getSecureRandom(), + $keyManager, + \OC::$server->getConfig(), + $keyStorage, + \OC::$server->getEncryptionFilesHelper(), + new \OC\Files\View()); + $recoveryAdminEnabled = $recovery->isRecoveryKeyEnabled(); + + $validRecoveryPassword = false; + $recoveryEnabledForUser = false; + if ($recoveryAdminEnabled) { + $validRecoveryPassword = $keyManager->checkRecoveryPassword($recoveryPassword); + $recoveryEnabledForUser = $recovery->isRecoveryEnabledForUser($username); + } + + if ($recoveryEnabledForUser && $recoveryPassword === '') { + return new JSONResponse([ + 'status' => 'error', + 'data' => [ + 'message' => $this->l->t('Please provide an admin recovery password, otherwise all user data will be lost'), + ] + ]); + } elseif ($recoveryEnabledForUser && ! $validRecoveryPassword) { + return new JSONResponse([ + 'status' => 'error', + 'data' => [ + 'message' => $this->l->t('Wrong admin recovery password. Please check the password and try again.'), + ] + ]); + } else { // now we know that everything is fine regarding the recovery password, let's try to change the password + $result = $targetUser->setPassword($password, $recoveryPassword); + if (!$result && $recoveryEnabledForUser) { + return new JSONResponse([ + 'status' => 'error', + 'data' => [ + 'message' => $this->l->t('Backend doesn\'t support password change, but the user\'s encryption key was successfully updated.'), + ] + ]); + } elseif (!$result && !$recoveryEnabledForUser) { + return new JSONResponse([ + 'status' => 'error', + 'data' => [ + 'message' => $this->l->t('Unable to change password'), + ] + ]); + } + } + } else { + try { + if ($targetUser->setPassword($password) === false) { + return new JSONResponse([ + 'status' => 'error', + 'data' => [ + 'message' => $this->l->t('Unable to change password'), + ], + ]); + } + // password policy app throws exception + } catch(HintException $e) { + return new JSONResponse([ + 'status' => 'error', + 'data' => [ + 'message' => $e->getHint(), + ], + ]); + } + } + + return new JSONResponse([ + 'status' => 'success', + 'data' => [ + 'username' => $username, + ], + ]); + } +} diff --git a/settings/Controller/CheckSetupController.php b/settings/Controller/CheckSetupController.php index 13e7e443621..3881952872f 100644 --- a/settings/Controller/CheckSetupController.php +++ b/settings/Controller/CheckSetupController.php @@ -234,20 +234,26 @@ class CheckSetupController extends Controller { } /** + * Whether the version is outdated + * + * @return bool + */ + protected function isPhpOutdated() { + if (version_compare(PHP_VERSION, '5.5.0') === -1) { + return true; + } + + return false; + } + + /** * Whether the php version is still supported (at time of release) * according to: https://secure.php.net/supported-versions.php * * @return array */ private function isPhpSupported() { - $eol = false; - - //PHP 5.4 is EOL on 14 Sep 2015 - if (version_compare(PHP_VERSION, '5.5.0') === -1) { - $eol = true; - } - - return ['eol' => $eol, 'version' => PHP_VERSION]; + return ['eol' => $this->isPhpOutdated(), 'version' => PHP_VERSION]; } /** @@ -290,7 +296,7 @@ class CheckSetupController extends Controller { public function rescanFailedIntegrityCheck() { $this->checker->runInstanceVerification(); return new RedirectResponse( - $this->urlGenerator->linkToRoute('settings_admin') + $this->urlGenerator->linkToRoute('settings.AdminSettings.index') ); } diff --git a/settings/admin.php b/settings/admin.php deleted file mode 100644 index a458c813c11..00000000000 --- a/settings/admin.php +++ /dev/null @@ -1,272 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Bart Visscher <bartv@thisnet.nl> - * @author Björn Schießle <bjoern@schiessle.org> - * @author Georg Ehrke <georg@owncloud.com> - * @author Jan-Christoph Borchardt <hey@jancborchardt.net> - * @author Joas Schilling <coding@schilljs.com> - * @author Lukas Reschke <lukas@statuscode.ch> - * @author Martin Mattel <martin.mattel@diemattels.at> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin Appelman <robin@icewind.nl> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Thomas Müller <thomas.mueller@tmit.eu> - * @author Vincent Petry <pvince81@owncloud.com> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * - */ - -use OC\Lock\NoopLockingProvider; - -OC_Util::checkAdminUser(); -\OC::$server->getNavigationManager()->setActiveEntry("admin"); - -$template = new OC_Template('settings', 'admin', 'user'); -$l = \OC::$server->getL10N('settings'); - -OC_Util::addScript('settings', 'certificates'); -OC_Util::addScript('files', 'jquery.fileupload'); - -\OC::$server->getEventDispatcher()->dispatch('OC\Settings\Admin::loadAdditionalScripts'); - -$logType = \OC::$server->getConfig()->getSystemValue('log_type', 'file'); -$showLog = ($logType === 'file' || $logType === 'owncloud'); -$numEntriesToLoad = 3; -$entries = \OC\Log\File::getEntries($numEntriesToLoad + 1); -$entriesRemaining = count($entries) > $numEntriesToLoad; -$entries = array_slice($entries, 0, $numEntriesToLoad); -$logFilePath = \OC\Log\File::getLogFilePath(); -$doesLogFileExist = file_exists($logFilePath); -$logFileSize = 0; -if($doesLogFileExist) { - $logFileSize = filesize($logFilePath); -} - -$config = \OC::$server->getConfig(); -$appConfig = \OC::$server->getAppConfig(); -$request = \OC::$server->getRequest(); -$certificateManager = \OC::$server->getCertificateManager(null); -$urlGenerator = \OC::$server->getURLGenerator(); - -// Should we display sendmail as an option? -$template->assign('sendmail_is_available', (bool) \OC_Helper::findBinaryPath('sendmail')); - -$template->assign('loglevel', $config->getSystemValue("loglevel", 2)); -$template->assign('mail_domain', $config->getSystemValue("mail_domain", '')); -$template->assign('mail_from_address', $config->getSystemValue("mail_from_address", '')); -$template->assign('mail_smtpmode', $config->getSystemValue("mail_smtpmode", '')); -$template->assign('mail_smtpsecure', $config->getSystemValue("mail_smtpsecure", '')); -$template->assign('mail_smtphost', $config->getSystemValue("mail_smtphost", '')); -$template->assign('mail_smtpport', $config->getSystemValue("mail_smtpport", '')); -$template->assign('mail_smtpauthtype', $config->getSystemValue("mail_smtpauthtype", '')); -$template->assign('mail_smtpauth', $config->getSystemValue("mail_smtpauth", false)); -$template->assign('mail_smtpname', $config->getSystemValue("mail_smtpname", '')); -$template->assign('mail_smtppassword', $config->getSystemValue("mail_smtppassword", '')); -$template->assign('entries', $entries); -$template->assign('entriesremain', $entriesRemaining); -$template->assign('logFileSize', $logFileSize); -$template->assign('doesLogFileExist', $doesLogFileExist); -$template->assign('showLog', $showLog); -$template->assign('readOnlyConfigEnabled', OC_Helper::isReadOnlyConfigEnabled()); -$template->assign('isLocaleWorking', OC_Util::isSetLocaleWorking()); -$template->assign('isAnnotationsWorking', OC_Util::isAnnotationsWorking()); -$template->assign('checkForWorkingWellKnownSetup', $config->getSystemValue('check_for_working_wellknown_setup', true)); -$template->assign('has_fileinfo', OC_Util::fileInfoLoaded()); -$template->assign('backgroundjobs_mode', $appConfig->getValue('core', 'backgroundjobs_mode', 'ajax')); -$template->assign('cron_log', $config->getSystemValue('cron_log', true)); -$template->assign('lastcron', $appConfig->getValue('core', 'lastcron', false)); -$template->assign('shareAPIEnabled', $appConfig->getValue('core', 'shareapi_enabled', 'yes')); -$template->assign('shareDefaultExpireDateSet', $appConfig->getValue('core', 'shareapi_default_expire_date', 'no')); -$template->assign('shareExpireAfterNDays', $appConfig->getValue('core', 'shareapi_expire_after_n_days', '7')); -$template->assign('shareEnforceExpireDate', $appConfig->getValue('core', 'shareapi_enforce_expire_date', 'no')); -$excludeGroups = $appConfig->getValue('core', 'shareapi_exclude_groups', 'no') === 'yes' ? true : false; -$template->assign('shareExcludeGroups', $excludeGroups); -$excludedGroupsList = $appConfig->getValue('core', 'shareapi_exclude_groups_list', ''); -$excludedGroupsList = json_decode($excludedGroupsList); -$template->assign('shareExcludedGroupsList', !is_null($excludedGroupsList) ? implode('|', $excludedGroupsList) : ''); -$template->assign('encryptionEnabled', \OC::$server->getEncryptionManager()->isEnabled()); -$backends = \OC::$server->getUserManager()->getBackends(); -$externalBackends = (count($backends) > 1) ? true : false; -$template->assign('encryptionReady', \OC::$server->getEncryptionManager()->isReady()); -$template->assign('externalBackendsEnabled', $externalBackends); - -/** @var \Doctrine\DBAL\Connection $connection */ -$connection = \OC::$server->getDatabaseConnection(); -try { - if ($connection->getDatabasePlatform() instanceof \Doctrine\DBAL\Platforms\SqlitePlatform) { - $template->assign('invalidTransactionIsolationLevel', false); - } else { - $template->assign('invalidTransactionIsolationLevel', $connection->getTransactionIsolation() !== \Doctrine\DBAL\Connection::TRANSACTION_READ_COMMITTED); - } -} catch (\Doctrine\DBAL\DBALException $e) { - // ignore - $template->assign('invalidTransactionIsolationLevel', false); -} - -$encryptionModules = \OC::$server->getEncryptionManager()->getEncryptionModules(); -$defaultEncryptionModuleId = \OC::$server->getEncryptionManager()->getDefaultEncryptionModuleId(); - -$encModulues = array(); -foreach ($encryptionModules as $module) { - $encModulues[$module['id']]['displayName'] = $module['displayName']; - $encModulues[$module['id']]['default'] = false; - if ($module['id'] === $defaultEncryptionModuleId) { - $encModulues[$module['id']]['default'] = true; - } -} -$template->assign('encryptionModules', $encModulues); - -// If the current web root is non-empty but the web root from the config is, -// and system cron is used, the URL generator fails to build valid URLs. -$shouldSuggestOverwriteCliUrl = $config->getAppValue('core', 'backgroundjobs_mode', 'ajax') === 'cron' && - \OC::$WEBROOT && \OC::$WEBROOT !== '/' && - !$config->getSystemValue('overwrite.cli.url', ''); -$suggestedOverwriteCliUrl = ($shouldSuggestOverwriteCliUrl) ? \OC::$WEBROOT : ''; -$template->assign('suggestedOverwriteCliUrl', $suggestedOverwriteCliUrl); - -$template->assign('allowLinks', $appConfig->getValue('core', 'shareapi_allow_links', 'yes')); -$template->assign('enforceLinkPassword', \OCP\Util::isPublicLinkPasswordRequired()); -$template->assign('allowPublicUpload', $appConfig->getValue('core', 'shareapi_allow_public_upload', 'yes')); -$template->assign('allowResharing', $appConfig->getValue('core', 'shareapi_allow_resharing', 'yes')); -$template->assign('allowPublicMailNotification', $appConfig->getValue('core', 'shareapi_allow_public_notification', 'no')); -$template->assign('allowMailNotification', $appConfig->getValue('core', 'shareapi_allow_mail_notification', 'no')); -$template->assign('allowShareDialogUserEnumeration', $appConfig->getValue('core', 'shareapi_allow_share_dialog_user_enumeration', 'yes')); -$template->assign('onlyShareWithGroupMembers', \OC\Share\Share::shareWithGroupMembersOnly()); -$template->assign('allowGroupSharing', $appConfig->getValue('core', 'shareapi_allow_group_sharing', 'yes')); -$databaseOverload = (strpos(\OCP\Config::getSystemValue('dbtype'), 'sqlite') !== false); -$template->assign('databaseOverload', $databaseOverload); -$template->assign('cronErrors', $appConfig->getValue('core', 'cronErrors')); - -// warn if php is not setup properly to get system variables with getenv -$path = getenv('PATH'); -$template->assign('getenvServerNotWorking', empty($path)); - -// warn if outdated version of a memcache module is used -$caches = [ - 'apcu' => ['name' => $l->t('APCu'), 'version' => '4.0.6'], - 'redis' => ['name' => $l->t('Redis'), 'version' => '2.2.5'], -]; - -$outdatedCaches = []; -foreach ($caches as $php_module => $data) { - $isOutdated = extension_loaded($php_module) && version_compare(phpversion($php_module), $data['version'], '<'); - if ($isOutdated) { - $outdatedCaches[$php_module] = $data; - } -} -$template->assign('OutdatedCacheWarning', $outdatedCaches); - -// add hardcoded forms from the template -$forms = OC_App::getForms('admin'); - -if ($config->getSystemValue('enable_certificate_management', false)) { - $certificatesTemplate = new OC_Template('settings', 'certificates'); - $certificatesTemplate->assign('type', 'admin'); - $certificatesTemplate->assign('uploadRoute', 'settings.Certificate.addSystemRootCertificate'); - $certificatesTemplate->assign('certs', $certificateManager->listCertificates()); - $certificatesTemplate->assign('urlGenerator', $urlGenerator); - $forms[] = $certificatesTemplate->fetchPage(); -} - -$formsAndMore = array(); -if ($request->getServerProtocol() !== 'https' || !OC_Util::isAnnotationsWorking() || - $suggestedOverwriteCliUrl || !OC_Util::isSetLocaleWorking() || - !OC_Util::fileInfoLoaded() || $databaseOverload -) { - $formsAndMore[] = array('anchor' => 'security-warning', 'section-name' => $l->t('Security & setup warnings')); -} -$formsAndMore[] = array('anchor' => 'shareAPI', 'section-name' => $l->t('Sharing')); -$formsAndMore[] = ['anchor' => 'encryptionAPI', 'section-name' => $l->t('Server-side encryption')]; - -// Prioritize fileSharingSettings and files_external and move updater to the version -$fileSharingSettings = $filesExternal = $updaterAppPanel = $ocDefaultEncryptionModulePanel = ''; -foreach ($forms as $index => $form) { - if (strpos($form, 'id="fileSharingSettings"')) { - $fileSharingSettings = $form; - unset($forms[$index]); - continue; - } - if (strpos($form, 'id="files_external"')) { - $filesExternal = $form; - unset($forms[$index]); - continue; - } - if (strpos($form, 'class="updater-admin"')) { - $updaterAppPanel = $form; - unset($forms[$index]); - continue; - } - if (strpos($form, 'id="ocDefaultEncryptionModule"')) { - $ocDefaultEncryptionModulePanel = $form; - unset($forms[$index]); - continue; - } -} -if ($filesExternal) { - $formsAndMore[] = array('anchor' => 'files_external', 'section-name' => $l->t('External Storage')); -} - -$template->assign('fileSharingSettings', $fileSharingSettings); -$template->assign('filesExternal', $filesExternal); -$template->assign('updaterAppPanel', $updaterAppPanel); -$template->assign('ocDefaultEncryptionModulePanel', $ocDefaultEncryptionModulePanel); -$lockingProvider = \OC::$server->getLockingProvider(); -if ($lockingProvider instanceof NoopLockingProvider) { - $template->assign('fileLockingType', 'none'); -} else if ($lockingProvider instanceof \OC\Lock\DBLockingProvider) { - $template->assign('fileLockingType', 'db'); -} else { - $template->assign('fileLockingType', 'cache'); -} - -$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); - - return array( - 'anchor' => $anchor, - 'section-name' => $sectionName, - 'form' => $form - ); - } - return array( - 'form' => $form - ); -}, $forms); - -$formsAndMore = array_merge($formsAndMore, $formsMap); - -// add bottom hardcoded forms from the template -$formsAndMore[] = ['anchor' => 'backgroundjobs', 'section-name' => $l->t('Cron')]; -$formsAndMore[] = ['anchor' => 'mail_general_settings', 'section-name' => $l->t('Email server')]; -$formsAndMore[] = ['anchor' => 'log-section', 'section-name' => $l->t('Log')]; -$formsAndMore[] = ['anchor' => 'admin-tips', 'section-name' => $l->t('Tips & tricks')]; -if ($updaterAppPanel) { - $formsAndMore[] = ['anchor' => 'updater', 'section-name' => $l->t('Updates')]; -} - -$template->assign('forms', $formsAndMore); - -$template->printPage(); - -$util = new \OC_Util(); -$util->createHtaccessTestFile(\OC::$server->getConfig()); - diff --git a/settings/css/settings.css b/settings/css/settings.css index fe586205bdf..6ed707f7c45 100644 --- a/settings/css/settings.css +++ b/settings/css/settings.css @@ -145,11 +145,30 @@ table.nostyle td { padding: 0.2em 0; } .app-password-row { display: table-row; } + +.app-password-row .icon { + background-size: 16px 16px; + display: inline-block; + position: relative; + top: 3px; + margin-left: 5px; + margin-right: 8px; +} + .app-password-label { display: table-cell; padding-right: 1em; } +.social-button { + padding-left: 0; + margin-left: -10px +} +.social-button img { + padding: 10px; +} + + /* USERS */ #newgroup-init a span { margin-left: 20px; } #newgroup-init a span:before { @@ -248,6 +267,15 @@ span.usersLastLoginTooltip { white-space: nowrap; } top: 3px; } +#newuser .groups { + display: inline; +} + +#newuser .groupsListContainer.hidden, +#userlist .groupsListContainer.hidden { + 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 { @@ -362,21 +390,20 @@ span.version { .section h2.app-name { margin-bottom: 8px; } +.followupsection { + display: block; + padding: 0 30px 30px 30px; + color: #555; + margin-bottom: 24px; + margin-top: -30px; + position: relative; +} .app-image { float: left; padding-right: 10px; width: 80px; height: 80px; -} -.app-image img { - max-width: 80px; - max-height: 80px; -} -.app-image-icon img { - background-color: #ccc; - width: 60px; - padding: 10px; - border-radius: 3px; + opacity: 0.8; } .app-name, .app-version, diff --git a/settings/js/apps.js b/settings/js/apps.js index 66c097e1257..99246f323fe 100644 --- a/settings/js/apps.js +++ b/settings/js/apps.js @@ -199,7 +199,7 @@ OC.Settings.Apps = OC.Settings.Apps || { currentImage.onload = function() { page.find('.app-image') - .append(this) + .append(OC.Settings.Apps.imageUrl(app.preview, app.detailpage)) .fadeIn(); }; } @@ -226,6 +226,23 @@ OC.Settings.Apps = OC.Settings.Apps || { } }, + /** + * Returns the image for apps listing + * url : the url of the image + * appfromstore: bool to check whether the app is fetched from store or not. + */ + + imageUrl : function (url, appfromstore) { + var img = '<svg width="72" height="72" viewBox="0 0 72 72">'; + + if (appfromstore) { + img += '<image x="0" y="0" width="72" height="72" preserveAspectRatio="xMinYMin meet" xlink:href="' + url + '?v=' + oc_config.version + '" class="app-icon" /></svg>'; + } else { + img += '<image x="0" y="0" width="72" height="72" preserveAspectRatio="xMinYMin meet" filter="url(#invertIcon)" xlink:href="' + url + '?v=' + oc_config.version + '" class="app-icon"></image></svg>'; + } + return img; + }, + isType: function(app, type){ return app.types && app.types.indexOf(type) !== -1; }, diff --git a/settings/js/authtoken_view.js b/settings/js/authtoken_view.js index 354173341bc..6eb04b63f20 100644 --- a/settings/js/authtoken_view.js +++ b/settings/js/authtoken_view.js @@ -183,6 +183,8 @@ _newAppPassword: undefined, + _newAppId: undefined, + _hideAppPasswordBtn: undefined, _addingToken: false, @@ -216,6 +218,38 @@ this._newAppPassword.on('focus', _.bind(this._onNewTokenFocus, this)); this._hideAppPasswordBtn = $('#app-password-hide'); this._hideAppPasswordBtn.click(_.bind(this._hideToken, this)); + + // Clipboard! + var clipboard = new Clipboard('.clipboardButton'); + clipboard.on('success', function(e) { + var $input = $(e.trigger); + $input.tooltip({placement: 'bottom', trigger: 'manual', title: t('core', 'Copied!')}); + $input.tooltip('show'); + _.delay(function() { + $input.tooltip('hide'); + }, 3000); + }); + clipboard.on('error', function (e) { + var $input = $(e.trigger); + var actionMsg = ''; + if (/iPhone|iPad/i.test(navigator.userAgent)) { + actionMsg = t('core', 'Not supported!'); + } else if (/Mac/i.test(navigator.userAgent)) { + actionMsg = t('core', 'Press ⌘-C to copy.'); + } else { + actionMsg = t('core', 'Press Ctrl-C to copy.'); + } + + $input.tooltip({ + placement: 'bottom', + trigger: 'manual', + title: actionMsg + }); + $input.tooltip('show'); + _.delay(function () { + $input.tooltip('hide'); + }, 3000); + }); }, render: function () { @@ -255,10 +289,13 @@ }); $.when(creatingToken).done(function (resp) { + // We can delete token we add + resp.deviceToken.canDelete = true; _this.collection.add(resp.deviceToken); _this.render(); _this._newAppLoginName.val(resp.loginName); _this._newAppPassword.val(resp.token); + _this._newAppId = resp.deviceToken.id; _this._toggleFormResult(false); _this._newAppPassword.select(); _this._tokenName.val(''); @@ -293,6 +330,10 @@ var $row = $target.closest('tr'); var id = $row.data('id'); + if (id === this._newAppId) { + this._toggleFormResult(true); + } + var token = this.collection.get(id); if (_.isUndefined(token)) { // Ignore event @@ -313,8 +354,13 @@ }, _toggleFormResult: function (showForm) { - this._form.toggleClass('hidden', !showForm); - this._result.toggleClass('hidden', showForm); + if (showForm) { + this._result.slideUp(); + this._form.slideDown(); + } else { + this._form.slideUp(); + this._result.slideDown(); + } } }); diff --git a/settings/js/users/deleteHandler.js b/settings/js/users/deleteHandler.js index a66e8b07a72..4f8d6eea9a7 100644 --- a/settings/js/users/deleteHandler.js +++ b/settings/js/users/deleteHandler.js @@ -17,6 +17,9 @@ * @param {removeCallback} removeCallback the function to be called after * successful delete. */ + +/* globals escapeHTML */ + function DeleteHandler(endpoint, paramID, markCallback, removeCallback) { this.oidToDelete = false; this.canceled = false; diff --git a/settings/js/users/groups.js b/settings/js/users/groups.js index 36ebbd2fa6e..8f4d95432a8 100644 --- a/settings/js/users/groups.js +++ b/settings/js/users/groups.js @@ -5,6 +5,8 @@ * See the COPYING-README file. */ +/* globals escapeHTML, UserList, DeleteHandler */ + var $userGroupList, $sortGroupBy; @@ -136,10 +138,6 @@ GroupList = { var addedGroup = result.groupname; UserList.availableGroups = $.unique($.merge(UserList.availableGroups, [addedGroup])); GroupList.addGroup(result.groupname); - - $('.groupsselect, .subadminsselect') - .append($('<option>', { value: result.groupname }) - .text(result.groupname)); } GroupList.toggleAddGroup(); }).fail(function(result) { @@ -269,7 +267,7 @@ GroupList = { }, initDeleteHandling: function () { //set up handler - GroupDeleteHandler = new DeleteHandler('/settings/users/groups', 'groupname', + var GroupDeleteHandler = new DeleteHandler('/settings/users/groups', 'groupname', GroupList.hide, GroupList.remove); //configure undo diff --git a/settings/js/users/users.js b/settings/js/users/users.js index 46c67fb8313..f24bf82209b 100644 --- a/settings/js/users/users.js +++ b/settings/js/users/users.js @@ -6,6 +6,8 @@ * See the COPYING-README file. */ +/* globals escapeHTML, GroupList, DeleteHandler, UserManagementFilter */ + var $userList; var $userListBody; @@ -57,9 +59,6 @@ var UserList = { var $tr = $userListBody.find('tr:first-child').clone(); // this removes just the `display:none` of the template row $tr.removeAttr('style'); - var subAdminsEl; - var subAdminSelect; - var groupsSelect; /** * Avatar or placeholder @@ -86,32 +85,17 @@ var UserList = { $tr.find('td.mailAddress > .action').tooltip({placement: 'top'}); $tr.find('td.password > .action').tooltip({placement: 'top'}); + /** * groups and subadmins */ - // make them look like the multiselect buttons - // until they get time to really get initialized - groupsSelect = $('<select multiple="multiple" class="groupsselect multiselect button" data-placehoder="Groups" title="' + t('settings', 'No group') + '"></select>') - .data('username', user.name) - .data('user-groups', user.groups); - if ($tr.find('td.subadmins').length > 0) { - subAdminSelect = $('<select multiple="multiple" class="subadminsselect multiselect button" data-placehoder="subadmins" title="' + t('settings', 'No group') + '">') - .data('username', user.name) - .data('user-groups', user.groups) - .data('subadmin', user.subadmin); - $tr.find('td.subadmins').empty(); - } - $.each(this.availableGroups, function (i, group) { - groupsSelect.append($('<option value="' + escapeHTML(group) + '">' + escapeHTML(group) + '</option>')); - if (typeof subAdminSelect !== 'undefined' && group !== 'admin') { - subAdminSelect.append($('<option value="' + escapeHTML(group) + '">' + escapeHTML(group) + '</option>')); - } - }); - $tr.find('td.groups').empty().append(groupsSelect); - subAdminsEl = $tr.find('td.subadmins'); - if (subAdminsEl.length > 0) { - subAdminsEl.append(subAdminSelect); - } + var $tdGroups = $tr.find('td.groups'); + this._updateGroupListLabel($tdGroups, user.groups); + $tdGroups.find('.action').tooltip({placement: 'top'}); + + var $tdSubadmins = $tr.find('td.subadmins'); + this._updateGroupListLabel($tdSubadmins, user.subadmin); + $tdSubadmins.find('.action').tooltip({placement: 'top'}); /** * remove action @@ -198,10 +182,6 @@ var UserList = { // defer init so the user first sees the list appear more quickly window.setTimeout(function(){ $quotaSelect.singleSelect(); - UserList.applyGroupSelect(groupsSelect); - if (subAdminSelect) { - UserList.applySubadminSelect(subAdminSelect); - } }, 0); return $tr; }, @@ -322,7 +302,7 @@ var UserList = { }, markRemove: function(uid) { var $tr = UserList.getRow(uid); - var groups = $tr.find('.groups .groupsselect').val(); + var groups = $tr.find('.groups').data('groups'); for(var i in groups) { var gid = groups[i]; var $li = GroupList.getGroupLI(gid); @@ -337,7 +317,7 @@ var UserList = { }, undoRemove: function(uid) { var $tr = UserList.getRow(uid); - var groups = $tr.find('.groups .groupsselect').val(); + var groups = $tr.find('.groups').data('groups'); for(var i in groups) { var gid = groups[i]; var $li = GroupList.getGroupLI(gid); @@ -438,26 +418,16 @@ var UserList = { }); }, - applyGroupSelect: function (element) { - var checked = []; + applyGroupSelect: function (element, user, checked) { var $element = $(element); - var user = UserList.getUID($element); - if ($element.data('user-groups')) { - if (typeof $element.data('user-groups') === 'string') { - checked = $element.data('user-groups').split(", "); - } - else { - checked = $element.data('user-groups'); - } - } var checkHandler = null; if(user) { // Only if in a user row, and not the #newusergroups select checkHandler = function (group) { if (user === OC.currentUser && group === 'admin') { return false; } - if (!oc_isadmin && checked.length === 1 && checked[0] === group) { + if (!OC.isUserAdmin() && checked.length === 1 && checked[0] === group) { return false; } $.post( @@ -490,17 +460,10 @@ var UserList = { }; } var addGroup = function (select, group) { - $('select[multiple]').each(function (index, element) { - $element = $(element); - if ($element.find('option').filterAttr('value', group).length === 0 && - select.data('msid') !== $element.data('msid')) { - $element.append('<option value="' + escapeHTML(group) + '">' + escapeHTML(group) + '</option>'); - } - }); GroupList.addGroup(escapeHTML(group)); }; var label; - if (oc_isadmin) { + if (OC.isUserAdmin()) { label = t('settings', 'Add group'); } else { @@ -517,19 +480,8 @@ var UserList = { }); }, - applySubadminSelect: function (element) { - var checked = []; + applySubadminSelect: function (element, user, checked) { var $element = $(element); - var user = UserList.getUID($element); - - if ($element.data('subadmin')) { - if (typeof $element.data('subadmin') === 'string') { - checked = $element.data('subadmin').split(", "); - } - else { - checked = $element.data('subadmin'); - } - } var checkHandler = function (group) { if (group === 'admin') { return false; @@ -545,15 +497,7 @@ var UserList = { ); }; - var addSubAdmin = function (group) { - $('select[multiple]').each(function (index, element) { - if ($(element).find('option').filterAttr('value', group).length === 0) { - $(element).append('<option value="' + escapeHTML(group) + '">' + escapeHTML(group) + '</option>'); - } - }); - }; $element.multiSelect({ - createCallback: addSubAdmin, createText: null, checked: checked, oncheck: checkHandler, @@ -582,7 +526,7 @@ var UserList = { if (quota === 'other') { return; } - if (isNaN(parseInt(quota, 10)) || parseInt(quota, 10) < 0) { + if ((quota !== 'default' && quota !=="none") && (isNaN(parseInt(quota, 10)) || parseInt(quota, 10) < 0)) { // the select component has added the bogus value, delete it again $select.find('option[selected]').remove(); OC.Notification.showTemporary(t('core', 'Invalid quota value "{val}"', {val: quota})); @@ -611,6 +555,76 @@ var UserList = { } } ); + }, + + /** + * Creates a temporary jquery.multiselect selector on the given group field + */ + _triggerGroupEdit: function($td, isSubadminSelect) { + var $groupsListContainer = $td.find('.groupsListContainer'); + var placeholder = $groupsListContainer.attr('data-placeholder') || t('settings', 'no group'); + var user = UserList.getUID($td); + var checked = $td.data('groups') || []; + var extraGroups = [].concat(checked); + + $td.find('.multiselectoptions').remove(); + + // jquery.multiselect can only work with select+options in DOM ? We'll give jquery.multiselect what it wants... + var $groupsSelect; + if (isSubadminSelect) { + $groupsSelect = $('<select multiple="multiple" class="groupsselect multiselect button" title="' + placeholder + '"></select>'); + } else { + $groupsSelect = $('<select multiple="multiple" class="subadminsselect multiselect button" title="' + placeholder + '"></select>') + } + + function createItem(group) { + if (isSubadminSelect && group === 'admin') { + // can't become subadmin of "admin" group + return; + } + $groupsSelect.append($('<option value="' + escapeHTML(group) + '">' + escapeHTML(group) + '</option>')); + } + + $.each(this.availableGroups, function (i, group) { + // some new groups might be selected but not in the available groups list yet + var extraIndex = extraGroups.indexOf(group); + if (extraIndex >= 0) { + // remove extra group as it was found + extraGroups.splice(extraIndex, 1); + } + createItem(group); + }); + $.each(extraGroups, function (i, group) { + createItem(group); + }); + + $td.append($groupsSelect); + + if (isSubadminSelect) { + UserList.applySubadminSelect($groupsSelect, user, checked); + } else { + UserList.applyGroupSelect($groupsSelect, user, checked); + } + + $groupsListContainer.addClass('hidden'); + $td.find('.multiselect:not(.groupsListContainer):first').click(); + $groupsSelect.on('dropdownclosed', function(e) { + $groupsSelect.remove(); + $td.find('.multiselect:not(.groupsListContainer)').parent().remove(); + $td.find('.multiselectoptions').remove(); + $groupsListContainer.removeClass('hidden'); + UserList._updateGroupListLabel($td, e.checked); + }); + }, + + /** + * Updates the groups list td with the given groups selection + */ + _updateGroupListLabel: function($td, groups) { + var placeholder = $td.find('.groupsListContainer').attr('data-placeholder'); + var $groupsEl = $td.find('.groupsList'); + $groupsEl.text(groups.join(', ') || placeholder || t('settings', 'no group')); + $td.data('groups', groups); } }; @@ -635,13 +649,6 @@ $(document).ready(function () { // TODO: move other init calls inside of initialize UserList.initialize($('#userlist')); - $('.groupsselect').each(function (index, element) { - UserList.applyGroupSelect(element); - }); - $('.subadminsselect').each(function (index, element) { - UserList.applySubadminSelect(element); - }); - $userListBody.on('click', '.password', function (event) { event.stopPropagation(); @@ -668,7 +675,9 @@ $(document).ready(function () { OC.generateUrl('/settings/users/changepassword'), {username: uid, password: $(this).val(), recoveryPassword: recoveryPasswordVal}, function (result) { - if (result.status != 'success') { + if (result.status === 'success') { + OC.Notification.showTemporary(t('admin', 'Password successfully changed')); + } else { OC.Notification.showTemporary(t('admin', result.data.message)); } } @@ -783,11 +792,24 @@ $(document).ready(function () { }); }); + $('#newuser .groupsListContainer').on('click', function (event) { + event.stopPropagation(); + var $div = $(this).closest('.groups'); + UserList._triggerGroupEdit($div); + }); + $userListBody.on('click', '.groups .groupsListContainer, .subadmins .groupsListContainer', function (event) { + event.stopPropagation(); + var $td = $(this).closest('td'); + var isSubadminSelect = $td.hasClass('subadmins'); + UserList._triggerGroupEdit($td, isSubadminSelect); + }); + // 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); }); + UserList._updateGroupListLabel($('#newuser .groups'), []); $('#newuser').submit(function (event) { event.preventDefault(); var username = $('#newusername').val(); @@ -823,7 +845,7 @@ $(document).ready(function () { } promise.then(function() { - var groups = $('#newusergroups').val() || []; + var groups = $('#newuser .groups').data('groups') || []; $.post( OC.generateUrl('/settings/users/users'), { @@ -839,8 +861,8 @@ $(document).ready(function () { if(UserList.availableGroups.indexOf(gid) === -1) { UserList.availableGroups.push(gid); } - $li = GroupList.getGroupLI(gid); - userCount = GroupList.getUserCount($li); + var $li = GroupList.getGroupLI(gid); + var userCount = GroupList.getUserCount($li); GroupList.setUserCount($li, userCount + 1); } } diff --git a/settings/l10n/cs_CZ.js b/settings/l10n/cs_CZ.js index 114e3d1fe78..7073178238f 100644 --- a/settings/l10n/cs_CZ.js +++ b/settings/l10n/cs_CZ.js @@ -1,16 +1,16 @@ OC.L10N.register( "settings", { + "Enabled" : "Povoleno", + "Not enabled" : "Vypnuto", "Wrong password" : "Nesprávné heslo", "Saved" : "Uloženo", "No user supplied" : "Nebyl uveden uživatel", + "Unable to change password" : "Změna hesla se nezdařila", "Authentication error" : "Chyba přihlášení", "Please provide an admin recovery password, otherwise all user data will be lost" : "Zadejte prosím administrátorské heslo pro obnovu, jinak budou všechna data ztracena", "Wrong admin recovery password. Please check the password and try again." : "Chybné administrátorské heslo pro obnovu. Překontrolujte správnost hesla a zkuste to znovu.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Úložiště nepodporuje změnu hesla, ale šifrovací klíč uživatele byl úspěšně aktualizován.", - "Unable to change password" : "Změna hesla se nezdařila", - "Enabled" : "Povoleno", - "Not enabled" : "Vypnuto", "installing and updating apps via the app store or Federated Cloud Sharing" : "Instalovat a aktualizovat aplikace pomocí obchodu nebo Sdíleného Cloudového Úložiště", "Federated Cloud Sharing" : "Propojené cloudové sdílení", "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL používá zastaralou %s verzi (%s). Aktualizujte prosím svůj operační systém, jinak funkce jako %s nemusí spolehlivě pracovat.", @@ -35,17 +35,6 @@ OC.L10N.register( "Email saved" : "Email uložen", "Your full name has been changed." : "Vaše celé jméno bylo změněno.", "Unable to change full name" : "Nelze změnit celé jméno", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Upozornění zabezpečení a nastavení", - "Sharing" : "Sdílení", - "Server-side encryption" : "Šifrování na serveru", - "External Storage" : "Externí úložiště", - "Cron" : "Cron", - "Email server" : "Emailový server", - "Log" : "Záznam", - "Tips & tricks" : "Tipy a triky", - "Updates" : "Aktualizace", "Couldn't remove app." : "Nepodařilo se odebrat aplikaci.", "Language changed" : "Jazyk byl změněn", "Invalid request" : "Neplatný požadavek", @@ -98,6 +87,10 @@ OC.L10N.register( "Android Client" : "Android klient", "Sync client - {os}" : "Sync klient - {os}", "This session" : "Toto sezení", + "Copied!" : "Zkopírováno!", + "Not supported!" : "Nepodporováno!", + "Press ⌘-C to copy." : "Zmáčknout ⌘-C pro kopírování.", + "Press Ctrl-C to copy." : "Zmáčknout Ctrl-C pro kopírování.", "Error while loading browser sessions and device tokens" : "Chyba při načítání sezení prohlížeče a tokenů přístroje", "Error while creating device token" : "Chyba při vytváření tokenů přístroje", "Error while deleting the token" : "Chyba při mazání tokenu", @@ -133,22 +126,61 @@ OC.L10N.register( "Sessions" : "Sezení", "App passwords" : "Hesla aplikací", "Sync clients" : "Synchronizační klienti", - "Everything (fatal issues, errors, warnings, info, debug)" : "Vše (fatální problémy, chyby, varování, informační, ladící)", - "Info, warnings, errors and fatal issues" : "Informace, varování, chyby a fatální problémy", - "Warnings, errors and fatal issues" : "Varování, chyby a fatální problémy", - "Errors and fatal issues" : "Chyby a fatální problémy", - "Fatal issues only" : "Pouze fatální problémy", "None" : "Žádné", "Login" : "Přihlásit", "Plain" : "Čistý text", "NT LAN Manager" : "Správce NT LAN", "SSL" : "SSL", "TLS" : "TLS", + "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", + "mail" : "email", + "Authentication method" : "Metoda ověření", + "Authentication required" : "Vyžadováno ověření", + "Server address" : "Adresa serveru", + "Port" : "Port", + "Credentials" : "Přihlašovací údaje", + "SMTP Username" : "SMTP uživatelské jméno ", + "SMTP Password" : "SMTP heslo", + "Store credentials" : "Ukládat přihlašovací údaje", + "Test email settings" : "Test nastavení emailu", + "Send email" : "Odeslat email", + "Server-side encryption" : "Šifrování na serveru", + "Enable server-side encryption" : "Povolit šifrování na straně serveru", + "Please read carefully before activating server-side encryption: " : "Pročtěte prosím důkladně před aktivací šifrování dat na serveru:", + "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." : "Poté co je zapnuto šifrování, jsou od toho bodu všechny nahrávané soubory šifrovány serverem. Vypnout šifrování bude možné pouze později, až bude šifrovací modul tuto možnost podporovat a po splnění všech nutných podmínek (tzn. nastavení klíčů pro obnovení).", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Šifrování samotné ještě negarantuje bezpečnost systému. Přečtěte si prosím dokumentaci, chcete-li se dozvědět více informací o tom, jak aplikace pro šifrování funguje a jaké jsou podporované případy použití.", + "Be aware that encryption always increases the file size." : "Mějte na paměti, že šifrování vždy navýší velikost souboru.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Je vždy dobré vytvářet pravidelné zálohy svých dat, v případě zapnutého šifrování také zajistěte zálohu šifrovacích klíčů společně se zálohou dat.", + "This is the final warning: Do you really want to enable encryption?" : "Toto je poslední varování: Opravdu si přejete zapnout šifrování?", + "Enable encryption" : "Povolit šifrování", + "No encryption module loaded, please enable an encryption module in the app menu." : "Není načten žádný šifrovací modul, povolte ho prosím v menu aplikací.", + "Select default encryption module:" : "Vybrat výchozí šifrovací modul:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Musíte přenést své šifrovací klíče ze staré verze šifrování (ownCloud <= 8.0) na novou. Povolte prosím \"Default encryption module\" a spusťte příkaz 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Musíte přenést své šifrovací klíče ze staré verze šifrování (ownCloud <= 8.0) na novou.", + "Start migration" : "Spustit migraci", + "Everything (fatal issues, errors, warnings, info, debug)" : "Vše (fatální problémy, chyby, varování, informační, ladící)", + "Info, warnings, errors and fatal issues" : "Informace, varování, chyby a fatální problémy", + "Warnings, errors and fatal issues" : "Varování, chyby a fatální problémy", + "Errors and fatal issues" : "Chyby a fatální problémy", + "Fatal issues only" : "Pouze fatální problémy", + "Log" : "Záznam", + "What to log" : "Co se má logovat", + "Download logfile" : "Stáhnout soubor logu", + "More" : "Více", + "Less" : "Méně", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Soubor logu je větší než 100 MB. Jeho stažení zabere nějaký čas!", + "Security & setup warnings" : "Upozornění zabezpečení a nastavení", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php není nejspíše správně nastaveno pro dotazování na proměnné hodnoty systému. Test s getenv(\"PATH\") vrací pouze prázdnou odpověď.", "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." : "Zkontrolujte prosím konfiguraci php podle <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">instalační dokumentace ↗</a>, hlavně při použití 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." : "Konfigurace je nastavena pouze pro čtení. Toto znemožňuje některá nastavení přes webové rozhraní. Dále musí být pro každou změnu povolen zápis do konfiguračního souboru ručně.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP je patrně nastaveno tak, aby odstraňovalo bloky komentářů. Toto bude mít za následek nedostupnost množství hlavních aplikací.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Toto je pravděpodobně způsobeno aplikacemi pro urychlení načítání jako jsou Zend OPcache nebo eAccelerator.", + "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Vaše databáze neběží s úrovní izolace transakcí \"READ COMMITTED\". Toto může způsobit problémy při paralelním spouštění více akcí současně.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "Je nainstalován %1$s nižší verze než %2$s, z důvodu lepší stability a výkonu doporučujeme aktualizovat na novější verzi %1$s.", "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.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Transakční uzamykání souborů je vypnuto, což může vést k problémům s \"race\" podmínkami. Pro zabránění těmto problémům povolte 'filelocking.enabled' v souboru config.php. Více informací lze nalézt v <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentaci ↗</a>.", @@ -159,7 +191,15 @@ OC.L10N.register( "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Nebylo možné spustit službu cron v CLI. Došlo k následujícím technickým chybám:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Prosím překontrolujte <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">instalační pokyny ↗</a> a zkontrolujte jakékoliv chyby a varování v <a href=\"#log-section\">logu</a>.", "All checks passed." : "Všechny testy byly úspěšné.", - "Open documentation" : "Otevřít dokumentaci", + "Cron" : "Cron", + "Last cron job execution: %s." : "Poslední cron proběhl: %s.", + "Last cron job execution: %s. Something seems wrong." : "Poslední cron proběhl: %s. Vypadá to, že něco není v pořádku.", + "Cron was not executed yet!" : "Cron ještě nebyl spuštěn!", + "Execute one task with each page loaded" : "Spustit jednu úlohu s každým načtením stránky", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php je registrován u služby webcron, aby volal cron.php jednou za 15 minut přes http.", + "Use system's cron service to call the cron.php file every 15 minutes." : "Použít systémovou službu cron pro volání cron.php každých 15 minut.", + "Version" : "Verze", + "Sharing" : "Sdílení", "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ů", @@ -176,45 +216,7 @@ OC.L10N.register( "Exclude groups from sharing" : "Vyjmout skupiny ze sdílení", "These groups will still be able to receive shares, but not to initiate them." : "Těmto skupinám bude stále možno sdílet, nemohou ale sami sdílet ostatním.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Povolit automatické vyplňování v dialogu sdílení. Pokud je toto vypnuto, je třeba ručně vyplňovat celé uživatelské jméno.", - "Last cron job execution: %s." : "Poslední cron proběhl: %s.", - "Last cron job execution: %s. Something seems wrong." : "Poslední cron proběhl: %s. Vypadá to, že něco není v pořádku.", - "Cron was not executed yet!" : "Cron ještě nebyl spuštěn!", - "Execute one task with each page loaded" : "Spustit jednu úlohu s každým načtením stránky", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php je registrován u služby webcron, aby volal cron.php jednou za 15 minut přes http.", - "Use system's cron service to call the cron.php file every 15 minutes." : "Použít systémovou službu cron pro volání cron.php každých 15 minut.", - "Enable server-side encryption" : "Povolit šifrování na straně serveru", - "Please read carefully before activating server-side encryption: " : "Pročtěte prosím důkladně před aktivací šifrování dat na serveru:", - "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." : "Poté co je zapnuto šifrování, jsou od toho bodu všechny nahrávané soubory šifrovány serverem. Vypnout šifrování bude možné pouze později, až bude šifrovací modul tuto možnost podporovat a po splnění všech nutných podmínek (tzn. nastavení klíčů pro obnovení).", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Šifrování samotné ještě negarantuje bezpečnost systému. Přečtěte si prosím dokumentaci, chcete-li se dozvědět více informací o tom, jak aplikace pro šifrování funguje a jaké jsou podporované případy použití.", - "Be aware that encryption always increases the file size." : "Mějte na paměti, že šifrování vždy navýší velikost souboru.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Je vždy dobré vytvářet pravidelné zálohy svých dat, v případě zapnutého šifrování také zajistěte zálohu šifrovacích klíčů společně se zálohou dat.", - "This is the final warning: Do you really want to enable encryption?" : "Toto je poslední varování: Opravdu si přejete zapnout šifrování?", - "Enable encryption" : "Povolit šifrování", - "No encryption module loaded, please enable an encryption module in the app menu." : "Není načten žádný šifrovací modul, povolte ho prosím v menu aplikací.", - "Select default encryption module:" : "Vybrat výchozí šifrovací modul:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Musíte přenést své šifrovací klíče ze staré verze šifrování (ownCloud <= 8.0) na novou. Povolte prosím \"Default encryption module\" a spusťte příkaz 'occ encryption:migrate'", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Musíte přenést své šifrovací klíče ze staré verze šifrování (ownCloud <= 8.0) na novou.", - "Start migration" : "Spustit migraci", - "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", - "mail" : "email", - "Authentication method" : "Metoda ověření", - "Authentication required" : "Vyžadováno ověření", - "Server address" : "Adresa serveru", - "Port" : "Port", - "Credentials" : "Přihlašovací údaje", - "SMTP Username" : "SMTP uživatelské jméno ", - "SMTP Password" : "SMTP heslo", - "Store credentials" : "Ukládat přihlašovací údaje", - "Test email settings" : "Test nastavení emailu", - "Send email" : "Odeslat email", - "What to log" : "Co se má logovat", - "Download logfile" : "Stáhnout soubor logu", - "More" : "Více", - "Less" : "Méně", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Soubor logu je větší než 100 MB. Jeho stažení zabere nějaký čas!", + "Tips & tricks" : "Tipy a triky", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Je použita databáze SQLite. Pro větší instalace doporučujeme přejít na robustnější databázi.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Obzvláště při používání klientské aplikace pro synchronizaci s desktopem není SQLite doporučeno.", "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>." : "Pro migraci na jinou databázi použijte v příkazovém řádku nástroj: 'occ db:convert-type' nebo nahlédněte do <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentace ↗</a>.", @@ -224,7 +226,6 @@ OC.L10N.register( "Improving the config.php" : "Vylepšení souboru config.php", "Theming" : "Vzhledy", "Hardening and security guidance" : "Průvodce vylepšením bezpečnosti", - "Version" : "Verze", "Developer documentation" : "Vývojářská dokumentace", "Experimental applications ahead" : "Experimentální aplikace v pořadí", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimentální aplikace nejsou prověřovány na bezpečnostní chyby, mohou být nestabilní a velmi se měnit. Jejich instalací můžete způsobit ztrátu dat nebo bezpečnostní problémy.", @@ -280,6 +281,11 @@ OC.L10N.register( "Change password" : "Změnit heslo", "Language" : "Jazyk", "Help translate" : "Pomoci s překladem", + "Get the apps to sync your files" : "Získat aplikace pro synchronizaci vašich souborů", + "Desktop client" : "Aplikace pro počítač", + "Android app" : "Aplikace pro Android", + "iOS app" : "iOS aplikace", + "Show First Run Wizard again" : "Znovu zobrazit průvodce prvním spuštěním", "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", @@ -288,18 +294,17 @@ OC.L10N.register( "App name" : "Jméno aplikace", "Create new app password" : "Vytvořit nové heslo aplikace", "Use the credentials below to configure your app or device." : "Použijte údaje níže pro nastavení aplikace nebo zařízení.", + "For security reasons this password will only be shown once." : "Toto heslo bude z bezpečnostních důvodů zobrazeno pouze jedenkrát.", "Username" : "Uživatelské jméno", "Done" : "Dokončeno", - "Get the apps to sync your files" : "Získat aplikace pro synchronizaci vašich souborů", - "Desktop client" : "Aplikace pro počítač", - "Android app" : "Aplikace pro Android", - "iOS app" : "iOS aplikace", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Chcete-li projekt podpořit\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">připojte se k vývoji</a>\n\t\tnebo\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">šiřte informace dál</a>!", - "Show First Run Wizard again" : "Znovu zobrazit průvodce prvním spuštěním", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Vyvíjeno {communityopen}komunitou Nextcloudu{linkclose}, {githubopen}zdrojový kód{linkclose} je licencován pod {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", + "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!", + "Subscribe to our twitter channel!" : "Odebírejte náš twitter kanál!", + "Subscribe to our news feed!" : "Odebírejte náš kanál s novinkami!", + "Subscribe to our newsletter!" : "Odebírejte náš newsletter!", "Show storage location" : "Cesta k datům", "Show last log in" : "Poslední přihlášení", - "Show user backend" : "Zobrazit uživatelskou podpůrnou vrstvu", + "Show user backend" : "Zobrazit vedení uživatelů", "Send email to new user" : "Poslat email novému uživateli", "Show email address" : "Emailová adresa", "E-Mail" : "Email", @@ -320,6 +325,32 @@ OC.L10N.register( "change full name" : "změnit celé jméno", "set new password" : "nastavit nové heslo", "change email address" : "změnit emailovou adresu", - "Default" : "Výchozí" + "Default" : "Výchozí", + "no group" : "není ve skupině", + "add group" : "přidat skupinu", + "Add Group" : "Přidat skupinu", + "Default Quota" : "Výchozí kvóta", + "Full Name" : "Celé jméno", + "Group Admin for" : "Správce skupiny pro", + "Storage Location" : "Umístění úložiště", + "User Backend" : "Seznam uživatelů", + "Last Login" : "Poslední přihlášení", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Externí úložiště", + "Updates" : "Aktualizace", + "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Oficiální aplikace jsou vyvíjeny Nextcloud komunitou. Poskytují klíčové funkce Nextcloud a jsou připravené na produkční nasazení.", + "No apps found for \"{query}\"" : "Nebyly nalezeny žádné aplikace pro \"{query}\"", + "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Zkontrolujte prosím konfiguraci php podle <a target=\"_blank\" href=\"%s\">instalační dokumentace ↗</a>, hlavně při použití php-fpm.", + "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Vaše databáze neběží s úrovní izolace transakcí \"READ COMMITED\". Toto může způsobit problémy při paralelním spouštění více akcí současně.", + "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Server běží v prostředí Microsoft Windows. Pro optimální uživatelské pohodlí doporučujeme přejít na Linux.", + "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Transakční uzamykání souborů je vypnuto, což může vést k problémům s \"race\" podmínkami. Pro zabránění těmto problémům povolte 'filelocking.enabled' v souboru config.php. Více informací lze nalézt v <a target=\"_blank\" href=\"%s\">dokumentaci ↗</a>.", + "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Prosím překontrolujte <a target=\"_blank\" href=\"%s\">instalační pokyny ↗</a> a zkontrolujte jakékoliv chyby a varování v <a href=\"#log-section\">logu</a>.", + "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Šifrování samotné ještě negarantuje bezpečnost systému. Přečtěte si prosím Nextcloud dokumentaci, chcete-li se dozvědět více informací o tom, jak aplikace pro šifrování funguje a jaké jsou podporované případy použití.", + "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Pro migraci na jinou databázi použijte v příkazovém řádku nástroj: 'occ db:convert-type' nebo nahlédněte do <a target=\"_blank\" href=\"%s\">dokumentace ↗</a>.", + "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Tato aplikace nemá nastavenou žádnou nejnižší podporovanou verzi Nextcloud. Toto bude hlášeno jako chyba ve verzi Nextcloud 11 a pozdější.", + "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Tato aplikace nemá nastavenou žádnou nejvyšší podporovanou verzi Nextcloud. Toto bude hlášeno jako chyba ve verzi Nextcloud 11 a pozdější.", + "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Chcete-li projekt podpořit\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">připojte se k vývoji</a>\n\t\tnebo\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">pomáhejte ostatním uživatelům</a>!", + "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Vyvíjeno {communityopen}Nextcloud komunitou{linkclose}, {githubopen}zdrojový kód{linkclose} je licencován pod {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." }, "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/settings/l10n/cs_CZ.json b/settings/l10n/cs_CZ.json index e026e0b5e1e..3161be335ea 100644 --- a/settings/l10n/cs_CZ.json +++ b/settings/l10n/cs_CZ.json @@ -1,14 +1,14 @@ { "translations": { + "Enabled" : "Povoleno", + "Not enabled" : "Vypnuto", "Wrong password" : "Nesprávné heslo", "Saved" : "Uloženo", "No user supplied" : "Nebyl uveden uživatel", + "Unable to change password" : "Změna hesla se nezdařila", "Authentication error" : "Chyba přihlášení", "Please provide an admin recovery password, otherwise all user data will be lost" : "Zadejte prosím administrátorské heslo pro obnovu, jinak budou všechna data ztracena", "Wrong admin recovery password. Please check the password and try again." : "Chybné administrátorské heslo pro obnovu. Překontrolujte správnost hesla a zkuste to znovu.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Úložiště nepodporuje změnu hesla, ale šifrovací klíč uživatele byl úspěšně aktualizován.", - "Unable to change password" : "Změna hesla se nezdařila", - "Enabled" : "Povoleno", - "Not enabled" : "Vypnuto", "installing and updating apps via the app store or Federated Cloud Sharing" : "Instalovat a aktualizovat aplikace pomocí obchodu nebo Sdíleného Cloudového Úložiště", "Federated Cloud Sharing" : "Propojené cloudové sdílení", "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL používá zastaralou %s verzi (%s). Aktualizujte prosím svůj operační systém, jinak funkce jako %s nemusí spolehlivě pracovat.", @@ -33,17 +33,6 @@ "Email saved" : "Email uložen", "Your full name has been changed." : "Vaše celé jméno bylo změněno.", "Unable to change full name" : "Nelze změnit celé jméno", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Upozornění zabezpečení a nastavení", - "Sharing" : "Sdílení", - "Server-side encryption" : "Šifrování na serveru", - "External Storage" : "Externí úložiště", - "Cron" : "Cron", - "Email server" : "Emailový server", - "Log" : "Záznam", - "Tips & tricks" : "Tipy a triky", - "Updates" : "Aktualizace", "Couldn't remove app." : "Nepodařilo se odebrat aplikaci.", "Language changed" : "Jazyk byl změněn", "Invalid request" : "Neplatný požadavek", @@ -96,6 +85,10 @@ "Android Client" : "Android klient", "Sync client - {os}" : "Sync klient - {os}", "This session" : "Toto sezení", + "Copied!" : "Zkopírováno!", + "Not supported!" : "Nepodporováno!", + "Press ⌘-C to copy." : "Zmáčknout ⌘-C pro kopírování.", + "Press Ctrl-C to copy." : "Zmáčknout Ctrl-C pro kopírování.", "Error while loading browser sessions and device tokens" : "Chyba při načítání sezení prohlížeče a tokenů přístroje", "Error while creating device token" : "Chyba při vytváření tokenů přístroje", "Error while deleting the token" : "Chyba při mazání tokenu", @@ -131,22 +124,61 @@ "Sessions" : "Sezení", "App passwords" : "Hesla aplikací", "Sync clients" : "Synchronizační klienti", - "Everything (fatal issues, errors, warnings, info, debug)" : "Vše (fatální problémy, chyby, varování, informační, ladící)", - "Info, warnings, errors and fatal issues" : "Informace, varování, chyby a fatální problémy", - "Warnings, errors and fatal issues" : "Varování, chyby a fatální problémy", - "Errors and fatal issues" : "Chyby a fatální problémy", - "Fatal issues only" : "Pouze fatální problémy", "None" : "Žádné", "Login" : "Přihlásit", "Plain" : "Čistý text", "NT LAN Manager" : "Správce NT LAN", "SSL" : "SSL", "TLS" : "TLS", + "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", + "mail" : "email", + "Authentication method" : "Metoda ověření", + "Authentication required" : "Vyžadováno ověření", + "Server address" : "Adresa serveru", + "Port" : "Port", + "Credentials" : "Přihlašovací údaje", + "SMTP Username" : "SMTP uživatelské jméno ", + "SMTP Password" : "SMTP heslo", + "Store credentials" : "Ukládat přihlašovací údaje", + "Test email settings" : "Test nastavení emailu", + "Send email" : "Odeslat email", + "Server-side encryption" : "Šifrování na serveru", + "Enable server-side encryption" : "Povolit šifrování na straně serveru", + "Please read carefully before activating server-side encryption: " : "Pročtěte prosím důkladně před aktivací šifrování dat na serveru:", + "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." : "Poté co je zapnuto šifrování, jsou od toho bodu všechny nahrávané soubory šifrovány serverem. Vypnout šifrování bude možné pouze později, až bude šifrovací modul tuto možnost podporovat a po splnění všech nutných podmínek (tzn. nastavení klíčů pro obnovení).", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Šifrování samotné ještě negarantuje bezpečnost systému. Přečtěte si prosím dokumentaci, chcete-li se dozvědět více informací o tom, jak aplikace pro šifrování funguje a jaké jsou podporované případy použití.", + "Be aware that encryption always increases the file size." : "Mějte na paměti, že šifrování vždy navýší velikost souboru.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Je vždy dobré vytvářet pravidelné zálohy svých dat, v případě zapnutého šifrování také zajistěte zálohu šifrovacích klíčů společně se zálohou dat.", + "This is the final warning: Do you really want to enable encryption?" : "Toto je poslední varování: Opravdu si přejete zapnout šifrování?", + "Enable encryption" : "Povolit šifrování", + "No encryption module loaded, please enable an encryption module in the app menu." : "Není načten žádný šifrovací modul, povolte ho prosím v menu aplikací.", + "Select default encryption module:" : "Vybrat výchozí šifrovací modul:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Musíte přenést své šifrovací klíče ze staré verze šifrování (ownCloud <= 8.0) na novou. Povolte prosím \"Default encryption module\" a spusťte příkaz 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Musíte přenést své šifrovací klíče ze staré verze šifrování (ownCloud <= 8.0) na novou.", + "Start migration" : "Spustit migraci", + "Everything (fatal issues, errors, warnings, info, debug)" : "Vše (fatální problémy, chyby, varování, informační, ladící)", + "Info, warnings, errors and fatal issues" : "Informace, varování, chyby a fatální problémy", + "Warnings, errors and fatal issues" : "Varování, chyby a fatální problémy", + "Errors and fatal issues" : "Chyby a fatální problémy", + "Fatal issues only" : "Pouze fatální problémy", + "Log" : "Záznam", + "What to log" : "Co se má logovat", + "Download logfile" : "Stáhnout soubor logu", + "More" : "Více", + "Less" : "Méně", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Soubor logu je větší než 100 MB. Jeho stažení zabere nějaký čas!", + "Security & setup warnings" : "Upozornění zabezpečení a nastavení", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php není nejspíše správně nastaveno pro dotazování na proměnné hodnoty systému. Test s getenv(\"PATH\") vrací pouze prázdnou odpověď.", "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." : "Zkontrolujte prosím konfiguraci php podle <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">instalační dokumentace ↗</a>, hlavně při použití 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." : "Konfigurace je nastavena pouze pro čtení. Toto znemožňuje některá nastavení přes webové rozhraní. Dále musí být pro každou změnu povolen zápis do konfiguračního souboru ručně.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP je patrně nastaveno tak, aby odstraňovalo bloky komentářů. Toto bude mít za následek nedostupnost množství hlavních aplikací.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Toto je pravděpodobně způsobeno aplikacemi pro urychlení načítání jako jsou Zend OPcache nebo eAccelerator.", + "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Vaše databáze neběží s úrovní izolace transakcí \"READ COMMITTED\". Toto může způsobit problémy při paralelním spouštění více akcí současně.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "Je nainstalován %1$s nižší verze než %2$s, z důvodu lepší stability a výkonu doporučujeme aktualizovat na novější verzi %1$s.", "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.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Transakční uzamykání souborů je vypnuto, což může vést k problémům s \"race\" podmínkami. Pro zabránění těmto problémům povolte 'filelocking.enabled' v souboru config.php. Více informací lze nalézt v <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentaci ↗</a>.", @@ -157,7 +189,15 @@ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Nebylo možné spustit službu cron v CLI. Došlo k následujícím technickým chybám:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Prosím překontrolujte <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">instalační pokyny ↗</a> a zkontrolujte jakékoliv chyby a varování v <a href=\"#log-section\">logu</a>.", "All checks passed." : "Všechny testy byly úspěšné.", - "Open documentation" : "Otevřít dokumentaci", + "Cron" : "Cron", + "Last cron job execution: %s." : "Poslední cron proběhl: %s.", + "Last cron job execution: %s. Something seems wrong." : "Poslední cron proběhl: %s. Vypadá to, že něco není v pořádku.", + "Cron was not executed yet!" : "Cron ještě nebyl spuštěn!", + "Execute one task with each page loaded" : "Spustit jednu úlohu s každým načtením stránky", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php je registrován u služby webcron, aby volal cron.php jednou za 15 minut přes http.", + "Use system's cron service to call the cron.php file every 15 minutes." : "Použít systémovou službu cron pro volání cron.php každých 15 minut.", + "Version" : "Verze", + "Sharing" : "Sdílení", "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ů", @@ -174,45 +214,7 @@ "Exclude groups from sharing" : "Vyjmout skupiny ze sdílení", "These groups will still be able to receive shares, but not to initiate them." : "Těmto skupinám bude stále možno sdílet, nemohou ale sami sdílet ostatním.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Povolit automatické vyplňování v dialogu sdílení. Pokud je toto vypnuto, je třeba ručně vyplňovat celé uživatelské jméno.", - "Last cron job execution: %s." : "Poslední cron proběhl: %s.", - "Last cron job execution: %s. Something seems wrong." : "Poslední cron proběhl: %s. Vypadá to, že něco není v pořádku.", - "Cron was not executed yet!" : "Cron ještě nebyl spuštěn!", - "Execute one task with each page loaded" : "Spustit jednu úlohu s každým načtením stránky", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php je registrován u služby webcron, aby volal cron.php jednou za 15 minut přes http.", - "Use system's cron service to call the cron.php file every 15 minutes." : "Použít systémovou službu cron pro volání cron.php každých 15 minut.", - "Enable server-side encryption" : "Povolit šifrování na straně serveru", - "Please read carefully before activating server-side encryption: " : "Pročtěte prosím důkladně před aktivací šifrování dat na serveru:", - "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." : "Poté co je zapnuto šifrování, jsou od toho bodu všechny nahrávané soubory šifrovány serverem. Vypnout šifrování bude možné pouze později, až bude šifrovací modul tuto možnost podporovat a po splnění všech nutných podmínek (tzn. nastavení klíčů pro obnovení).", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Šifrování samotné ještě negarantuje bezpečnost systému. Přečtěte si prosím dokumentaci, chcete-li se dozvědět více informací o tom, jak aplikace pro šifrování funguje a jaké jsou podporované případy použití.", - "Be aware that encryption always increases the file size." : "Mějte na paměti, že šifrování vždy navýší velikost souboru.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Je vždy dobré vytvářet pravidelné zálohy svých dat, v případě zapnutého šifrování také zajistěte zálohu šifrovacích klíčů společně se zálohou dat.", - "This is the final warning: Do you really want to enable encryption?" : "Toto je poslední varování: Opravdu si přejete zapnout šifrování?", - "Enable encryption" : "Povolit šifrování", - "No encryption module loaded, please enable an encryption module in the app menu." : "Není načten žádný šifrovací modul, povolte ho prosím v menu aplikací.", - "Select default encryption module:" : "Vybrat výchozí šifrovací modul:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Musíte přenést své šifrovací klíče ze staré verze šifrování (ownCloud <= 8.0) na novou. Povolte prosím \"Default encryption module\" a spusťte příkaz 'occ encryption:migrate'", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Musíte přenést své šifrovací klíče ze staré verze šifrování (ownCloud <= 8.0) na novou.", - "Start migration" : "Spustit migraci", - "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", - "mail" : "email", - "Authentication method" : "Metoda ověření", - "Authentication required" : "Vyžadováno ověření", - "Server address" : "Adresa serveru", - "Port" : "Port", - "Credentials" : "Přihlašovací údaje", - "SMTP Username" : "SMTP uživatelské jméno ", - "SMTP Password" : "SMTP heslo", - "Store credentials" : "Ukládat přihlašovací údaje", - "Test email settings" : "Test nastavení emailu", - "Send email" : "Odeslat email", - "What to log" : "Co se má logovat", - "Download logfile" : "Stáhnout soubor logu", - "More" : "Více", - "Less" : "Méně", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Soubor logu je větší než 100 MB. Jeho stažení zabere nějaký čas!", + "Tips & tricks" : "Tipy a triky", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Je použita databáze SQLite. Pro větší instalace doporučujeme přejít na robustnější databázi.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Obzvláště při používání klientské aplikace pro synchronizaci s desktopem není SQLite doporučeno.", "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>." : "Pro migraci na jinou databázi použijte v příkazovém řádku nástroj: 'occ db:convert-type' nebo nahlédněte do <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentace ↗</a>.", @@ -222,7 +224,6 @@ "Improving the config.php" : "Vylepšení souboru config.php", "Theming" : "Vzhledy", "Hardening and security guidance" : "Průvodce vylepšením bezpečnosti", - "Version" : "Verze", "Developer documentation" : "Vývojářská dokumentace", "Experimental applications ahead" : "Experimentální aplikace v pořadí", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimentální aplikace nejsou prověřovány na bezpečnostní chyby, mohou být nestabilní a velmi se měnit. Jejich instalací můžete způsobit ztrátu dat nebo bezpečnostní problémy.", @@ -278,6 +279,11 @@ "Change password" : "Změnit heslo", "Language" : "Jazyk", "Help translate" : "Pomoci s překladem", + "Get the apps to sync your files" : "Získat aplikace pro synchronizaci vašich souborů", + "Desktop client" : "Aplikace pro počítač", + "Android app" : "Aplikace pro Android", + "iOS app" : "iOS aplikace", + "Show First Run Wizard again" : "Znovu zobrazit průvodce prvním spuštěním", "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", @@ -286,18 +292,17 @@ "App name" : "Jméno aplikace", "Create new app password" : "Vytvořit nové heslo aplikace", "Use the credentials below to configure your app or device." : "Použijte údaje níže pro nastavení aplikace nebo zařízení.", + "For security reasons this password will only be shown once." : "Toto heslo bude z bezpečnostních důvodů zobrazeno pouze jedenkrát.", "Username" : "Uživatelské jméno", "Done" : "Dokončeno", - "Get the apps to sync your files" : "Získat aplikace pro synchronizaci vašich souborů", - "Desktop client" : "Aplikace pro počítač", - "Android app" : "Aplikace pro Android", - "iOS app" : "iOS aplikace", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Chcete-li projekt podpořit\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">připojte se k vývoji</a>\n\t\tnebo\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">šiřte informace dál</a>!", - "Show First Run Wizard again" : "Znovu zobrazit průvodce prvním spuštěním", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Vyvíjeno {communityopen}komunitou Nextcloudu{linkclose}, {githubopen}zdrojový kód{linkclose} je licencován pod {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", + "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!", + "Subscribe to our twitter channel!" : "Odebírejte náš twitter kanál!", + "Subscribe to our news feed!" : "Odebírejte náš kanál s novinkami!", + "Subscribe to our newsletter!" : "Odebírejte náš newsletter!", "Show storage location" : "Cesta k datům", "Show last log in" : "Poslední přihlášení", - "Show user backend" : "Zobrazit uživatelskou podpůrnou vrstvu", + "Show user backend" : "Zobrazit vedení uživatelů", "Send email to new user" : "Poslat email novému uživateli", "Show email address" : "Emailová adresa", "E-Mail" : "Email", @@ -318,6 +323,32 @@ "change full name" : "změnit celé jméno", "set new password" : "nastavit nové heslo", "change email address" : "změnit emailovou adresu", - "Default" : "Výchozí" + "Default" : "Výchozí", + "no group" : "není ve skupině", + "add group" : "přidat skupinu", + "Add Group" : "Přidat skupinu", + "Default Quota" : "Výchozí kvóta", + "Full Name" : "Celé jméno", + "Group Admin for" : "Správce skupiny pro", + "Storage Location" : "Umístění úložiště", + "User Backend" : "Seznam uživatelů", + "Last Login" : "Poslední přihlášení", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Externí úložiště", + "Updates" : "Aktualizace", + "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Oficiální aplikace jsou vyvíjeny Nextcloud komunitou. Poskytují klíčové funkce Nextcloud a jsou připravené na produkční nasazení.", + "No apps found for \"{query}\"" : "Nebyly nalezeny žádné aplikace pro \"{query}\"", + "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Zkontrolujte prosím konfiguraci php podle <a target=\"_blank\" href=\"%s\">instalační dokumentace ↗</a>, hlavně při použití php-fpm.", + "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Vaše databáze neběží s úrovní izolace transakcí \"READ COMMITED\". Toto může způsobit problémy při paralelním spouštění více akcí současně.", + "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Server běží v prostředí Microsoft Windows. Pro optimální uživatelské pohodlí doporučujeme přejít na Linux.", + "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Transakční uzamykání souborů je vypnuto, což může vést k problémům s \"race\" podmínkami. Pro zabránění těmto problémům povolte 'filelocking.enabled' v souboru config.php. Více informací lze nalézt v <a target=\"_blank\" href=\"%s\">dokumentaci ↗</a>.", + "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Prosím překontrolujte <a target=\"_blank\" href=\"%s\">instalační pokyny ↗</a> a zkontrolujte jakékoliv chyby a varování v <a href=\"#log-section\">logu</a>.", + "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Šifrování samotné ještě negarantuje bezpečnost systému. Přečtěte si prosím Nextcloud dokumentaci, chcete-li se dozvědět více informací o tom, jak aplikace pro šifrování funguje a jaké jsou podporované případy použití.", + "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Pro migraci na jinou databázi použijte v příkazovém řádku nástroj: 'occ db:convert-type' nebo nahlédněte do <a target=\"_blank\" href=\"%s\">dokumentace ↗</a>.", + "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Tato aplikace nemá nastavenou žádnou nejnižší podporovanou verzi Nextcloud. Toto bude hlášeno jako chyba ve verzi Nextcloud 11 a pozdější.", + "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Tato aplikace nemá nastavenou žádnou nejvyšší podporovanou verzi Nextcloud. Toto bude hlášeno jako chyba ve verzi Nextcloud 11 a pozdější.", + "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Chcete-li projekt podpořit\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">připojte se k vývoji</a>\n\t\tnebo\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">pomáhejte ostatním uživatelům</a>!", + "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Vyvíjeno {communityopen}Nextcloud komunitou{linkclose}, {githubopen}zdrojový kód{linkclose} je licencován pod {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" }
\ No newline at end of file diff --git a/settings/l10n/de.js b/settings/l10n/de.js index 76ea414a09b..e0a126ca4c8 100644 --- a/settings/l10n/de.js +++ b/settings/l10n/de.js @@ -1,16 +1,16 @@ OC.L10N.register( "settings", { + "Enabled" : "Aktiviert", + "Not enabled" : "Nicht aktiviert", "Wrong password" : "Falsches Passwort", "Saved" : "Gespeichert", "No user supplied" : "Kein Benutzer übermittelt", + "Unable to change password" : "Passwort konnte nicht geändert werden", "Authentication error" : "Authentifizierungsfehler", "Please provide an admin recovery password, otherwise all user data will be lost" : "Bitte gib ein Wiederherstellungspasswort für das Administratorkonto an, da sonst alle Benutzerdaten verlorengehen können", "Wrong admin recovery password. Please check the password and try again." : "Falsches Wiederherstellungspasswort für das Admin-Konto. Bitte überprüfe das Passwort und versuche es erneut.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Das Backend unterstützt die Passwortänderung nicht, aber der Benutzerschlüssel wurde erfolgreich aktualisiert.", - "Unable to change password" : "Passwort konnte nicht geändert werden", - "Enabled" : "Aktiviert", - "Not enabled" : "Nicht aktiviert", "installing and updating apps via the app store or Federated Cloud Sharing" : "Das Installieren und Aktualisieren von Apps durch den App-Store oder durch Federated Cloud Sharing", "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 verwendet eine veraltete %s Version (%s). Bitte aktualisiere dein Betriebssystem, da ansonsten Funktionen, wie z.B. %s, nicht zuverlässig funktionieren werden.", @@ -33,19 +33,8 @@ OC.L10N.register( "Invalid user" : "Ungültiger Benutzer", "Unable to change mail address" : "E-Mail-Adresse konnte nicht geändert werden", "Email saved" : "E-Mail-Adresse gespeichert", - "Your full name has been changed." : "Dein vollständiger Name ist geändert worden.", + "Your full name has been changed." : "Dein vollständiger Name wurde geändert.", "Unable to change full name" : "Der vollständige Name konnte nicht geändert werden", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Sicherheits- & Einrichtungswarnungen", - "Sharing" : "Teilen", - "Server-side encryption" : "Serverseitige Verschlüsselung", - "External Storage" : "Externer Speicher", - "Cron" : "Cron", - "Email server" : "E-Mail-Server", - "Log" : "Log", - "Tips & tricks" : "Tipps & Tricks", - "Updates" : "Updates", "Couldn't remove app." : "Die App konnte nicht entfernt werden.", "Language changed" : "Sprache geändert", "Invalid request" : "Fehlerhafte Anfrage", @@ -55,7 +44,7 @@ OC.L10N.register( "Couldn't update app." : "Die App konnte nicht aktualisiert werden.", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Bist du sicher, dass du „{domain}“ als vertrauenswürdige Domain hinzufügen möchtest?", "Add trusted domain" : "Vertrauenswürdige Domain hinzufügen", - "Migration in progress. Please wait until the migration is finished" : "Migration in Arbeit. Bitte warte, bis die Migration beendet ist", + "Migration in progress. Please wait until the migration is finished" : "Migration läuft. Bitte warte, bis die Migrationabgeschlossen ist", "Migration started …" : "Migration begonnen…", "Sending..." : "Senden…", "Official" : "Offiziell", @@ -77,14 +66,14 @@ OC.L10N.register( "Error: this app cannot be enabled because it makes the server unstable" : "Fehler: Diese Anwendung kann nicht aktiviert werden, da sie den Server unstabil machen würde", "Error: could not disable broken app" : "Fehler: Die beschädigte Anwendung konnte nicht deaktiviert werden", "Error while disabling broken app" : "Beim Deaktivieren der beschädigten App ist ein Fehler aufgetreten", - "Updating...." : "Aktualisierung…", + "Updating...." : "Aktualisiere…", "Error while updating app" : "Fehler beim Aktualisieren der App", "Updated" : "Aktualisiert", - "Uninstalling ...." : "Deinstallieren…", + "Uninstalling ...." : "Deinstalliere…", "Error while uninstalling app" : "Fehler beim Deinstallieren der App", "Uninstall" : "Deinstallieren", "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 aktualisiert", + "App update" : "App Aktualisierung", "No apps found for {query}" : "Keine Applikationen für {query} gefunden", "Disconnect" : "Trennen", "Internet Explorer" : "Internet Explorer", @@ -98,6 +87,10 @@ OC.L10N.register( "Android Client" : "Android Client", "Sync client - {os}" : "Synchronisationssoftware - {os}", "This session" : "Diese Sitzung", + "Copied!" : "Kopiert!", + "Not supported!" : "Nicht unterstützt!", + "Press ⌘-C to copy." : "⌘-C zum Kopieren drücken.", + "Press Ctrl-C to copy." : "Ctrl-C zum Kopieren drücken.", "Error while loading browser sessions and device tokens" : "Fehler beim Laden der Browser-Sitzungen und Gerätetoken", "Error while creating device token" : "Fehler beim Erstellen des Gerätetokens", "Error while deleting the token" : "Fehler beim Löschen des Gerätetokens", @@ -133,17 +126,55 @@ OC.L10N.register( "Sessions" : "Sitzungen", "App passwords" : "App-Passwörter", "Sync clients" : "Sync-Clients", - "Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale Probleme, Fehler, Warnungen, Infos, Debug-Meldungen)", - "Info, warnings, errors and fatal issues" : "Infos, Warnungen, Fehler und fatale Probleme", - "Warnings, errors and fatal issues" : "Warnungen, Fehler und fatale Probleme", - "Errors and fatal issues" : "Fehler und fatale Probleme", - "Fatal issues only" : "Nur fatale Probleme", "None" : "Nichts", "Login" : "Anmelden", "Plain" : "Plain", "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", + "Email server" : "E-Mail-Server", + "Open documentation" : "Dokumentation öffnen", + "This is used for sending out notifications." : "Dies wird zum Senden von Benachrichtigungen verwendet.", + "Send mode" : "Sendemodus", + "Encryption" : "Verschlüsselung", + "From address" : "Absenderadresse", + "mail" : "E-Mail", + "Authentication method" : "Authentifizierungsmethode", + "Authentication required" : "Authentifizierung benötigt", + "Server address" : "Serveradresse", + "Port" : "Port", + "Credentials" : "Zugangsdaten", + "SMTP Username" : "SMTP Benutzername", + "SMTP Password" : "SMTP Passwort", + "Store credentials" : "Anmeldeinformationen speichern", + "Test email settings" : "E-Mail-Einstellungen testen", + "Send email" : "E-Mail senden", + "Server-side encryption" : "Serverseitige Verschlüsselung", + "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.", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Verschlüsselung alleine garantiert nicht die Systemsicherheit. Bitte lesen Sie in der Dokumentation nach, wie die Verschlüsselungs-app funktioniert und welche Anwendungsfälle unterstützt werden.", + "Be aware that encryption always increases the file size." : "Sei dir bewusst, dass die Verschlüsselung immer die Dateigröße erhöht.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Es ist immer gut, regelmäßig Sicherungskopien von deinen Daten zu erstellen. Falls du die Verschlüsselung nutzt, sollte auch eine Sicherung der Kodierungsschlüssel zusammen mit deinen Daten durchgeführt werden.", + "This is the final warning: Do you really want to enable encryption?" : "Dies ist die letzte Warnung: Verschlüsselung wirklich aktivieren?", + "Enable encryption" : "Verschlüsselung aktivieren", + "No encryption module loaded, please enable an encryption module in the app menu." : "Es wurde kein Verschlüsselungs-Modul geladen, bitte ein Verschlüsselungs-Modul im Anwendungs-Menü aktivieren.", + "Select default encryption module:" : "Standard-Verschlüsselungs-Modul auswählen:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Die Kodierungsschlüssel der alten Verschlüsselung müssen zur neuen Version migriert werden (ownCloud <= 8.0). Bitte »Default Encryption Module« aktivieren und »occ encryption:migrate« aufrufen.", + "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", + "Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale Probleme, Fehler, Warnungen, Infos, Debug-Meldungen)", + "Info, warnings, errors and fatal issues" : "Infos, Warnungen, Fehler und fatale Probleme", + "Warnings, errors and fatal issues" : "Warnungen, Fehler und fatale Probleme", + "Errors and fatal issues" : "Fehler und fatale Probleme", + "Fatal issues only" : "Nur fatale Probleme", + "Log" : "Protokoll", + "What to log" : "Was protokolliert wird", + "Download logfile" : "Protokolldatei herunterladen", + "More" : "Mehr", + "Less" : "Weniger", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Die Logdatei ist größer als 100 MB. Es kann etwas Zeit beanspruchen, sie herunterzuladen!", + "Security & setup warnings" : "Sicherheits- & Einrichtungswarnungen", "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.", @@ -160,7 +191,15 @@ OC.L10N.register( "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Die Ausführung des Cron-Jobs über die Kommandozeile war nicht möglich. Die folgenden technischen Fehler sind dabei aufgetreten:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Bitte überprüfe noch einmal die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Installationsanleitungen ↗</a> und kontrolliere das <a href=\"#log-section\">Log</a> auf mögliche Fehler oder Warnungen.", "All checks passed." : "Alle Überprüfungen bestanden.", - "Open documentation" : "Dokumentation öffnen", + "Cron" : "Cron", + "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!", + "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.", + "Version" : "Version", + "Sharing" : "Teilen", "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", @@ -171,51 +210,13 @@ OC.L10N.register( "days" : "Tagen", "Enforce expiration date" : "Ablaufdatum erzwingen", "Allow resharing" : "Weiterverteilen erlauben", - "Allow sharing with groups" : "Mit Gruppen teilen erlauben", + "Allow sharing with groups" : "Teilen mit Gruppen erlauben", "Restrict users to only share with users in their groups" : "Benutzer auf das Teilen innerhalb ihrer Gruppen beschränken", "Allow users to send mail notification for shared files to other users" : "Benutzern erlauben, E-Mail-Benachrichtigungen für geteilte Dateien an andere Benutzer zu senden", "Exclude groups from sharing" : "Gruppen von Freigaben ausschließen", "These groups will still be able to receive shares, but not to initiate them." : "Diese Gruppen können weiterhin Freigaben empfangen, aber selbst keine mehr initiieren.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Die Auto-Vervollständigung von Benutzernamen im Teilen-Dialog erlauben. Wenn dies deaktiviert ist, muss der vollständige Benutzername eingegeben werden.", - "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!", - "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.", - "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.", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Verschlüsselung alleine garantiert nicht die Systemsicherheit. Bitte lesen Sie in der Dokumentation nach, wie die Verschlüsselungs-app funktioniert und welche Anwendungsfälle unterstützt werden.", - "Be aware that encryption always increases the file size." : "Sei dir bewusst, dass die Verschlüsselung immer die Dateigröße erhöht.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Es ist immer gut, regelmäßig Sicherungskopien von deinen Daten zu erstellen. Falls du die Verschlüsselung nutzt, sollte auch eine Sicherung der Kodierungsschlüssel zusammen mit deinen Daten durchgeführt werden.", - "This is the final warning: Do you really want to enable encryption?" : "Dies ist die letzte Warnung: Verschlüsselung wirklich aktivieren?", - "Enable encryption" : "Verschlüsselung aktivieren", - "No encryption module loaded, please enable an encryption module in the app menu." : "Es wurde kein Verschlüsselungs-Modul geladen, bitte ein Verschlüsselungs-Modul im Anwendungs-Menü aktivieren.", - "Select default encryption module:" : "Standard-Verschlüsselungs-Modul auswählen:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Die Kodierungsschlüssel der alten Verschlüsselung müssen zur neuen Version migriert werden (ownCloud <= 8.0). Bitte »Default Encryption Module« aktivieren und »occ encryption:migrate« aufrufen.", - "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", - "This is used for sending out notifications." : "Dies wird zum Senden von Benachrichtigungen verwendet.", - "Send mode" : "Sendemodus", - "Encryption" : "Verschlüsselung", - "From address" : "Absenderadresse", - "mail" : "Mail", - "Authentication method" : "Authentifizierungsmethode", - "Authentication required" : "Authentifizierung benötigt", - "Server address" : "Serveradresse", - "Port" : "Port", - "Credentials" : "Zugangsdaten", - "SMTP Username" : "SMTP Benutzername", - "SMTP Password" : "SMTP Passwort", - "Store credentials" : "Anmeldeinformationen speichern", - "Test email settings" : "E-Mail-Einstellungen testen", - "Send email" : "E-Mail senden", - "What to log" : "Was für ein Protokoll", - "Download logfile" : "Logdatei herunterladen", - "More" : "Mehr", - "Less" : "Weniger", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Die Logdatei ist größer als 100 MB. Es kann etwas Zeit beanspruchen, sie herunterzuladen!", + "Tips & tricks" : "Tipps & Tricks", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite wird als Datenbank verwendet. Bei größeren Installationen wird empfohlen, auf ein anderes Datenbank-Backend zu wechseln.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Insbesondere bei der Nutzung des Desktop Clients zur Dateisynchronisierung wird vom Einsatz von SQLite abgeraten.", "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.", @@ -223,9 +224,8 @@ OC.L10N.register( "Advanced monitoring" : "Erweitertes Monitoring", "Performance tuning" : "Leistungsoptimierung", "Improving the config.php" : "Die config.php optimieren", - "Theming" : "Themes verwenden", + "Theming" : "Themen verwenden", "Hardening and security guidance" : "Systemhärtung und Sicherheitsempfehlungen", - "Version" : "Version", "Developer documentation" : "Dokumentation für Entwickler", "Experimental applications ahead" : "Experimentelle Apps nachfolgend", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimentelle Apps sind nicht auf Sicherheitsprobleme hin überprüft, sind neu oder bekanntermaßen instabil und befinden sich in intensiver Entwicklung. Ihre Installation kann Datenverlust oder Sicherheitslücken hervorrufen.", @@ -281,6 +281,12 @@ OC.L10N.register( "Change password" : "Passwort ändern", "Language" : "Sprache", "Help translate" : "Hilf bei der Übersetzung", + "Get the apps to sync your files" : "Lade die Apps zur Synchronisierung Deiner Daten herunter", + "Desktop client" : "Desktop-Client", + "Android app" : "Android-App", + "iOS app" : "iOS-App", + "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Wenn Du das Projekt unterstützen möchtest ⇥⇥<a href=\"https://nextcloud.com/contribute\" ⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">hilf uns bei der Weiterentwicklung</a> ⇥⇥oder ⇥⇥<a href=\"https://nextcloud.com/contribute\" ⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">empfehle es weiter</a>!", + "Show First Run Wizard again" : "Den Einrichtungsassistenten erneut anzeigen", "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", @@ -289,15 +295,15 @@ OC.L10N.register( "App name" : "App-Name", "Create new app password" : "Neues App-Passwort erstellen", "Use the credentials below to configure your app or device." : "Nutze die unten angebenen Anmeldeinformationen, um deine App oder dein Gerät zu konfigurieren.", + "For security reasons this password will only be shown once." : "Aus Sicherheitsgründen wird das Passwort nur einmal angezeigt.", "Username" : "Benutzername", "Done" : "Erledigt", - "Get the apps to sync your files" : "Lade die Apps zur Synchronisierung Deiner Daten herunter", - "Desktop client" : "Desktop-Client", - "Android app" : "Android-App", - "iOS app" : "iOS-App", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Wenn du das Projekt unterstützen möchtest\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">hilf uns bei der Weiterentwicklung</a>\n⇥⇥oder\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">empfehle es weiter</a>!", - "Show First Run Wizard again" : "Den Einrichtungsassistenten erneut anzeigen", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Entwickelt von der {communityopen}Nextcloud Community{linkclose}. Der {githubopen}Quellcode{linkclose} ist unter {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} verfügbar.", + "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 zu Google Plus!", + "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!", + "Subscribe to our newsletter!" : "Abonnieren Sie unseren Newsletter!", "Show storage location" : "Speicherort anzeigen", "Show last log in" : "Letzte Anmeldung anzeigen", "Show user backend" : "Benutzer-Backend anzeigen", @@ -321,6 +327,32 @@ OC.L10N.register( "change full name" : "Vollständigen Namen ändern", "set new password" : "Neues Passwort setzen", "change email address" : "E-Mail-Adresse ändern", - "Default" : "Standard" + "Default" : "Standard", + "no group" : "Keine Gruppe", + "add group" : "Gruppe hinzufügen", + "Add Group" : "Gruppe hinzufügen", + "Default Quota" : "Standard-Quota", + "Full Name" : "Vollständiger Name", + "Group Admin for" : "Gruppenadministrator für", + "Storage Location" : "Speicherort", + "User Backend" : "Benutzer-Backend", + "Last Login" : "Letzte Anmeldung", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Externer Speicher", + "Updates" : "Updates", + "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Offizielle Apps werden von und innerhalb der Community entwickelt. Sie stellen die zentralen Funktionen bereit und sind für den produktiven Einsatz geeignet.", + "No apps found for \"{query}\"" : "Keine Applikationen für \"{query}\" gefunden", + "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Bitte die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Installationsdokumentation ↗</a>auf Hinweise zur PHP-Konfiguration durchlesen, sowie die PHP-Konfiguration des Servers überprüfen, insbesondere dann, wenn PHP-FPM eingesetzt wird.", + "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Deine Datenbank läuft nicht mit der \"READ COMMITED\" Transaktionsisolationsstufe. Dies kann Probleme hervorrufen, wenn mehrere Aktionen parallel ausgeführt werden.", + "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Dein Server wird mit Microsoft Windows betrieben. Für ein optimales Nutzungserlebnis empfehlen wir dringend Linux.", + "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Transaktionales Sperren ist deaktiviert, was zu Problemen mit Laufzeitbedingungen führen kann. 'filelocking.enabled' in der config.php aktivieren, um diese Probleme zu vermeiden. Weitere Informationen findest du in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation ↗</a>.", + "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Bitte überprüfe noch einmal die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Installationsanleitungen ↗</a> und kontrolliere das <a href=\"#log-section\">Log</a> auf mögliche Fehler oder Warnungen.", + "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Verschlüsselung alleine garantiert nicht die Systemsicherheit. Bitte lesen Sie in der Dokumentation nach, wie die Verschlüsselungs-App funktioniert und welche Anwendungsfälle unterstützt werden.", + "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" 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.", + "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Für diese App wurde keine untere Versionsgrenze für Nextcloud gesetzt. Dies wird zukünftig als Fehler behandelt.", + "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Für diese App wurde keine obere Versionsgrenze für Nextcloud gesetzt. Dies wird zukünftig als Fehler behandelt.", + "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Wenn du das Projekt unterstützen möchtest\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">hilf uns bei der Weiterentwicklung</a>\n⇥⇥oder\n⇥⇥<a href=\"https://help.nextcloud.com/\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">hilf anderen Nutzern</a>!", + "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Entwickelt von der {communityopen}Nextcloud Community{linkclose}. Der {githubopen}Quellcode{linkclose} ist unter {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} verfügbar." }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/de.json b/settings/l10n/de.json index 8e40adaa26d..0e79593640b 100644 --- a/settings/l10n/de.json +++ b/settings/l10n/de.json @@ -1,14 +1,14 @@ { "translations": { + "Enabled" : "Aktiviert", + "Not enabled" : "Nicht aktiviert", "Wrong password" : "Falsches Passwort", "Saved" : "Gespeichert", "No user supplied" : "Kein Benutzer übermittelt", + "Unable to change password" : "Passwort konnte nicht geändert werden", "Authentication error" : "Authentifizierungsfehler", "Please provide an admin recovery password, otherwise all user data will be lost" : "Bitte gib ein Wiederherstellungspasswort für das Administratorkonto an, da sonst alle Benutzerdaten verlorengehen können", "Wrong admin recovery password. Please check the password and try again." : "Falsches Wiederherstellungspasswort für das Admin-Konto. Bitte überprüfe das Passwort und versuche es erneut.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Das Backend unterstützt die Passwortänderung nicht, aber der Benutzerschlüssel wurde erfolgreich aktualisiert.", - "Unable to change password" : "Passwort konnte nicht geändert werden", - "Enabled" : "Aktiviert", - "Not enabled" : "Nicht aktiviert", "installing and updating apps via the app store or Federated Cloud Sharing" : "Das Installieren und Aktualisieren von Apps durch den App-Store oder durch Federated Cloud Sharing", "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 verwendet eine veraltete %s Version (%s). Bitte aktualisiere dein Betriebssystem, da ansonsten Funktionen, wie z.B. %s, nicht zuverlässig funktionieren werden.", @@ -31,19 +31,8 @@ "Invalid user" : "Ungültiger Benutzer", "Unable to change mail address" : "E-Mail-Adresse konnte nicht geändert werden", "Email saved" : "E-Mail-Adresse gespeichert", - "Your full name has been changed." : "Dein vollständiger Name ist geändert worden.", + "Your full name has been changed." : "Dein vollständiger Name wurde geändert.", "Unable to change full name" : "Der vollständige Name konnte nicht geändert werden", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Sicherheits- & Einrichtungswarnungen", - "Sharing" : "Teilen", - "Server-side encryption" : "Serverseitige Verschlüsselung", - "External Storage" : "Externer Speicher", - "Cron" : "Cron", - "Email server" : "E-Mail-Server", - "Log" : "Log", - "Tips & tricks" : "Tipps & Tricks", - "Updates" : "Updates", "Couldn't remove app." : "Die App konnte nicht entfernt werden.", "Language changed" : "Sprache geändert", "Invalid request" : "Fehlerhafte Anfrage", @@ -53,7 +42,7 @@ "Couldn't update app." : "Die App konnte nicht aktualisiert werden.", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Bist du sicher, dass du „{domain}“ als vertrauenswürdige Domain hinzufügen möchtest?", "Add trusted domain" : "Vertrauenswürdige Domain hinzufügen", - "Migration in progress. Please wait until the migration is finished" : "Migration in Arbeit. Bitte warte, bis die Migration beendet ist", + "Migration in progress. Please wait until the migration is finished" : "Migration läuft. Bitte warte, bis die Migrationabgeschlossen ist", "Migration started …" : "Migration begonnen…", "Sending..." : "Senden…", "Official" : "Offiziell", @@ -75,14 +64,14 @@ "Error: this app cannot be enabled because it makes the server unstable" : "Fehler: Diese Anwendung kann nicht aktiviert werden, da sie den Server unstabil machen würde", "Error: could not disable broken app" : "Fehler: Die beschädigte Anwendung konnte nicht deaktiviert werden", "Error while disabling broken app" : "Beim Deaktivieren der beschädigten App ist ein Fehler aufgetreten", - "Updating...." : "Aktualisierung…", + "Updating...." : "Aktualisiere…", "Error while updating app" : "Fehler beim Aktualisieren der App", "Updated" : "Aktualisiert", - "Uninstalling ...." : "Deinstallieren…", + "Uninstalling ...." : "Deinstalliere…", "Error while uninstalling app" : "Fehler beim Deinstallieren der App", "Uninstall" : "Deinstallieren", "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 aktualisiert", + "App update" : "App Aktualisierung", "No apps found for {query}" : "Keine Applikationen für {query} gefunden", "Disconnect" : "Trennen", "Internet Explorer" : "Internet Explorer", @@ -96,6 +85,10 @@ "Android Client" : "Android Client", "Sync client - {os}" : "Synchronisationssoftware - {os}", "This session" : "Diese Sitzung", + "Copied!" : "Kopiert!", + "Not supported!" : "Nicht unterstützt!", + "Press ⌘-C to copy." : "⌘-C zum Kopieren drücken.", + "Press Ctrl-C to copy." : "Ctrl-C zum Kopieren drücken.", "Error while loading browser sessions and device tokens" : "Fehler beim Laden der Browser-Sitzungen und Gerätetoken", "Error while creating device token" : "Fehler beim Erstellen des Gerätetokens", "Error while deleting the token" : "Fehler beim Löschen des Gerätetokens", @@ -131,17 +124,55 @@ "Sessions" : "Sitzungen", "App passwords" : "App-Passwörter", "Sync clients" : "Sync-Clients", - "Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale Probleme, Fehler, Warnungen, Infos, Debug-Meldungen)", - "Info, warnings, errors and fatal issues" : "Infos, Warnungen, Fehler und fatale Probleme", - "Warnings, errors and fatal issues" : "Warnungen, Fehler und fatale Probleme", - "Errors and fatal issues" : "Fehler und fatale Probleme", - "Fatal issues only" : "Nur fatale Probleme", "None" : "Nichts", "Login" : "Anmelden", "Plain" : "Plain", "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", + "Email server" : "E-Mail-Server", + "Open documentation" : "Dokumentation öffnen", + "This is used for sending out notifications." : "Dies wird zum Senden von Benachrichtigungen verwendet.", + "Send mode" : "Sendemodus", + "Encryption" : "Verschlüsselung", + "From address" : "Absenderadresse", + "mail" : "E-Mail", + "Authentication method" : "Authentifizierungsmethode", + "Authentication required" : "Authentifizierung benötigt", + "Server address" : "Serveradresse", + "Port" : "Port", + "Credentials" : "Zugangsdaten", + "SMTP Username" : "SMTP Benutzername", + "SMTP Password" : "SMTP Passwort", + "Store credentials" : "Anmeldeinformationen speichern", + "Test email settings" : "E-Mail-Einstellungen testen", + "Send email" : "E-Mail senden", + "Server-side encryption" : "Serverseitige Verschlüsselung", + "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.", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Verschlüsselung alleine garantiert nicht die Systemsicherheit. Bitte lesen Sie in der Dokumentation nach, wie die Verschlüsselungs-app funktioniert und welche Anwendungsfälle unterstützt werden.", + "Be aware that encryption always increases the file size." : "Sei dir bewusst, dass die Verschlüsselung immer die Dateigröße erhöht.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Es ist immer gut, regelmäßig Sicherungskopien von deinen Daten zu erstellen. Falls du die Verschlüsselung nutzt, sollte auch eine Sicherung der Kodierungsschlüssel zusammen mit deinen Daten durchgeführt werden.", + "This is the final warning: Do you really want to enable encryption?" : "Dies ist die letzte Warnung: Verschlüsselung wirklich aktivieren?", + "Enable encryption" : "Verschlüsselung aktivieren", + "No encryption module loaded, please enable an encryption module in the app menu." : "Es wurde kein Verschlüsselungs-Modul geladen, bitte ein Verschlüsselungs-Modul im Anwendungs-Menü aktivieren.", + "Select default encryption module:" : "Standard-Verschlüsselungs-Modul auswählen:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Die Kodierungsschlüssel der alten Verschlüsselung müssen zur neuen Version migriert werden (ownCloud <= 8.0). Bitte »Default Encryption Module« aktivieren und »occ encryption:migrate« aufrufen.", + "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", + "Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale Probleme, Fehler, Warnungen, Infos, Debug-Meldungen)", + "Info, warnings, errors and fatal issues" : "Infos, Warnungen, Fehler und fatale Probleme", + "Warnings, errors and fatal issues" : "Warnungen, Fehler und fatale Probleme", + "Errors and fatal issues" : "Fehler und fatale Probleme", + "Fatal issues only" : "Nur fatale Probleme", + "Log" : "Protokoll", + "What to log" : "Was protokolliert wird", + "Download logfile" : "Protokolldatei herunterladen", + "More" : "Mehr", + "Less" : "Weniger", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Die Logdatei ist größer als 100 MB. Es kann etwas Zeit beanspruchen, sie herunterzuladen!", + "Security & setup warnings" : "Sicherheits- & Einrichtungswarnungen", "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.", @@ -158,7 +189,15 @@ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Die Ausführung des Cron-Jobs über die Kommandozeile war nicht möglich. Die folgenden technischen Fehler sind dabei aufgetreten:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Bitte überprüfe noch einmal die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Installationsanleitungen ↗</a> und kontrolliere das <a href=\"#log-section\">Log</a> auf mögliche Fehler oder Warnungen.", "All checks passed." : "Alle Überprüfungen bestanden.", - "Open documentation" : "Dokumentation öffnen", + "Cron" : "Cron", + "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!", + "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.", + "Version" : "Version", + "Sharing" : "Teilen", "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", @@ -169,51 +208,13 @@ "days" : "Tagen", "Enforce expiration date" : "Ablaufdatum erzwingen", "Allow resharing" : "Weiterverteilen erlauben", - "Allow sharing with groups" : "Mit Gruppen teilen erlauben", + "Allow sharing with groups" : "Teilen mit Gruppen erlauben", "Restrict users to only share with users in their groups" : "Benutzer auf das Teilen innerhalb ihrer Gruppen beschränken", "Allow users to send mail notification for shared files to other users" : "Benutzern erlauben, E-Mail-Benachrichtigungen für geteilte Dateien an andere Benutzer zu senden", "Exclude groups from sharing" : "Gruppen von Freigaben ausschließen", "These groups will still be able to receive shares, but not to initiate them." : "Diese Gruppen können weiterhin Freigaben empfangen, aber selbst keine mehr initiieren.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Die Auto-Vervollständigung von Benutzernamen im Teilen-Dialog erlauben. Wenn dies deaktiviert ist, muss der vollständige Benutzername eingegeben werden.", - "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!", - "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.", - "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.", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Verschlüsselung alleine garantiert nicht die Systemsicherheit. Bitte lesen Sie in der Dokumentation nach, wie die Verschlüsselungs-app funktioniert und welche Anwendungsfälle unterstützt werden.", - "Be aware that encryption always increases the file size." : "Sei dir bewusst, dass die Verschlüsselung immer die Dateigröße erhöht.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Es ist immer gut, regelmäßig Sicherungskopien von deinen Daten zu erstellen. Falls du die Verschlüsselung nutzt, sollte auch eine Sicherung der Kodierungsschlüssel zusammen mit deinen Daten durchgeführt werden.", - "This is the final warning: Do you really want to enable encryption?" : "Dies ist die letzte Warnung: Verschlüsselung wirklich aktivieren?", - "Enable encryption" : "Verschlüsselung aktivieren", - "No encryption module loaded, please enable an encryption module in the app menu." : "Es wurde kein Verschlüsselungs-Modul geladen, bitte ein Verschlüsselungs-Modul im Anwendungs-Menü aktivieren.", - "Select default encryption module:" : "Standard-Verschlüsselungs-Modul auswählen:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Die Kodierungsschlüssel der alten Verschlüsselung müssen zur neuen Version migriert werden (ownCloud <= 8.0). Bitte »Default Encryption Module« aktivieren und »occ encryption:migrate« aufrufen.", - "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", - "This is used for sending out notifications." : "Dies wird zum Senden von Benachrichtigungen verwendet.", - "Send mode" : "Sendemodus", - "Encryption" : "Verschlüsselung", - "From address" : "Absenderadresse", - "mail" : "Mail", - "Authentication method" : "Authentifizierungsmethode", - "Authentication required" : "Authentifizierung benötigt", - "Server address" : "Serveradresse", - "Port" : "Port", - "Credentials" : "Zugangsdaten", - "SMTP Username" : "SMTP Benutzername", - "SMTP Password" : "SMTP Passwort", - "Store credentials" : "Anmeldeinformationen speichern", - "Test email settings" : "E-Mail-Einstellungen testen", - "Send email" : "E-Mail senden", - "What to log" : "Was für ein Protokoll", - "Download logfile" : "Logdatei herunterladen", - "More" : "Mehr", - "Less" : "Weniger", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Die Logdatei ist größer als 100 MB. Es kann etwas Zeit beanspruchen, sie herunterzuladen!", + "Tips & tricks" : "Tipps & Tricks", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite wird als Datenbank verwendet. Bei größeren Installationen wird empfohlen, auf ein anderes Datenbank-Backend zu wechseln.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Insbesondere bei der Nutzung des Desktop Clients zur Dateisynchronisierung wird vom Einsatz von SQLite abgeraten.", "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.", @@ -221,9 +222,8 @@ "Advanced monitoring" : "Erweitertes Monitoring", "Performance tuning" : "Leistungsoptimierung", "Improving the config.php" : "Die config.php optimieren", - "Theming" : "Themes verwenden", + "Theming" : "Themen verwenden", "Hardening and security guidance" : "Systemhärtung und Sicherheitsempfehlungen", - "Version" : "Version", "Developer documentation" : "Dokumentation für Entwickler", "Experimental applications ahead" : "Experimentelle Apps nachfolgend", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimentelle Apps sind nicht auf Sicherheitsprobleme hin überprüft, sind neu oder bekanntermaßen instabil und befinden sich in intensiver Entwicklung. Ihre Installation kann Datenverlust oder Sicherheitslücken hervorrufen.", @@ -279,6 +279,12 @@ "Change password" : "Passwort ändern", "Language" : "Sprache", "Help translate" : "Hilf bei der Übersetzung", + "Get the apps to sync your files" : "Lade die Apps zur Synchronisierung Deiner Daten herunter", + "Desktop client" : "Desktop-Client", + "Android app" : "Android-App", + "iOS app" : "iOS-App", + "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Wenn Du das Projekt unterstützen möchtest ⇥⇥<a href=\"https://nextcloud.com/contribute\" ⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">hilf uns bei der Weiterentwicklung</a> ⇥⇥oder ⇥⇥<a href=\"https://nextcloud.com/contribute\" ⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">empfehle es weiter</a>!", + "Show First Run Wizard again" : "Den Einrichtungsassistenten erneut anzeigen", "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", @@ -287,15 +293,15 @@ "App name" : "App-Name", "Create new app password" : "Neues App-Passwort erstellen", "Use the credentials below to configure your app or device." : "Nutze die unten angebenen Anmeldeinformationen, um deine App oder dein Gerät zu konfigurieren.", + "For security reasons this password will only be shown once." : "Aus Sicherheitsgründen wird das Passwort nur einmal angezeigt.", "Username" : "Benutzername", "Done" : "Erledigt", - "Get the apps to sync your files" : "Lade die Apps zur Synchronisierung Deiner Daten herunter", - "Desktop client" : "Desktop-Client", - "Android app" : "Android-App", - "iOS app" : "iOS-App", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Wenn du das Projekt unterstützen möchtest\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">hilf uns bei der Weiterentwicklung</a>\n⇥⇥oder\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">empfehle es weiter</a>!", - "Show First Run Wizard again" : "Den Einrichtungsassistenten erneut anzeigen", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Entwickelt von der {communityopen}Nextcloud Community{linkclose}. Der {githubopen}Quellcode{linkclose} ist unter {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} verfügbar.", + "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 zu Google Plus!", + "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!", + "Subscribe to our newsletter!" : "Abonnieren Sie unseren Newsletter!", "Show storage location" : "Speicherort anzeigen", "Show last log in" : "Letzte Anmeldung anzeigen", "Show user backend" : "Benutzer-Backend anzeigen", @@ -319,6 +325,32 @@ "change full name" : "Vollständigen Namen ändern", "set new password" : "Neues Passwort setzen", "change email address" : "E-Mail-Adresse ändern", - "Default" : "Standard" + "Default" : "Standard", + "no group" : "Keine Gruppe", + "add group" : "Gruppe hinzufügen", + "Add Group" : "Gruppe hinzufügen", + "Default Quota" : "Standard-Quota", + "Full Name" : "Vollständiger Name", + "Group Admin for" : "Gruppenadministrator für", + "Storage Location" : "Speicherort", + "User Backend" : "Benutzer-Backend", + "Last Login" : "Letzte Anmeldung", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Externer Speicher", + "Updates" : "Updates", + "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Offizielle Apps werden von und innerhalb der Community entwickelt. Sie stellen die zentralen Funktionen bereit und sind für den produktiven Einsatz geeignet.", + "No apps found for \"{query}\"" : "Keine Applikationen für \"{query}\" gefunden", + "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Bitte die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Installationsdokumentation ↗</a>auf Hinweise zur PHP-Konfiguration durchlesen, sowie die PHP-Konfiguration des Servers überprüfen, insbesondere dann, wenn PHP-FPM eingesetzt wird.", + "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Deine Datenbank läuft nicht mit der \"READ COMMITED\" Transaktionsisolationsstufe. Dies kann Probleme hervorrufen, wenn mehrere Aktionen parallel ausgeführt werden.", + "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Dein Server wird mit Microsoft Windows betrieben. Für ein optimales Nutzungserlebnis empfehlen wir dringend Linux.", + "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Transaktionales Sperren ist deaktiviert, was zu Problemen mit Laufzeitbedingungen führen kann. 'filelocking.enabled' in der config.php aktivieren, um diese Probleme zu vermeiden. Weitere Informationen findest du in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation ↗</a>.", + "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Bitte überprüfe noch einmal die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Installationsanleitungen ↗</a> und kontrolliere das <a href=\"#log-section\">Log</a> auf mögliche Fehler oder Warnungen.", + "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Verschlüsselung alleine garantiert nicht die Systemsicherheit. Bitte lesen Sie in der Dokumentation nach, wie die Verschlüsselungs-App funktioniert und welche Anwendungsfälle unterstützt werden.", + "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" 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.", + "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Für diese App wurde keine untere Versionsgrenze für Nextcloud gesetzt. Dies wird zukünftig als Fehler behandelt.", + "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Für diese App wurde keine obere Versionsgrenze für Nextcloud gesetzt. Dies wird zukünftig als Fehler behandelt.", + "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Wenn du das Projekt unterstützen möchtest\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">hilf uns bei der Weiterentwicklung</a>\n⇥⇥oder\n⇥⇥<a href=\"https://help.nextcloud.com/\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">hilf anderen Nutzern</a>!", + "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Entwickelt von der {communityopen}Nextcloud Community{linkclose}. Der {githubopen}Quellcode{linkclose} ist unter {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} verfügbar." },"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 4474c11a040..5cc74a6aaad 100644 --- a/settings/l10n/de_DE.js +++ b/settings/l10n/de_DE.js @@ -1,16 +1,16 @@ OC.L10N.register( "settings", { + "Enabled" : "Aktiviert", + "Not enabled" : "Nicht aktiviert", "Wrong password" : "Falsches Passwort", "Saved" : "Gespeichert", "No user supplied" : "Kein Benutzer angegeben", + "Unable to change password" : "Passwort konnte nicht geändert werden", "Authentication error" : "Authentifizierungsfehler", "Please provide an admin recovery password, otherwise all user data will be lost" : "Bitte geben Sie ein Wiederherstellungspasswort für das Administratorkonto an, da sonst alle Benutzerdaten verlorengehen können", "Wrong admin recovery password. Please check the password and try again." : "Falsches Wiederherstellungspasswort für das Admin-Konto. Bitte überprüfen Sie das Passwort und versuchen Sie es erneut.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Das Backend unterstützt die Passwortänderung nicht, aber der Benutzerschlüssel wurde erfolgreich aktualisiert.", - "Unable to change password" : "Passwort konnte nicht geändert werden", - "Enabled" : "Aktiviert", - "Not enabled" : "Nicht aktiviert", "installing and updating apps via the app store or Federated Cloud Sharing" : "Das Installieren und Aktualisieren von Apps durch den App-Store oder durch Federated Cloud Sharing", "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 verwendet eine veraltete %s Version (%s). Bitte aktualisieren Sie ihr Betriebssystem, da ansonsten Funktionen, wie z.B. %s, nicht zuverlässig funktionieren werden.", @@ -35,17 +35,6 @@ OC.L10N.register( "Email saved" : "E-Mail-Adresse gespeichert", "Your full name has been changed." : "Ihr vollständiger Name ist geändert worden.", "Unable to change full name" : "Der vollständige Name konnte nicht geändert werden", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Sicherheits- & Einrichtungswarnungen", - "Sharing" : "Teilen", - "Server-side encryption" : "Serverseitige Verschlüsselung", - "External Storage" : "Externer Speicher", - "Cron" : "Cron", - "Email server" : "E-Mail-Server", - "Log" : "Log", - "Tips & tricks" : "Tipps & Tricks", - "Updates" : "Updates", "Couldn't remove app." : "Die App konnte nicht entfernt werden.", "Language changed" : "Sprache geändert", "Invalid request" : "Ungültige Anforderung", @@ -98,6 +87,10 @@ OC.L10N.register( "Android Client" : "Android-Client", "Sync client - {os}" : "Synchronisationssoftware - {os}", "This session" : "Diese Sitzung", + "Copied!" : "Kopiert!", + "Not supported!" : "Nicht unterstützt!", + "Press ⌘-C to copy." : "⌘-C zum Kopieren drücken.", + "Press Ctrl-C to copy." : "Ctrl-C zum Kopieren drücken.", "Error while loading browser sessions and device tokens" : "Fehler beim Laden der Browser-Sitzungen und Gerätetoken", "Error while creating device token" : "Fehler beim Erstellen des Geräte-Tokens", "Error while deleting the token" : "Fehler beim Löschen des Geräte-Tokens", @@ -133,17 +126,55 @@ OC.L10N.register( "Sessions" : "Sitzungen", "App passwords" : "App-Passwörter", "Sync clients" : "Sync-Clients", - "Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale Probleme, Fehler, Warnungen, Infos, Fehlerdiagnose)", - "Info, warnings, errors and fatal issues" : "Infos, Warnungen, Fehler und fatale Probleme", - "Warnings, errors and fatal issues" : "Warnungen, Fehler und fatale Probleme", - "Errors and fatal issues" : "Fehler und fatale Probleme", - "Fatal issues only" : "Nur kritische Fehler", "None" : "Keine", "Login" : "Anmelden", "Plain" : "Plain", "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", + "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.", + "Send mode" : "Sendemodus", + "Encryption" : "Verschlüsselung", + "From address" : "Absenderadresse", + "mail" : "Mail", + "Authentication method" : "Authentifizierungsmethode", + "Authentication required" : "Authentifizierung benötigt", + "Server address" : "Serveradresse", + "Port" : "Port", + "Credentials" : "Zugangsdaten", + "SMTP Username" : "SMTP-Benutzername", + "SMTP Password" : "SMTP-Passwort", + "Store credentials" : "Anmeldeinformationen speichern", + "Test email settings" : "E-Mail-Einstellungen testen", + "Send email" : "E-Mail senden", + "Server-side encryption" : "Serverseitige Verschlüsselung", + "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.", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Verschlüsselung alleine garantiert nicht die Systemsicherheit. Bitte lese in der Dokumentation nach, wie die Verschlüsselungs-app funktioniert und welche Anwendungsfälle unterstützt werden.", + "Be aware that encryption always increases the file size." : "Bedenken Sie, dass durch die Verschlüsselung die Dateigröße zunimmt. ", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Es ist immer gut, regelmäßig Sicherungskopien von ihren Daten zu machen. Falls Sie die Verschlüsselung nutzen, sollten Sie auch eine Sicherung der Verschlüsselungsschlüssel zusammen mit ihren Daten machen.", + "This is the final warning: Do you really want to enable encryption?" : "Dies ist die letzte Warnung: Wollen Sie die Verschlüsselung wirklich aktivieren?", + "Enable encryption" : "Verschlüsselung aktivieren", + "No encryption module loaded, please enable an encryption module in the app menu." : "Kein Verschlüsselungs-Modul geladen, bitte aktiviere ein Verschlüsselungs-Modul im Anwendungs-Menü.", + "Select default encryption module:" : "Standard-Verschlüsselungs-Modul auswählen:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Sie müssen Ihre Verschlüsselungsschlüssel von der alten Verschlüsselung (ownCloud <= 8.0) zur Neuen migrieren. Bitte aktivieren Sie das \"Default Encryption Module\" und rufen Sie 'occ encryption:migrate' auf.", + "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", + "Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale Probleme, Fehler, Warnungen, Infos, Fehlerdiagnose)", + "Info, warnings, errors and fatal issues" : "Infos, Warnungen, Fehler und fatale Probleme", + "Warnings, errors and fatal issues" : "Warnungen, Fehler und fatale Probleme", + "Errors and fatal issues" : "Fehler und fatale Probleme", + "Fatal issues only" : "Nur kritische Fehler", + "Log" : "Log", + "What to log" : "Was geloggt wird", + "Download logfile" : "Logdatei herunterladen", + "More" : "Mehr", + "Less" : "Weniger", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Die Logdatei ist größer als 100 MB. Es kann etwas Zeit beanspruchen, sie herunterzuladen!", + "Security & setup warnings" : "Sicherheits- & Einrichtungswarnungen", "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.", @@ -160,7 +191,15 @@ OC.L10N.register( "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Die Ausführung des Cron-Jobs über die Kommandozeile war nicht möglich. Die folgenden technischen Fehler sind dabei aufgetreten:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Bitte überprüfen Sie noch einmal die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Installationsanleitungen ↗</a> und kontrollieren Sie das <a href=\"#log-section\">Log</a> auf mögliche Fehler oder Warnungen.", "All checks passed." : "Alle Checks bestanden.", - "Open documentation" : "Dokumentation öffnen", + "Cron" : "Cron", + "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!", + "Execute one task with each page loaded" : "Eine Aufgabe bei jedem Laden der 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.", + "Version" : "Version", + "Sharing" : "Teilen", "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", @@ -177,45 +216,7 @@ OC.L10N.register( "Exclude groups from sharing" : "Gruppen von Freigaben ausschließen", "These groups will still be able to receive shares, but not to initiate them." : "Diese Gruppen können weiterhin Freigaben empfangen, aber selbst keine mehr initiieren.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Die Auto-Vervollständigung von Benutzernamen im Teilen-Dialog erlauben. Wenn dies deaktiviert ist, muss der vollständige Benutzername eingegeben werden.", - "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!", - "Execute one task with each page loaded" : "Eine Aufgabe bei jedem Laden der 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.", - "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.", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Verschlüsselung alleine garantiert nicht die Systemsicherheit. Bitte lese in der Dokumentation nach, wie die Verschlüsselungs-app funktioniert und welche Anwendungsfälle unterstützt werden.", - "Be aware that encryption always increases the file size." : "Bedenke das durch die Verschlüsselung die Dateigröße zunimmt. ", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Es ist immer gut, regelmäßig Sicherungskopien von ihren Daten zu machen. Falls Sie die Verschlüsselung nutzen, sollten Sie auch eine Sicherung der Verschlüsselungsschlüssel zusammen mit ihren Daten machen.", - "This is the final warning: Do you really want to enable encryption?" : "Dies ist die letzte Warnung: Wollen Sie die Verschlüsselung wirklich aktivieren?", - "Enable encryption" : "Verschlüsselung aktivieren", - "No encryption module loaded, please enable an encryption module in the app menu." : "Kein Verschlüsselungs-Modul geladen, bitte aktiviere ein Verschlüsselungs-Modul im Anwendungs-Menü.", - "Select default encryption module:" : "Standard-Verschlüsselungs-Modul auswählen:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Sie müssen Ihre Verschlüsselungsschlüssel von der alten Verschlüsselung (ownCloud <= 8.0) zur Neuen migrieren. Bitte aktivieren Sie das \"Default Encryption Module\" und rufen Sie 'occ encryption:migrate' auf.", - "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", - "This is used for sending out notifications." : "Dies wird für das Senden von Benachrichtigungen verwendet.", - "Send mode" : "Sendemodus", - "Encryption" : "Verschlüsselung", - "From address" : "Absenderadresse", - "mail" : "Mail", - "Authentication method" : "Authentifizierungsmethode", - "Authentication required" : "Authentifizierung benötigt", - "Server address" : "Serveradresse", - "Port" : "Port", - "Credentials" : "Zugangsdaten", - "SMTP Username" : "SMTP-Benutzername", - "SMTP Password" : "SMTP-Passwort", - "Store credentials" : "Anmeldeinformationen speichern", - "Test email settings" : "E-Mail-Einstellungen testen", - "Send email" : "E-Mail senden", - "What to log" : "Was geloggt wird", - "Download logfile" : "Logdatei herunterladen", - "More" : "Mehr", - "Less" : "Weniger", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Die Logdatei ist größer als 100 MB. Es kann etwas Zeit beanspruchen, sie herunterzuladen!", + "Tips & tricks" : "Tipps & Tricks", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite wird als Datenbank verwendet. Bei größeren Installationen wird empfohlen, auf ein anderes Datenbank-Backend zu wechseln.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Insbesondere bei der Nutzung des Desktop Clients zur Dateisynchronisierung wird vom Einsatz von SQLite abgeraten.", "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.", @@ -225,7 +226,6 @@ OC.L10N.register( "Improving the config.php" : "Die config.php optimieren", "Theming" : "Themes verwenden", "Hardening and security guidance" : "Systemhärtung und Sicherheitsempfehlungen", - "Version" : "Version", "Developer documentation" : "Dokumentation für Entwickler", "Experimental applications ahead" : "Experimentelle Apps nachfolgend", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimentelle Apps sind nicht auf Sicherheitsprobleme hin überprüft, sind neu oder bekanntermaßen instabil und befinden sich in intensiver Entwicklung. Ihre Installation kann Datenverlust oder Sicherheitslücken hervorrufen.", @@ -281,6 +281,12 @@ OC.L10N.register( "Change password" : "Passwort ändern", "Language" : "Sprache", "Help translate" : "Helfen Sie bei der Übersetzung", + "Get the apps to sync your files" : "Installieren Sie die Anwendungen, um Ihre Dateien zu synchronisieren", + "Desktop client" : "Desktop-Client", + "Android app" : "Android-App", + "iOS app" : "iOS-App", + "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Wenn Sie das Projekt unterstützen möchten ⇥⇥<a href=\"https://nextcloud.com/contribute\" ⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">helfen Sie bei der Weiterentwicklung</a> ⇥⇥oder ⇥⇥<a href=\"https://nextcloud.com/contribute\" ⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">empfehlen Sie es weiter</a>! ", + "Show First Run Wizard again" : "Den Einrichtungsassistenten erneut anzeigen", "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", @@ -289,15 +295,15 @@ OC.L10N.register( "App name" : "App-Name", "Create new app password" : "Neues App-Passwort erstellen", "Use the credentials below to configure your app or device." : "Nutzen Sie die unten angebenen Anmeldeinformationen, um ihre App oder ihr Gerät zu konfigurieren.", + "For security reasons this password will only be shown once." : "Aus Sicherheitsgründen wird das Passwort nur einmal angezeigt.", "Username" : "Benutzername", "Done" : "Erledigt", - "Get the apps to sync your files" : "Installieren Sie die Anwendungen, um Ihre Dateien zu synchronisieren", - "Desktop client" : "Desktop-Client", - "Android app" : "Android-App", - "iOS app" : "iOS-App", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Wenn Sie das Projekt unterstützen möchten\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">helfen Sie bei der Weiterentwicklung</a>\n⇥⇥oder\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">empfehlen Sie es weiter</a>!", - "Show First Run Wizard again" : "Den Einrichtungsassistenten erneut anzeigen", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Entwickelt von der {communityopen}Nextcloud Community{linkclose}. Der {githubopen}Quellcode{linkclose} ist unter {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} verfügbar.", + "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 zu Google Plus!", + "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!", + "Subscribe to our newsletter!" : "Abonnieren Sie unseren Newsletter!", "Show storage location" : "Speicherort anzeigen", "Show last log in" : "Letzte Anmeldung anzeigen", "Show user backend" : "Benutzer-Backend anzeigen", @@ -321,6 +327,32 @@ OC.L10N.register( "change full name" : "Vollständigen Namen ändern", "set new password" : "Neues Passwort setzen", "change email address" : "E-Mail-Adresse ändern", - "Default" : "Standard" + "Default" : "Standard", + "no group" : "Keine Gruppe", + "add group" : "Gruppe hinzufügen", + "Add Group" : "Gruppe hinzufügen", + "Default Quota" : "Standard-Quota", + "Full Name" : "Vollständiger Name", + "Group Admin for" : "Gruppenadministrator für", + "Storage Location" : "Speicherort", + "User Backend" : "Benutzer-Backend", + "Last Login" : "Letzte Anmeldung", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Externer Speicher", + "Updates" : "Updates", + "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Offizielle Apps werden von und innerhalb der Nextcloud-Community entwickelt. Sie stellen die zentralen Funktionen bereit und sind für den produktiven Einsatz geeignet.", + "No apps found for \"{query}\"" : "Keine Applikationen für \"{query}\" gefunden", + "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Bitte 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 einsetzen.", + "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "ihre Datenbank läuft nicht mit der \"READ COMMITED\" Transaktionsisolationsstufe. Dies kann Probleme hervorrufen, wenn mehrere Aktionen parallel ausgeführt werden.", + "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Ihr Server wird mit Microsoft Windows betrieben. Für ein optimales Nutzungserlebnis empfehlen wir dringend Linux.", + "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Transaktionales Sperren ist deaktiviert, was zu Problemen mit Laufzeitbedingungen führen kann. Aktivieren Sie 'filelocking.enabled' in der config.php diese Probleme zu vermeiden. Weitere Informationen finden Sie in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation ↗</a>.", + "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Bitte überprüfen Sie noch einmal die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Installationsanleitungen ↗</a> und kontrollieren Sie das <a href=\"#log-section\">Log</a> auf mögliche Fehler oder Warnungen.", + "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Verschlüsselung alleine garantiert nicht die Systemsicherheit. Bitte lesen Sie in der Dokumentation nach, wie die Verschlüsselungs-App funktioniert und welche Anwendungsfälle unterstützt werden.", + "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" 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.", + "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Für diese App wurde keine untere Versionsgrenze für Nextcloud gesetzt. Dies wird ab Nextcloud 11 als Fehler behandelt.", + "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Für diese App wurde keine obere Versionsgrenze für Nextcloud gesetzt. Dies wird ab Nextcloud 11 als Fehler behandelt.", + "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Wenn Sie das Projekt unterstützen möchten\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">helfen Sie uns bei der Weiterentwicklung</a>\n⇥⇥oder\n⇥⇥<a href=\"https://help.nextcloud.com/\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">helfen Sie anderen Nutzern</a>!", + "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Entwickelt von der {communityopen}Nextcloud Community{linkclose}. Der {githubopen}Quellcode{linkclose} ist unter {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} verfügbar." }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/de_DE.json b/settings/l10n/de_DE.json index 030f3f1cea2..7f7ddc12b16 100644 --- a/settings/l10n/de_DE.json +++ b/settings/l10n/de_DE.json @@ -1,14 +1,14 @@ { "translations": { + "Enabled" : "Aktiviert", + "Not enabled" : "Nicht aktiviert", "Wrong password" : "Falsches Passwort", "Saved" : "Gespeichert", "No user supplied" : "Kein Benutzer angegeben", + "Unable to change password" : "Passwort konnte nicht geändert werden", "Authentication error" : "Authentifizierungsfehler", "Please provide an admin recovery password, otherwise all user data will be lost" : "Bitte geben Sie ein Wiederherstellungspasswort für das Administratorkonto an, da sonst alle Benutzerdaten verlorengehen können", "Wrong admin recovery password. Please check the password and try again." : "Falsches Wiederherstellungspasswort für das Admin-Konto. Bitte überprüfen Sie das Passwort und versuchen Sie es erneut.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Das Backend unterstützt die Passwortänderung nicht, aber der Benutzerschlüssel wurde erfolgreich aktualisiert.", - "Unable to change password" : "Passwort konnte nicht geändert werden", - "Enabled" : "Aktiviert", - "Not enabled" : "Nicht aktiviert", "installing and updating apps via the app store or Federated Cloud Sharing" : "Das Installieren und Aktualisieren von Apps durch den App-Store oder durch Federated Cloud Sharing", "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 verwendet eine veraltete %s Version (%s). Bitte aktualisieren Sie ihr Betriebssystem, da ansonsten Funktionen, wie z.B. %s, nicht zuverlässig funktionieren werden.", @@ -33,17 +33,6 @@ "Email saved" : "E-Mail-Adresse gespeichert", "Your full name has been changed." : "Ihr vollständiger Name ist geändert worden.", "Unable to change full name" : "Der vollständige Name konnte nicht geändert werden", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Sicherheits- & Einrichtungswarnungen", - "Sharing" : "Teilen", - "Server-side encryption" : "Serverseitige Verschlüsselung", - "External Storage" : "Externer Speicher", - "Cron" : "Cron", - "Email server" : "E-Mail-Server", - "Log" : "Log", - "Tips & tricks" : "Tipps & Tricks", - "Updates" : "Updates", "Couldn't remove app." : "Die App konnte nicht entfernt werden.", "Language changed" : "Sprache geändert", "Invalid request" : "Ungültige Anforderung", @@ -96,6 +85,10 @@ "Android Client" : "Android-Client", "Sync client - {os}" : "Synchronisationssoftware - {os}", "This session" : "Diese Sitzung", + "Copied!" : "Kopiert!", + "Not supported!" : "Nicht unterstützt!", + "Press ⌘-C to copy." : "⌘-C zum Kopieren drücken.", + "Press Ctrl-C to copy." : "Ctrl-C zum Kopieren drücken.", "Error while loading browser sessions and device tokens" : "Fehler beim Laden der Browser-Sitzungen und Gerätetoken", "Error while creating device token" : "Fehler beim Erstellen des Geräte-Tokens", "Error while deleting the token" : "Fehler beim Löschen des Geräte-Tokens", @@ -131,17 +124,55 @@ "Sessions" : "Sitzungen", "App passwords" : "App-Passwörter", "Sync clients" : "Sync-Clients", - "Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale Probleme, Fehler, Warnungen, Infos, Fehlerdiagnose)", - "Info, warnings, errors and fatal issues" : "Infos, Warnungen, Fehler und fatale Probleme", - "Warnings, errors and fatal issues" : "Warnungen, Fehler und fatale Probleme", - "Errors and fatal issues" : "Fehler und fatale Probleme", - "Fatal issues only" : "Nur kritische Fehler", "None" : "Keine", "Login" : "Anmelden", "Plain" : "Plain", "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", + "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.", + "Send mode" : "Sendemodus", + "Encryption" : "Verschlüsselung", + "From address" : "Absenderadresse", + "mail" : "Mail", + "Authentication method" : "Authentifizierungsmethode", + "Authentication required" : "Authentifizierung benötigt", + "Server address" : "Serveradresse", + "Port" : "Port", + "Credentials" : "Zugangsdaten", + "SMTP Username" : "SMTP-Benutzername", + "SMTP Password" : "SMTP-Passwort", + "Store credentials" : "Anmeldeinformationen speichern", + "Test email settings" : "E-Mail-Einstellungen testen", + "Send email" : "E-Mail senden", + "Server-side encryption" : "Serverseitige Verschlüsselung", + "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.", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Verschlüsselung alleine garantiert nicht die Systemsicherheit. Bitte lese in der Dokumentation nach, wie die Verschlüsselungs-app funktioniert und welche Anwendungsfälle unterstützt werden.", + "Be aware that encryption always increases the file size." : "Bedenken Sie, dass durch die Verschlüsselung die Dateigröße zunimmt. ", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Es ist immer gut, regelmäßig Sicherungskopien von ihren Daten zu machen. Falls Sie die Verschlüsselung nutzen, sollten Sie auch eine Sicherung der Verschlüsselungsschlüssel zusammen mit ihren Daten machen.", + "This is the final warning: Do you really want to enable encryption?" : "Dies ist die letzte Warnung: Wollen Sie die Verschlüsselung wirklich aktivieren?", + "Enable encryption" : "Verschlüsselung aktivieren", + "No encryption module loaded, please enable an encryption module in the app menu." : "Kein Verschlüsselungs-Modul geladen, bitte aktiviere ein Verschlüsselungs-Modul im Anwendungs-Menü.", + "Select default encryption module:" : "Standard-Verschlüsselungs-Modul auswählen:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Sie müssen Ihre Verschlüsselungsschlüssel von der alten Verschlüsselung (ownCloud <= 8.0) zur Neuen migrieren. Bitte aktivieren Sie das \"Default Encryption Module\" und rufen Sie 'occ encryption:migrate' auf.", + "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", + "Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale Probleme, Fehler, Warnungen, Infos, Fehlerdiagnose)", + "Info, warnings, errors and fatal issues" : "Infos, Warnungen, Fehler und fatale Probleme", + "Warnings, errors and fatal issues" : "Warnungen, Fehler und fatale Probleme", + "Errors and fatal issues" : "Fehler und fatale Probleme", + "Fatal issues only" : "Nur kritische Fehler", + "Log" : "Log", + "What to log" : "Was geloggt wird", + "Download logfile" : "Logdatei herunterladen", + "More" : "Mehr", + "Less" : "Weniger", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Die Logdatei ist größer als 100 MB. Es kann etwas Zeit beanspruchen, sie herunterzuladen!", + "Security & setup warnings" : "Sicherheits- & Einrichtungswarnungen", "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.", @@ -158,7 +189,15 @@ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Die Ausführung des Cron-Jobs über die Kommandozeile war nicht möglich. Die folgenden technischen Fehler sind dabei aufgetreten:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Bitte überprüfen Sie noch einmal die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Installationsanleitungen ↗</a> und kontrollieren Sie das <a href=\"#log-section\">Log</a> auf mögliche Fehler oder Warnungen.", "All checks passed." : "Alle Checks bestanden.", - "Open documentation" : "Dokumentation öffnen", + "Cron" : "Cron", + "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!", + "Execute one task with each page loaded" : "Eine Aufgabe bei jedem Laden der 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.", + "Version" : "Version", + "Sharing" : "Teilen", "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", @@ -175,45 +214,7 @@ "Exclude groups from sharing" : "Gruppen von Freigaben ausschließen", "These groups will still be able to receive shares, but not to initiate them." : "Diese Gruppen können weiterhin Freigaben empfangen, aber selbst keine mehr initiieren.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Die Auto-Vervollständigung von Benutzernamen im Teilen-Dialog erlauben. Wenn dies deaktiviert ist, muss der vollständige Benutzername eingegeben werden.", - "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!", - "Execute one task with each page loaded" : "Eine Aufgabe bei jedem Laden der 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.", - "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.", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Verschlüsselung alleine garantiert nicht die Systemsicherheit. Bitte lese in der Dokumentation nach, wie die Verschlüsselungs-app funktioniert und welche Anwendungsfälle unterstützt werden.", - "Be aware that encryption always increases the file size." : "Bedenke das durch die Verschlüsselung die Dateigröße zunimmt. ", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Es ist immer gut, regelmäßig Sicherungskopien von ihren Daten zu machen. Falls Sie die Verschlüsselung nutzen, sollten Sie auch eine Sicherung der Verschlüsselungsschlüssel zusammen mit ihren Daten machen.", - "This is the final warning: Do you really want to enable encryption?" : "Dies ist die letzte Warnung: Wollen Sie die Verschlüsselung wirklich aktivieren?", - "Enable encryption" : "Verschlüsselung aktivieren", - "No encryption module loaded, please enable an encryption module in the app menu." : "Kein Verschlüsselungs-Modul geladen, bitte aktiviere ein Verschlüsselungs-Modul im Anwendungs-Menü.", - "Select default encryption module:" : "Standard-Verschlüsselungs-Modul auswählen:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Sie müssen Ihre Verschlüsselungsschlüssel von der alten Verschlüsselung (ownCloud <= 8.0) zur Neuen migrieren. Bitte aktivieren Sie das \"Default Encryption Module\" und rufen Sie 'occ encryption:migrate' auf.", - "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", - "This is used for sending out notifications." : "Dies wird für das Senden von Benachrichtigungen verwendet.", - "Send mode" : "Sendemodus", - "Encryption" : "Verschlüsselung", - "From address" : "Absenderadresse", - "mail" : "Mail", - "Authentication method" : "Authentifizierungsmethode", - "Authentication required" : "Authentifizierung benötigt", - "Server address" : "Serveradresse", - "Port" : "Port", - "Credentials" : "Zugangsdaten", - "SMTP Username" : "SMTP-Benutzername", - "SMTP Password" : "SMTP-Passwort", - "Store credentials" : "Anmeldeinformationen speichern", - "Test email settings" : "E-Mail-Einstellungen testen", - "Send email" : "E-Mail senden", - "What to log" : "Was geloggt wird", - "Download logfile" : "Logdatei herunterladen", - "More" : "Mehr", - "Less" : "Weniger", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Die Logdatei ist größer als 100 MB. Es kann etwas Zeit beanspruchen, sie herunterzuladen!", + "Tips & tricks" : "Tipps & Tricks", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite wird als Datenbank verwendet. Bei größeren Installationen wird empfohlen, auf ein anderes Datenbank-Backend zu wechseln.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Insbesondere bei der Nutzung des Desktop Clients zur Dateisynchronisierung wird vom Einsatz von SQLite abgeraten.", "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.", @@ -223,7 +224,6 @@ "Improving the config.php" : "Die config.php optimieren", "Theming" : "Themes verwenden", "Hardening and security guidance" : "Systemhärtung und Sicherheitsempfehlungen", - "Version" : "Version", "Developer documentation" : "Dokumentation für Entwickler", "Experimental applications ahead" : "Experimentelle Apps nachfolgend", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimentelle Apps sind nicht auf Sicherheitsprobleme hin überprüft, sind neu oder bekanntermaßen instabil und befinden sich in intensiver Entwicklung. Ihre Installation kann Datenverlust oder Sicherheitslücken hervorrufen.", @@ -279,6 +279,12 @@ "Change password" : "Passwort ändern", "Language" : "Sprache", "Help translate" : "Helfen Sie bei der Übersetzung", + "Get the apps to sync your files" : "Installieren Sie die Anwendungen, um Ihre Dateien zu synchronisieren", + "Desktop client" : "Desktop-Client", + "Android app" : "Android-App", + "iOS app" : "iOS-App", + "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Wenn Sie das Projekt unterstützen möchten ⇥⇥<a href=\"https://nextcloud.com/contribute\" ⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">helfen Sie bei der Weiterentwicklung</a> ⇥⇥oder ⇥⇥<a href=\"https://nextcloud.com/contribute\" ⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">empfehlen Sie es weiter</a>! ", + "Show First Run Wizard again" : "Den Einrichtungsassistenten erneut anzeigen", "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", @@ -287,15 +293,15 @@ "App name" : "App-Name", "Create new app password" : "Neues App-Passwort erstellen", "Use the credentials below to configure your app or device." : "Nutzen Sie die unten angebenen Anmeldeinformationen, um ihre App oder ihr Gerät zu konfigurieren.", + "For security reasons this password will only be shown once." : "Aus Sicherheitsgründen wird das Passwort nur einmal angezeigt.", "Username" : "Benutzername", "Done" : "Erledigt", - "Get the apps to sync your files" : "Installieren Sie die Anwendungen, um Ihre Dateien zu synchronisieren", - "Desktop client" : "Desktop-Client", - "Android app" : "Android-App", - "iOS app" : "iOS-App", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Wenn Sie das Projekt unterstützen möchten\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">helfen Sie bei der Weiterentwicklung</a>\n⇥⇥oder\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">empfehlen Sie es weiter</a>!", - "Show First Run Wizard again" : "Den Einrichtungsassistenten erneut anzeigen", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Entwickelt von der {communityopen}Nextcloud Community{linkclose}. Der {githubopen}Quellcode{linkclose} ist unter {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} verfügbar.", + "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 zu Google Plus!", + "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!", + "Subscribe to our newsletter!" : "Abonnieren Sie unseren Newsletter!", "Show storage location" : "Speicherort anzeigen", "Show last log in" : "Letzte Anmeldung anzeigen", "Show user backend" : "Benutzer-Backend anzeigen", @@ -319,6 +325,32 @@ "change full name" : "Vollständigen Namen ändern", "set new password" : "Neues Passwort setzen", "change email address" : "E-Mail-Adresse ändern", - "Default" : "Standard" + "Default" : "Standard", + "no group" : "Keine Gruppe", + "add group" : "Gruppe hinzufügen", + "Add Group" : "Gruppe hinzufügen", + "Default Quota" : "Standard-Quota", + "Full Name" : "Vollständiger Name", + "Group Admin for" : "Gruppenadministrator für", + "Storage Location" : "Speicherort", + "User Backend" : "Benutzer-Backend", + "Last Login" : "Letzte Anmeldung", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Externer Speicher", + "Updates" : "Updates", + "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Offizielle Apps werden von und innerhalb der Nextcloud-Community entwickelt. Sie stellen die zentralen Funktionen bereit und sind für den produktiven Einsatz geeignet.", + "No apps found for \"{query}\"" : "Keine Applikationen für \"{query}\" gefunden", + "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Bitte 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 einsetzen.", + "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "ihre Datenbank läuft nicht mit der \"READ COMMITED\" Transaktionsisolationsstufe. Dies kann Probleme hervorrufen, wenn mehrere Aktionen parallel ausgeführt werden.", + "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Ihr Server wird mit Microsoft Windows betrieben. Für ein optimales Nutzungserlebnis empfehlen wir dringend Linux.", + "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Transaktionales Sperren ist deaktiviert, was zu Problemen mit Laufzeitbedingungen führen kann. Aktivieren Sie 'filelocking.enabled' in der config.php diese Probleme zu vermeiden. Weitere Informationen finden Sie in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation ↗</a>.", + "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Bitte überprüfen Sie noch einmal die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Installationsanleitungen ↗</a> und kontrollieren Sie das <a href=\"#log-section\">Log</a> auf mögliche Fehler oder Warnungen.", + "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Verschlüsselung alleine garantiert nicht die Systemsicherheit. Bitte lesen Sie in der Dokumentation nach, wie die Verschlüsselungs-App funktioniert und welche Anwendungsfälle unterstützt werden.", + "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" 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.", + "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Für diese App wurde keine untere Versionsgrenze für Nextcloud gesetzt. Dies wird ab Nextcloud 11 als Fehler behandelt.", + "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Für diese App wurde keine obere Versionsgrenze für Nextcloud gesetzt. Dies wird ab Nextcloud 11 als Fehler behandelt.", + "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Wenn Sie das Projekt unterstützen möchten\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">helfen Sie uns bei der Weiterentwicklung</a>\n⇥⇥oder\n⇥⇥<a href=\"https://help.nextcloud.com/\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">helfen Sie anderen Nutzern</a>!", + "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Entwickelt von der {communityopen}Nextcloud Community{linkclose}. Der {githubopen}Quellcode{linkclose} ist unter {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} verfügbar." },"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 452d2d22655..22927bd2a06 100644 --- a/settings/l10n/en_GB.js +++ b/settings/l10n/en_GB.js @@ -1,16 +1,16 @@ OC.L10N.register( "settings", { + "Enabled" : "Enabled", + "Not enabled" : "Not enabled", "Wrong password" : "Incorrect password", "Saved" : "Saved", "No user supplied" : "No user supplied", + "Unable to change password" : "Unable to change password", "Authentication error" : "Authentication error", "Please provide an admin recovery password, otherwise all user data will be lost" : "Please provide an admin recovery password, otherwise all user data will be lost", "Wrong admin recovery password. Please check the password and try again." : "Incorrect admin recovery password. Please check the password and try again.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Backend doesn't support password change, but the user's encryption key was successfully updated.", - "Unable to change password" : "Unable to change password", - "Enabled" : "Enabled", - "Not enabled" : "Not enabled", "installing and updating apps via the app store or Federated Cloud Sharing" : "installing and updating apps via the app store or Federated Cloud Sharing", "Federated Cloud Sharing" : "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 is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably.", @@ -35,17 +35,6 @@ OC.L10N.register( "Email saved" : "Email saved", "Your full name has been changed." : "Your full name has been changed.", "Unable to change full name" : "Unable to change full name", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Security & setup warnings", - "Sharing" : "Sharing", - "Server-side encryption" : "Server-side encryption", - "External Storage" : "External Storage", - "Cron" : "Cron", - "Email server" : "Email server", - "Log" : "Log", - "Tips & tricks" : "Tips & tricks", - "Updates" : "Updates", "Couldn't remove app." : "Couldn't remove app.", "Language changed" : "Language changed", "Invalid request" : "Invalid request", @@ -120,17 +109,55 @@ OC.L10N.register( "Sessions" : "Sessions", "App passwords" : "App passwords", "Sync clients" : "Sync clients", - "Everything (fatal issues, errors, warnings, info, debug)" : "Everything (fatal issues, errors, warnings, info, debug)", - "Info, warnings, errors and fatal issues" : "Info, warnings, errors and fatal issues", - "Warnings, errors and fatal issues" : "Warnings, errors and fatal issues", - "Errors and fatal issues" : "Errors and fatal issues", - "Fatal issues only" : "Fatal issues only", "None" : "None", "Login" : "Login", "Plain" : "Plain", "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", + "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", + "mail" : "mail", + "Authentication method" : "Authentication method", + "Authentication required" : "Authentication required", + "Server address" : "Server address", + "Port" : "Port", + "Credentials" : "Credentials", + "SMTP Username" : "SMTP Username", + "SMTP Password" : "SMTP Password", + "Store credentials" : "Store credentials", + "Test email settings" : "Test email settings", + "Send email" : "Send email", + "Server-side encryption" : "Server-side encryption", + "Enable server-side encryption" : "Enable server-side encryption", + "Please read carefully before activating server-side encryption: " : "Please read carefully before activating server-side encryption: ", + "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met.", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Encryption alone does not guarantee complete security. Please read the documentation for information on how the encryption app works, and supported use cases.", + "Be aware that encryption always increases the file size." : "Be aware that encryption always increases the file size.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data.", + "This is the final warning: Do you really want to enable encryption?" : "This is the final warning: Do you really want to enable encryption?", + "Enable encryption" : "Enable encryption", + "No encryption module loaded, please enable an encryption module in the app menu." : "No encryption module loaded, please enable an encryption module in the app menu.", + "Select default encryption module:" : "Select default encryption module:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one.", + "Start migration" : "Start migration", + "Everything (fatal issues, errors, warnings, info, debug)" : "Everything (fatal issues, errors, warnings, info, debug)", + "Info, warnings, errors and fatal issues" : "Info, warnings, errors and fatal issues", + "Warnings, errors and fatal issues" : "Warnings, errors and fatal issues", + "Errors and fatal issues" : "Errors and fatal issues", + "Fatal issues only" : "Fatal issues only", + "Log" : "Log", + "What to log" : "What to log", + "Download logfile" : "Download logfile", + "More" : "More", + "Less" : "Less", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "The logfile is larger than 100 MB. Downloading it may take some time!", + "Security & setup warnings" : "Security & setup warnings", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response.", "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "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.", "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." : "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.", @@ -146,7 +173,15 @@ OC.L10N.register( "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>.", "All checks passed." : "All checks passed.", - "Open documentation" : "Open documentation", + "Cron" : "Cron", + "Last cron job execution: %s." : "Last cron job execution: %s.", + "Last cron job execution: %s. Something seems wrong." : "Last cron job execution: %s. Something seems wrong.", + "Cron was not executed yet!" : "Cron was not executed yet!", + "Execute one task with each page loaded" : "Execute one task with each page loaded", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php is registered at a webcron service to call cron.php every 15 minutes over http.", + "Use system's cron service to call the cron.php file every 15 minutes." : "Use system's cron service to call the cron.php file every 15 minutes.", + "Version" : "Version", + "Sharing" : "Sharing", "Allow apps to use the Share API" : "Allow apps to use the Share API", "Allow users to share via link" : "Allow users to share via link", "Allow public uploads" : "Allow public uploads", @@ -163,45 +198,7 @@ OC.L10N.register( "Exclude groups from sharing" : "Exclude groups from sharing", "These groups will still be able to receive shares, but not to initiate them." : "These groups will still be able to receive shares, but not to initiate them.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered.", - "Last cron job execution: %s." : "Last cron job execution: %s.", - "Last cron job execution: %s. Something seems wrong." : "Last cron job execution: %s. Something seems wrong.", - "Cron was not executed yet!" : "Cron was not executed yet!", - "Execute one task with each page loaded" : "Execute one task with each page loaded", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php is registered at a webcron service to call cron.php every 15 minutes over http.", - "Use system's cron service to call the cron.php file every 15 minutes." : "Use system's cron service to call the cron.php file every 15 minutes.", - "Enable server-side encryption" : "Enable server-side encryption", - "Please read carefully before activating server-side encryption: " : "Please read carefully before activating server-side encryption: ", - "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met.", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Encryption alone does not guarantee complete security. Please read the documentation for information on how the encryption app works, and supported use cases.", - "Be aware that encryption always increases the file size." : "Be aware that encryption always increases the file size.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data.", - "This is the final warning: Do you really want to enable encryption?" : "This is the final warning: Do you really want to enable encryption?", - "Enable encryption" : "Enable encryption", - "No encryption module loaded, please enable an encryption module in the app menu." : "No encryption module loaded, please enable an encryption module in the app menu.", - "Select default encryption module:" : "Select default encryption module:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one.", - "Start migration" : "Start migration", - "This is used for sending out notifications." : "This is used for sending out notifications.", - "Send mode" : "Send mode", - "Encryption" : "Encryption", - "From address" : "From address", - "mail" : "mail", - "Authentication method" : "Authentication method", - "Authentication required" : "Authentication required", - "Server address" : "Server address", - "Port" : "Port", - "Credentials" : "Credentials", - "SMTP Username" : "SMTP Username", - "SMTP Password" : "SMTP Password", - "Store credentials" : "Store credentials", - "Test email settings" : "Test email settings", - "Send email" : "Send email", - "What to log" : "What to log", - "Download logfile" : "Download logfile", - "More" : "More", - "Less" : "Less", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "The logfile is larger than 100 MB. Downloading it may take some time!", + "Tips & tricks" : "Tips & tricks", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite is used as database. For larger installations, we recommend you switch to a different database backend.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Especially when using the desktop client for file syncing, the use of SQLite is discouraged.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>.", @@ -211,7 +208,6 @@ OC.L10N.register( "Improving the config.php" : "Improving the config.php", "Theming" : "Theming", "Hardening and security guidance" : "Hardening and security guidance", - "Version" : "Version", "Developer documentation" : "Developer documentation", "Experimental applications ahead" : "Experimental applications ahead", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches.", @@ -267,19 +263,17 @@ OC.L10N.register( "Change password" : "Change password", "Language" : "Language", "Help translate" : "Help translate", + "Get the apps to sync your files" : "Get the apps to sync your files", + "Desktop client" : "Desktop client", + "Android app" : "Android app", + "iOS app" : "iOS app", + "Show First Run Wizard again" : "Show First Run Wizard again", "Name" : "Name", "App name" : "App name", "Create new app password" : "Create new app password", "Use the credentials below to configure your app or device." : "Use the credentials below to configure your app or device.", "Username" : "Username", "Done" : "Done", - "Get the apps to sync your files" : "Get the apps to sync your files", - "Desktop client" : "Desktop client", - "Android app" : "Android app", - "iOS app" : "iOS app", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "To support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!", - "Show First Run Wizard again" : "Show First Run Wizard again", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", "Show storage location" : "Show storage location", "Show last log in" : "Show last log in", "Show user backend" : "Show user backend", @@ -298,6 +292,10 @@ OC.L10N.register( "change full name" : "change full name", "set new password" : "set new password", "change email address" : "change email address", - "Default" : "Default" + "Default" : "Default", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "External Storage", + "Updates" : "Updates" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/en_GB.json b/settings/l10n/en_GB.json index f425beccc13..a10c00fdfde 100644 --- a/settings/l10n/en_GB.json +++ b/settings/l10n/en_GB.json @@ -1,14 +1,14 @@ { "translations": { + "Enabled" : "Enabled", + "Not enabled" : "Not enabled", "Wrong password" : "Incorrect password", "Saved" : "Saved", "No user supplied" : "No user supplied", + "Unable to change password" : "Unable to change password", "Authentication error" : "Authentication error", "Please provide an admin recovery password, otherwise all user data will be lost" : "Please provide an admin recovery password, otherwise all user data will be lost", "Wrong admin recovery password. Please check the password and try again." : "Incorrect admin recovery password. Please check the password and try again.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Backend doesn't support password change, but the user's encryption key was successfully updated.", - "Unable to change password" : "Unable to change password", - "Enabled" : "Enabled", - "Not enabled" : "Not enabled", "installing and updating apps via the app store or Federated Cloud Sharing" : "installing and updating apps via the app store or Federated Cloud Sharing", "Federated Cloud Sharing" : "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 is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably.", @@ -33,17 +33,6 @@ "Email saved" : "Email saved", "Your full name has been changed." : "Your full name has been changed.", "Unable to change full name" : "Unable to change full name", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Security & setup warnings", - "Sharing" : "Sharing", - "Server-side encryption" : "Server-side encryption", - "External Storage" : "External Storage", - "Cron" : "Cron", - "Email server" : "Email server", - "Log" : "Log", - "Tips & tricks" : "Tips & tricks", - "Updates" : "Updates", "Couldn't remove app." : "Couldn't remove app.", "Language changed" : "Language changed", "Invalid request" : "Invalid request", @@ -118,17 +107,55 @@ "Sessions" : "Sessions", "App passwords" : "App passwords", "Sync clients" : "Sync clients", - "Everything (fatal issues, errors, warnings, info, debug)" : "Everything (fatal issues, errors, warnings, info, debug)", - "Info, warnings, errors and fatal issues" : "Info, warnings, errors and fatal issues", - "Warnings, errors and fatal issues" : "Warnings, errors and fatal issues", - "Errors and fatal issues" : "Errors and fatal issues", - "Fatal issues only" : "Fatal issues only", "None" : "None", "Login" : "Login", "Plain" : "Plain", "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", + "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", + "mail" : "mail", + "Authentication method" : "Authentication method", + "Authentication required" : "Authentication required", + "Server address" : "Server address", + "Port" : "Port", + "Credentials" : "Credentials", + "SMTP Username" : "SMTP Username", + "SMTP Password" : "SMTP Password", + "Store credentials" : "Store credentials", + "Test email settings" : "Test email settings", + "Send email" : "Send email", + "Server-side encryption" : "Server-side encryption", + "Enable server-side encryption" : "Enable server-side encryption", + "Please read carefully before activating server-side encryption: " : "Please read carefully before activating server-side encryption: ", + "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met.", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Encryption alone does not guarantee complete security. Please read the documentation for information on how the encryption app works, and supported use cases.", + "Be aware that encryption always increases the file size." : "Be aware that encryption always increases the file size.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data.", + "This is the final warning: Do you really want to enable encryption?" : "This is the final warning: Do you really want to enable encryption?", + "Enable encryption" : "Enable encryption", + "No encryption module loaded, please enable an encryption module in the app menu." : "No encryption module loaded, please enable an encryption module in the app menu.", + "Select default encryption module:" : "Select default encryption module:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one.", + "Start migration" : "Start migration", + "Everything (fatal issues, errors, warnings, info, debug)" : "Everything (fatal issues, errors, warnings, info, debug)", + "Info, warnings, errors and fatal issues" : "Info, warnings, errors and fatal issues", + "Warnings, errors and fatal issues" : "Warnings, errors and fatal issues", + "Errors and fatal issues" : "Errors and fatal issues", + "Fatal issues only" : "Fatal issues only", + "Log" : "Log", + "What to log" : "What to log", + "Download logfile" : "Download logfile", + "More" : "More", + "Less" : "Less", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "The logfile is larger than 100 MB. Downloading it may take some time!", + "Security & setup warnings" : "Security & setup warnings", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response.", "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "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.", "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." : "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.", @@ -144,7 +171,15 @@ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>.", "All checks passed." : "All checks passed.", - "Open documentation" : "Open documentation", + "Cron" : "Cron", + "Last cron job execution: %s." : "Last cron job execution: %s.", + "Last cron job execution: %s. Something seems wrong." : "Last cron job execution: %s. Something seems wrong.", + "Cron was not executed yet!" : "Cron was not executed yet!", + "Execute one task with each page loaded" : "Execute one task with each page loaded", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php is registered at a webcron service to call cron.php every 15 minutes over http.", + "Use system's cron service to call the cron.php file every 15 minutes." : "Use system's cron service to call the cron.php file every 15 minutes.", + "Version" : "Version", + "Sharing" : "Sharing", "Allow apps to use the Share API" : "Allow apps to use the Share API", "Allow users to share via link" : "Allow users to share via link", "Allow public uploads" : "Allow public uploads", @@ -161,45 +196,7 @@ "Exclude groups from sharing" : "Exclude groups from sharing", "These groups will still be able to receive shares, but not to initiate them." : "These groups will still be able to receive shares, but not to initiate them.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered.", - "Last cron job execution: %s." : "Last cron job execution: %s.", - "Last cron job execution: %s. Something seems wrong." : "Last cron job execution: %s. Something seems wrong.", - "Cron was not executed yet!" : "Cron was not executed yet!", - "Execute one task with each page loaded" : "Execute one task with each page loaded", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php is registered at a webcron service to call cron.php every 15 minutes over http.", - "Use system's cron service to call the cron.php file every 15 minutes." : "Use system's cron service to call the cron.php file every 15 minutes.", - "Enable server-side encryption" : "Enable server-side encryption", - "Please read carefully before activating server-side encryption: " : "Please read carefully before activating server-side encryption: ", - "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met.", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Encryption alone does not guarantee complete security. Please read the documentation for information on how the encryption app works, and supported use cases.", - "Be aware that encryption always increases the file size." : "Be aware that encryption always increases the file size.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data.", - "This is the final warning: Do you really want to enable encryption?" : "This is the final warning: Do you really want to enable encryption?", - "Enable encryption" : "Enable encryption", - "No encryption module loaded, please enable an encryption module in the app menu." : "No encryption module loaded, please enable an encryption module in the app menu.", - "Select default encryption module:" : "Select default encryption module:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one.", - "Start migration" : "Start migration", - "This is used for sending out notifications." : "This is used for sending out notifications.", - "Send mode" : "Send mode", - "Encryption" : "Encryption", - "From address" : "From address", - "mail" : "mail", - "Authentication method" : "Authentication method", - "Authentication required" : "Authentication required", - "Server address" : "Server address", - "Port" : "Port", - "Credentials" : "Credentials", - "SMTP Username" : "SMTP Username", - "SMTP Password" : "SMTP Password", - "Store credentials" : "Store credentials", - "Test email settings" : "Test email settings", - "Send email" : "Send email", - "What to log" : "What to log", - "Download logfile" : "Download logfile", - "More" : "More", - "Less" : "Less", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "The logfile is larger than 100 MB. Downloading it may take some time!", + "Tips & tricks" : "Tips & tricks", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite is used as database. For larger installations, we recommend you switch to a different database backend.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Especially when using the desktop client for file syncing, the use of SQLite is discouraged.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>.", @@ -209,7 +206,6 @@ "Improving the config.php" : "Improving the config.php", "Theming" : "Theming", "Hardening and security guidance" : "Hardening and security guidance", - "Version" : "Version", "Developer documentation" : "Developer documentation", "Experimental applications ahead" : "Experimental applications ahead", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches.", @@ -265,19 +261,17 @@ "Change password" : "Change password", "Language" : "Language", "Help translate" : "Help translate", + "Get the apps to sync your files" : "Get the apps to sync your files", + "Desktop client" : "Desktop client", + "Android app" : "Android app", + "iOS app" : "iOS app", + "Show First Run Wizard again" : "Show First Run Wizard again", "Name" : "Name", "App name" : "App name", "Create new app password" : "Create new app password", "Use the credentials below to configure your app or device." : "Use the credentials below to configure your app or device.", "Username" : "Username", "Done" : "Done", - "Get the apps to sync your files" : "Get the apps to sync your files", - "Desktop client" : "Desktop client", - "Android app" : "Android app", - "iOS app" : "iOS app", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "To support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!", - "Show First Run Wizard again" : "Show First Run Wizard again", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", "Show storage location" : "Show storage location", "Show last log in" : "Show last log in", "Show user backend" : "Show user backend", @@ -296,6 +290,10 @@ "change full name" : "change full name", "set new password" : "set new password", "change email address" : "change email address", - "Default" : "Default" + "Default" : "Default", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "External Storage", + "Updates" : "Updates" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/settings/l10n/es.js b/settings/l10n/es.js index 53567326957..ca947bc0343 100644 --- a/settings/l10n/es.js +++ b/settings/l10n/es.js @@ -1,16 +1,16 @@ OC.L10N.register( "settings", { + "Enabled" : "Habilitado", + "Not enabled" : "No habilitado", "Wrong password" : "Contraseña incorrecta", "Saved" : "Guardado", "No user supplied" : "No se especificó un usuario", + "Unable to change password" : "No se ha podido cambiar la contraseña", "Authentication error" : "Error de autenticación", "Please provide an admin recovery password, otherwise all user data will be lost" : "Por favor, facilite una contraseña de recuperación de administrador. En caso contrario podrían perderse todos los datos de usuario", "Wrong admin recovery password. Please check the password and try again." : "Contraseña de recuperación de administrador incorrecta. Por favor compruebe la contraseña e inténtelo de nuevo.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "El backend no admite cambios de contraseña, pero la clave de cifrado del usuario ha sido actualizada satisfactoriamente.", - "Unable to change password" : "No se ha podido cambiar la contraseña", - "Enabled" : "Habilitado", - "Not enabled" : "No habilitado", "installing and updating apps via the app store or Federated Cloud Sharing" : "instalando y actualizando aplicaciones vía app store o Nube compartida Federada", "Federated Cloud Sharing" : "Compartido en Cloud Federado", "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL está usando una versión desactualizada %s (%s). Por favor, actualice su sistema operativo o funciones tales como %s no funcionará de forma fiable.", @@ -35,17 +35,6 @@ OC.L10N.register( "Email saved" : "Correo electrónico guardado", "Your full name has been changed." : "Se ha cambiado su nombre completo.", "Unable to change full name" : "No se puede cambiar el nombre completo", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Avisos de seguridad y configuración", - "Sharing" : "Compartiendo", - "Server-side encryption" : "Cifrado en el servidor", - "External Storage" : "Almacenamiento externo", - "Cron" : "Cron", - "Email server" : "Servidor de correo electrónico", - "Log" : "Registro", - "Tips & tricks" : "Sugerencias y trucos", - "Updates" : "Actualizaciones", "Couldn't remove app." : "No se pudo eliminar la aplicación.", "Language changed" : "Idioma cambiado", "Invalid request" : "Petición no válida", @@ -133,17 +122,55 @@ OC.L10N.register( "Sessions" : "Sesiones", "App passwords" : "Contraseñas de la app", "Sync clients" : "Clientes de sincronización", - "Everything (fatal issues, errors, warnings, info, debug)" : "Todo (Información, Avisos, Errores, debug y problemas fatales)", - "Info, warnings, errors and fatal issues" : "Información, Avisos, Errores y problemas fatales", - "Warnings, errors and fatal issues" : "Advertencias, errores y problemas fatales", - "Errors and fatal issues" : "Errores y problemas fatales", - "Fatal issues only" : "Problemas fatales solamente", "None" : "Ninguno", "Login" : "Iniciar sesión", "Plain" : "Plano", "NT LAN Manager" : "Gestor de NT LAN", "SSL" : "SSL", "TLS" : "TLS", + "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", + "mail" : "correo electrónico", + "Authentication method" : "Método de autenticación", + "Authentication required" : "Se necesita autenticación", + "Server address" : "Dirección del servidor", + "Port" : "Puerto", + "Credentials" : "Credenciales", + "SMTP Username" : "Nombre de usuario SMTP", + "SMTP Password" : "Contraseña SMTP", + "Store credentials" : "Almacenar credenciales", + "Test email settings" : "Probar configuración de correo electrónico", + "Send email" : "Enviar mensaje", + "Server-side encryption" : "Cifrado en el servidor", + "Enable server-side encryption" : "Habilitar cifrado en el servidor", + "Please read carefully before activating server-side encryption: " : "Por favor lea cuidadosamente antes de activar el cifrado del lado del 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 el cifrado está habilitado, todos los archivos subidos al servidor desde ese punto en adelante se cifrarán en reposo en el servidor. Sólo será posible desactivar el cifrado en una fecha posterior si el módulo de cifrado activado soporta esa función, y todas las condiciones previas (por ejemplo, el establecimiento de una clave de recuperación) se cumplan.", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "El cifrado no garantiza por sí solo la seguridad del sistema. Por favor, vea la documentación para más información sobre cómo funciona la app de cifrado y los casos de uso soportados.", + "Be aware that encryption always increases the file size." : "Tenga presente que la encripción siempre incrementa el tamaño del archivo.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Es siempre bueno crear copias de seguridad de sus datos, en el caso del cifrado, asegúrese de tener una copia de seguridad de las claves de cifrado junto con sus datos.", + "This is the final warning: Do you really want to enable encryption?" : "Esta es la advertencia final. ¿Realmente quiere activar el cifrado?", + "Enable encryption" : "Habilitar cifrado", + "No encryption module loaded, please enable an encryption module in the app menu." : "No se ha cargado el modulo de cifrado. Por favor habilite un modulo de cifrado en el menú de aplicaciones.", + "Select default encryption module:" : "Seleccione el módulo de cifrado por defecto:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Necesita migrar sus claves de cifrado provenientes del antiguo sistema (ownCloud <= 8.0) al nuevo. Por favor habilite el \"Módulo de cifrado por defecto\" y ejecute 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Se necesita migrar las claves de cifrado del antiguo sistema (ownCloud <= 8.0) al nuevo sistema.", + "Start migration" : "Iniciar migración", + "Everything (fatal issues, errors, warnings, info, debug)" : "Todo (Información, Avisos, Errores, debug y problemas fatales)", + "Info, warnings, errors and fatal issues" : "Información, Avisos, Errores y problemas fatales", + "Warnings, errors and fatal issues" : "Advertencias, errores y problemas fatales", + "Errors and fatal issues" : "Errores y problemas fatales", + "Fatal issues only" : "Problemas fatales solamente", + "Log" : "Registro", + "What to log" : "Que registrar", + "Download logfile" : "Descargar archivo de registro", + "More" : "Más", + "Less" : "Menos", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "El archivo de registro es mayor de 100 MB. Descargarlo puede tardar.", + "Security & setup warnings" : "Avisos de seguridad y configuració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 parece que no está configurado correctamente para solicitar las variables de entorno del sistema. La prueba con getenv(\"PATH\") sólo retorna 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." : "Por favor revisa la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentación de instalación ↗</a> para notas de configuración PHP y la configuración PHP de tu servidor, especialmente cuando se está usando 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." : "Se ha habilitado la configuración de sólo lectura. Esto evita tener que ajustar algunas configuraciones a través de la interfaz web. Además, el archivo debe hacerse modificable manualmente para cada actualización.", @@ -160,7 +187,15 @@ OC.L10N.register( "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "No fue posible ejecutar cronjob vía CLI. Han aparecido los siguientes errores técnicos:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Por favor, compruebe de nuevo las <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">guías de instalación ↗</a>, y comprueba por cualquier error o advertencia en el <a href=\"#log-section\">Registro</a>", "All checks passed." : "Ha pasado todos los controles", - "Open documentation" : "Abrir Documentación", + "Cron" : "Cron", + "Last cron job execution: %s." : "Cron se ejecutó por última vez: %s", + "Last cron job execution: %s. Something seems wrong." : "Cron se ejecutó por última vez: %s. Algo va mal.", + "Cron was not executed yet!" : "¡Cron aún no ha sido ejecutado!", + "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 se registra en un 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 cron del sistema para llamar al archivo cron.php cada 15 minutos.", + "Version" : "Versión", + "Sharing" : "Compartiendo", "Allow apps to use the Share API" : "Permitir a las aplicaciones utilizar la API de Compartición", "Allow users to share via link" : "Permite a los usuarios compartir por medio de enlaces", "Allow public uploads" : "Permitir subidas públicas", @@ -177,45 +212,7 @@ OC.L10N.register( "Exclude groups from sharing" : "Excluye grupos de compartir", "These groups will still be able to receive shares, but not to initiate them." : "Estos grupos aún podrán recibir contenidos compartidos, pero no podrán, pero no podrán iniciarlos.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Permitir autocompletación del nombre de usuario en diálogos de compartición. Si está deshabilitado, se requiere introducir el nombre de usuario.", - "Last cron job execution: %s." : "Cron se ejecutó por última vez: %s", - "Last cron job execution: %s. Something seems wrong." : "Cron se ejecutó por última vez: %s. Algo va mal.", - "Cron was not executed yet!" : "¡Cron aún no ha sido ejecutado!", - "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 se registra en un 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 cron del sistema para llamar al archivo cron.php cada 15 minutos.", - "Enable server-side encryption" : "Habilitar cifrado en el servidor", - "Please read carefully before activating server-side encryption: " : "Por favor lea cuidadosamente antes de activar el cifrado del lado del 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 el cifrado está habilitado, todos los archivos subidos al servidor desde ese punto en adelante se cifrarán en reposo en el servidor. Sólo será posible desactivar el cifrado en una fecha posterior si el módulo de cifrado activado soporta esa función, y todas las condiciones previas (por ejemplo, el establecimiento de una clave de recuperación) se cumplan.", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "El cifrado no garantiza por sí solo la seguridad del sistema. Por favor, vea la documentación para más información sobre cómo funciona la app de cifrado y los casos de uso soportados.", - "Be aware that encryption always increases the file size." : "Tenga presente que la encripción siempre incrementa el tamaño del archivo.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Es siempre bueno crear copias de seguridad de sus datos, en el caso del cifrado, asegúrese de tener una copia de seguridad de las claves de cifrado junto con sus datos.", - "This is the final warning: Do you really want to enable encryption?" : "Esta es la advertencia final. ¿Realmente quiere activar el cifrado?", - "Enable encryption" : "Habilitar cifrado", - "No encryption module loaded, please enable an encryption module in the app menu." : "No se ha cargado el modulo de cifrado. Por favor habilite un modulo de cifrado en el menú de aplicaciones.", - "Select default encryption module:" : "Seleccione el módulo de cifrado por defecto:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Necesita migrar sus claves de cifrado provenientes del antiguo sistema (ownCloud <= 8.0) al nuevo. Por favor habilite el \"Módulo de cifrado por defecto\" y ejecute 'occ encryption:migrate'", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Se necesita migrar las claves de cifrado del antiguo sistema (ownCloud <= 8.0) al nuevo sistema.", - "Start migration" : "Iniciar migració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", - "mail" : "correo electrónico", - "Authentication method" : "Método de autenticación", - "Authentication required" : "Se necesita autenticación", - "Server address" : "Dirección del servidor", - "Port" : "Puerto", - "Credentials" : "Credenciales", - "SMTP Username" : "Nombre de usuario SMTP", - "SMTP Password" : "Contraseña SMTP", - "Store credentials" : "Almacenar credenciales", - "Test email settings" : "Probar configuración de correo electrónico", - "Send email" : "Enviar mensaje", - "What to log" : "Que registrar", - "Download logfile" : "Descargar archivo de registro", - "More" : "Más", - "Less" : "Menos", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "El archivo de registro es mayor de 100 MB. Descargarlo puede tardar.", + "Tips & tricks" : "Sugerencias y trucos", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Se utiliza SQLite como base de datos. Para instalaciones mas grandes se recomiende cambiar a otro sistema de base de datos. ", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "El uso de SQLite está desaconsejado especialmente cuando se usa el cliente de escritorio para sincronizar los ficheros.", "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 usa la herramienta de línea de comandos 'occ db:convert-type' o mira la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentación ↗</a>.", @@ -225,7 +222,6 @@ OC.L10N.register( "Improving the config.php" : "Mejorar el config.php", "Theming" : "Personalizar el tema", "Hardening and security guidance" : "Guía de protección y seguridad", - "Version" : "Versión", "Developer documentation" : "Documentación de desarrollador", "Experimental applications ahead" : "Aplicaciones experimentales más adelante", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Las aplicaciones experimentales no están verificadas por problemas de seguridad, recientes o conocidas por ser inestables y/o bajo un fuerte desarrollo. Instalándolas pueden causar pérdida de datos o violación de seguridades.", @@ -281,6 +277,11 @@ OC.L10N.register( "Change password" : "Cambiar contraseña", "Language" : "Idioma", "Help translate" : "Ayúdanos a traducir", + "Get the apps to sync your files" : "Obtener las aplicaciones para sincronizar sus archivos", + "Desktop client" : "Cliente de escritorio", + "Android app" : "Aplicación de Android", + "iOS app" : "La aplicación de iOS", + "Show First Run Wizard again" : "Mostrar nuevamente el Asistente de ejecución inicial", "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", @@ -291,13 +292,6 @@ OC.L10N.register( "Use the credentials below to configure your app or device." : "Use las siguientes credenciales para configurar su app o dispositivo.", "Username" : "Nombre de usuario", "Done" : "Hecho", - "Get the apps to sync your files" : "Obtener las aplicaciones para sincronizar sus archivos", - "Desktop client" : "Cliente de escritorio", - "Android app" : "Aplicación de Android", - "iOS app" : "La aplicación de iOS", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si quiere apoyar el proyecto\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">únase a su desarrollo</a>\n⇥⇥o\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">'difunda la palabra!</a>!", - "Show First Run Wizard again" : "Mostrar nuevamente el Asistente de ejecución inicial", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Desarrollado por la {communityopen}comunidad Nextcloud[linkclose}, el {githubopen}código fuente{linkclose} está bajo la licencia {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", "Show storage location" : "Mostrar la ubicación del almacenamiento", "Show last log in" : "Mostrar el último inicio de sesión", "Show user backend" : "Mostrar motor de usuario", @@ -321,6 +315,10 @@ OC.L10N.register( "change full name" : "cambiar el nombre completo", "set new password" : "establecer nueva contraseña", "change email address" : "cambiar dirección de correo electrónico", - "Default" : "Predeterminado" + "Default" : "Predeterminado", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Almacenamiento externo", + "Updates" : "Actualizaciones" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/es.json b/settings/l10n/es.json index 766fffb15fb..7c9885b6789 100644 --- a/settings/l10n/es.json +++ b/settings/l10n/es.json @@ -1,14 +1,14 @@ { "translations": { + "Enabled" : "Habilitado", + "Not enabled" : "No habilitado", "Wrong password" : "Contraseña incorrecta", "Saved" : "Guardado", "No user supplied" : "No se especificó un usuario", + "Unable to change password" : "No se ha podido cambiar la contraseña", "Authentication error" : "Error de autenticación", "Please provide an admin recovery password, otherwise all user data will be lost" : "Por favor, facilite una contraseña de recuperación de administrador. En caso contrario podrían perderse todos los datos de usuario", "Wrong admin recovery password. Please check the password and try again." : "Contraseña de recuperación de administrador incorrecta. Por favor compruebe la contraseña e inténtelo de nuevo.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "El backend no admite cambios de contraseña, pero la clave de cifrado del usuario ha sido actualizada satisfactoriamente.", - "Unable to change password" : "No se ha podido cambiar la contraseña", - "Enabled" : "Habilitado", - "Not enabled" : "No habilitado", "installing and updating apps via the app store or Federated Cloud Sharing" : "instalando y actualizando aplicaciones vía app store o Nube compartida Federada", "Federated Cloud Sharing" : "Compartido en Cloud Federado", "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL está usando una versión desactualizada %s (%s). Por favor, actualice su sistema operativo o funciones tales como %s no funcionará de forma fiable.", @@ -33,17 +33,6 @@ "Email saved" : "Correo electrónico guardado", "Your full name has been changed." : "Se ha cambiado su nombre completo.", "Unable to change full name" : "No se puede cambiar el nombre completo", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Avisos de seguridad y configuración", - "Sharing" : "Compartiendo", - "Server-side encryption" : "Cifrado en el servidor", - "External Storage" : "Almacenamiento externo", - "Cron" : "Cron", - "Email server" : "Servidor de correo electrónico", - "Log" : "Registro", - "Tips & tricks" : "Sugerencias y trucos", - "Updates" : "Actualizaciones", "Couldn't remove app." : "No se pudo eliminar la aplicación.", "Language changed" : "Idioma cambiado", "Invalid request" : "Petición no válida", @@ -131,17 +120,55 @@ "Sessions" : "Sesiones", "App passwords" : "Contraseñas de la app", "Sync clients" : "Clientes de sincronización", - "Everything (fatal issues, errors, warnings, info, debug)" : "Todo (Información, Avisos, Errores, debug y problemas fatales)", - "Info, warnings, errors and fatal issues" : "Información, Avisos, Errores y problemas fatales", - "Warnings, errors and fatal issues" : "Advertencias, errores y problemas fatales", - "Errors and fatal issues" : "Errores y problemas fatales", - "Fatal issues only" : "Problemas fatales solamente", "None" : "Ninguno", "Login" : "Iniciar sesión", "Plain" : "Plano", "NT LAN Manager" : "Gestor de NT LAN", "SSL" : "SSL", "TLS" : "TLS", + "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", + "mail" : "correo electrónico", + "Authentication method" : "Método de autenticación", + "Authentication required" : "Se necesita autenticación", + "Server address" : "Dirección del servidor", + "Port" : "Puerto", + "Credentials" : "Credenciales", + "SMTP Username" : "Nombre de usuario SMTP", + "SMTP Password" : "Contraseña SMTP", + "Store credentials" : "Almacenar credenciales", + "Test email settings" : "Probar configuración de correo electrónico", + "Send email" : "Enviar mensaje", + "Server-side encryption" : "Cifrado en el servidor", + "Enable server-side encryption" : "Habilitar cifrado en el servidor", + "Please read carefully before activating server-side encryption: " : "Por favor lea cuidadosamente antes de activar el cifrado del lado del 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 el cifrado está habilitado, todos los archivos subidos al servidor desde ese punto en adelante se cifrarán en reposo en el servidor. Sólo será posible desactivar el cifrado en una fecha posterior si el módulo de cifrado activado soporta esa función, y todas las condiciones previas (por ejemplo, el establecimiento de una clave de recuperación) se cumplan.", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "El cifrado no garantiza por sí solo la seguridad del sistema. Por favor, vea la documentación para más información sobre cómo funciona la app de cifrado y los casos de uso soportados.", + "Be aware that encryption always increases the file size." : "Tenga presente que la encripción siempre incrementa el tamaño del archivo.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Es siempre bueno crear copias de seguridad de sus datos, en el caso del cifrado, asegúrese de tener una copia de seguridad de las claves de cifrado junto con sus datos.", + "This is the final warning: Do you really want to enable encryption?" : "Esta es la advertencia final. ¿Realmente quiere activar el cifrado?", + "Enable encryption" : "Habilitar cifrado", + "No encryption module loaded, please enable an encryption module in the app menu." : "No se ha cargado el modulo de cifrado. Por favor habilite un modulo de cifrado en el menú de aplicaciones.", + "Select default encryption module:" : "Seleccione el módulo de cifrado por defecto:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Necesita migrar sus claves de cifrado provenientes del antiguo sistema (ownCloud <= 8.0) al nuevo. Por favor habilite el \"Módulo de cifrado por defecto\" y ejecute 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Se necesita migrar las claves de cifrado del antiguo sistema (ownCloud <= 8.0) al nuevo sistema.", + "Start migration" : "Iniciar migración", + "Everything (fatal issues, errors, warnings, info, debug)" : "Todo (Información, Avisos, Errores, debug y problemas fatales)", + "Info, warnings, errors and fatal issues" : "Información, Avisos, Errores y problemas fatales", + "Warnings, errors and fatal issues" : "Advertencias, errores y problemas fatales", + "Errors and fatal issues" : "Errores y problemas fatales", + "Fatal issues only" : "Problemas fatales solamente", + "Log" : "Registro", + "What to log" : "Que registrar", + "Download logfile" : "Descargar archivo de registro", + "More" : "Más", + "Less" : "Menos", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "El archivo de registro es mayor de 100 MB. Descargarlo puede tardar.", + "Security & setup warnings" : "Avisos de seguridad y configuració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 parece que no está configurado correctamente para solicitar las variables de entorno del sistema. La prueba con getenv(\"PATH\") sólo retorna 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." : "Por favor revisa la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentación de instalación ↗</a> para notas de configuración PHP y la configuración PHP de tu servidor, especialmente cuando se está usando 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." : "Se ha habilitado la configuración de sólo lectura. Esto evita tener que ajustar algunas configuraciones a través de la interfaz web. Además, el archivo debe hacerse modificable manualmente para cada actualización.", @@ -158,7 +185,15 @@ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "No fue posible ejecutar cronjob vía CLI. Han aparecido los siguientes errores técnicos:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Por favor, compruebe de nuevo las <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">guías de instalación ↗</a>, y comprueba por cualquier error o advertencia en el <a href=\"#log-section\">Registro</a>", "All checks passed." : "Ha pasado todos los controles", - "Open documentation" : "Abrir Documentación", + "Cron" : "Cron", + "Last cron job execution: %s." : "Cron se ejecutó por última vez: %s", + "Last cron job execution: %s. Something seems wrong." : "Cron se ejecutó por última vez: %s. Algo va mal.", + "Cron was not executed yet!" : "¡Cron aún no ha sido ejecutado!", + "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 se registra en un 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 cron del sistema para llamar al archivo cron.php cada 15 minutos.", + "Version" : "Versión", + "Sharing" : "Compartiendo", "Allow apps to use the Share API" : "Permitir a las aplicaciones utilizar la API de Compartición", "Allow users to share via link" : "Permite a los usuarios compartir por medio de enlaces", "Allow public uploads" : "Permitir subidas públicas", @@ -175,45 +210,7 @@ "Exclude groups from sharing" : "Excluye grupos de compartir", "These groups will still be able to receive shares, but not to initiate them." : "Estos grupos aún podrán recibir contenidos compartidos, pero no podrán, pero no podrán iniciarlos.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Permitir autocompletación del nombre de usuario en diálogos de compartición. Si está deshabilitado, se requiere introducir el nombre de usuario.", - "Last cron job execution: %s." : "Cron se ejecutó por última vez: %s", - "Last cron job execution: %s. Something seems wrong." : "Cron se ejecutó por última vez: %s. Algo va mal.", - "Cron was not executed yet!" : "¡Cron aún no ha sido ejecutado!", - "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 se registra en un 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 cron del sistema para llamar al archivo cron.php cada 15 minutos.", - "Enable server-side encryption" : "Habilitar cifrado en el servidor", - "Please read carefully before activating server-side encryption: " : "Por favor lea cuidadosamente antes de activar el cifrado del lado del 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 el cifrado está habilitado, todos los archivos subidos al servidor desde ese punto en adelante se cifrarán en reposo en el servidor. Sólo será posible desactivar el cifrado en una fecha posterior si el módulo de cifrado activado soporta esa función, y todas las condiciones previas (por ejemplo, el establecimiento de una clave de recuperación) se cumplan.", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "El cifrado no garantiza por sí solo la seguridad del sistema. Por favor, vea la documentación para más información sobre cómo funciona la app de cifrado y los casos de uso soportados.", - "Be aware that encryption always increases the file size." : "Tenga presente que la encripción siempre incrementa el tamaño del archivo.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Es siempre bueno crear copias de seguridad de sus datos, en el caso del cifrado, asegúrese de tener una copia de seguridad de las claves de cifrado junto con sus datos.", - "This is the final warning: Do you really want to enable encryption?" : "Esta es la advertencia final. ¿Realmente quiere activar el cifrado?", - "Enable encryption" : "Habilitar cifrado", - "No encryption module loaded, please enable an encryption module in the app menu." : "No se ha cargado el modulo de cifrado. Por favor habilite un modulo de cifrado en el menú de aplicaciones.", - "Select default encryption module:" : "Seleccione el módulo de cifrado por defecto:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Necesita migrar sus claves de cifrado provenientes del antiguo sistema (ownCloud <= 8.0) al nuevo. Por favor habilite el \"Módulo de cifrado por defecto\" y ejecute 'occ encryption:migrate'", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Se necesita migrar las claves de cifrado del antiguo sistema (ownCloud <= 8.0) al nuevo sistema.", - "Start migration" : "Iniciar migració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", - "mail" : "correo electrónico", - "Authentication method" : "Método de autenticación", - "Authentication required" : "Se necesita autenticación", - "Server address" : "Dirección del servidor", - "Port" : "Puerto", - "Credentials" : "Credenciales", - "SMTP Username" : "Nombre de usuario SMTP", - "SMTP Password" : "Contraseña SMTP", - "Store credentials" : "Almacenar credenciales", - "Test email settings" : "Probar configuración de correo electrónico", - "Send email" : "Enviar mensaje", - "What to log" : "Que registrar", - "Download logfile" : "Descargar archivo de registro", - "More" : "Más", - "Less" : "Menos", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "El archivo de registro es mayor de 100 MB. Descargarlo puede tardar.", + "Tips & tricks" : "Sugerencias y trucos", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Se utiliza SQLite como base de datos. Para instalaciones mas grandes se recomiende cambiar a otro sistema de base de datos. ", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "El uso de SQLite está desaconsejado especialmente cuando se usa el cliente de escritorio para sincronizar los ficheros.", "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 usa la herramienta de línea de comandos 'occ db:convert-type' o mira la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentación ↗</a>.", @@ -223,7 +220,6 @@ "Improving the config.php" : "Mejorar el config.php", "Theming" : "Personalizar el tema", "Hardening and security guidance" : "Guía de protección y seguridad", - "Version" : "Versión", "Developer documentation" : "Documentación de desarrollador", "Experimental applications ahead" : "Aplicaciones experimentales más adelante", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Las aplicaciones experimentales no están verificadas por problemas de seguridad, recientes o conocidas por ser inestables y/o bajo un fuerte desarrollo. Instalándolas pueden causar pérdida de datos o violación de seguridades.", @@ -279,6 +275,11 @@ "Change password" : "Cambiar contraseña", "Language" : "Idioma", "Help translate" : "Ayúdanos a traducir", + "Get the apps to sync your files" : "Obtener las aplicaciones para sincronizar sus archivos", + "Desktop client" : "Cliente de escritorio", + "Android app" : "Aplicación de Android", + "iOS app" : "La aplicación de iOS", + "Show First Run Wizard again" : "Mostrar nuevamente el Asistente de ejecución inicial", "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", @@ -289,13 +290,6 @@ "Use the credentials below to configure your app or device." : "Use las siguientes credenciales para configurar su app o dispositivo.", "Username" : "Nombre de usuario", "Done" : "Hecho", - "Get the apps to sync your files" : "Obtener las aplicaciones para sincronizar sus archivos", - "Desktop client" : "Cliente de escritorio", - "Android app" : "Aplicación de Android", - "iOS app" : "La aplicación de iOS", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si quiere apoyar el proyecto\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">únase a su desarrollo</a>\n⇥⇥o\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">'difunda la palabra!</a>!", - "Show First Run Wizard again" : "Mostrar nuevamente el Asistente de ejecución inicial", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Desarrollado por la {communityopen}comunidad Nextcloud[linkclose}, el {githubopen}código fuente{linkclose} está bajo la licencia {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", "Show storage location" : "Mostrar la ubicación del almacenamiento", "Show last log in" : "Mostrar el último inicio de sesión", "Show user backend" : "Mostrar motor de usuario", @@ -319,6 +313,10 @@ "change full name" : "cambiar el nombre completo", "set new password" : "establecer nueva contraseña", "change email address" : "cambiar dirección de correo electrónico", - "Default" : "Predeterminado" + "Default" : "Predeterminado", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Almacenamiento externo", + "Updates" : "Actualizaciones" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/settings/l10n/fi_FI.js b/settings/l10n/fi_FI.js index c4d0657d86a..2f17bc8045a 100644 --- a/settings/l10n/fi_FI.js +++ b/settings/l10n/fi_FI.js @@ -1,16 +1,16 @@ OC.L10N.register( "settings", { + "Enabled" : "Käytössä", + "Not enabled" : "Ei käytössä", "Wrong password" : "Väärä salasana", "Saved" : "Tallennettu", "No user supplied" : "Käyttäjää ei määritetty", + "Unable to change password" : "Salasanan vaihto ei onnistunut", "Authentication error" : "Tunnistautumisvirhe", "Please provide an admin recovery password, otherwise all user data will be lost" : "Anna ylläpitäjän palautussalasana, muuten kaikki käyttäjien data menetetään", "Wrong admin recovery password. Please check the password and try again." : "Väärä ylläpitäjän salasana. Tarkista salasana ja yritä uudelleen.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Taustaosa ei tue salasanan vaihtoa, mutta käyttäjän salausavain päivitettiin onnistuneesti.", - "Unable to change password" : "Salasanan vaihto ei onnistunut", - "Enabled" : "Käytössä", - "Not enabled" : "Ei käytössä", "Federated Cloud Sharing" : "Federoitu pilvijakaminen", "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL käyttää vanhentunutta %s-versiota (%s). Päivitä käyttöjärjestelmäsi tai ominaisuudet kuten %s eivät toimi luotettavasti.", "A problem occurred, please check your log files (Error: %s)" : "Tapahtui virhe, tarkista lokitiedostot (Virhe: %s)", @@ -34,17 +34,6 @@ OC.L10N.register( "Email saved" : "Sähköposti tallennettu", "Your full name has been changed." : "Koko nimesi on muutettu.", "Unable to change full name" : "Koko nimen muuttaminen epäonnistui", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Turvallisuus- ja asetusvaroitukset", - "Sharing" : "Jakaminen", - "Server-side encryption" : "Palvelinpään salaus", - "External Storage" : "Erillinen tallennusväline", - "Cron" : "Cron", - "Email server" : "Sähköpostipalvelin", - "Log" : "Loki", - "Tips & tricks" : "Vinkit", - "Updates" : "Päivitykset", "Couldn't remove app." : "Sovelluksen poistaminen epäonnistui.", "Language changed" : "Kieli on vaihdettu", "Invalid request" : "Virheellinen pyyntö", @@ -114,16 +103,51 @@ OC.L10N.register( "Sessions" : "Istunnot", "App passwords" : "Sovellusten salasanat", "Sync clients" : "Synkronointisovellukset", - "Everything (fatal issues, errors, warnings, info, debug)" : "Kaikki (vakavat ongelmat, virheet, varoitukset, tiedot, vianjäljitys)", - "Info, warnings, errors and fatal issues" : "Tiedot, varoitukset, virheet ja vakavat ongelmat", - "Warnings, errors and fatal issues" : "Varoitukset, virheet ja vakavat ongelmat", - "Errors and fatal issues" : "Virheet ja vakavat ongelmat", - "Fatal issues only" : "Vain vakavat ongelmat", "None" : "Ei mitään", "Login" : "Kirjaudu", "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", + "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.", + "Send mode" : "Lähetystila", + "Encryption" : "Salaus", + "From address" : "Lähettäjän osoite", + "Authentication method" : "Tunnistautumistapa", + "Authentication required" : "Tunnistautuminen vaaditaan", + "Server address" : "Palvelimen osoite", + "Port" : "Portti", + "Credentials" : "Tilitiedot", + "SMTP Username" : "SMTP-käyttäjätunnus", + "SMTP Password" : "SMTP-salasana", + "Store credentials" : "Säilytä tilitiedot", + "Test email settings" : "Testaa sähköpostiasetukset", + "Send email" : "Lähetä sähköpostiviesti", + "Server-side encryption" : "Palvelinpään salaus", + "Enable server-side encryption" : "Käytä palvelinpään salausta", + "Please read carefully before activating server-side encryption: " : "Lue tarkasti, ennen kuin otat palvelinpään salauksen käyttöön:", + "Be aware that encryption always increases the file size." : "Ota huomioon, että salaus kasvattaa aina tiedostojen kokoa.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Säännöllisten varmuuskopioiden ottaminen on erittäin tärkeää. Jos olet ottanut salauksen käyttöön, huolehdi salausavainten varmuuskopioinnista.", + "This is the final warning: Do you really want to enable encryption?" : "Tämä on viimeinen varoitus: haluatko varmasti ottaa salauksen käyttöön?", + "Enable encryption" : "Käytä salausta", + "No encryption module loaded, please enable an encryption module in the app menu." : "Salausmoduulia ei ole käytössä. Ota salausmoduuli käyttöön sovellusvalikosta.", + "Select default encryption module:" : "Valitse oletuksena käytettävä salausmoduuli:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Sinun täytyy siirtää salausavaimet vanhasta salaustekniikasta (ownCloud <= 8.0) uuteen. Ota \"Default encryption module\" käyttöön ja suorita komento 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Sinun täytyy siirtää salausavaimet vanhasta salaustekniikasta (ownCloud <= 8.0) uuteen.", + "Start migration" : "Käynnistä migraatio", + "Everything (fatal issues, errors, warnings, info, debug)" : "Kaikki (vakavat ongelmat, virheet, varoitukset, tiedot, vianjäljitys)", + "Info, warnings, errors and fatal issues" : "Tiedot, varoitukset, virheet ja vakavat ongelmat", + "Warnings, errors and fatal issues" : "Varoitukset, virheet ja vakavat ongelmat", + "Errors and fatal issues" : "Virheet ja vakavat ongelmat", + "Fatal issues only" : "Vain vakavat ongelmat", + "Log" : "Loki", + "What to log" : "Mitä kerätään lokiin", + "Download logfile" : "Lataa lokitiedosto", + "More" : "Enemmän", + "Less" : "Vähemmän", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Lokitiedosto on kooltaan yli 100 megatavua. Sen lataaminen saattaa kestää hetken.", + "Security & setup warnings" : "Turvallisuus- ja asetusvaroitukset", "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." : "Vain luku -asetukset on otettu käyttöön. Tämä estää joidenkin asetusten määrittämisen selainkäyttöliittymän kautta. Lisäksi kyseinen tiedostoon tulee asettaa kirjoitusoikeus käsin joka päivityksen yhteydessä.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Tämä johtuu todennäköisesti välimuistista tai kiihdyttimestä kuten Zend OPcachesta tai eAcceleratorista.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s alle version %2$s on asennettu. Vakauden ja suorituskyvyn vuoksi suosittelemme päivittämään uudempaan %1$s-versioon.", @@ -133,7 +157,15 @@ OC.L10N.register( "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Suosittelemme asentamaan vaaditut paketit järjestelmään, jotta järjestelmässä on tuki yhdelle seuraavista maa-asetuksista: %s.", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Cron-työn suorittaminen komentorivin kautta ei onnistunut. Ilmeni seuraavia teknisiä virheitä:", "All checks passed." : "Läpäistiin kaikki tarkistukset.", - "Open documentation" : "Avaa dokumentaatio", + "Cron" : "Cron", + "Last cron job execution: %s." : "Viimeisin cron-työn suoritus: %s.", + "Last cron job execution: %s. Something seems wrong." : "Viimeisin cron-työn suoritus: %s. Jokin vaikuttaa menneen pieleen.", + "Cron was not executed yet!" : "Cronia ei suoritettu vielä!", + "Execute one task with each page loaded" : "Suorita yksi tehtävä jokaista ladattua sivua kohden", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php kutsuu webcron-palvelun kautta cron.php:ta 15 minuutin välein http:tä käyttäen.", + "Use system's cron service to call the cron.php file every 15 minutes." : "Käytä järjestelmän cron-palvelua cron.php-tiedoston kutsumista varten 15 minuutin välein.", + "Version" : "Versio", + "Sharing" : "Jakaminen", "Allow apps to use the Share API" : "Salli sovellusten käyttää jakamisen ohjelmointirajapintaa", "Allow users to share via link" : "Salli käyttäjien jakaa linkkien kautta", "Allow public uploads" : "Salli julkiset lähetykset", @@ -150,42 +182,7 @@ 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.", - "Last cron job execution: %s." : "Viimeisin cron-työn suoritus: %s.", - "Last cron job execution: %s. Something seems wrong." : "Viimeisin cron-työn suoritus: %s. Jokin vaikuttaa menneen pieleen.", - "Cron was not executed yet!" : "Cronia ei suoritettu vielä!", - "Execute one task with each page loaded" : "Suorita yksi tehtävä jokaista ladattua sivua kohden", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php kutsuu webcron-palvelun kautta cron.php:ta 15 minuutin välein http:tä käyttäen.", - "Use system's cron service to call the cron.php file every 15 minutes." : "Käytä järjestelmän cron-palvelua cron.php-tiedoston kutsumista varten 15 minuutin välein.", - "Enable server-side encryption" : "Käytä palvelinpään salausta", - "Please read carefully before activating server-side encryption: " : "Lue tarkasti, ennen kuin otat palvelinpään salauksen käyttöön:", - "Be aware that encryption always increases the file size." : "Ota huomioon, että salaus kasvattaa aina tiedostojen kokoa.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Säännöllisten varmuuskopioiden ottaminen on erittäin tärkeää. Jos olet ottanut salauksen käyttöön, huolehdi salausavainten varmuuskopioinnista.", - "This is the final warning: Do you really want to enable encryption?" : "Tämä on viimeinen varoitus: haluatko varmasti ottaa salauksen käyttöön?", - "Enable encryption" : "Käytä salausta", - "No encryption module loaded, please enable an encryption module in the app menu." : "Salausmoduulia ei ole käytössä. Ota salausmoduuli käyttöön sovellusvalikosta.", - "Select default encryption module:" : "Valitse oletuksena käytettävä salausmoduuli:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Sinun täytyy siirtää salausavaimet vanhasta salaustekniikasta (ownCloud <= 8.0) uuteen. Ota \"Default encryption module\" käyttöön ja suorita komento 'occ encryption:migrate'", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Sinun täytyy siirtää salausavaimet vanhasta salaustekniikasta (ownCloud <= 8.0) uuteen.", - "Start migration" : "Käynnistä migraatio", - "This is used for sending out notifications." : "Tätä käytetään ilmoitusten lähettämiseen.", - "Send mode" : "Lähetystila", - "Encryption" : "Salaus", - "From address" : "Lähettäjän osoite", - "Authentication method" : "Tunnistautumistapa", - "Authentication required" : "Tunnistautuminen vaaditaan", - "Server address" : "Palvelimen osoite", - "Port" : "Portti", - "Credentials" : "Tilitiedot", - "SMTP Username" : "SMTP-käyttäjätunnus", - "SMTP Password" : "SMTP-salasana", - "Store credentials" : "Säilytä tilitiedot", - "Test email settings" : "Testaa sähköpostiasetukset", - "Send email" : "Lähetä sähköpostiviesti", - "What to log" : "Mitä kerätään lokiin", - "Download logfile" : "Lataa lokitiedosto", - "More" : "Enemmän", - "Less" : "Vähemmän", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Lokitiedosto on kooltaan yli 100 megatavua. Sen lataaminen saattaa kestää hetken.", + "Tips & tricks" : "Vinkit", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLitea käytetään tietokantana. Suuria asennuksia varten on suositeltavaa vaihtaa muuhun tietokantaan.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Varsinkin työpöytäsovelluksen tiedostosynkronointia käyttäessä SQLiten käyttö ei ole suositeltavaa.", "How to do backups" : "Kuinka tehdä varmuuskopioita", @@ -194,7 +191,6 @@ OC.L10N.register( "Improving the config.php" : "Config.php-tiedoston parantaminen", "Theming" : "Teemojen käyttö", "Hardening and security guidance" : "Turvaamis- ja tietoturvaopas", - "Version" : "Versio", "Developer documentation" : "Kehittäjädokumentaatio", "Experimental applications ahead" : "Kokeellisia sovelluksia edessä", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Kokeellisia sovelluksia ei ole tarkistettu tietoturvauhkien varalta. Sovellukset ovat uusia, ne saattavat olla epävakaita ja ovat nopean kehityksen alaisia. Kokeellisten sovellusten asentaminen saattaa aiheuttaa tietojen katoamista tai tietoturvauhkia.", @@ -248,16 +244,16 @@ OC.L10N.register( "Change password" : "Vaihda salasana", "Language" : "Kieli", "Help translate" : "Auta kääntämisessä", - "Name" : "Nimi", - "App name" : "Sovelluksen nimi", - "Create new app password" : "Luo uusi sovellussalasana", - "Username" : "Käyttäjätunnus", - "Done" : "Valmis", "Get the apps to sync your files" : "Aseta sovellukset synkronoimaan tiedostosi", "Desktop client" : "Työpöytäsovellus", "Android app" : "Android-sovellus", "iOS app" : "iOS-sovellus", "Show First Run Wizard again" : "Näytä ensimmäisen käyttökerran avustaja uudelleen", + "Name" : "Nimi", + "App name" : "Sovelluksen nimi", + "Create new app password" : "Luo uusi sovellussalasana", + "Username" : "Käyttäjätunnus", + "Done" : "Valmis", "Show storage location" : "Näytä tallennustilan sijainti", "Show last log in" : "Näytä viimeisin sisäänkirjautuminen", "Show user backend" : "Näytä käyttäjätaustaosa", @@ -276,6 +272,10 @@ OC.L10N.register( "change full name" : "muuta koko nimi", "set new password" : "aseta uusi salasana", "change email address" : "vaihda sähköpostiosoite", - "Default" : "Oletus" + "Default" : "Oletus", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Erillinen tallennusväline", + "Updates" : "Päivitykset" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/fi_FI.json b/settings/l10n/fi_FI.json index b2c32b1e6ff..0d249ae6ce0 100644 --- a/settings/l10n/fi_FI.json +++ b/settings/l10n/fi_FI.json @@ -1,14 +1,14 @@ { "translations": { + "Enabled" : "Käytössä", + "Not enabled" : "Ei käytössä", "Wrong password" : "Väärä salasana", "Saved" : "Tallennettu", "No user supplied" : "Käyttäjää ei määritetty", + "Unable to change password" : "Salasanan vaihto ei onnistunut", "Authentication error" : "Tunnistautumisvirhe", "Please provide an admin recovery password, otherwise all user data will be lost" : "Anna ylläpitäjän palautussalasana, muuten kaikki käyttäjien data menetetään", "Wrong admin recovery password. Please check the password and try again." : "Väärä ylläpitäjän salasana. Tarkista salasana ja yritä uudelleen.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Taustaosa ei tue salasanan vaihtoa, mutta käyttäjän salausavain päivitettiin onnistuneesti.", - "Unable to change password" : "Salasanan vaihto ei onnistunut", - "Enabled" : "Käytössä", - "Not enabled" : "Ei käytössä", "Federated Cloud Sharing" : "Federoitu pilvijakaminen", "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL käyttää vanhentunutta %s-versiota (%s). Päivitä käyttöjärjestelmäsi tai ominaisuudet kuten %s eivät toimi luotettavasti.", "A problem occurred, please check your log files (Error: %s)" : "Tapahtui virhe, tarkista lokitiedostot (Virhe: %s)", @@ -32,17 +32,6 @@ "Email saved" : "Sähköposti tallennettu", "Your full name has been changed." : "Koko nimesi on muutettu.", "Unable to change full name" : "Koko nimen muuttaminen epäonnistui", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Turvallisuus- ja asetusvaroitukset", - "Sharing" : "Jakaminen", - "Server-side encryption" : "Palvelinpään salaus", - "External Storage" : "Erillinen tallennusväline", - "Cron" : "Cron", - "Email server" : "Sähköpostipalvelin", - "Log" : "Loki", - "Tips & tricks" : "Vinkit", - "Updates" : "Päivitykset", "Couldn't remove app." : "Sovelluksen poistaminen epäonnistui.", "Language changed" : "Kieli on vaihdettu", "Invalid request" : "Virheellinen pyyntö", @@ -112,16 +101,51 @@ "Sessions" : "Istunnot", "App passwords" : "Sovellusten salasanat", "Sync clients" : "Synkronointisovellukset", - "Everything (fatal issues, errors, warnings, info, debug)" : "Kaikki (vakavat ongelmat, virheet, varoitukset, tiedot, vianjäljitys)", - "Info, warnings, errors and fatal issues" : "Tiedot, varoitukset, virheet ja vakavat ongelmat", - "Warnings, errors and fatal issues" : "Varoitukset, virheet ja vakavat ongelmat", - "Errors and fatal issues" : "Virheet ja vakavat ongelmat", - "Fatal issues only" : "Vain vakavat ongelmat", "None" : "Ei mitään", "Login" : "Kirjaudu", "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", + "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.", + "Send mode" : "Lähetystila", + "Encryption" : "Salaus", + "From address" : "Lähettäjän osoite", + "Authentication method" : "Tunnistautumistapa", + "Authentication required" : "Tunnistautuminen vaaditaan", + "Server address" : "Palvelimen osoite", + "Port" : "Portti", + "Credentials" : "Tilitiedot", + "SMTP Username" : "SMTP-käyttäjätunnus", + "SMTP Password" : "SMTP-salasana", + "Store credentials" : "Säilytä tilitiedot", + "Test email settings" : "Testaa sähköpostiasetukset", + "Send email" : "Lähetä sähköpostiviesti", + "Server-side encryption" : "Palvelinpään salaus", + "Enable server-side encryption" : "Käytä palvelinpään salausta", + "Please read carefully before activating server-side encryption: " : "Lue tarkasti, ennen kuin otat palvelinpään salauksen käyttöön:", + "Be aware that encryption always increases the file size." : "Ota huomioon, että salaus kasvattaa aina tiedostojen kokoa.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Säännöllisten varmuuskopioiden ottaminen on erittäin tärkeää. Jos olet ottanut salauksen käyttöön, huolehdi salausavainten varmuuskopioinnista.", + "This is the final warning: Do you really want to enable encryption?" : "Tämä on viimeinen varoitus: haluatko varmasti ottaa salauksen käyttöön?", + "Enable encryption" : "Käytä salausta", + "No encryption module loaded, please enable an encryption module in the app menu." : "Salausmoduulia ei ole käytössä. Ota salausmoduuli käyttöön sovellusvalikosta.", + "Select default encryption module:" : "Valitse oletuksena käytettävä salausmoduuli:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Sinun täytyy siirtää salausavaimet vanhasta salaustekniikasta (ownCloud <= 8.0) uuteen. Ota \"Default encryption module\" käyttöön ja suorita komento 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Sinun täytyy siirtää salausavaimet vanhasta salaustekniikasta (ownCloud <= 8.0) uuteen.", + "Start migration" : "Käynnistä migraatio", + "Everything (fatal issues, errors, warnings, info, debug)" : "Kaikki (vakavat ongelmat, virheet, varoitukset, tiedot, vianjäljitys)", + "Info, warnings, errors and fatal issues" : "Tiedot, varoitukset, virheet ja vakavat ongelmat", + "Warnings, errors and fatal issues" : "Varoitukset, virheet ja vakavat ongelmat", + "Errors and fatal issues" : "Virheet ja vakavat ongelmat", + "Fatal issues only" : "Vain vakavat ongelmat", + "Log" : "Loki", + "What to log" : "Mitä kerätään lokiin", + "Download logfile" : "Lataa lokitiedosto", + "More" : "Enemmän", + "Less" : "Vähemmän", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Lokitiedosto on kooltaan yli 100 megatavua. Sen lataaminen saattaa kestää hetken.", + "Security & setup warnings" : "Turvallisuus- ja asetusvaroitukset", "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." : "Vain luku -asetukset on otettu käyttöön. Tämä estää joidenkin asetusten määrittämisen selainkäyttöliittymän kautta. Lisäksi kyseinen tiedostoon tulee asettaa kirjoitusoikeus käsin joka päivityksen yhteydessä.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Tämä johtuu todennäköisesti välimuistista tai kiihdyttimestä kuten Zend OPcachesta tai eAcceleratorista.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s alle version %2$s on asennettu. Vakauden ja suorituskyvyn vuoksi suosittelemme päivittämään uudempaan %1$s-versioon.", @@ -131,7 +155,15 @@ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Suosittelemme asentamaan vaaditut paketit järjestelmään, jotta järjestelmässä on tuki yhdelle seuraavista maa-asetuksista: %s.", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Cron-työn suorittaminen komentorivin kautta ei onnistunut. Ilmeni seuraavia teknisiä virheitä:", "All checks passed." : "Läpäistiin kaikki tarkistukset.", - "Open documentation" : "Avaa dokumentaatio", + "Cron" : "Cron", + "Last cron job execution: %s." : "Viimeisin cron-työn suoritus: %s.", + "Last cron job execution: %s. Something seems wrong." : "Viimeisin cron-työn suoritus: %s. Jokin vaikuttaa menneen pieleen.", + "Cron was not executed yet!" : "Cronia ei suoritettu vielä!", + "Execute one task with each page loaded" : "Suorita yksi tehtävä jokaista ladattua sivua kohden", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php kutsuu webcron-palvelun kautta cron.php:ta 15 minuutin välein http:tä käyttäen.", + "Use system's cron service to call the cron.php file every 15 minutes." : "Käytä järjestelmän cron-palvelua cron.php-tiedoston kutsumista varten 15 minuutin välein.", + "Version" : "Versio", + "Sharing" : "Jakaminen", "Allow apps to use the Share API" : "Salli sovellusten käyttää jakamisen ohjelmointirajapintaa", "Allow users to share via link" : "Salli käyttäjien jakaa linkkien kautta", "Allow public uploads" : "Salli julkiset lähetykset", @@ -148,42 +180,7 @@ "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.", - "Last cron job execution: %s." : "Viimeisin cron-työn suoritus: %s.", - "Last cron job execution: %s. Something seems wrong." : "Viimeisin cron-työn suoritus: %s. Jokin vaikuttaa menneen pieleen.", - "Cron was not executed yet!" : "Cronia ei suoritettu vielä!", - "Execute one task with each page loaded" : "Suorita yksi tehtävä jokaista ladattua sivua kohden", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php kutsuu webcron-palvelun kautta cron.php:ta 15 minuutin välein http:tä käyttäen.", - "Use system's cron service to call the cron.php file every 15 minutes." : "Käytä järjestelmän cron-palvelua cron.php-tiedoston kutsumista varten 15 minuutin välein.", - "Enable server-side encryption" : "Käytä palvelinpään salausta", - "Please read carefully before activating server-side encryption: " : "Lue tarkasti, ennen kuin otat palvelinpään salauksen käyttöön:", - "Be aware that encryption always increases the file size." : "Ota huomioon, että salaus kasvattaa aina tiedostojen kokoa.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Säännöllisten varmuuskopioiden ottaminen on erittäin tärkeää. Jos olet ottanut salauksen käyttöön, huolehdi salausavainten varmuuskopioinnista.", - "This is the final warning: Do you really want to enable encryption?" : "Tämä on viimeinen varoitus: haluatko varmasti ottaa salauksen käyttöön?", - "Enable encryption" : "Käytä salausta", - "No encryption module loaded, please enable an encryption module in the app menu." : "Salausmoduulia ei ole käytössä. Ota salausmoduuli käyttöön sovellusvalikosta.", - "Select default encryption module:" : "Valitse oletuksena käytettävä salausmoduuli:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Sinun täytyy siirtää salausavaimet vanhasta salaustekniikasta (ownCloud <= 8.0) uuteen. Ota \"Default encryption module\" käyttöön ja suorita komento 'occ encryption:migrate'", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Sinun täytyy siirtää salausavaimet vanhasta salaustekniikasta (ownCloud <= 8.0) uuteen.", - "Start migration" : "Käynnistä migraatio", - "This is used for sending out notifications." : "Tätä käytetään ilmoitusten lähettämiseen.", - "Send mode" : "Lähetystila", - "Encryption" : "Salaus", - "From address" : "Lähettäjän osoite", - "Authentication method" : "Tunnistautumistapa", - "Authentication required" : "Tunnistautuminen vaaditaan", - "Server address" : "Palvelimen osoite", - "Port" : "Portti", - "Credentials" : "Tilitiedot", - "SMTP Username" : "SMTP-käyttäjätunnus", - "SMTP Password" : "SMTP-salasana", - "Store credentials" : "Säilytä tilitiedot", - "Test email settings" : "Testaa sähköpostiasetukset", - "Send email" : "Lähetä sähköpostiviesti", - "What to log" : "Mitä kerätään lokiin", - "Download logfile" : "Lataa lokitiedosto", - "More" : "Enemmän", - "Less" : "Vähemmän", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Lokitiedosto on kooltaan yli 100 megatavua. Sen lataaminen saattaa kestää hetken.", + "Tips & tricks" : "Vinkit", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLitea käytetään tietokantana. Suuria asennuksia varten on suositeltavaa vaihtaa muuhun tietokantaan.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Varsinkin työpöytäsovelluksen tiedostosynkronointia käyttäessä SQLiten käyttö ei ole suositeltavaa.", "How to do backups" : "Kuinka tehdä varmuuskopioita", @@ -192,7 +189,6 @@ "Improving the config.php" : "Config.php-tiedoston parantaminen", "Theming" : "Teemojen käyttö", "Hardening and security guidance" : "Turvaamis- ja tietoturvaopas", - "Version" : "Versio", "Developer documentation" : "Kehittäjädokumentaatio", "Experimental applications ahead" : "Kokeellisia sovelluksia edessä", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Kokeellisia sovelluksia ei ole tarkistettu tietoturvauhkien varalta. Sovellukset ovat uusia, ne saattavat olla epävakaita ja ovat nopean kehityksen alaisia. Kokeellisten sovellusten asentaminen saattaa aiheuttaa tietojen katoamista tai tietoturvauhkia.", @@ -246,16 +242,16 @@ "Change password" : "Vaihda salasana", "Language" : "Kieli", "Help translate" : "Auta kääntämisessä", - "Name" : "Nimi", - "App name" : "Sovelluksen nimi", - "Create new app password" : "Luo uusi sovellussalasana", - "Username" : "Käyttäjätunnus", - "Done" : "Valmis", "Get the apps to sync your files" : "Aseta sovellukset synkronoimaan tiedostosi", "Desktop client" : "Työpöytäsovellus", "Android app" : "Android-sovellus", "iOS app" : "iOS-sovellus", "Show First Run Wizard again" : "Näytä ensimmäisen käyttökerran avustaja uudelleen", + "Name" : "Nimi", + "App name" : "Sovelluksen nimi", + "Create new app password" : "Luo uusi sovellussalasana", + "Username" : "Käyttäjätunnus", + "Done" : "Valmis", "Show storage location" : "Näytä tallennustilan sijainti", "Show last log in" : "Näytä viimeisin sisäänkirjautuminen", "Show user backend" : "Näytä käyttäjätaustaosa", @@ -274,6 +270,10 @@ "change full name" : "muuta koko nimi", "set new password" : "aseta uusi salasana", "change email address" : "vaihda sähköpostiosoite", - "Default" : "Oletus" + "Default" : "Oletus", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Erillinen tallennusväline", + "Updates" : "Päivitykset" },"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 c3db9933a4a..8f44b6b10f2 100644 --- a/settings/l10n/fr.js +++ b/settings/l10n/fr.js @@ -1,16 +1,16 @@ OC.L10N.register( "settings", { + "Enabled" : "Activées", + "Not enabled" : "Désactivées", "Wrong password" : "Mot de passe incorrect", "Saved" : "Sauvegardé", "No user supplied" : "Aucun utilisateur fourni", + "Unable to change password" : "Impossible de modifier le mot de passe", "Authentication error" : "Erreur d'authentification", "Please provide an admin recovery password, otherwise all user data will be lost" : "Veuillez fournir un mot de passe administrateur de récupération de données, sinon toutes les données de l'utilisateur seront perdues", "Wrong admin recovery password. Please check the password and try again." : "Mot de passe administrateur de récupération de données non valable. Veuillez vérifier le mot de passe et essayer à nouveau.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "L'infrastructure d'arrière-plan ne supporte pas la modification de mot de passe, mais la clef de chiffrement de l'utilisateur a été mise à jour avec succès.", - "Unable to change password" : "Impossible de modifier le mot de passe", - "Enabled" : "Activées", - "Not enabled" : "Désactivées", "installing and updating apps via the app store or Federated Cloud Sharing" : "le partage Federated Cloud ou l'installation et la mise à jour d'applications par l'app store", "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 utilise %s %s, qui est une version obsolète. Veuillez mettre à jour votre système d'exploitation, ou des fonctionnalités telles que %s ne fonctionneront pas correctement.", @@ -35,17 +35,6 @@ OC.L10N.register( "Email saved" : "E-mail sauvegardé", "Your full name has been changed." : "Votre nom complet a été modifié.", "Unable to change full name" : "Impossible de changer le nom complet", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Avertissements de sécurité & configuration", - "Sharing" : "Partage", - "Server-side encryption" : "Chiffrement côté serveur", - "External Storage" : "Stockage externe", - "Cron" : "Cron", - "Email server" : "Serveur e-mail", - "Log" : "Log", - "Tips & tricks" : "Trucs et astuces", - "Updates" : "Mises à jour", "Couldn't remove app." : "Impossible de supprimer l'application.", "Language changed" : "Langue changée", "Invalid request" : "Requête non valide", @@ -68,7 +57,7 @@ OC.L10N.register( "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Les applications approuvées sont créées par des développeurs de confiance et ont passé les tests de sécurité. Elles sont activement maintenues et leur code source est ouvert. Leurs développeurs les considèrent stables pour une utilisation normale.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Cette application est nouvelle ou instable, et sa sécurité n'a pas été vérifiée. Installez-la à vos risques et périls!", "Update to %s" : "Mettre à niveau vers la version %s", - "_You have %n app update pending_::_You have %n app updates pending_" : ["Vous avez %n application qui attend ça mise a jour .","Vous avez %n applications qui attendent leurs mise a jour ."], + "_You have %n app update pending_::_You have %n app updates pending_" : ["Vous avez %n application qui attend ça mise a jour .","Vous avez %n applications en attente de mise à jour"], "Please wait...." : "Veuillez patienter…", "Error while disabling app" : "Erreur lors de la désactivation de l'application", "Disable" : "Désactiver", @@ -133,17 +122,55 @@ OC.L10N.register( "Sessions" : "Sessions", "App passwords" : "Mots de passe de l'application", "Sync clients" : "Clients de synchronisation", - "Everything (fatal issues, errors, warnings, info, debug)" : "Tout (erreurs fatales, erreurs, avertissements, informations, debogage)", - "Info, warnings, errors and fatal issues" : "Informations, avertissements, erreurs et erreurs fatales", - "Warnings, errors and fatal issues" : "Avertissements, erreurs et erreurs fatales", - "Errors and fatal issues" : "Erreurs et erreurs fatales", - "Fatal issues only" : "Erreurs fatales uniquement", "None" : "Aucun", "Login" : "Login", "Plain" : "En clair", "NT LAN Manager" : "Gestionnaire du réseau NT", "SSL" : "SSL", "TLS" : "TLS", + "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.", + "Send mode" : "Mode d'envoi", + "Encryption" : "Chiffrement", + "From address" : "Adresse source", + "mail" : "e-mail", + "Authentication method" : "Méthode d'authentification", + "Authentication required" : "Authentification requise", + "Server address" : "Adresse du serveur", + "Port" : "Port", + "Credentials" : "Informations d'identification", + "SMTP Username" : "Nom d'utilisateur SMTP", + "SMTP Password" : "Mot de passe SMTP", + "Store credentials" : "Enregistrer les identifiants", + "Test email settings" : "Tester les paramètres e-mail", + "Send email" : "Envoyer un e-mail", + "Server-side encryption" : "Chiffrement côté serveur", + "Enable server-side encryption" : "Activer le chiffrement côté serveur", + "Please read carefully before activating server-side encryption: " : "Veuillez lire ceci avec attention avant d'activer le chiffrement :", + "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." : "Une fois le chiffrement activé, les fichiers téléversés sur le serveur à partir de ce moment seront stockés sous forme chiffrée. Il n'est possible de désactiver le chiffrement que si le module utilisé le permet spécifiquement, et que toutes les conditions préalables sont réunies pour ce faire (par exemple la création d'une clef de récupération).", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Le chiffrement seul ne garantit pas la sécurité du système. Veuillez consulter la documentation pour plus d'informations à propos du fonction de l'application de chiffrement, et des cas d'utilisations supportés.", + "Be aware that encryption always increases the file size." : "Veuillez noter que le chiffrement augmente toujours la taille des fichiers.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Il est opportun de sauvegarder régulièrement vos données. Si ces données sont chiffrées, n'oubliez pas de sauvegarder aussi les clés de chiffrement.", + "This is the final warning: Do you really want to enable encryption?" : "Dernier avertissement : Voulez-vous vraiment activer le chiffrement ?", + "Enable encryption" : "Activer le chiffrement", + "No encryption module loaded, please enable an encryption module in the app menu." : "Aucun module de chiffrement n'est chargé. Merci d'activer un module de chiffrement dans le menu des applications.", + "Select default encryption module:" : "Sélectionnez le module de chiffrement par défaut :", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Vous devez migrer vos clés de chiffrement de l'ancienne version (ownCloud <= 8.0) vers la nouvelle. Veuillez activer l'application \"Default Encryption Module\" et exécuter 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Vous devez migrer vos clés de chiffrement de l'ancienne version (ownCloud <= 8.0) vers la nouvelle.", + "Start migration" : "Démarrer la migration", + "Everything (fatal issues, errors, warnings, info, debug)" : "Tout (erreurs fatales, erreurs, avertissements, informations, debogage)", + "Info, warnings, errors and fatal issues" : "Informations, avertissements, erreurs et erreurs fatales", + "Warnings, errors and fatal issues" : "Avertissements, erreurs et erreurs fatales", + "Errors and fatal issues" : "Erreurs et erreurs fatales", + "Fatal issues only" : "Erreurs fatales uniquement", + "Log" : "Log", + "What to log" : "Ce qu'il faut journaliser", + "Download logfile" : "Télécharger le fichier de journalisation", + "More" : "Plus", + "Less" : "Moins", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "La taille du fichier journal excède 100 Mo. Le télécharger peut prendre un certain temps!", + "Security & setup warnings" : "Avertissements de sécurité & configuration", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php ne semble pas être configuré de manière à récupérer les valeurs des variables d’environnement. Le test de la commande getenv(\"PATH\") retourne seulement une réponse vide. ", "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." : "Veuillez consulter <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">la documentation d'installation ↗</a> pour savoir comment configurer php sur votre serveur, en particulier en cas d'utilisation de 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 configuration est en mode lecture seule. Ceci empêche la modification de certaines configurations via l'interface web. De plus, le fichier doit être passé manuellement en lecture-écriture avant chaque mise à jour.", @@ -160,7 +187,15 @@ OC.L10N.register( "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "La tâche cron n'a pu s'exécuter via CLI. Ces erreurs techniques sont apparues :", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Consultez les <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">guides d'installation ↗</a>, et cherchez des erreurs ou avertissements dans <a href=\"#log-section\">les logs</a>.", "All checks passed." : "Tous les tests ont réussi.", - "Open documentation" : "Voir la documentation", + "Cron" : "Cron", + "Last cron job execution: %s." : "Dernière tâche cron exécutée : %s.", + "Last cron job execution: %s. Something seems wrong." : "Dernière tâche cron exécutée : %s. Quelque chose s'est mal passé.", + "Cron was not executed yet!" : "Le cron n'a pas encore été exécuté !", + "Execute one task with each page loaded" : "Exécute une tâche à chaque chargement de page", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "Utilisez un service webcron pour exécuter cron.php toutes les 15 minutes par HTTP", + "Use system's cron service to call the cron.php file every 15 minutes." : "Utilisez le service cron du système pour appeler le fichier cron.php toutes les 15 minutes.", + "Version" : "Version", + "Sharing" : "Partage", "Allow apps to use the Share API" : "Autoriser les applications à utiliser l'API de partage", "Allow users to share via link" : "Autoriser les utilisateurs à partager par lien", "Allow public uploads" : "Autoriser les téléversements publics", @@ -177,45 +212,7 @@ OC.L10N.register( "Exclude groups from sharing" : "Empêcher certains groupes de partager", "These groups will still be able to receive shares, but not to initiate them." : "Ces groupes ne pourront plus initier de partage, mais ils pourront toujours rejoindre les partages faits par d'autres. ", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Activer l'autocomplétion des noms d'utilisateurs dans la fenêtre de partage. Si cette option est désactivée, les noms complets doivent être indiqués.", - "Last cron job execution: %s." : "Dernière tâche cron exécutée : %s.", - "Last cron job execution: %s. Something seems wrong." : "Dernière tâche cron exécutée : %s. Quelque chose s'est mal passé.", - "Cron was not executed yet!" : "Le cron n'a pas encore été exécuté !", - "Execute one task with each page loaded" : "Exécute une tâche à chaque chargement de page", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "Utilisez un service webcron pour exécuter cron.php toutes les 15 minutes par HTTP", - "Use system's cron service to call the cron.php file every 15 minutes." : "Utilisez le service cron du système pour appeler le fichier cron.php toutes les 15 minutes.", - "Enable server-side encryption" : "Activer le chiffrement côté serveur", - "Please read carefully before activating server-side encryption: " : "Veuillez lire ceci avec attention avant d'activer le chiffrement :", - "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." : "Une fois le chiffrement activé, les fichiers téléversés sur le serveur à partir de ce moment seront stockés sous forme chiffrée. Il n'est possible de désactiver le chiffrement que si le module utilisé le permet spécifiquement, et que toutes les conditions préalables sont réunies pour ce faire (par exemple la création d'une clef de récupération).", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Le chiffrement seul ne garantit pas la sécurité du système. Veuillez consulter la documentation pour plus d'informations à propos du fonction de l'application de chiffrement, et des cas d'utilisations supportés.", - "Be aware that encryption always increases the file size." : "Veuillez noter que le chiffrement augmente toujours la taille des fichiers.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Il est opportun de sauvegarder régulièrement vos données. Si ces données sont chiffrées, n'oubliez pas de sauvegarder aussi les clés de chiffrement.", - "This is the final warning: Do you really want to enable encryption?" : "Dernier avertissement : Voulez-vous vraiment activer le chiffrement ?", - "Enable encryption" : "Activer le chiffrement", - "No encryption module loaded, please enable an encryption module in the app menu." : "Aucun module de chiffrement n'est chargé. Merci d'activer un module de chiffrement dans le menu des applications.", - "Select default encryption module:" : "Sélectionnez le module de chiffrement par défaut :", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Vous devez migrer vos clés de chiffrement de l'ancienne version (ownCloud <= 8.0) vers la nouvelle. Veuillez activer l'application \"Default Encryption Module\" et exécuter 'occ encryption:migrate'", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Vous devez migrer vos clés de chiffrement de l'ancienne version (ownCloud <= 8.0) vers la nouvelle.", - "Start migration" : "Démarrer la migration", - "This is used for sending out notifications." : "Ceci est utilisé pour l'envoi des notifications.", - "Send mode" : "Mode d'envoi", - "Encryption" : "Chiffrement", - "From address" : "Adresse source", - "mail" : "e-mail", - "Authentication method" : "Méthode d'authentification", - "Authentication required" : "Authentification requise", - "Server address" : "Adresse du serveur", - "Port" : "Port", - "Credentials" : "Informations d'identification", - "SMTP Username" : "Nom d'utilisateur SMTP", - "SMTP Password" : "Mot de passe SMTP", - "Store credentials" : "Enregistrer les identifiants", - "Test email settings" : "Tester les paramètres e-mail", - "Send email" : "Envoyer un e-mail", - "What to log" : "Ce qu'il faut journaliser", - "Download logfile" : "Télécharger le fichier de journalisation", - "More" : "Plus", - "Less" : "Moins", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "La taille du fichier journal excède 100 Mo. Le télécharger peut prendre un certain temps!", + "Tips & tricks" : "Trucs et astuces", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite est actuellement utilisé comme gestionnaire de base de données. Pour des installations plus volumineuses, nous vous conseillons d'utiliser un autre gestionnaire de base de données.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "L'utilisation de SQLite est particulièrement déconseillée si vous utilisez le client de bureau pour synchroniser vos données.", "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>." : "Pour migrer vers un autre type de base de données, utilisez la ligne de commande : 'occ db:convert-type' ou consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>.", @@ -225,7 +222,6 @@ OC.L10N.register( "Improving the config.php" : "Amélioration du config.php ", "Theming" : "Personnalisation de l'apparence", "Hardening and security guidance" : "Guide pour le renforcement et la sécurité", - "Version" : "Version", "Developer documentation" : "Documentation pour développeurs", "Experimental applications ahead" : "Attention! Applications expérimentales", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Les applications expérimentales n'ont pas fait l'objet de tests de sécurité, sont encore en développement et peuvent être instables. Les installer peut causer des pertes de données ou des failles de sécurité. ", @@ -281,6 +277,11 @@ OC.L10N.register( "Change password" : "Changer de mot de passe", "Language" : "Langue", "Help translate" : "Aidez à traduire", + "Get the apps to sync your files" : "Obtenez les applications de synchronisation de vos fichiers", + "Desktop client" : "Client de bureau", + "Android app" : "Application Android", + "iOS app" : "Application iOS", + "Show First Run Wizard again" : "Revoir la fenêtre d'accueil affichée lors de votre première connexion", "Web, desktop and mobile clients currently logged in to your account." : "Clients web, desktop et mobiles actuellement connectés sur votre compte.", "Device" : "Périphérique", "Last activity" : "Dernière activité", @@ -291,13 +292,6 @@ OC.L10N.register( "Use the credentials below to configure your app or device." : "Utilisez les informations d'identification ci-dessous pour configurer votre application ou appareil.", "Username" : "Nom d'utilisateur", "Done" : "Terminé", - "Get the apps to sync your files" : "Obtenez les applications de synchronisation de vos fichiers", - "Desktop client" : "Client de bureau", - "Android app" : "Application Android", - "iOS app" : "Application iOS", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous voulez supporter le projet <a href=\"https://nextcloud.com/contribute\" target=\"_blank\" rel=\"noreferrer\">rejoindre le développement</a> ou <a href=\"https://nextcloud.com/contribute\" target=\"_blank\" rel=\"noreferrer\">promouvoir</a> !", - "Show First Run Wizard again" : "Revoir la fenêtre d'accueil affichée lors de votre première connexion", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Développé par la {communityopen}communauté Nextcloud{linkclose}, le {githubopen}code source{linkclose} est sous licence {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", "Show storage location" : "Afficher l'emplacement du stockage", "Show last log in" : "Montrer la dernière connexion", "Show user backend" : "Montrer la source de l'identifiant", @@ -321,6 +315,10 @@ OC.L10N.register( "change full name" : "Modifier le nom complet", "set new password" : "Changer le mot de passe", "change email address" : "changer l'adresse e-mail", - "Default" : "Défaut" + "Default" : "Défaut", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Stockage externe", + "Updates" : "Mises à jour" }, "nplurals=2; plural=(n > 1);"); diff --git a/settings/l10n/fr.json b/settings/l10n/fr.json index 05bfeb89a7a..78642d6bdc1 100644 --- a/settings/l10n/fr.json +++ b/settings/l10n/fr.json @@ -1,14 +1,14 @@ { "translations": { + "Enabled" : "Activées", + "Not enabled" : "Désactivées", "Wrong password" : "Mot de passe incorrect", "Saved" : "Sauvegardé", "No user supplied" : "Aucun utilisateur fourni", + "Unable to change password" : "Impossible de modifier le mot de passe", "Authentication error" : "Erreur d'authentification", "Please provide an admin recovery password, otherwise all user data will be lost" : "Veuillez fournir un mot de passe administrateur de récupération de données, sinon toutes les données de l'utilisateur seront perdues", "Wrong admin recovery password. Please check the password and try again." : "Mot de passe administrateur de récupération de données non valable. Veuillez vérifier le mot de passe et essayer à nouveau.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "L'infrastructure d'arrière-plan ne supporte pas la modification de mot de passe, mais la clef de chiffrement de l'utilisateur a été mise à jour avec succès.", - "Unable to change password" : "Impossible de modifier le mot de passe", - "Enabled" : "Activées", - "Not enabled" : "Désactivées", "installing and updating apps via the app store or Federated Cloud Sharing" : "le partage Federated Cloud ou l'installation et la mise à jour d'applications par l'app store", "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 utilise %s %s, qui est une version obsolète. Veuillez mettre à jour votre système d'exploitation, ou des fonctionnalités telles que %s ne fonctionneront pas correctement.", @@ -33,17 +33,6 @@ "Email saved" : "E-mail sauvegardé", "Your full name has been changed." : "Votre nom complet a été modifié.", "Unable to change full name" : "Impossible de changer le nom complet", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Avertissements de sécurité & configuration", - "Sharing" : "Partage", - "Server-side encryption" : "Chiffrement côté serveur", - "External Storage" : "Stockage externe", - "Cron" : "Cron", - "Email server" : "Serveur e-mail", - "Log" : "Log", - "Tips & tricks" : "Trucs et astuces", - "Updates" : "Mises à jour", "Couldn't remove app." : "Impossible de supprimer l'application.", "Language changed" : "Langue changée", "Invalid request" : "Requête non valide", @@ -66,7 +55,7 @@ "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Les applications approuvées sont créées par des développeurs de confiance et ont passé les tests de sécurité. Elles sont activement maintenues et leur code source est ouvert. Leurs développeurs les considèrent stables pour une utilisation normale.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Cette application est nouvelle ou instable, et sa sécurité n'a pas été vérifiée. Installez-la à vos risques et périls!", "Update to %s" : "Mettre à niveau vers la version %s", - "_You have %n app update pending_::_You have %n app updates pending_" : ["Vous avez %n application qui attend ça mise a jour .","Vous avez %n applications qui attendent leurs mise a jour ."], + "_You have %n app update pending_::_You have %n app updates pending_" : ["Vous avez %n application qui attend ça mise a jour .","Vous avez %n applications en attente de mise à jour"], "Please wait...." : "Veuillez patienter…", "Error while disabling app" : "Erreur lors de la désactivation de l'application", "Disable" : "Désactiver", @@ -131,17 +120,55 @@ "Sessions" : "Sessions", "App passwords" : "Mots de passe de l'application", "Sync clients" : "Clients de synchronisation", - "Everything (fatal issues, errors, warnings, info, debug)" : "Tout (erreurs fatales, erreurs, avertissements, informations, debogage)", - "Info, warnings, errors and fatal issues" : "Informations, avertissements, erreurs et erreurs fatales", - "Warnings, errors and fatal issues" : "Avertissements, erreurs et erreurs fatales", - "Errors and fatal issues" : "Erreurs et erreurs fatales", - "Fatal issues only" : "Erreurs fatales uniquement", "None" : "Aucun", "Login" : "Login", "Plain" : "En clair", "NT LAN Manager" : "Gestionnaire du réseau NT", "SSL" : "SSL", "TLS" : "TLS", + "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.", + "Send mode" : "Mode d'envoi", + "Encryption" : "Chiffrement", + "From address" : "Adresse source", + "mail" : "e-mail", + "Authentication method" : "Méthode d'authentification", + "Authentication required" : "Authentification requise", + "Server address" : "Adresse du serveur", + "Port" : "Port", + "Credentials" : "Informations d'identification", + "SMTP Username" : "Nom d'utilisateur SMTP", + "SMTP Password" : "Mot de passe SMTP", + "Store credentials" : "Enregistrer les identifiants", + "Test email settings" : "Tester les paramètres e-mail", + "Send email" : "Envoyer un e-mail", + "Server-side encryption" : "Chiffrement côté serveur", + "Enable server-side encryption" : "Activer le chiffrement côté serveur", + "Please read carefully before activating server-side encryption: " : "Veuillez lire ceci avec attention avant d'activer le chiffrement :", + "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." : "Une fois le chiffrement activé, les fichiers téléversés sur le serveur à partir de ce moment seront stockés sous forme chiffrée. Il n'est possible de désactiver le chiffrement que si le module utilisé le permet spécifiquement, et que toutes les conditions préalables sont réunies pour ce faire (par exemple la création d'une clef de récupération).", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Le chiffrement seul ne garantit pas la sécurité du système. Veuillez consulter la documentation pour plus d'informations à propos du fonction de l'application de chiffrement, et des cas d'utilisations supportés.", + "Be aware that encryption always increases the file size." : "Veuillez noter que le chiffrement augmente toujours la taille des fichiers.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Il est opportun de sauvegarder régulièrement vos données. Si ces données sont chiffrées, n'oubliez pas de sauvegarder aussi les clés de chiffrement.", + "This is the final warning: Do you really want to enable encryption?" : "Dernier avertissement : Voulez-vous vraiment activer le chiffrement ?", + "Enable encryption" : "Activer le chiffrement", + "No encryption module loaded, please enable an encryption module in the app menu." : "Aucun module de chiffrement n'est chargé. Merci d'activer un module de chiffrement dans le menu des applications.", + "Select default encryption module:" : "Sélectionnez le module de chiffrement par défaut :", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Vous devez migrer vos clés de chiffrement de l'ancienne version (ownCloud <= 8.0) vers la nouvelle. Veuillez activer l'application \"Default Encryption Module\" et exécuter 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Vous devez migrer vos clés de chiffrement de l'ancienne version (ownCloud <= 8.0) vers la nouvelle.", + "Start migration" : "Démarrer la migration", + "Everything (fatal issues, errors, warnings, info, debug)" : "Tout (erreurs fatales, erreurs, avertissements, informations, debogage)", + "Info, warnings, errors and fatal issues" : "Informations, avertissements, erreurs et erreurs fatales", + "Warnings, errors and fatal issues" : "Avertissements, erreurs et erreurs fatales", + "Errors and fatal issues" : "Erreurs et erreurs fatales", + "Fatal issues only" : "Erreurs fatales uniquement", + "Log" : "Log", + "What to log" : "Ce qu'il faut journaliser", + "Download logfile" : "Télécharger le fichier de journalisation", + "More" : "Plus", + "Less" : "Moins", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "La taille du fichier journal excède 100 Mo. Le télécharger peut prendre un certain temps!", + "Security & setup warnings" : "Avertissements de sécurité & configuration", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php ne semble pas être configuré de manière à récupérer les valeurs des variables d’environnement. Le test de la commande getenv(\"PATH\") retourne seulement une réponse vide. ", "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." : "Veuillez consulter <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">la documentation d'installation ↗</a> pour savoir comment configurer php sur votre serveur, en particulier en cas d'utilisation de 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 configuration est en mode lecture seule. Ceci empêche la modification de certaines configurations via l'interface web. De plus, le fichier doit être passé manuellement en lecture-écriture avant chaque mise à jour.", @@ -158,7 +185,15 @@ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "La tâche cron n'a pu s'exécuter via CLI. Ces erreurs techniques sont apparues :", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Consultez les <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">guides d'installation ↗</a>, et cherchez des erreurs ou avertissements dans <a href=\"#log-section\">les logs</a>.", "All checks passed." : "Tous les tests ont réussi.", - "Open documentation" : "Voir la documentation", + "Cron" : "Cron", + "Last cron job execution: %s." : "Dernière tâche cron exécutée : %s.", + "Last cron job execution: %s. Something seems wrong." : "Dernière tâche cron exécutée : %s. Quelque chose s'est mal passé.", + "Cron was not executed yet!" : "Le cron n'a pas encore été exécuté !", + "Execute one task with each page loaded" : "Exécute une tâche à chaque chargement de page", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "Utilisez un service webcron pour exécuter cron.php toutes les 15 minutes par HTTP", + "Use system's cron service to call the cron.php file every 15 minutes." : "Utilisez le service cron du système pour appeler le fichier cron.php toutes les 15 minutes.", + "Version" : "Version", + "Sharing" : "Partage", "Allow apps to use the Share API" : "Autoriser les applications à utiliser l'API de partage", "Allow users to share via link" : "Autoriser les utilisateurs à partager par lien", "Allow public uploads" : "Autoriser les téléversements publics", @@ -175,45 +210,7 @@ "Exclude groups from sharing" : "Empêcher certains groupes de partager", "These groups will still be able to receive shares, but not to initiate them." : "Ces groupes ne pourront plus initier de partage, mais ils pourront toujours rejoindre les partages faits par d'autres. ", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Activer l'autocomplétion des noms d'utilisateurs dans la fenêtre de partage. Si cette option est désactivée, les noms complets doivent être indiqués.", - "Last cron job execution: %s." : "Dernière tâche cron exécutée : %s.", - "Last cron job execution: %s. Something seems wrong." : "Dernière tâche cron exécutée : %s. Quelque chose s'est mal passé.", - "Cron was not executed yet!" : "Le cron n'a pas encore été exécuté !", - "Execute one task with each page loaded" : "Exécute une tâche à chaque chargement de page", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "Utilisez un service webcron pour exécuter cron.php toutes les 15 minutes par HTTP", - "Use system's cron service to call the cron.php file every 15 minutes." : "Utilisez le service cron du système pour appeler le fichier cron.php toutes les 15 minutes.", - "Enable server-side encryption" : "Activer le chiffrement côté serveur", - "Please read carefully before activating server-side encryption: " : "Veuillez lire ceci avec attention avant d'activer le chiffrement :", - "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." : "Une fois le chiffrement activé, les fichiers téléversés sur le serveur à partir de ce moment seront stockés sous forme chiffrée. Il n'est possible de désactiver le chiffrement que si le module utilisé le permet spécifiquement, et que toutes les conditions préalables sont réunies pour ce faire (par exemple la création d'une clef de récupération).", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Le chiffrement seul ne garantit pas la sécurité du système. Veuillez consulter la documentation pour plus d'informations à propos du fonction de l'application de chiffrement, et des cas d'utilisations supportés.", - "Be aware that encryption always increases the file size." : "Veuillez noter que le chiffrement augmente toujours la taille des fichiers.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Il est opportun de sauvegarder régulièrement vos données. Si ces données sont chiffrées, n'oubliez pas de sauvegarder aussi les clés de chiffrement.", - "This is the final warning: Do you really want to enable encryption?" : "Dernier avertissement : Voulez-vous vraiment activer le chiffrement ?", - "Enable encryption" : "Activer le chiffrement", - "No encryption module loaded, please enable an encryption module in the app menu." : "Aucun module de chiffrement n'est chargé. Merci d'activer un module de chiffrement dans le menu des applications.", - "Select default encryption module:" : "Sélectionnez le module de chiffrement par défaut :", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Vous devez migrer vos clés de chiffrement de l'ancienne version (ownCloud <= 8.0) vers la nouvelle. Veuillez activer l'application \"Default Encryption Module\" et exécuter 'occ encryption:migrate'", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Vous devez migrer vos clés de chiffrement de l'ancienne version (ownCloud <= 8.0) vers la nouvelle.", - "Start migration" : "Démarrer la migration", - "This is used for sending out notifications." : "Ceci est utilisé pour l'envoi des notifications.", - "Send mode" : "Mode d'envoi", - "Encryption" : "Chiffrement", - "From address" : "Adresse source", - "mail" : "e-mail", - "Authentication method" : "Méthode d'authentification", - "Authentication required" : "Authentification requise", - "Server address" : "Adresse du serveur", - "Port" : "Port", - "Credentials" : "Informations d'identification", - "SMTP Username" : "Nom d'utilisateur SMTP", - "SMTP Password" : "Mot de passe SMTP", - "Store credentials" : "Enregistrer les identifiants", - "Test email settings" : "Tester les paramètres e-mail", - "Send email" : "Envoyer un e-mail", - "What to log" : "Ce qu'il faut journaliser", - "Download logfile" : "Télécharger le fichier de journalisation", - "More" : "Plus", - "Less" : "Moins", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "La taille du fichier journal excède 100 Mo. Le télécharger peut prendre un certain temps!", + "Tips & tricks" : "Trucs et astuces", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite est actuellement utilisé comme gestionnaire de base de données. Pour des installations plus volumineuses, nous vous conseillons d'utiliser un autre gestionnaire de base de données.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "L'utilisation de SQLite est particulièrement déconseillée si vous utilisez le client de bureau pour synchroniser vos données.", "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>." : "Pour migrer vers un autre type de base de données, utilisez la ligne de commande : 'occ db:convert-type' ou consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>.", @@ -223,7 +220,6 @@ "Improving the config.php" : "Amélioration du config.php ", "Theming" : "Personnalisation de l'apparence", "Hardening and security guidance" : "Guide pour le renforcement et la sécurité", - "Version" : "Version", "Developer documentation" : "Documentation pour développeurs", "Experimental applications ahead" : "Attention! Applications expérimentales", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Les applications expérimentales n'ont pas fait l'objet de tests de sécurité, sont encore en développement et peuvent être instables. Les installer peut causer des pertes de données ou des failles de sécurité. ", @@ -279,6 +275,11 @@ "Change password" : "Changer de mot de passe", "Language" : "Langue", "Help translate" : "Aidez à traduire", + "Get the apps to sync your files" : "Obtenez les applications de synchronisation de vos fichiers", + "Desktop client" : "Client de bureau", + "Android app" : "Application Android", + "iOS app" : "Application iOS", + "Show First Run Wizard again" : "Revoir la fenêtre d'accueil affichée lors de votre première connexion", "Web, desktop and mobile clients currently logged in to your account." : "Clients web, desktop et mobiles actuellement connectés sur votre compte.", "Device" : "Périphérique", "Last activity" : "Dernière activité", @@ -289,13 +290,6 @@ "Use the credentials below to configure your app or device." : "Utilisez les informations d'identification ci-dessous pour configurer votre application ou appareil.", "Username" : "Nom d'utilisateur", "Done" : "Terminé", - "Get the apps to sync your files" : "Obtenez les applications de synchronisation de vos fichiers", - "Desktop client" : "Client de bureau", - "Android app" : "Application Android", - "iOS app" : "Application iOS", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous voulez supporter le projet <a href=\"https://nextcloud.com/contribute\" target=\"_blank\" rel=\"noreferrer\">rejoindre le développement</a> ou <a href=\"https://nextcloud.com/contribute\" target=\"_blank\" rel=\"noreferrer\">promouvoir</a> !", - "Show First Run Wizard again" : "Revoir la fenêtre d'accueil affichée lors de votre première connexion", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Développé par la {communityopen}communauté Nextcloud{linkclose}, le {githubopen}code source{linkclose} est sous licence {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", "Show storage location" : "Afficher l'emplacement du stockage", "Show last log in" : "Montrer la dernière connexion", "Show user backend" : "Montrer la source de l'identifiant", @@ -319,6 +313,10 @@ "change full name" : "Modifier le nom complet", "set new password" : "Changer le mot de passe", "change email address" : "changer l'adresse e-mail", - "Default" : "Défaut" + "Default" : "Défaut", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Stockage externe", + "Updates" : "Mises à jour" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/settings/l10n/he.js b/settings/l10n/he.js index bfdcb9de110..78455244e6a 100644 --- a/settings/l10n/he.js +++ b/settings/l10n/he.js @@ -1,16 +1,16 @@ OC.L10N.register( "settings", { + "Enabled" : "מופעל", + "Not enabled" : "לא מופעל", "Wrong password" : "סיסמא שגוייה", "Saved" : "נשמר", "No user supplied" : "לא סופק שם משתמש", + "Unable to change password" : "לא ניתן לשנות את הסיסמא", "Authentication error" : "שגיאת הזדהות", "Please provide an admin recovery password, otherwise all user data will be lost" : "יש לספק את סיסמת המנהל לשחזור, אחרת כל מידע המשתמש יאבד", "Wrong admin recovery password. Please check the password and try again." : "סיסמת המנהל לשחזור שגוייה. יש לבדוק את הסיסמא ולנסות שוב.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "צד אחורי לא תומך בשינוי סיסמא, אך מפתח הצפנה של המשתמש עודכנה בהצלחה.", - "Unable to change password" : "לא ניתן לשנות את הסיסמא", - "Enabled" : "מופעל", - "Not enabled" : "לא מופעל", "installing and updating apps via the app store or 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 משתמש בגרסה %s ישנה (%s). יש לעדכן את מערכת ההפעלה או שתכונות כדוגמת %s לא יעבדו באופן מהימן.", @@ -35,17 +35,6 @@ OC.L10N.register( "Email saved" : "הדואר האלקטרוני נשמר", "Your full name has been changed." : "השם המלא שלך הוחלף", "Unable to change full name" : "לא ניתן לשנות שם מלא", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "הזהרות אבטחה והתקנה", - "Sharing" : "שיתוף", - "Server-side encryption" : "הצפנת צד שרת", - "External Storage" : "אחסון חיצוני", - "Cron" : "Cron", - "Email server" : "שרת דואר אלקטרוני", - "Log" : "יומן", - "Tips & tricks" : "עצות ותחבולות", - "Updates" : "עדכונים", "Couldn't remove app." : "לא ניתן להסיר את היישום.", "Language changed" : "שפה השתנתה", "Invalid request" : "בקשה לא חוקית", @@ -118,17 +107,54 @@ OC.L10N.register( "Sessions" : "שיחות", "App passwords" : "סיסמת יישום", "Sync clients" : "סנכרון לקוחות", - "Everything (fatal issues, errors, warnings, info, debug)" : "הכול (נושאים חמורים, שגיאות, אזהרות, מידע, ניפוי שגיאות)", - "Info, warnings, errors and fatal issues" : "מידע, אזהרות, שגיאות ונושאים חמורים", - "Warnings, errors and fatal issues" : "אזהרות, שגיאות ונושאים חמורים", - "Errors and fatal issues" : "שגיאות ונושאים חמורים", - "Fatal issues only" : "נושאים חמורים בלבד", "None" : "כלום", "Login" : "התחברות", "Plain" : "רגיל", "NT LAN Manager" : "מנהל רשת NT", "SSL" : "SSL", "TLS" : "TLS", + "Email server" : "שרת דואר אלקטרוני", + "Open documentation" : "תיעוד פתוח", + "This is used for sending out notifications." : "משתמשים בזה כדי לשלוח הודעות.", + "Send mode" : "מצב שליחה", + "Encryption" : "הצפנה", + "From address" : "מכתובת", + "mail" : "mail", + "Authentication method" : "שיטת אימות", + "Authentication required" : "נדרש אימות", + "Server address" : "כתובת שרת", + "Port" : "שער", + "Credentials" : "פרטי גישה", + "SMTP Username" : "שם משתמש SMTP ", + "SMTP Password" : "סיסמת SMTP", + "Store credentials" : "שמירת אישורים", + "Test email settings" : "בדיקת הגדרות דואר אלקטרוני", + "Send email" : "שליחת דואר אלקטרוני", + "Server-side encryption" : "הצפנת צד שרת", + "Enable server-side encryption" : "הפעלת הצפנה בצד שרת", + "Please read carefully before activating server-side encryption: " : "יש לקרוא בתשומת לב רבה לפני שמפעילים הצפנת צד שרת:", + "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "ברגע שהצפנה מופעלת, כל הקבצים שיועלו לשרת מרגע זה יהיו מוצפנים בשרת. ניתן יהיה לנטרל את ההצפנה בעתיד רק אם מודול ההצפנה תומך בפונקציה זו, וכל התנאים המוקדמים (דהיינו הגדרת מפתח השחזור) מתקיימים.", + "Be aware that encryption always increases the file size." : "תשומת לב לכך שהצפנה בהכרח מגדילה את גודל הקובץ.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "תמיד טוב ליצור גיבוי קבוע למידע , במקרה של הצפנה יש לוודא שגם מפתחות ההצפנה מגובים עם המידע שלך.", + "This is the final warning: Do you really want to enable encryption?" : "זו הזהרה אחרונה: האם באמת ברצונך להפעיל הצפנה?", + "Enable encryption" : "אפשר הצפנה", + "No encryption module loaded, please enable an encryption module in the app menu." : "לא נמצא מודול הצפנה, יש לאפשר מודול הצפנה בתפריט היישומים.", + "Select default encryption module:" : "יש לבחור מודול הצפנת ברירת מחדל:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "יש להמיר את מפתחות ההצפנה שלך בממערכת ההצפנה הישנה (ownCloud <= 8.0) למערכת החדשה. יש לאפשר את \"מודול הצפנה ברירת מחדש\" ולהריץ 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "יש להמיר את מפתחות ההצפנה שלך בממערכת ההצפנה הישנה (ownCloud <= 8.0) למערכת החדשה.", + "Start migration" : "התחלת המרה", + "Everything (fatal issues, errors, warnings, info, debug)" : "הכול (נושאים חמורים, שגיאות, אזהרות, מידע, ניפוי שגיאות)", + "Info, warnings, errors and fatal issues" : "מידע, אזהרות, שגיאות ונושאים חמורים", + "Warnings, errors and fatal issues" : "אזהרות, שגיאות ונושאים חמורים", + "Errors and fatal issues" : "שגיאות ונושאים חמורים", + "Fatal issues only" : "נושאים חמורים בלבד", + "Log" : "יומן", + "What to log" : "מה לנטר בלוג", + "Download logfile" : "הורדת קובץ לוג", + "More" : "יותר", + "Less" : "פחות", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "קובץ הלוג גדול מ- 100 מגה-בייט. הורדה עלולה לקחת זמן רב!", + "Security & setup warnings" : "הזהרות אבטחה והתקנה", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response.", "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "יש לבדוק את <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">הגדרות ההתקנה ↗</a> אחר הערות תצורת php ותצורת php של השרת שלך, בעיקר כשמשתמשים ב- php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "תצורת קריאה בלבד הופעלה. תצורה זו מונעת קביעת מספר הגדרות באמצעות ממשק האינטרנט. יתר על כן, יש צורך להגדיר ההרשאות כתיבה באופן ידני לכל עדכון.", @@ -144,7 +170,15 @@ OC.L10N.register( "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "לא ניתן היה להפעיל את cronjob דרך CLI. השגיאות הבאות נצפתו:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "יש לבדוק בשבע עיניים את <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">מדריכי ההתקנה ↗</a>, ויש לחפש אחר שגיאות או הזהרות ב- <a href=\"#log-section\">לוג</a>.", "All checks passed." : "כל הבדיקות עברו", - "Open documentation" : "תיעוד פתוח", + "Cron" : "Cron", + "Last cron job execution: %s." : "פעילות cron job אחרונה: %s.", + "Last cron job execution: %s. Something seems wrong." : "פעילות cron job אחרונה: %s. משהו נראה שגוי.", + "Cron was not executed yet!" : "Cron עדיין לא בוצע!", + "Execute one task with each page loaded" : "יש להפעיל משימה אחת עם כל עמוד שנטען", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php רשום בשירות webcron לקרוא ל- cron.php בכל 15 דקות באמצעות http.", + "Use system's cron service to call the cron.php file every 15 minutes." : "ניתן להשתמש בשירות cron לקרוא לקובץ cron.php בכל 15 דקות.", + "Version" : "גרסה", + "Sharing" : "שיתוף", "Allow apps to use the Share API" : "לאפשר ליישום להשתמש ב־API השיתוף", "Allow users to share via link" : "אפשר למשתמשים לשתף באמצעות קישור", "Allow public uploads" : "אפשר העלאות ציבוריות", @@ -161,44 +195,7 @@ OC.L10N.register( "Exclude groups from sharing" : "מניעת קבוצות משיתוף", "These groups will still be able to receive shares, but not to initiate them." : "קבוצות אלו עדיין יוכלו לקבל שיתופים, אך לא לשתף בעצמם.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "אפשר השלמה אוטומטית של שמות משתמש בתפריט שיתוף. אם תכונה זו מנוטרלת יש להכניס שם משתמש מלא.", - "Last cron job execution: %s." : "פעילות cron job אחרונה: %s.", - "Last cron job execution: %s. Something seems wrong." : "פעילות cron job אחרונה: %s. משהו נראה שגוי.", - "Cron was not executed yet!" : "Cron עדיין לא בוצע!", - "Execute one task with each page loaded" : "יש להפעיל משימה אחת עם כל עמוד שנטען", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php רשום בשירות webcron לקרוא ל- cron.php בכל 15 דקות באמצעות http.", - "Use system's cron service to call the cron.php file every 15 minutes." : "ניתן להשתמש בשירות cron לקרוא לקובץ cron.php בכל 15 דקות.", - "Enable server-side encryption" : "הפעלת הצפנה בצד שרת", - "Please read carefully before activating server-side encryption: " : "יש לקרוא בתשומת לב רבה לפני שמפעילים הצפנת צד שרת:", - "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "ברגע שהצפנה מופעלת, כל הקבצים שיועלו לשרת מרגע זה יהיו מוצפנים בשרת. ניתן יהיה לנטרל את ההצפנה בעתיד רק אם מודול ההצפנה תומך בפונקציה זו, וכל התנאים המוקדמים (דהיינו הגדרת מפתח השחזור) מתקיימים.", - "Be aware that encryption always increases the file size." : "תשומת לב לכך שהצפנה בהכרח מגדילה את גודל הקובץ.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "תמיד טוב ליצור גיבוי קבוע למידע , במקרה של הצפנה יש לוודא שגם מפתחות ההצפנה מגובים עם המידע שלך.", - "This is the final warning: Do you really want to enable encryption?" : "זו הזהרה אחרונה: האם באמת ברצונך להפעיל הצפנה?", - "Enable encryption" : "אפשר הצפנה", - "No encryption module loaded, please enable an encryption module in the app menu." : "לא נמצא מודול הצפנה, יש לאפשר מודול הצפנה בתפריט היישומים.", - "Select default encryption module:" : "יש לבחור מודול הצפנת ברירת מחדל:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "יש להמיר את מפתחות ההצפנה שלך בממערכת ההצפנה הישנה (ownCloud <= 8.0) למערכת החדשה. יש לאפשר את \"מודול הצפנה ברירת מחדש\" ולהריץ 'occ encryption:migrate'", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "יש להמיר את מפתחות ההצפנה שלך בממערכת ההצפנה הישנה (ownCloud <= 8.0) למערכת החדשה.", - "Start migration" : "התחלת המרה", - "This is used for sending out notifications." : "משתמשים בזה כדי לשלוח הודעות.", - "Send mode" : "מצב שליחה", - "Encryption" : "הצפנה", - "From address" : "מכתובת", - "mail" : "mail", - "Authentication method" : "שיטת אימות", - "Authentication required" : "נדרש אימות", - "Server address" : "כתובת שרת", - "Port" : "שער", - "Credentials" : "פרטי גישה", - "SMTP Username" : "שם משתמש SMTP ", - "SMTP Password" : "סיסמת SMTP", - "Store credentials" : "שמירת אישורים", - "Test email settings" : "בדיקת הגדרות דואר אלקטרוני", - "Send email" : "שליחת דואר אלקטרוני", - "What to log" : "מה לנטר בלוג", - "Download logfile" : "הורדת קובץ לוג", - "More" : "יותר", - "Less" : "פחות", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "קובץ הלוג גדול מ- 100 מגה-בייט. הורדה עלולה לקחת זמן רב!", + "Tips & tricks" : "עצות ותחבולות", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "המערכת משתמשת ב- SQLite כמסד נתונים. להתקנות גדולות אנו ממליצים לעבור למסדי נתונים צד אחורי אחרים.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "במיוחד כאשר משתמשים במחשב שולחני לסנכרון קבצים השימוש ב SQLite אינו מומלץ.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "למעבר למסד נתונים אחר יש להשתמש בכלי שורת פקודה: 'occ db:convert-type', או לעיין ב- <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">תיעוד↗</a>.", @@ -208,7 +205,6 @@ OC.L10N.register( "Improving the config.php" : "שיפור קובץ config.php", "Theming" : "ערכת נושא", "Hardening and security guidance" : "הדרכת הקשחה ואבטחה", - "Version" : "גרסה", "Developer documentation" : "תיעוד מפתח", "Experimental applications ahead" : "ישומים ניסיוניים לפנים", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "יישומים ניסיוניים לא נבדקו לבעיות אבטחה, חדשים או ידועים כלא יציבים ותחת פיתוח כבד. התקנה שלהם עלולה להוביל לאיבוד מידע או לפרצות אבטחה.", @@ -262,16 +258,16 @@ OC.L10N.register( "Change password" : "שינוי סיסמא", "Language" : "שפה", "Help translate" : "עזרה בתרגום", - "Name" : "שם", - "App name" : "שם יישום", - "Create new app password" : "יצירת סיסמת יישום חדשה", - "Username" : "שם משתמש", - "Done" : "הסתיים", "Get the apps to sync your files" : "קבלת היישומים לסנכרון הקבצים שלך", "Desktop client" : "מחשב אישי", "Android app" : "יישום אנדרואיד", "iOS app" : "יישום אייפון", "Show First Run Wizard again" : "הצגת אשף ההפעלה הראשונית שוב", + "Name" : "שם", + "App name" : "שם יישום", + "Create new app password" : "יצירת סיסמת יישום חדשה", + "Username" : "שם משתמש", + "Done" : "הסתיים", "Show storage location" : "הצגת מיקום אחסון", "Show last log in" : "הצגת כניסה אחרונה", "Show user backend" : "הצגת צד אחורי למשתמש", @@ -290,6 +286,10 @@ OC.L10N.register( "change full name" : "שינוי שם מלא", "set new password" : "הגדרת סיסמא חדשה", "change email address" : "שינוי כתובת דואר אלקטרוני", - "Default" : "ברירת מחדל" + "Default" : "ברירת מחדל", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "אחסון חיצוני", + "Updates" : "עדכונים" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/he.json b/settings/l10n/he.json index 89129380062..d8dfef62b1d 100644 --- a/settings/l10n/he.json +++ b/settings/l10n/he.json @@ -1,14 +1,14 @@ { "translations": { + "Enabled" : "מופעל", + "Not enabled" : "לא מופעל", "Wrong password" : "סיסמא שגוייה", "Saved" : "נשמר", "No user supplied" : "לא סופק שם משתמש", + "Unable to change password" : "לא ניתן לשנות את הסיסמא", "Authentication error" : "שגיאת הזדהות", "Please provide an admin recovery password, otherwise all user data will be lost" : "יש לספק את סיסמת המנהל לשחזור, אחרת כל מידע המשתמש יאבד", "Wrong admin recovery password. Please check the password and try again." : "סיסמת המנהל לשחזור שגוייה. יש לבדוק את הסיסמא ולנסות שוב.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "צד אחורי לא תומך בשינוי סיסמא, אך מפתח הצפנה של המשתמש עודכנה בהצלחה.", - "Unable to change password" : "לא ניתן לשנות את הסיסמא", - "Enabled" : "מופעל", - "Not enabled" : "לא מופעל", "installing and updating apps via the app store or 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 משתמש בגרסה %s ישנה (%s). יש לעדכן את מערכת ההפעלה או שתכונות כדוגמת %s לא יעבדו באופן מהימן.", @@ -33,17 +33,6 @@ "Email saved" : "הדואר האלקטרוני נשמר", "Your full name has been changed." : "השם המלא שלך הוחלף", "Unable to change full name" : "לא ניתן לשנות שם מלא", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "הזהרות אבטחה והתקנה", - "Sharing" : "שיתוף", - "Server-side encryption" : "הצפנת צד שרת", - "External Storage" : "אחסון חיצוני", - "Cron" : "Cron", - "Email server" : "שרת דואר אלקטרוני", - "Log" : "יומן", - "Tips & tricks" : "עצות ותחבולות", - "Updates" : "עדכונים", "Couldn't remove app." : "לא ניתן להסיר את היישום.", "Language changed" : "שפה השתנתה", "Invalid request" : "בקשה לא חוקית", @@ -116,17 +105,54 @@ "Sessions" : "שיחות", "App passwords" : "סיסמת יישום", "Sync clients" : "סנכרון לקוחות", - "Everything (fatal issues, errors, warnings, info, debug)" : "הכול (נושאים חמורים, שגיאות, אזהרות, מידע, ניפוי שגיאות)", - "Info, warnings, errors and fatal issues" : "מידע, אזהרות, שגיאות ונושאים חמורים", - "Warnings, errors and fatal issues" : "אזהרות, שגיאות ונושאים חמורים", - "Errors and fatal issues" : "שגיאות ונושאים חמורים", - "Fatal issues only" : "נושאים חמורים בלבד", "None" : "כלום", "Login" : "התחברות", "Plain" : "רגיל", "NT LAN Manager" : "מנהל רשת NT", "SSL" : "SSL", "TLS" : "TLS", + "Email server" : "שרת דואר אלקטרוני", + "Open documentation" : "תיעוד פתוח", + "This is used for sending out notifications." : "משתמשים בזה כדי לשלוח הודעות.", + "Send mode" : "מצב שליחה", + "Encryption" : "הצפנה", + "From address" : "מכתובת", + "mail" : "mail", + "Authentication method" : "שיטת אימות", + "Authentication required" : "נדרש אימות", + "Server address" : "כתובת שרת", + "Port" : "שער", + "Credentials" : "פרטי גישה", + "SMTP Username" : "שם משתמש SMTP ", + "SMTP Password" : "סיסמת SMTP", + "Store credentials" : "שמירת אישורים", + "Test email settings" : "בדיקת הגדרות דואר אלקטרוני", + "Send email" : "שליחת דואר אלקטרוני", + "Server-side encryption" : "הצפנת צד שרת", + "Enable server-side encryption" : "הפעלת הצפנה בצד שרת", + "Please read carefully before activating server-side encryption: " : "יש לקרוא בתשומת לב רבה לפני שמפעילים הצפנת צד שרת:", + "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "ברגע שהצפנה מופעלת, כל הקבצים שיועלו לשרת מרגע זה יהיו מוצפנים בשרת. ניתן יהיה לנטרל את ההצפנה בעתיד רק אם מודול ההצפנה תומך בפונקציה זו, וכל התנאים המוקדמים (דהיינו הגדרת מפתח השחזור) מתקיימים.", + "Be aware that encryption always increases the file size." : "תשומת לב לכך שהצפנה בהכרח מגדילה את גודל הקובץ.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "תמיד טוב ליצור גיבוי קבוע למידע , במקרה של הצפנה יש לוודא שגם מפתחות ההצפנה מגובים עם המידע שלך.", + "This is the final warning: Do you really want to enable encryption?" : "זו הזהרה אחרונה: האם באמת ברצונך להפעיל הצפנה?", + "Enable encryption" : "אפשר הצפנה", + "No encryption module loaded, please enable an encryption module in the app menu." : "לא נמצא מודול הצפנה, יש לאפשר מודול הצפנה בתפריט היישומים.", + "Select default encryption module:" : "יש לבחור מודול הצפנת ברירת מחדל:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "יש להמיר את מפתחות ההצפנה שלך בממערכת ההצפנה הישנה (ownCloud <= 8.0) למערכת החדשה. יש לאפשר את \"מודול הצפנה ברירת מחדש\" ולהריץ 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "יש להמיר את מפתחות ההצפנה שלך בממערכת ההצפנה הישנה (ownCloud <= 8.0) למערכת החדשה.", + "Start migration" : "התחלת המרה", + "Everything (fatal issues, errors, warnings, info, debug)" : "הכול (נושאים חמורים, שגיאות, אזהרות, מידע, ניפוי שגיאות)", + "Info, warnings, errors and fatal issues" : "מידע, אזהרות, שגיאות ונושאים חמורים", + "Warnings, errors and fatal issues" : "אזהרות, שגיאות ונושאים חמורים", + "Errors and fatal issues" : "שגיאות ונושאים חמורים", + "Fatal issues only" : "נושאים חמורים בלבד", + "Log" : "יומן", + "What to log" : "מה לנטר בלוג", + "Download logfile" : "הורדת קובץ לוג", + "More" : "יותר", + "Less" : "פחות", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "קובץ הלוג גדול מ- 100 מגה-בייט. הורדה עלולה לקחת זמן רב!", + "Security & setup warnings" : "הזהרות אבטחה והתקנה", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response.", "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "יש לבדוק את <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">הגדרות ההתקנה ↗</a> אחר הערות תצורת php ותצורת php של השרת שלך, בעיקר כשמשתמשים ב- php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "תצורת קריאה בלבד הופעלה. תצורה זו מונעת קביעת מספר הגדרות באמצעות ממשק האינטרנט. יתר על כן, יש צורך להגדיר ההרשאות כתיבה באופן ידני לכל עדכון.", @@ -142,7 +168,15 @@ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "לא ניתן היה להפעיל את cronjob דרך CLI. השגיאות הבאות נצפתו:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "יש לבדוק בשבע עיניים את <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">מדריכי ההתקנה ↗</a>, ויש לחפש אחר שגיאות או הזהרות ב- <a href=\"#log-section\">לוג</a>.", "All checks passed." : "כל הבדיקות עברו", - "Open documentation" : "תיעוד פתוח", + "Cron" : "Cron", + "Last cron job execution: %s." : "פעילות cron job אחרונה: %s.", + "Last cron job execution: %s. Something seems wrong." : "פעילות cron job אחרונה: %s. משהו נראה שגוי.", + "Cron was not executed yet!" : "Cron עדיין לא בוצע!", + "Execute one task with each page loaded" : "יש להפעיל משימה אחת עם כל עמוד שנטען", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php רשום בשירות webcron לקרוא ל- cron.php בכל 15 דקות באמצעות http.", + "Use system's cron service to call the cron.php file every 15 minutes." : "ניתן להשתמש בשירות cron לקרוא לקובץ cron.php בכל 15 דקות.", + "Version" : "גרסה", + "Sharing" : "שיתוף", "Allow apps to use the Share API" : "לאפשר ליישום להשתמש ב־API השיתוף", "Allow users to share via link" : "אפשר למשתמשים לשתף באמצעות קישור", "Allow public uploads" : "אפשר העלאות ציבוריות", @@ -159,44 +193,7 @@ "Exclude groups from sharing" : "מניעת קבוצות משיתוף", "These groups will still be able to receive shares, but not to initiate them." : "קבוצות אלו עדיין יוכלו לקבל שיתופים, אך לא לשתף בעצמם.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "אפשר השלמה אוטומטית של שמות משתמש בתפריט שיתוף. אם תכונה זו מנוטרלת יש להכניס שם משתמש מלא.", - "Last cron job execution: %s." : "פעילות cron job אחרונה: %s.", - "Last cron job execution: %s. Something seems wrong." : "פעילות cron job אחרונה: %s. משהו נראה שגוי.", - "Cron was not executed yet!" : "Cron עדיין לא בוצע!", - "Execute one task with each page loaded" : "יש להפעיל משימה אחת עם כל עמוד שנטען", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php רשום בשירות webcron לקרוא ל- cron.php בכל 15 דקות באמצעות http.", - "Use system's cron service to call the cron.php file every 15 minutes." : "ניתן להשתמש בשירות cron לקרוא לקובץ cron.php בכל 15 דקות.", - "Enable server-side encryption" : "הפעלת הצפנה בצד שרת", - "Please read carefully before activating server-side encryption: " : "יש לקרוא בתשומת לב רבה לפני שמפעילים הצפנת צד שרת:", - "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "ברגע שהצפנה מופעלת, כל הקבצים שיועלו לשרת מרגע זה יהיו מוצפנים בשרת. ניתן יהיה לנטרל את ההצפנה בעתיד רק אם מודול ההצפנה תומך בפונקציה זו, וכל התנאים המוקדמים (דהיינו הגדרת מפתח השחזור) מתקיימים.", - "Be aware that encryption always increases the file size." : "תשומת לב לכך שהצפנה בהכרח מגדילה את גודל הקובץ.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "תמיד טוב ליצור גיבוי קבוע למידע , במקרה של הצפנה יש לוודא שגם מפתחות ההצפנה מגובים עם המידע שלך.", - "This is the final warning: Do you really want to enable encryption?" : "זו הזהרה אחרונה: האם באמת ברצונך להפעיל הצפנה?", - "Enable encryption" : "אפשר הצפנה", - "No encryption module loaded, please enable an encryption module in the app menu." : "לא נמצא מודול הצפנה, יש לאפשר מודול הצפנה בתפריט היישומים.", - "Select default encryption module:" : "יש לבחור מודול הצפנת ברירת מחדל:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "יש להמיר את מפתחות ההצפנה שלך בממערכת ההצפנה הישנה (ownCloud <= 8.0) למערכת החדשה. יש לאפשר את \"מודול הצפנה ברירת מחדש\" ולהריץ 'occ encryption:migrate'", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "יש להמיר את מפתחות ההצפנה שלך בממערכת ההצפנה הישנה (ownCloud <= 8.0) למערכת החדשה.", - "Start migration" : "התחלת המרה", - "This is used for sending out notifications." : "משתמשים בזה כדי לשלוח הודעות.", - "Send mode" : "מצב שליחה", - "Encryption" : "הצפנה", - "From address" : "מכתובת", - "mail" : "mail", - "Authentication method" : "שיטת אימות", - "Authentication required" : "נדרש אימות", - "Server address" : "כתובת שרת", - "Port" : "שער", - "Credentials" : "פרטי גישה", - "SMTP Username" : "שם משתמש SMTP ", - "SMTP Password" : "סיסמת SMTP", - "Store credentials" : "שמירת אישורים", - "Test email settings" : "בדיקת הגדרות דואר אלקטרוני", - "Send email" : "שליחת דואר אלקטרוני", - "What to log" : "מה לנטר בלוג", - "Download logfile" : "הורדת קובץ לוג", - "More" : "יותר", - "Less" : "פחות", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "קובץ הלוג גדול מ- 100 מגה-בייט. הורדה עלולה לקחת זמן רב!", + "Tips & tricks" : "עצות ותחבולות", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "המערכת משתמשת ב- SQLite כמסד נתונים. להתקנות גדולות אנו ממליצים לעבור למסדי נתונים צד אחורי אחרים.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "במיוחד כאשר משתמשים במחשב שולחני לסנכרון קבצים השימוש ב SQLite אינו מומלץ.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "למעבר למסד נתונים אחר יש להשתמש בכלי שורת פקודה: 'occ db:convert-type', או לעיין ב- <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">תיעוד↗</a>.", @@ -206,7 +203,6 @@ "Improving the config.php" : "שיפור קובץ config.php", "Theming" : "ערכת נושא", "Hardening and security guidance" : "הדרכת הקשחה ואבטחה", - "Version" : "גרסה", "Developer documentation" : "תיעוד מפתח", "Experimental applications ahead" : "ישומים ניסיוניים לפנים", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "יישומים ניסיוניים לא נבדקו לבעיות אבטחה, חדשים או ידועים כלא יציבים ותחת פיתוח כבד. התקנה שלהם עלולה להוביל לאיבוד מידע או לפרצות אבטחה.", @@ -260,16 +256,16 @@ "Change password" : "שינוי סיסמא", "Language" : "שפה", "Help translate" : "עזרה בתרגום", - "Name" : "שם", - "App name" : "שם יישום", - "Create new app password" : "יצירת סיסמת יישום חדשה", - "Username" : "שם משתמש", - "Done" : "הסתיים", "Get the apps to sync your files" : "קבלת היישומים לסנכרון הקבצים שלך", "Desktop client" : "מחשב אישי", "Android app" : "יישום אנדרואיד", "iOS app" : "יישום אייפון", "Show First Run Wizard again" : "הצגת אשף ההפעלה הראשונית שוב", + "Name" : "שם", + "App name" : "שם יישום", + "Create new app password" : "יצירת סיסמת יישום חדשה", + "Username" : "שם משתמש", + "Done" : "הסתיים", "Show storage location" : "הצגת מיקום אחסון", "Show last log in" : "הצגת כניסה אחרונה", "Show user backend" : "הצגת צד אחורי למשתמש", @@ -288,6 +284,10 @@ "change full name" : "שינוי שם מלא", "set new password" : "הגדרת סיסמא חדשה", "change email address" : "שינוי כתובת דואר אלקטרוני", - "Default" : "ברירת מחדל" + "Default" : "ברירת מחדל", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "אחסון חיצוני", + "Updates" : "עדכונים" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/settings/l10n/hu_HU.js b/settings/l10n/hu_HU.js index f0df2d87a65..e9f067b54dd 100644 --- a/settings/l10n/hu_HU.js +++ b/settings/l10n/hu_HU.js @@ -1,16 +1,16 @@ OC.L10N.register( "settings", { + "Enabled" : "Engedélyezve", + "Not enabled" : "Tiltva", "Wrong password" : "Hibás jelszó", "Saved" : "Elmentve", "No user supplied" : "Nincs megadva felhasználó", + "Unable to change password" : "Nem sikerült megváltoztatni a jelszót", "Authentication error" : "Azonosítási hiba", "Please provide an admin recovery password, otherwise all user data will be lost" : "Adja meg az admin helyreállítási jelszót, máskülönben az összes felhasználói adat elveszik!", "Wrong admin recovery password. Please check the password and try again." : "Hibás admin helyreállítási jelszó. Ellenőrizze a jelszót és próbálja újra!", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "A háttér-alrendszer nem támogatja a jelszómódosítást, de felhasználó titkosítási kulcsát sikeresen frissítettük.", - "Unable to change password" : "Nem sikerült megváltoztatni a jelszót", - "Enabled" : "Engedélyezve", - "Not enabled" : "Tiltva", "installing and updating apps via the app store or Federated Cloud Sharing" : "alkalmazások telepítése és frissítése az alkalmazás tárból vagy Szövetséges Felhő Megosztásból", "Federated Cloud Sharing" : "Megosztás Egyesített Felhőben", "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL elavult %s verziót (%s) használ. Kérjük, frissítse az operációs rendszerét, vagy egyes funkciók (mint például a %s) megbízhatatlanul fognak működni.", @@ -35,17 +35,6 @@ OC.L10N.register( "Email saved" : "E-mail elmentve!", "Your full name has been changed." : "Az Ön teljes nevét módosítottuk.", "Unable to change full name" : "Nem sikerült megváltoztatni a teljes nevét", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Biztonsági és telepítési figyelmeztetések", - "Sharing" : "Megosztás", - "Server-side encryption" : "Szerveroldali titkosítás", - "External Storage" : "Külső tárolási szolgáltatások becsatolása", - "Cron" : "Ütemezett feladatok", - "Email server" : "E-mail szerver", - "Log" : "Naplózás", - "Tips & tricks" : "Tippek és trükkök", - "Updates" : "Frissítések", "Couldn't remove app." : "Az alkalmazást nem sikerült eltávolítani.", "Language changed" : "A nyelv megváltozott", "Invalid request" : "Érvénytelen kérés", @@ -119,17 +108,55 @@ OC.L10N.register( "Sessions" : "Munkamenetek", "App passwords" : "Applikáció jelszavak", "Sync clients" : "Szinkronizáló kliensek", - "Everything (fatal issues, errors, warnings, info, debug)" : "Minden (végzetes hibák, hibák, figyelmeztetések, információk, hibakeresési üzenetek)", - "Info, warnings, errors and fatal issues" : "Információk, figyelmeztetések, hibák és végzetes hibák", - "Warnings, errors and fatal issues" : "Figyelmeztetések, hibák és végzetes hibák", - "Errors and fatal issues" : "Hibák és végzetes hibák", - "Fatal issues only" : "Csak a végzetes hibák", "None" : "Egyik sem", "Login" : "Login", "Plain" : "Plain", "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", + "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", + "mail" : "mail", + "Authentication method" : "A felhasználóazonosítás módszere", + "Authentication required" : "Felhasználóazonosítás szükséges", + "Server address" : "A kiszolgáló címe", + "Port" : "Port", + "Credentials" : "Azonosítók", + "SMTP Username" : "SMTP felhasználónév", + "SMTP Password" : "SMTP jelszó", + "Store credentials" : "Azonosítók eltárolása", + "Test email settings" : "Az e-mail beállítások ellenőrzése", + "Send email" : "E-mail küldése", + "Server-side encryption" : "Szerveroldali titkosítás", + "Enable server-side encryption" : "Szerveroldali titkosítás engedélyezése", + "Please read carefully before activating server-side encryption: " : "Kérjük, ezt olvasd el figyelmesen mielőtt engedélyezed a szerveroldali titkosítást:", + "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." : "Ha egyszer engedélyezve lett a titkosítás, akkor onnantól kezdve a szerveren az összes fájl titkosításra kerül, melyet később csak akkor lehet visszafordítani, ha azt az aktív titkosítási modul támogatja és minden elő-követelmény (például helyreállító kulcs) teljesül.", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "A titkosítás önmagában nem garantálja a rendszer biztonságát. Kérem olvassa el a dokumentációt, hogy további információkat szerezzen a titkosítási applikáció működéséről, és a támogatott lehetőségekről.", + "Be aware that encryption always increases the file size." : "Ügyeljen arra, hogy a titkosítás mindig megnöveli a fájl méretét!", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Mindig jó ötlet rendszeres biztonsági mentést készíteni az adatokról. Titkosítás esetén a titkosító kulcsok biztonsági mentését elkülönítve tárolja az adatoktól!", + "This is the final warning: Do you really want to enable encryption?" : "Ez az utolsó figyelmeztetés: Biztosan szeretnéd engedélyezni a titkosítást?", + "Enable encryption" : "Titkosítás engedélyezése", + "No encryption module loaded, please enable an encryption module in the app menu." : "Nincs titkosítási modul betöltve, kérjük engedélyezd a titkosítási modult az alkalmazások menüben.", + "Select default encryption module:" : "Alapértelmezett titkosítási modul:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Migrálni kell a titkosítási kulcsokat a régi titkosításból (ownCloud <= 8.0) egy újba. Kérjük, engedélyezd az „Alapértelmezett titkosítási modul”-t és futtasd ezt: occ encryption:migrate", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Migrálni kell a titkosítási kulcsokat a régi titkosításból (ownCloud <= 8.0) egy újba.", + "Start migration" : "Migrálás indítása", + "Everything (fatal issues, errors, warnings, info, debug)" : "Minden (végzetes hibák, hibák, figyelmeztetések, információk, hibakeresési üzenetek)", + "Info, warnings, errors and fatal issues" : "Információk, figyelmeztetések, hibák és végzetes hibák", + "Warnings, errors and fatal issues" : "Figyelmeztetések, hibák és végzetes hibák", + "Errors and fatal issues" : "Hibák és végzetes hibák", + "Fatal issues only" : "Csak a végzetes hibák", + "Log" : "Naplózás", + "What to log" : "Mit naplózzon", + "Download logfile" : "Naplófájl letöltése", + "More" : "Több", + "Less" : "Kevesebb", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "A naplófájl 100MB-nál nagyobb. A letöltése hosszabb időt vehet igénybe.", + "Security & setup warnings" : "Biztonsági és telepítési figyelmeztetések", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Úgy tűnik, hogy a PHP nem tudja olvasni a rendszer környezeti változóit. A getenv(\"PATH\") teszt visszatérési értéke üres.", "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." : "Kérjük, ellenőrizze a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">telepítési dokumentációt ↗</a> a PHP konfigurációs beállításaival kapcsolatban, főleg ha PHP-FPM-et használ.", "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." : "Csak olvasható beállítófájl engedélyezve. Ez meggátolja a beállítások módosítását a webes felületről. Továbbá, a fájlt kézzel kell írhatóvá tenni minden frissítés alkalmával.", @@ -145,7 +172,15 @@ OC.L10N.register( "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Az ütemezett feladat (cronjob) nem futott le parancssorból. A következő hibák tűntek fel:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Kérjük, ellenőrizze a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">telepítési dokumentációt ↗</a> és ellenőrizze a <a href=\"#log-section\">naplófájlt</a>, hogy tartalmaz-e bármilyen hibát vagy figyelmeztetést.", "All checks passed." : "Minden ellenőrzés sikeres.", - "Open documentation" : "Dokumentáció megnyitása", + "Cron" : "Ütemezett feladatok", + "Last cron job execution: %s." : "Az utolsó cron feladat ekkor futott le: %s.", + "Last cron job execution: %s. Something seems wrong." : "Az utolsó cron feladat ekkor futott le: %s. Valami nincs rendben.", + "Cron was not executed yet!" : "A cron feladat még nem futott le!", + "Execute one task with each page loaded" : "Egy-egy feladat végrehajtása minden alkalommal, amikor egy weboldalt letöltenek", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "A cron.php webcron szolgáltatásként van regisztrálva, hogy 15 percenként egyszer lefuttassa a cron.php-t.", + "Use system's cron service to call the cron.php file every 15 minutes." : "A rendszer cron szolgáltatását használjuk, mely a cron.php állományt futtatja le 15 percenként.", + "Version" : "Verzió", + "Sharing" : "Megosztás", "Allow apps to use the Share API" : "Lehetővé teszi, hogy a programmodulok is használhassák a megosztást", "Allow users to share via link" : "Engedjük meg az állományok linkekkel történő megosztását", "Allow public uploads" : "Nyilvános feltöltés engedélyezése", @@ -162,45 +197,7 @@ OC.L10N.register( "Exclude groups from sharing" : "Csoportok megosztási jogának tiltása", "These groups will still be able to receive shares, but not to initiate them." : "E csoportok tagjaival meg lehet osztani anyagokat, de ők nem hozhatnak létre megosztást.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Felhasználónév automatikus befejezése engedélyezése a megosztás ablakban. Ha le van tiltva, akkor a teljes felhasználónevet kell beírni.", - "Last cron job execution: %s." : "Az utolsó cron feladat ekkor futott le: %s.", - "Last cron job execution: %s. Something seems wrong." : "Az utolsó cron feladat ekkor futott le: %s. Valami nincs rendben.", - "Cron was not executed yet!" : "A cron feladat még nem futott le!", - "Execute one task with each page loaded" : "Egy-egy feladat végrehajtása minden alkalommal, amikor egy weboldalt letöltenek", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "A cron.php webcron szolgáltatásként van regisztrálva, hogy 15 percenként egyszer lefuttassa a cron.php-t.", - "Use system's cron service to call the cron.php file every 15 minutes." : "A rendszer cron szolgáltatását használjuk, mely a cron.php állományt futtatja le 15 percenként.", - "Enable server-side encryption" : "Szerveroldali titkosítás engedélyezése", - "Please read carefully before activating server-side encryption: " : "Kérjük, ezt olvasd el figyelmesen mielőtt engedélyezed a szerveroldali titkosítást:", - "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." : "Ha egyszer engedélyezve lett a titkosítás, akkor onnantól kezdve a szerveren az összes fájl titkosításra kerül, melyet később csak akkor lehet visszafordítani, ha azt az aktív titkosítási modul támogatja és minden elő-követelmény (például helyreállító kulcs) teljesül.", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "A titkosítás önmagában nem garantálja a rendszer biztonságát. Kérem olvassa el a dokumentációt, hogy további információkat szerezzen a titkosítási applikáció működéséről, és a támogatott lehetőségekről.", - "Be aware that encryption always increases the file size." : "Ügyeljen arra, hogy a titkosítás mindig megnöveli a fájl méretét!", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Mindig jó ötlet rendszeres biztonsági mentést készíteni az adatokról. Titkosítás esetén a titkosító kulcsok biztonsági mentését elkülönítve tárolja az adatoktól!", - "This is the final warning: Do you really want to enable encryption?" : "Ez az utolsó figyelmeztetés: Biztosan szeretnéd engedélyezni a titkosítást?", - "Enable encryption" : "Titkosítás engedélyezése", - "No encryption module loaded, please enable an encryption module in the app menu." : "Nincs titkosítási modul betöltve, kérjük engedélyezd a titkosítási modult az alkalmazások menüben.", - "Select default encryption module:" : "Alapértelmezett titkosítási modul:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Migrálni kell a titkosítási kulcsokat a régi titkosításból (ownCloud <= 8.0) egy újba. Kérjük, engedélyezd az „Alapértelmezett titkosítási modul”-t és futtasd ezt: occ encryption:migrate", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Migrálni kell a titkosítási kulcsokat a régi titkosításból (ownCloud <= 8.0) egy újba.", - "Start migration" : "Migrálás indítá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", - "mail" : "mail", - "Authentication method" : "A felhasználóazonosítás módszere", - "Authentication required" : "Felhasználóazonosítás szükséges", - "Server address" : "A kiszolgáló címe", - "Port" : "Port", - "Credentials" : "Azonosítók", - "SMTP Username" : "SMTP felhasználónév", - "SMTP Password" : "SMTP jelszó", - "Store credentials" : "Azonosítók eltárolása", - "Test email settings" : "Az e-mail beállítások ellenőrzése", - "Send email" : "E-mail küldése", - "What to log" : "Mit naplózzon", - "Download logfile" : "Naplófájl letöltése", - "More" : "Több", - "Less" : "Kevesebb", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "A naplófájl 100MB-nál nagyobb. A letöltése hosszabb időt vehet igénybe.", + "Tips & tricks" : "Tippek és trükkök", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Adatbázisként az SQLite-ot fogjuk használni. Nagyobb telepítések esetén javasoljuk, hogy váltson másik adatbázis háttérkiszolgálóra", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Amikor az asztali klienset használja fálj szinkronizációra, akkor az SQLite használata nem ajánlott.", "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>." : "Más adatbázisról való áttéréshez használja a parancssort: 'occ db:convert-type', vagy keresse fel a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentációt ↗</a>.", @@ -210,7 +207,6 @@ OC.L10N.register( "Improving the config.php" : "config.php javítása", "Theming" : "Témázás", "Hardening and security guidance" : "Erősítési és biztonsági útmutató", - "Version" : "Verzió", "Developer documentation" : "Fejlesztői dokumentáció", "Experimental applications ahead" : "Kísérleti alkalmazások előre", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "A kísérleti applikációk nincsenek biztonsági ellenőrizve, ismert vagy ismeretlen hibák lehetnek bennük és aktív fejlesztés alatt állnak. A telepítésük adatvesztéshez vezethet, vagy biztonsági kockázata lehet.", @@ -266,19 +262,17 @@ OC.L10N.register( "Change password" : "A jelszó megváltoztatása", "Language" : "Nyelv", "Help translate" : "Segítsen a fordításban!", + "Get the apps to sync your files" : "Töltse le az állományok szinkronizációjához szükséges programokat!", + "Desktop client" : "Asztali kliens", + "Android app" : "Android applikáció", + "iOS app" : "IOS applikáció", + "Show First Run Wizard again" : "Nézzük meg újra az első bejelentkezéskori segítséget!", "Name" : "Név", "App name" : "Alkalmazás név", "Create new app password" : "Új alkalmazás jelszó létrehozása", "Use the credentials below to configure your app or device." : "Használja a lenti hitelesítő adatokat hogy beállítsa az applikációját vagy eszközét.", "Username" : "Felhasználónév", "Done" : "Kész", - "Get the apps to sync your files" : "Töltse le az állományok szinkronizációjához szükséges programokat!", - "Desktop client" : "Asztali kliens", - "Android app" : "Android applikáció", - "iOS app" : "IOS applikáció", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ha támogatni szeretnéd a projektet \n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">csatlakozz a fejlesztéshez</a>\n\t\tvagy\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">hírdesd</a>!", - "Show First Run Wizard again" : "Nézzük meg újra az első bejelentkezéskori segítséget!", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Fejlesztve a {communityopen}Nextcloud közösség{linkclose} által, a {githubopen}forráskód{linkclose} az {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} licensz alá tartozik.", "Show storage location" : "Háttértároló helyének mutatása", "Show last log in" : "Utolsó bejelentkezés megjelenítése", "Show user backend" : "Felhasználói háttér mutatása", @@ -297,6 +291,10 @@ OC.L10N.register( "change full name" : "a teljes név megváltoztatása", "set new password" : "új jelszó beállítása", "change email address" : "e-mail cím megváltoztatása", - "Default" : "Alapértelmezett" + "Default" : "Alapértelmezett", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Külső tárolási szolgáltatások becsatolása", + "Updates" : "Frissítések" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/hu_HU.json b/settings/l10n/hu_HU.json index 738345cf9b4..155e4cf8962 100644 --- a/settings/l10n/hu_HU.json +++ b/settings/l10n/hu_HU.json @@ -1,14 +1,14 @@ { "translations": { + "Enabled" : "Engedélyezve", + "Not enabled" : "Tiltva", "Wrong password" : "Hibás jelszó", "Saved" : "Elmentve", "No user supplied" : "Nincs megadva felhasználó", + "Unable to change password" : "Nem sikerült megváltoztatni a jelszót", "Authentication error" : "Azonosítási hiba", "Please provide an admin recovery password, otherwise all user data will be lost" : "Adja meg az admin helyreállítási jelszót, máskülönben az összes felhasználói adat elveszik!", "Wrong admin recovery password. Please check the password and try again." : "Hibás admin helyreállítási jelszó. Ellenőrizze a jelszót és próbálja újra!", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "A háttér-alrendszer nem támogatja a jelszómódosítást, de felhasználó titkosítási kulcsát sikeresen frissítettük.", - "Unable to change password" : "Nem sikerült megváltoztatni a jelszót", - "Enabled" : "Engedélyezve", - "Not enabled" : "Tiltva", "installing and updating apps via the app store or Federated Cloud Sharing" : "alkalmazások telepítése és frissítése az alkalmazás tárból vagy Szövetséges Felhő Megosztásból", "Federated Cloud Sharing" : "Megosztás Egyesített Felhőben", "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL elavult %s verziót (%s) használ. Kérjük, frissítse az operációs rendszerét, vagy egyes funkciók (mint például a %s) megbízhatatlanul fognak működni.", @@ -33,17 +33,6 @@ "Email saved" : "E-mail elmentve!", "Your full name has been changed." : "Az Ön teljes nevét módosítottuk.", "Unable to change full name" : "Nem sikerült megváltoztatni a teljes nevét", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Biztonsági és telepítési figyelmeztetések", - "Sharing" : "Megosztás", - "Server-side encryption" : "Szerveroldali titkosítás", - "External Storage" : "Külső tárolási szolgáltatások becsatolása", - "Cron" : "Ütemezett feladatok", - "Email server" : "E-mail szerver", - "Log" : "Naplózás", - "Tips & tricks" : "Tippek és trükkök", - "Updates" : "Frissítések", "Couldn't remove app." : "Az alkalmazást nem sikerült eltávolítani.", "Language changed" : "A nyelv megváltozott", "Invalid request" : "Érvénytelen kérés", @@ -117,17 +106,55 @@ "Sessions" : "Munkamenetek", "App passwords" : "Applikáció jelszavak", "Sync clients" : "Szinkronizáló kliensek", - "Everything (fatal issues, errors, warnings, info, debug)" : "Minden (végzetes hibák, hibák, figyelmeztetések, információk, hibakeresési üzenetek)", - "Info, warnings, errors and fatal issues" : "Információk, figyelmeztetések, hibák és végzetes hibák", - "Warnings, errors and fatal issues" : "Figyelmeztetések, hibák és végzetes hibák", - "Errors and fatal issues" : "Hibák és végzetes hibák", - "Fatal issues only" : "Csak a végzetes hibák", "None" : "Egyik sem", "Login" : "Login", "Plain" : "Plain", "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", + "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", + "mail" : "mail", + "Authentication method" : "A felhasználóazonosítás módszere", + "Authentication required" : "Felhasználóazonosítás szükséges", + "Server address" : "A kiszolgáló címe", + "Port" : "Port", + "Credentials" : "Azonosítók", + "SMTP Username" : "SMTP felhasználónév", + "SMTP Password" : "SMTP jelszó", + "Store credentials" : "Azonosítók eltárolása", + "Test email settings" : "Az e-mail beállítások ellenőrzése", + "Send email" : "E-mail küldése", + "Server-side encryption" : "Szerveroldali titkosítás", + "Enable server-side encryption" : "Szerveroldali titkosítás engedélyezése", + "Please read carefully before activating server-side encryption: " : "Kérjük, ezt olvasd el figyelmesen mielőtt engedélyezed a szerveroldali titkosítást:", + "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." : "Ha egyszer engedélyezve lett a titkosítás, akkor onnantól kezdve a szerveren az összes fájl titkosításra kerül, melyet később csak akkor lehet visszafordítani, ha azt az aktív titkosítási modul támogatja és minden elő-követelmény (például helyreállító kulcs) teljesül.", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "A titkosítás önmagában nem garantálja a rendszer biztonságát. Kérem olvassa el a dokumentációt, hogy további információkat szerezzen a titkosítási applikáció működéséről, és a támogatott lehetőségekről.", + "Be aware that encryption always increases the file size." : "Ügyeljen arra, hogy a titkosítás mindig megnöveli a fájl méretét!", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Mindig jó ötlet rendszeres biztonsági mentést készíteni az adatokról. Titkosítás esetén a titkosító kulcsok biztonsági mentését elkülönítve tárolja az adatoktól!", + "This is the final warning: Do you really want to enable encryption?" : "Ez az utolsó figyelmeztetés: Biztosan szeretnéd engedélyezni a titkosítást?", + "Enable encryption" : "Titkosítás engedélyezése", + "No encryption module loaded, please enable an encryption module in the app menu." : "Nincs titkosítási modul betöltve, kérjük engedélyezd a titkosítási modult az alkalmazások menüben.", + "Select default encryption module:" : "Alapértelmezett titkosítási modul:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Migrálni kell a titkosítási kulcsokat a régi titkosításból (ownCloud <= 8.0) egy újba. Kérjük, engedélyezd az „Alapértelmezett titkosítási modul”-t és futtasd ezt: occ encryption:migrate", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Migrálni kell a titkosítási kulcsokat a régi titkosításból (ownCloud <= 8.0) egy újba.", + "Start migration" : "Migrálás indítása", + "Everything (fatal issues, errors, warnings, info, debug)" : "Minden (végzetes hibák, hibák, figyelmeztetések, információk, hibakeresési üzenetek)", + "Info, warnings, errors and fatal issues" : "Információk, figyelmeztetések, hibák és végzetes hibák", + "Warnings, errors and fatal issues" : "Figyelmeztetések, hibák és végzetes hibák", + "Errors and fatal issues" : "Hibák és végzetes hibák", + "Fatal issues only" : "Csak a végzetes hibák", + "Log" : "Naplózás", + "What to log" : "Mit naplózzon", + "Download logfile" : "Naplófájl letöltése", + "More" : "Több", + "Less" : "Kevesebb", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "A naplófájl 100MB-nál nagyobb. A letöltése hosszabb időt vehet igénybe.", + "Security & setup warnings" : "Biztonsági és telepítési figyelmeztetések", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Úgy tűnik, hogy a PHP nem tudja olvasni a rendszer környezeti változóit. A getenv(\"PATH\") teszt visszatérési értéke üres.", "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." : "Kérjük, ellenőrizze a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">telepítési dokumentációt ↗</a> a PHP konfigurációs beállításaival kapcsolatban, főleg ha PHP-FPM-et használ.", "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." : "Csak olvasható beállítófájl engedélyezve. Ez meggátolja a beállítások módosítását a webes felületről. Továbbá, a fájlt kézzel kell írhatóvá tenni minden frissítés alkalmával.", @@ -143,7 +170,15 @@ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Az ütemezett feladat (cronjob) nem futott le parancssorból. A következő hibák tűntek fel:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Kérjük, ellenőrizze a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">telepítési dokumentációt ↗</a> és ellenőrizze a <a href=\"#log-section\">naplófájlt</a>, hogy tartalmaz-e bármilyen hibát vagy figyelmeztetést.", "All checks passed." : "Minden ellenőrzés sikeres.", - "Open documentation" : "Dokumentáció megnyitása", + "Cron" : "Ütemezett feladatok", + "Last cron job execution: %s." : "Az utolsó cron feladat ekkor futott le: %s.", + "Last cron job execution: %s. Something seems wrong." : "Az utolsó cron feladat ekkor futott le: %s. Valami nincs rendben.", + "Cron was not executed yet!" : "A cron feladat még nem futott le!", + "Execute one task with each page loaded" : "Egy-egy feladat végrehajtása minden alkalommal, amikor egy weboldalt letöltenek", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "A cron.php webcron szolgáltatásként van regisztrálva, hogy 15 percenként egyszer lefuttassa a cron.php-t.", + "Use system's cron service to call the cron.php file every 15 minutes." : "A rendszer cron szolgáltatását használjuk, mely a cron.php állományt futtatja le 15 percenként.", + "Version" : "Verzió", + "Sharing" : "Megosztás", "Allow apps to use the Share API" : "Lehetővé teszi, hogy a programmodulok is használhassák a megosztást", "Allow users to share via link" : "Engedjük meg az állományok linkekkel történő megosztását", "Allow public uploads" : "Nyilvános feltöltés engedélyezése", @@ -160,45 +195,7 @@ "Exclude groups from sharing" : "Csoportok megosztási jogának tiltása", "These groups will still be able to receive shares, but not to initiate them." : "E csoportok tagjaival meg lehet osztani anyagokat, de ők nem hozhatnak létre megosztást.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Felhasználónév automatikus befejezése engedélyezése a megosztás ablakban. Ha le van tiltva, akkor a teljes felhasználónevet kell beírni.", - "Last cron job execution: %s." : "Az utolsó cron feladat ekkor futott le: %s.", - "Last cron job execution: %s. Something seems wrong." : "Az utolsó cron feladat ekkor futott le: %s. Valami nincs rendben.", - "Cron was not executed yet!" : "A cron feladat még nem futott le!", - "Execute one task with each page loaded" : "Egy-egy feladat végrehajtása minden alkalommal, amikor egy weboldalt letöltenek", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "A cron.php webcron szolgáltatásként van regisztrálva, hogy 15 percenként egyszer lefuttassa a cron.php-t.", - "Use system's cron service to call the cron.php file every 15 minutes." : "A rendszer cron szolgáltatását használjuk, mely a cron.php állományt futtatja le 15 percenként.", - "Enable server-side encryption" : "Szerveroldali titkosítás engedélyezése", - "Please read carefully before activating server-side encryption: " : "Kérjük, ezt olvasd el figyelmesen mielőtt engedélyezed a szerveroldali titkosítást:", - "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." : "Ha egyszer engedélyezve lett a titkosítás, akkor onnantól kezdve a szerveren az összes fájl titkosításra kerül, melyet később csak akkor lehet visszafordítani, ha azt az aktív titkosítási modul támogatja és minden elő-követelmény (például helyreállító kulcs) teljesül.", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "A titkosítás önmagában nem garantálja a rendszer biztonságát. Kérem olvassa el a dokumentációt, hogy további információkat szerezzen a titkosítási applikáció működéséről, és a támogatott lehetőségekről.", - "Be aware that encryption always increases the file size." : "Ügyeljen arra, hogy a titkosítás mindig megnöveli a fájl méretét!", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Mindig jó ötlet rendszeres biztonsági mentést készíteni az adatokról. Titkosítás esetén a titkosító kulcsok biztonsági mentését elkülönítve tárolja az adatoktól!", - "This is the final warning: Do you really want to enable encryption?" : "Ez az utolsó figyelmeztetés: Biztosan szeretnéd engedélyezni a titkosítást?", - "Enable encryption" : "Titkosítás engedélyezése", - "No encryption module loaded, please enable an encryption module in the app menu." : "Nincs titkosítási modul betöltve, kérjük engedélyezd a titkosítási modult az alkalmazások menüben.", - "Select default encryption module:" : "Alapértelmezett titkosítási modul:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Migrálni kell a titkosítási kulcsokat a régi titkosításból (ownCloud <= 8.0) egy újba. Kérjük, engedélyezd az „Alapértelmezett titkosítási modul”-t és futtasd ezt: occ encryption:migrate", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Migrálni kell a titkosítási kulcsokat a régi titkosításból (ownCloud <= 8.0) egy újba.", - "Start migration" : "Migrálás indítá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", - "mail" : "mail", - "Authentication method" : "A felhasználóazonosítás módszere", - "Authentication required" : "Felhasználóazonosítás szükséges", - "Server address" : "A kiszolgáló címe", - "Port" : "Port", - "Credentials" : "Azonosítók", - "SMTP Username" : "SMTP felhasználónév", - "SMTP Password" : "SMTP jelszó", - "Store credentials" : "Azonosítók eltárolása", - "Test email settings" : "Az e-mail beállítások ellenőrzése", - "Send email" : "E-mail küldése", - "What to log" : "Mit naplózzon", - "Download logfile" : "Naplófájl letöltése", - "More" : "Több", - "Less" : "Kevesebb", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "A naplófájl 100MB-nál nagyobb. A letöltése hosszabb időt vehet igénybe.", + "Tips & tricks" : "Tippek és trükkök", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Adatbázisként az SQLite-ot fogjuk használni. Nagyobb telepítések esetén javasoljuk, hogy váltson másik adatbázis háttérkiszolgálóra", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Amikor az asztali klienset használja fálj szinkronizációra, akkor az SQLite használata nem ajánlott.", "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>." : "Más adatbázisról való áttéréshez használja a parancssort: 'occ db:convert-type', vagy keresse fel a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentációt ↗</a>.", @@ -208,7 +205,6 @@ "Improving the config.php" : "config.php javítása", "Theming" : "Témázás", "Hardening and security guidance" : "Erősítési és biztonsági útmutató", - "Version" : "Verzió", "Developer documentation" : "Fejlesztői dokumentáció", "Experimental applications ahead" : "Kísérleti alkalmazások előre", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "A kísérleti applikációk nincsenek biztonsági ellenőrizve, ismert vagy ismeretlen hibák lehetnek bennük és aktív fejlesztés alatt állnak. A telepítésük adatvesztéshez vezethet, vagy biztonsági kockázata lehet.", @@ -264,19 +260,17 @@ "Change password" : "A jelszó megváltoztatása", "Language" : "Nyelv", "Help translate" : "Segítsen a fordításban!", + "Get the apps to sync your files" : "Töltse le az állományok szinkronizációjához szükséges programokat!", + "Desktop client" : "Asztali kliens", + "Android app" : "Android applikáció", + "iOS app" : "IOS applikáció", + "Show First Run Wizard again" : "Nézzük meg újra az első bejelentkezéskori segítséget!", "Name" : "Név", "App name" : "Alkalmazás név", "Create new app password" : "Új alkalmazás jelszó létrehozása", "Use the credentials below to configure your app or device." : "Használja a lenti hitelesítő adatokat hogy beállítsa az applikációját vagy eszközét.", "Username" : "Felhasználónév", "Done" : "Kész", - "Get the apps to sync your files" : "Töltse le az állományok szinkronizációjához szükséges programokat!", - "Desktop client" : "Asztali kliens", - "Android app" : "Android applikáció", - "iOS app" : "IOS applikáció", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ha támogatni szeretnéd a projektet \n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">csatlakozz a fejlesztéshez</a>\n\t\tvagy\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">hírdesd</a>!", - "Show First Run Wizard again" : "Nézzük meg újra az első bejelentkezéskori segítséget!", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Fejlesztve a {communityopen}Nextcloud közösség{linkclose} által, a {githubopen}forráskód{linkclose} az {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} licensz alá tartozik.", "Show storage location" : "Háttértároló helyének mutatása", "Show last log in" : "Utolsó bejelentkezés megjelenítése", "Show user backend" : "Felhasználói háttér mutatása", @@ -295,6 +289,10 @@ "change full name" : "a teljes név megváltoztatása", "set new password" : "új jelszó beállítása", "change email address" : "e-mail cím megváltoztatása", - "Default" : "Alapértelmezett" + "Default" : "Alapértelmezett", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Külső tárolási szolgáltatások becsatolása", + "Updates" : "Frissítések" },"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 4d64d5a1b8d..2509621a71c 100644 --- a/settings/l10n/id.js +++ b/settings/l10n/id.js @@ -1,16 +1,16 @@ OC.L10N.register( "settings", { + "Enabled" : "Diaktifkan", + "Not enabled" : "Tidak diaktifkan", "Wrong password" : "Sandi salah", "Saved" : "Disimpan", "No user supplied" : "Tidak ada pengguna yang diberikan", + "Unable to change password" : "Tidak dapat mengubah sandi", "Authentication error" : "Terjadi kesalahan saat otentikasi", "Please provide an admin recovery password, otherwise all user data will be lost" : "Mohon sediakan sandi pemulihan admin, jika tidak semua data pengguna akan terhapus", "Wrong admin recovery password. Please check the password and try again." : "Sandi pemulihan admin salah. Periksa sandi dan ulangi kembali.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Backend tidak mendukung pengubahan sandi, tapi kunci enkripsi pengguna berhasil diperbarui.", - "Unable to change password" : "Tidak dapat mengubah sandi", - "Enabled" : "Diaktifkan", - "Not enabled" : "Tidak diaktifkan", "installing and updating apps via the app store or Federated Cloud Sharing" : "memasang dan memperbarui aplikasi via toko aplikasi atau Federated Cloud Sharing", "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 menggunakan versi lawas %s (%s). Silakan perbarui sistem operasi Anda atau fitur-fitur seperti %s tidak akan dapat bekerja dengan benar.", @@ -35,17 +35,6 @@ OC.L10N.register( "Email saved" : "Email disimpan", "Your full name has been changed." : "Nama lengkap Anda telah diubah", "Unable to change full name" : "Tidak dapat mengubah nama lengkap", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Peringatan Keamanan & Pengaturan", - "Sharing" : "Berbagi", - "Server-side encryption" : "Enkripsi sisi-server", - "External Storage" : "Penyimpanan Eksternal", - "Cron" : "Cron", - "Email server" : "Server email", - "Log" : "Log", - "Tips & tricks" : "Tips & trik", - "Updates" : "Pembaruan", "Couldn't remove app." : "Tidak dapat menghapus aplikasi.", "Language changed" : "Bahasa telah diubah", "Invalid request" : "Permintaan tidak valid", @@ -98,6 +87,10 @@ OC.L10N.register( "Android Client" : "Klien Android", "Sync client - {os}" : "Klien sync - {os}", "This session" : "Sesi ini", + "Copied!" : "Tersalin!", + "Not supported!" : "Tidak didukung!", + "Press ⌘-C to copy." : "Tekan ⌘-C untuk menyalin.", + "Press Ctrl-C to copy." : "Tekan Ctrl-C untuk menyalin.", "Error while loading browser sessions and device tokens" : "Terjadi kesalahan saat memuat sesi browser dan token perangkat", "Error while creating device token" : "Terjadi kesalahan saat membuat token perangkat", "Error while deleting the token" : "Terjadi kesalahan saat menghapus token", @@ -133,17 +126,55 @@ OC.L10N.register( "Sessions" : "Sesi", "App passwords" : "Sandi aplikasi", "Sync clients" : "Klien sync", - "Everything (fatal issues, errors, warnings, info, debug)" : "Semuanya (Masalah fatal, kesalahan, peringatan, info, debug)", - "Info, warnings, errors and fatal issues" : "Info, peringatan, kesalahan dan masalah fatal", - "Warnings, errors and fatal issues" : "Peringatan, kesalahan dan masalah fatal", - "Errors and fatal issues" : "Kesalahan dan masalah fatal", - "Fatal issues only" : "Hanya masalah fatal", "None" : "Tidak ada", "Login" : "Masuk", "Plain" : "Biasa", "NT LAN Manager" : "Manajer NT LAN", "SSL" : "SSL", "TLS" : "TLS", + "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", + "mail" : "email", + "Authentication method" : "Metode otentikasi", + "Authentication required" : "Diperlukan otentikasi", + "Server address" : "Alamat server", + "Port" : "Port", + "Credentials" : "Kredensial", + "SMTP Username" : "Nama pengguna SMTP", + "SMTP Password" : "Sandi SMTP", + "Store credentials" : "Simpan kredensial", + "Test email settings" : "Pengaturan email percobaan", + "Send email" : "Kirim email", + "Server-side encryption" : "Enkripsi sisi-server", + "Enable server-side encryption" : "Aktifkan enkripsi sisi-server", + "Please read carefully before activating server-side encryption: " : "Mohon baca dengan teliti sebelum mengaktifkan enkripsi server-side:", + "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." : "Setelah enkripsi diaktifkan, semua berkas yang diunggah pada server mulai saat ini akan dienkripsi saat singgah pada server. Penonaktifan enkripsi hanya mungkin berhasil jika modul enkripsi yang aktif mendukung fungsi ini dan semua prasyarat (misalnya pengaturan kunci pemulihan) sudah terpenuhi.", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Enkripsi saja tidak dapat menjamin keamanan sistem. Silakan lihat dokumentasi untuk informasi lebih lanjut dalam bagaimana aplikasi enkripsi bekerja, dan kasus pendukung.", + "Be aware that encryption always increases the file size." : "Ingat bahwa enkripsi selalu menambah ukuran berkas.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Alangkah baiknya untuk membuat cadangan data secara rutin, dalam kasus enkripsi, pastikan untuk mencadangkan kunci enkripsi bersama dengan data Anda.", + "This is the final warning: Do you really want to enable encryption?" : "Ini adalah peringatan terakhir: Apakah Anda yakin ingin mengaktifkan enkripsi?", + "Enable encryption" : "Aktifkan enkripsi", + "No encryption module loaded, please enable an encryption module in the app menu." : "Tidak ada modul enkripsi yang dimuat, mohon aktifkan modul enkripsi di menu aplikasi.", + "Select default encryption module:" : "Pilih modul enkripsi baku:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Anda perlu mengganti kunci enkrispi Anda dari enkripsi lama (ownCloud <= 8.0) ke yang baru. Mohon aktifkan \"Modul enkripsi standar\" dan jalankan 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Anda perlu untuk mengubah kunci enkripsi dari enkripsi lama (ownCloud <= 8.0) ke yang baru.", + "Start migration" : "Mulai migrasi", + "Everything (fatal issues, errors, warnings, info, debug)" : "Semuanya (Masalah fatal, kesalahan, peringatan, info, debug)", + "Info, warnings, errors and fatal issues" : "Info, peringatan, kesalahan dan masalah fatal", + "Warnings, errors and fatal issues" : "Peringatan, kesalahan dan masalah fatal", + "Errors and fatal issues" : "Kesalahan dan masalah fatal", + "Fatal issues only" : "Hanya masalah fatal", + "Log" : "Log", + "What to log" : "Apa yang akan di log", + "Download logfile" : "Unduh berkas log", + "More" : "Lainnya", + "Less" : "Ciutkan", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Berkas log lebih besar dari 100MB. Pengunduhan ini memerlukan beberapa saat!", + "Security & setup warnings" : "Peringatan Keamanan & Pengaturan", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "kelihatannya php tidak diatur dengan benar untuk variabel lingkungan sistem kueri. Pemeriksaan dengan getenv(\"PATH\") hanya mengembalikan respon kosong.", "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." : "Mohon cek <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentasi instalasi↗</a> untuk catatan konfigurasi php dan konfigurasi PHP server Anda, khususnya saat menggunakan 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." : "Konfig Hanya-Baca telah diaktifkan. Ini akan mencegah setelan beberapa konfigurasi melalui antarmuka-web. Selanjutnya, berkas perlu dibuat dapat-dibaca secara manual untuk setiap pembaruan.", @@ -160,7 +191,15 @@ OC.L10N.register( "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Tidak mungkin untuk mengeksekusi cronjob via CLI. Kesalahan teknis berikut muncul:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Mohon cek <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">petunjuk instalasi ↗</a>, dan cek masalah atau peringatan di <a href=\"#log-section\">log</a>.", "All checks passed." : "Semua pemeriksaan lulus.", - "Open documentation" : "Buka dokumentasi", + "Cron" : "Cron", + "Last cron job execution: %s." : "Eksekusi penjadwalan cron terakhir: %s.", + "Last cron job execution: %s. Something seems wrong." : "Eksekusi penjadwalan cron terakhir: %s. Kelihatannya ada yang salah.", + "Cron was not executed yet!" : "Cron masih belum dieksekusi!", + "Execute one task with each page loaded" : "Jalankan tugas setiap kali halaman dimuat", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php didaftarkan pada layanan webcron untuk memanggil cron.php setiap 15 menit melalui http.", + "Use system's cron service to call the cron.php file every 15 minutes." : "Gunakan layanan cron sistem untuk memanggil berkas cron.php setiap 15 menit.", + "Version" : "Versi", + "Sharing" : "Berbagi", "Allow apps to use the Share API" : "Izinkan aplikasi untuk menggunakan API Pembagian", "Allow users to share via link" : "Izinkan pengguna untuk membagikan via tautan", "Allow public uploads" : "Izinkan unggahan publik", @@ -177,45 +216,7 @@ OC.L10N.register( "Exclude groups from sharing" : "Tidak termasuk grup untuk berbagi", "These groups will still be able to receive shares, but not to initiate them." : "Grup ini akan tetap dapat menerima berbagi, tatapi tidak dapat membagikan.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Izinkan penyelesai otomatis pada nama pengguna di jendela dialog berbagi. Jika ini dinonaktifkan, nama pengguna utuh perlu dimasukkan.", - "Last cron job execution: %s." : "Eksekusi penjadwalan cron terakhir: %s.", - "Last cron job execution: %s. Something seems wrong." : "Eksekusi penjadwalan cron terakhir: %s. Kelihatannya ada yang salah.", - "Cron was not executed yet!" : "Cron masih belum dieksekusi!", - "Execute one task with each page loaded" : "Jalankan tugas setiap kali halaman dimuat", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php didaftarkan pada layanan webcron untuk memanggil cron.php setiap 15 menit melalui http.", - "Use system's cron service to call the cron.php file every 15 minutes." : "Gunakan layanan cron sistem untuk memanggil berkas cron.php setiap 15 menit.", - "Enable server-side encryption" : "Aktifkan enkripsi sisi-server", - "Please read carefully before activating server-side encryption: " : "Mohon baca dengan teliti sebelum mengaktifkan enkripsi server-side:", - "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." : "Setelah enkripsi diaktifkan, semua berkas yang diunggah pada server mulai saat ini akan dienkripsi saat singgah pada server. Penonaktifan enkripsi hanya mungkin berhasil jika modul enkripsi yang aktif mendukung fungsi ini dan semua prasyarat (misalnya pengaturan kunci pemulihan) sudah terpenuhi.", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Enkripsi saja tidak dapat menjamin keamanan sistem. Silakan lihat dokumentasi untuk informasi lebih lanjut dalam bagaimana aplikasi enkripsi bekerja, dan kasus pendukung.", - "Be aware that encryption always increases the file size." : "Ingat bahwa enkripsi selalu menambah ukuran berkas.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Alangkah baiknya untuk membuat cadangan data secara rutin, dalam kasus enkripsi, pastikan untuk mencadangkan kunci enkripsi bersama dengan data Anda.", - "This is the final warning: Do you really want to enable encryption?" : "Ini adalah peringatan terakhir: Apakah Anda yakin ingin mengaktifkan enkripsi?", - "Enable encryption" : "Aktifkan enkripsi", - "No encryption module loaded, please enable an encryption module in the app menu." : "Tidak ada modul enkripsi yang dimuat, mohon aktifkan modul enkripsi di menu aplikasi.", - "Select default encryption module:" : "Pilih modul enkripsi baku:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Anda perlu mengganti kunci enkrispi Anda dari enkripsi lama (ownCloud <= 8.0) ke yang baru. Mohon aktifkan \"Modul enkripsi standar\" dan jalankan 'occ encryption:migrate'", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Anda perlu untuk mengubah kunci enkripsi dari enkripsi lama (ownCloud <= 8.0) ke yang baru.", - "Start migration" : "Mulai migrasi", - "This is used for sending out notifications." : "Ini digunakan untuk mengirim notifikasi keluar.", - "Send mode" : "Modus kirim", - "Encryption" : "Enkripsi", - "From address" : "Dari alamat", - "mail" : "email", - "Authentication method" : "Metode otentikasi", - "Authentication required" : "Diperlukan otentikasi", - "Server address" : "Alamat server", - "Port" : "Port", - "Credentials" : "Kredensial", - "SMTP Username" : "Nama pengguna SMTP", - "SMTP Password" : "Sandi SMTP", - "Store credentials" : "Simpan kredensial", - "Test email settings" : "Pengaturan email percobaan", - "Send email" : "Kirim email", - "What to log" : "Apa yang akan di log", - "Download logfile" : "Unduh berkas log", - "More" : "Lainnya", - "Less" : "Ciutkan", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Berkas log lebih besar dari 100MB. Pengunduhan ini memerlukan beberapa saat!", + "Tips & tricks" : "Tips & trik", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite digunakan sebagai basis data. Untuk instalasi yang lebih besar, kami menyarankan untuk beralih ke backend basis data yang berbeda.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Terutama saat menggunakan klien desktop untuk sinkronisasi berkas, penggunaan SQLite tidak disarankan.", "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>." : "Untuk migrasi ke database lain, gunakan alat command line: 'occ db:convert-type', atau lihat <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentasi ↗</a>.", @@ -225,7 +226,6 @@ OC.L10N.register( "Improving the config.php" : "Memperbaiki config.php", "Theming" : "Tema", "Hardening and security guidance" : "Panduan Keselamatan dan Keamanan", - "Version" : "Versi", "Developer documentation" : "Dokumentasi pengembang", "Experimental applications ahead" : "Aplikasi percobaan terdepan", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Aplikasi percobaan belum diperiksa untuk masalah keamanan, baru atau dikenal tidak stabil dan dalam proses pengembangan. Menginstalnya dapat menyebabkan kehilangan data atau penerobosan keamanan.", @@ -281,6 +281,11 @@ OC.L10N.register( "Change password" : "Ubah sandi", "Language" : "Bahasa", "Help translate" : "Bantu menerjemahkan", + "Get the apps to sync your files" : "Dapatkan aplikasi untuk sinkronisasi berkas Anda", + "Desktop client" : "Klien desktop", + "Android app" : "Aplikasi Android", + "iOS app" : "Aplikasi iOS", + "Show First Run Wizard again" : "Tampilkan Penuntun Konfigurasi Awal", "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", @@ -289,15 +294,10 @@ OC.L10N.register( "App name" : "Nama aplikasi", "Create new app password" : "Buat sandi aplikasi baru", "Use the credentials below to configure your app or device." : "Gunakan kredensial berikut untuk mengkonfigurasi aplikasi atau perangkat.", + "For security reasons this password will only be shown once." : "Untuk alasan keamanan sandi ini akan ditunjukkan hanya sekali.", "Username" : "Nama pengguna", "Done" : "Selesai", - "Get the apps to sync your files" : "Dapatkan aplikasi untuk sinkronisasi berkas Anda", - "Desktop client" : "Klien desktop", - "Android app" : "Aplikasi Android", - "iOS app" : "Aplikasi iOS", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Apabila Anda ingin mendukung proyek ini\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">ikuti pengembangannya</a>\n\t\tatau\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">sebarkan</a>!", - "Show First Run Wizard again" : "Tampilkan Penuntun Konfigurasi Awal", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Dikembangkan oleh {commmunityopen}komunitas Nextcloud{linkclose}, {githubopen}sumber kode{linkclose} dilisensikan dibawah {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", + "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Dikembangkan oleh {commmunityopen}komunitas Nextcloud{linkclose}, {githubopen}sumber kode{linkclose} dilisensikan dibawah {licenseopen}AGPL{linkclose}.", "Show storage location" : "Tampilkan kolasi penyimpanan", "Show last log in" : "Tampilkan masuk terakhir", "Show user backend" : "Tampilkan pengguna backend", @@ -321,6 +321,32 @@ OC.L10N.register( "change full name" : "ubah nama lengkap", "set new password" : "setel sandi baru", "change email address" : "ubah alamat email", - "Default" : "Default" + "Default" : "Default", + "no group" : "tanpa grup", + "add group" : "tambah grup", + "Add Group" : "Tambah Grup", + "Default Quota" : "Kuota Standar", + "Full Name" : "Nama Lengkap", + "Group Admin for" : "Grup Admin untuk", + "Storage Location" : "Lokasi Penyimpanan", + "User Backend" : "Backend Pengguna", + "Last Login" : "Log Masuk Terakhir", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Penyimpanan Eksternal", + "Updates" : "Pembaruan", + "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Aplikasi resmi dikembangkan oleh dan didalam komunitas Nextcloud. Mereka menawarkan fungsi sentral untuk Nextcloud dan siap untuk penggunaan produksi.", + "No apps found for \"{query}\"" : "Tidak ditemukan aplikasi untuk \"{query}\"", + "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Mohon cek <a target=\"_blank\" href=\"%s\">dokumentasi instalasi↗</a> untuk catatan konfigurasi php dan konfigurasi PHP server Anda, khususnya saat menggunakan php-fpm.", + "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Database Anda tidak dijalankan dengan isolasi transaksi level \"READ COMMITED\". Ini dapat menyebabkan masalah saat banyak tindakan dilakukan secara paralel.", + "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Server Anda dijalankan di Microsoft Windows. Kami sangat menyarankan Linux untuk mendapatkan pengalaman pengguna yang optimal.", + "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Penguncian berkas transaksional nonaktif, ini dapat menyebabkan masalah dengan kondisi tertentu. Aktifkan 'filelocking.enabled' dalam config.php untuk menghindari masalah ini. Lihat <a target=\"_blank\" href=\"%s\">dokumentasi ↗</a> untuk informasi lebih lanjut.", + "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Mohon cek <a target=\"_blank\" href=\"%s\">petunjuk instalasi ↗</a>, dan cek masalah atau peringatan di <a href=\"#log-section\">log</a>.", + "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Enkripsi saja tidak dapat menjamin keamanan sistem. Silakan lihat dokumentasi Nextcloud untuk informasi lebih lanjut dalam bagaimana aplikasi enkripsi bekerja, dan kasus pendukung.", + "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Untuk migrasi ke database lain, gunakan alat command line: 'occ db:convert-type', atau lihat <a target=\"_blank\" href=\"%s\">dokumentasi ↗</a>.", + "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Aplikasi ini tidak mempunyai versi minimum Nextcloud yang ditetapkan. Ini akan menjadi kesalahan dalam Nextcloud 11 atau versi yang lebih tinggi.", + "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Aplikasi ini tidak mempunyai versi maksimum Nextcloud yang ditetapkan. Ini akan menjadi kesalahan dalam Nextcloud 11 atau versi yang lebih tinggi.", + "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Apabila Anda ingin mendukung proyek ini\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">ikuti pengembangannya</a>\n\t\tatau\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">bantu pengguna lainnya</a>!", + "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Dikembangkan oleh {commmunityopen}komunitas Nextcloud{linkclose}, {githubopen}sumber kode{linkclose} dilisensikan dibawah {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." }, "nplurals=1; plural=0;"); diff --git a/settings/l10n/id.json b/settings/l10n/id.json index 2e62d420404..cdef766dec2 100644 --- a/settings/l10n/id.json +++ b/settings/l10n/id.json @@ -1,14 +1,14 @@ { "translations": { + "Enabled" : "Diaktifkan", + "Not enabled" : "Tidak diaktifkan", "Wrong password" : "Sandi salah", "Saved" : "Disimpan", "No user supplied" : "Tidak ada pengguna yang diberikan", + "Unable to change password" : "Tidak dapat mengubah sandi", "Authentication error" : "Terjadi kesalahan saat otentikasi", "Please provide an admin recovery password, otherwise all user data will be lost" : "Mohon sediakan sandi pemulihan admin, jika tidak semua data pengguna akan terhapus", "Wrong admin recovery password. Please check the password and try again." : "Sandi pemulihan admin salah. Periksa sandi dan ulangi kembali.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Backend tidak mendukung pengubahan sandi, tapi kunci enkripsi pengguna berhasil diperbarui.", - "Unable to change password" : "Tidak dapat mengubah sandi", - "Enabled" : "Diaktifkan", - "Not enabled" : "Tidak diaktifkan", "installing and updating apps via the app store or Federated Cloud Sharing" : "memasang dan memperbarui aplikasi via toko aplikasi atau Federated Cloud Sharing", "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 menggunakan versi lawas %s (%s). Silakan perbarui sistem operasi Anda atau fitur-fitur seperti %s tidak akan dapat bekerja dengan benar.", @@ -33,17 +33,6 @@ "Email saved" : "Email disimpan", "Your full name has been changed." : "Nama lengkap Anda telah diubah", "Unable to change full name" : "Tidak dapat mengubah nama lengkap", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Peringatan Keamanan & Pengaturan", - "Sharing" : "Berbagi", - "Server-side encryption" : "Enkripsi sisi-server", - "External Storage" : "Penyimpanan Eksternal", - "Cron" : "Cron", - "Email server" : "Server email", - "Log" : "Log", - "Tips & tricks" : "Tips & trik", - "Updates" : "Pembaruan", "Couldn't remove app." : "Tidak dapat menghapus aplikasi.", "Language changed" : "Bahasa telah diubah", "Invalid request" : "Permintaan tidak valid", @@ -96,6 +85,10 @@ "Android Client" : "Klien Android", "Sync client - {os}" : "Klien sync - {os}", "This session" : "Sesi ini", + "Copied!" : "Tersalin!", + "Not supported!" : "Tidak didukung!", + "Press ⌘-C to copy." : "Tekan ⌘-C untuk menyalin.", + "Press Ctrl-C to copy." : "Tekan Ctrl-C untuk menyalin.", "Error while loading browser sessions and device tokens" : "Terjadi kesalahan saat memuat sesi browser dan token perangkat", "Error while creating device token" : "Terjadi kesalahan saat membuat token perangkat", "Error while deleting the token" : "Terjadi kesalahan saat menghapus token", @@ -131,17 +124,55 @@ "Sessions" : "Sesi", "App passwords" : "Sandi aplikasi", "Sync clients" : "Klien sync", - "Everything (fatal issues, errors, warnings, info, debug)" : "Semuanya (Masalah fatal, kesalahan, peringatan, info, debug)", - "Info, warnings, errors and fatal issues" : "Info, peringatan, kesalahan dan masalah fatal", - "Warnings, errors and fatal issues" : "Peringatan, kesalahan dan masalah fatal", - "Errors and fatal issues" : "Kesalahan dan masalah fatal", - "Fatal issues only" : "Hanya masalah fatal", "None" : "Tidak ada", "Login" : "Masuk", "Plain" : "Biasa", "NT LAN Manager" : "Manajer NT LAN", "SSL" : "SSL", "TLS" : "TLS", + "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", + "mail" : "email", + "Authentication method" : "Metode otentikasi", + "Authentication required" : "Diperlukan otentikasi", + "Server address" : "Alamat server", + "Port" : "Port", + "Credentials" : "Kredensial", + "SMTP Username" : "Nama pengguna SMTP", + "SMTP Password" : "Sandi SMTP", + "Store credentials" : "Simpan kredensial", + "Test email settings" : "Pengaturan email percobaan", + "Send email" : "Kirim email", + "Server-side encryption" : "Enkripsi sisi-server", + "Enable server-side encryption" : "Aktifkan enkripsi sisi-server", + "Please read carefully before activating server-side encryption: " : "Mohon baca dengan teliti sebelum mengaktifkan enkripsi server-side:", + "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." : "Setelah enkripsi diaktifkan, semua berkas yang diunggah pada server mulai saat ini akan dienkripsi saat singgah pada server. Penonaktifan enkripsi hanya mungkin berhasil jika modul enkripsi yang aktif mendukung fungsi ini dan semua prasyarat (misalnya pengaturan kunci pemulihan) sudah terpenuhi.", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Enkripsi saja tidak dapat menjamin keamanan sistem. Silakan lihat dokumentasi untuk informasi lebih lanjut dalam bagaimana aplikasi enkripsi bekerja, dan kasus pendukung.", + "Be aware that encryption always increases the file size." : "Ingat bahwa enkripsi selalu menambah ukuran berkas.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Alangkah baiknya untuk membuat cadangan data secara rutin, dalam kasus enkripsi, pastikan untuk mencadangkan kunci enkripsi bersama dengan data Anda.", + "This is the final warning: Do you really want to enable encryption?" : "Ini adalah peringatan terakhir: Apakah Anda yakin ingin mengaktifkan enkripsi?", + "Enable encryption" : "Aktifkan enkripsi", + "No encryption module loaded, please enable an encryption module in the app menu." : "Tidak ada modul enkripsi yang dimuat, mohon aktifkan modul enkripsi di menu aplikasi.", + "Select default encryption module:" : "Pilih modul enkripsi baku:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Anda perlu mengganti kunci enkrispi Anda dari enkripsi lama (ownCloud <= 8.0) ke yang baru. Mohon aktifkan \"Modul enkripsi standar\" dan jalankan 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Anda perlu untuk mengubah kunci enkripsi dari enkripsi lama (ownCloud <= 8.0) ke yang baru.", + "Start migration" : "Mulai migrasi", + "Everything (fatal issues, errors, warnings, info, debug)" : "Semuanya (Masalah fatal, kesalahan, peringatan, info, debug)", + "Info, warnings, errors and fatal issues" : "Info, peringatan, kesalahan dan masalah fatal", + "Warnings, errors and fatal issues" : "Peringatan, kesalahan dan masalah fatal", + "Errors and fatal issues" : "Kesalahan dan masalah fatal", + "Fatal issues only" : "Hanya masalah fatal", + "Log" : "Log", + "What to log" : "Apa yang akan di log", + "Download logfile" : "Unduh berkas log", + "More" : "Lainnya", + "Less" : "Ciutkan", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Berkas log lebih besar dari 100MB. Pengunduhan ini memerlukan beberapa saat!", + "Security & setup warnings" : "Peringatan Keamanan & Pengaturan", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "kelihatannya php tidak diatur dengan benar untuk variabel lingkungan sistem kueri. Pemeriksaan dengan getenv(\"PATH\") hanya mengembalikan respon kosong.", "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." : "Mohon cek <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentasi instalasi↗</a> untuk catatan konfigurasi php dan konfigurasi PHP server Anda, khususnya saat menggunakan 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." : "Konfig Hanya-Baca telah diaktifkan. Ini akan mencegah setelan beberapa konfigurasi melalui antarmuka-web. Selanjutnya, berkas perlu dibuat dapat-dibaca secara manual untuk setiap pembaruan.", @@ -158,7 +189,15 @@ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Tidak mungkin untuk mengeksekusi cronjob via CLI. Kesalahan teknis berikut muncul:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Mohon cek <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">petunjuk instalasi ↗</a>, dan cek masalah atau peringatan di <a href=\"#log-section\">log</a>.", "All checks passed." : "Semua pemeriksaan lulus.", - "Open documentation" : "Buka dokumentasi", + "Cron" : "Cron", + "Last cron job execution: %s." : "Eksekusi penjadwalan cron terakhir: %s.", + "Last cron job execution: %s. Something seems wrong." : "Eksekusi penjadwalan cron terakhir: %s. Kelihatannya ada yang salah.", + "Cron was not executed yet!" : "Cron masih belum dieksekusi!", + "Execute one task with each page loaded" : "Jalankan tugas setiap kali halaman dimuat", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php didaftarkan pada layanan webcron untuk memanggil cron.php setiap 15 menit melalui http.", + "Use system's cron service to call the cron.php file every 15 minutes." : "Gunakan layanan cron sistem untuk memanggil berkas cron.php setiap 15 menit.", + "Version" : "Versi", + "Sharing" : "Berbagi", "Allow apps to use the Share API" : "Izinkan aplikasi untuk menggunakan API Pembagian", "Allow users to share via link" : "Izinkan pengguna untuk membagikan via tautan", "Allow public uploads" : "Izinkan unggahan publik", @@ -175,45 +214,7 @@ "Exclude groups from sharing" : "Tidak termasuk grup untuk berbagi", "These groups will still be able to receive shares, but not to initiate them." : "Grup ini akan tetap dapat menerima berbagi, tatapi tidak dapat membagikan.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Izinkan penyelesai otomatis pada nama pengguna di jendela dialog berbagi. Jika ini dinonaktifkan, nama pengguna utuh perlu dimasukkan.", - "Last cron job execution: %s." : "Eksekusi penjadwalan cron terakhir: %s.", - "Last cron job execution: %s. Something seems wrong." : "Eksekusi penjadwalan cron terakhir: %s. Kelihatannya ada yang salah.", - "Cron was not executed yet!" : "Cron masih belum dieksekusi!", - "Execute one task with each page loaded" : "Jalankan tugas setiap kali halaman dimuat", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php didaftarkan pada layanan webcron untuk memanggil cron.php setiap 15 menit melalui http.", - "Use system's cron service to call the cron.php file every 15 minutes." : "Gunakan layanan cron sistem untuk memanggil berkas cron.php setiap 15 menit.", - "Enable server-side encryption" : "Aktifkan enkripsi sisi-server", - "Please read carefully before activating server-side encryption: " : "Mohon baca dengan teliti sebelum mengaktifkan enkripsi server-side:", - "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." : "Setelah enkripsi diaktifkan, semua berkas yang diunggah pada server mulai saat ini akan dienkripsi saat singgah pada server. Penonaktifan enkripsi hanya mungkin berhasil jika modul enkripsi yang aktif mendukung fungsi ini dan semua prasyarat (misalnya pengaturan kunci pemulihan) sudah terpenuhi.", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Enkripsi saja tidak dapat menjamin keamanan sistem. Silakan lihat dokumentasi untuk informasi lebih lanjut dalam bagaimana aplikasi enkripsi bekerja, dan kasus pendukung.", - "Be aware that encryption always increases the file size." : "Ingat bahwa enkripsi selalu menambah ukuran berkas.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Alangkah baiknya untuk membuat cadangan data secara rutin, dalam kasus enkripsi, pastikan untuk mencadangkan kunci enkripsi bersama dengan data Anda.", - "This is the final warning: Do you really want to enable encryption?" : "Ini adalah peringatan terakhir: Apakah Anda yakin ingin mengaktifkan enkripsi?", - "Enable encryption" : "Aktifkan enkripsi", - "No encryption module loaded, please enable an encryption module in the app menu." : "Tidak ada modul enkripsi yang dimuat, mohon aktifkan modul enkripsi di menu aplikasi.", - "Select default encryption module:" : "Pilih modul enkripsi baku:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Anda perlu mengganti kunci enkrispi Anda dari enkripsi lama (ownCloud <= 8.0) ke yang baru. Mohon aktifkan \"Modul enkripsi standar\" dan jalankan 'occ encryption:migrate'", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Anda perlu untuk mengubah kunci enkripsi dari enkripsi lama (ownCloud <= 8.0) ke yang baru.", - "Start migration" : "Mulai migrasi", - "This is used for sending out notifications." : "Ini digunakan untuk mengirim notifikasi keluar.", - "Send mode" : "Modus kirim", - "Encryption" : "Enkripsi", - "From address" : "Dari alamat", - "mail" : "email", - "Authentication method" : "Metode otentikasi", - "Authentication required" : "Diperlukan otentikasi", - "Server address" : "Alamat server", - "Port" : "Port", - "Credentials" : "Kredensial", - "SMTP Username" : "Nama pengguna SMTP", - "SMTP Password" : "Sandi SMTP", - "Store credentials" : "Simpan kredensial", - "Test email settings" : "Pengaturan email percobaan", - "Send email" : "Kirim email", - "What to log" : "Apa yang akan di log", - "Download logfile" : "Unduh berkas log", - "More" : "Lainnya", - "Less" : "Ciutkan", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Berkas log lebih besar dari 100MB. Pengunduhan ini memerlukan beberapa saat!", + "Tips & tricks" : "Tips & trik", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite digunakan sebagai basis data. Untuk instalasi yang lebih besar, kami menyarankan untuk beralih ke backend basis data yang berbeda.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Terutama saat menggunakan klien desktop untuk sinkronisasi berkas, penggunaan SQLite tidak disarankan.", "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>." : "Untuk migrasi ke database lain, gunakan alat command line: 'occ db:convert-type', atau lihat <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentasi ↗</a>.", @@ -223,7 +224,6 @@ "Improving the config.php" : "Memperbaiki config.php", "Theming" : "Tema", "Hardening and security guidance" : "Panduan Keselamatan dan Keamanan", - "Version" : "Versi", "Developer documentation" : "Dokumentasi pengembang", "Experimental applications ahead" : "Aplikasi percobaan terdepan", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Aplikasi percobaan belum diperiksa untuk masalah keamanan, baru atau dikenal tidak stabil dan dalam proses pengembangan. Menginstalnya dapat menyebabkan kehilangan data atau penerobosan keamanan.", @@ -279,6 +279,11 @@ "Change password" : "Ubah sandi", "Language" : "Bahasa", "Help translate" : "Bantu menerjemahkan", + "Get the apps to sync your files" : "Dapatkan aplikasi untuk sinkronisasi berkas Anda", + "Desktop client" : "Klien desktop", + "Android app" : "Aplikasi Android", + "iOS app" : "Aplikasi iOS", + "Show First Run Wizard again" : "Tampilkan Penuntun Konfigurasi Awal", "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", @@ -287,15 +292,10 @@ "App name" : "Nama aplikasi", "Create new app password" : "Buat sandi aplikasi baru", "Use the credentials below to configure your app or device." : "Gunakan kredensial berikut untuk mengkonfigurasi aplikasi atau perangkat.", + "For security reasons this password will only be shown once." : "Untuk alasan keamanan sandi ini akan ditunjukkan hanya sekali.", "Username" : "Nama pengguna", "Done" : "Selesai", - "Get the apps to sync your files" : "Dapatkan aplikasi untuk sinkronisasi berkas Anda", - "Desktop client" : "Klien desktop", - "Android app" : "Aplikasi Android", - "iOS app" : "Aplikasi iOS", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Apabila Anda ingin mendukung proyek ini\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">ikuti pengembangannya</a>\n\t\tatau\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">sebarkan</a>!", - "Show First Run Wizard again" : "Tampilkan Penuntun Konfigurasi Awal", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Dikembangkan oleh {commmunityopen}komunitas Nextcloud{linkclose}, {githubopen}sumber kode{linkclose} dilisensikan dibawah {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", + "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Dikembangkan oleh {commmunityopen}komunitas Nextcloud{linkclose}, {githubopen}sumber kode{linkclose} dilisensikan dibawah {licenseopen}AGPL{linkclose}.", "Show storage location" : "Tampilkan kolasi penyimpanan", "Show last log in" : "Tampilkan masuk terakhir", "Show user backend" : "Tampilkan pengguna backend", @@ -319,6 +319,32 @@ "change full name" : "ubah nama lengkap", "set new password" : "setel sandi baru", "change email address" : "ubah alamat email", - "Default" : "Default" + "Default" : "Default", + "no group" : "tanpa grup", + "add group" : "tambah grup", + "Add Group" : "Tambah Grup", + "Default Quota" : "Kuota Standar", + "Full Name" : "Nama Lengkap", + "Group Admin for" : "Grup Admin untuk", + "Storage Location" : "Lokasi Penyimpanan", + "User Backend" : "Backend Pengguna", + "Last Login" : "Log Masuk Terakhir", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Penyimpanan Eksternal", + "Updates" : "Pembaruan", + "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Aplikasi resmi dikembangkan oleh dan didalam komunitas Nextcloud. Mereka menawarkan fungsi sentral untuk Nextcloud dan siap untuk penggunaan produksi.", + "No apps found for \"{query}\"" : "Tidak ditemukan aplikasi untuk \"{query}\"", + "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Mohon cek <a target=\"_blank\" href=\"%s\">dokumentasi instalasi↗</a> untuk catatan konfigurasi php dan konfigurasi PHP server Anda, khususnya saat menggunakan php-fpm.", + "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Database Anda tidak dijalankan dengan isolasi transaksi level \"READ COMMITED\". Ini dapat menyebabkan masalah saat banyak tindakan dilakukan secara paralel.", + "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Server Anda dijalankan di Microsoft Windows. Kami sangat menyarankan Linux untuk mendapatkan pengalaman pengguna yang optimal.", + "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Penguncian berkas transaksional nonaktif, ini dapat menyebabkan masalah dengan kondisi tertentu. Aktifkan 'filelocking.enabled' dalam config.php untuk menghindari masalah ini. Lihat <a target=\"_blank\" href=\"%s\">dokumentasi ↗</a> untuk informasi lebih lanjut.", + "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Mohon cek <a target=\"_blank\" href=\"%s\">petunjuk instalasi ↗</a>, dan cek masalah atau peringatan di <a href=\"#log-section\">log</a>.", + "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Enkripsi saja tidak dapat menjamin keamanan sistem. Silakan lihat dokumentasi Nextcloud untuk informasi lebih lanjut dalam bagaimana aplikasi enkripsi bekerja, dan kasus pendukung.", + "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Untuk migrasi ke database lain, gunakan alat command line: 'occ db:convert-type', atau lihat <a target=\"_blank\" href=\"%s\">dokumentasi ↗</a>.", + "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Aplikasi ini tidak mempunyai versi minimum Nextcloud yang ditetapkan. Ini akan menjadi kesalahan dalam Nextcloud 11 atau versi yang lebih tinggi.", + "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Aplikasi ini tidak mempunyai versi maksimum Nextcloud yang ditetapkan. Ini akan menjadi kesalahan dalam Nextcloud 11 atau versi yang lebih tinggi.", + "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Apabila Anda ingin mendukung proyek ini\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">ikuti pengembangannya</a>\n\t\tatau\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">bantu pengguna lainnya</a>!", + "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Dikembangkan oleh {commmunityopen}komunitas Nextcloud{linkclose}, {githubopen}sumber kode{linkclose} dilisensikan dibawah {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/settings/l10n/is.js b/settings/l10n/is.js index 7e1e7750294..d8530338e97 100644 --- a/settings/l10n/is.js +++ b/settings/l10n/is.js @@ -1,16 +1,16 @@ OC.L10N.register( "settings", { + "Enabled" : "Virkt", + "Not enabled" : "Óvirkt", "Wrong password" : "Rangt lykilorð", "Saved" : "Vistað", "No user supplied" : "Enginn notandi gefinn", + "Unable to change password" : "Ekki tókst að breyta lykilorði", "Authentication error" : "Villa við auðkenningu", "Please provide an admin recovery password, otherwise all user data will be lost" : "Settu inn endurheimtulykilorð kerfisstjóra, annars munu öll notandagögn tapast", "Wrong admin recovery password. Please check the password and try again." : "Rangt endurheimtulykilorð kerfisstjóra, athugaðu lykilorðið og reyndu aftur.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Bakendi styður ekki breytingu á lykilorði, en það tókst að uppfæra dulritunarlykil notandans.", - "Unable to change password" : "Ekki tókst að breyta lykilorði", - "Enabled" : "Virkt", - "Not enabled" : "Óvirkt", "installing and updating apps via the app store or Federated Cloud Sharing" : "uppsetning eða uppfærsla forrita úr forritabúð eða með skýjasambandi", "Federated Cloud Sharing" : "Deiling með skýjasambandi", "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL er að nota úrelda útgáfu af %s (%s). Uppfærðu stýrikerfið þitt, annars er hætt við að eiginleikar á borð við %s virki ekki sem skyldi.", @@ -35,17 +35,6 @@ OC.L10N.register( "Email saved" : "Tölvupóstfang vistað", "Your full name has been changed." : "Fullu nafni þínu hefur verið breytt.", "Unable to change full name" : "Get ekki breytt fullu nafni", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Öryggi og aðvaranir vegna uppsetningar", - "Sharing" : "Deiling", - "Server-side encryption" : "Dulritun á þjóni", - "External Storage" : "Ytri gagnageymsla", - "Cron" : "CRON", - "Email server" : "Póstþjónn", - "Log" : "Annáll", - "Tips & tricks" : "Ábendingar og góð ráð", - "Updates" : "Uppfærslur", "Couldn't remove app." : "Gat ekki fjarlægt forrit.", "Language changed" : "Tungumáli breytt", "Invalid request" : "Ógild fyrirspurn", @@ -63,6 +52,8 @@ OC.L10N.register( "Experimental" : "Á tilraunastigi", "All" : "Allt", "No apps found for your version" : "Engin forrit fundust fyrir útgáfuna þína", + "The app will be downloaded from the app store" : "Forritinu verður hlaðið niður úr forritabúðinni", + "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Opinber forrit eru þróuð af og innan samfélagsins. Þau bjóða upp á ýmsa kjarnaeiginleika og eru tilbúin til notkunar í raunvinnslu.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Samþykkt forrit eru þróuð af treystum forriturum og hafa gengist undir lauslegar öryggisprófanir. Þau eru í virku viðhaldi í opnum hugbúnaðarsöfnum og umsjónarmenn þeirra dæma þau nógu stöðug til notkunar í allri venjulegri vinnslu.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Þetta forrit hefur ekki verið öryggisprófað, er nýtt erða þekkt fyrir ótöðugleika við vissar aðstæður. Uppsetning er á þína ábyrgð.", "Update to %s" : "Uppfæra í %s", @@ -83,6 +74,24 @@ OC.L10N.register( "Uninstall" : "Henda út", "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", + "No apps found for {query}" : "Engin forrit fundust fyrir \"{query}", + "Disconnect" : "Aftengjast", + "Internet Explorer" : "Internet Explorer", + "Edge" : "Edge", + "Firefox" : "Firefox", + "Google Chrome" : "Google Chrome", + "Safari" : "Safari", + "Google Chrome for Android" : "Google Chrome fyrir Android", + "iPhone" : "iPhone", + "iOS Client" : "iOS-biðlari", + "Android Client" : "Android-biðlari", + "Sync client - {os}" : "Samstilla bilara - {os}", + "This session" : "Þessa setu", + "Copied!" : "Afritað!", + "Not supported!" : "Óstutt!", + "Press ⌘-C to copy." : "Ýttu á ⌘-C til að afrita.", + "Press Ctrl-C to copy." : "Ýttu á Ctrl-C til að afrita.", + "Error while deleting the token" : "Villa kom upp við að eyða teikninu", "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Villa kom upp. Sendu inn ASCII-kóðað PEM-skilríki.", "Valid until {date}" : "Gildir til {date}", "Delete" : "Eyða", @@ -99,8 +108,11 @@ OC.L10N.register( "A valid group name must be provided" : "Skráðu inn gilt heiti á hópi", "deleted {groupName}" : "eyddi {groupName}", "undo" : "afturkalla", + "No group" : "Enginn hópur", "never" : "aldrei", "deleted {userName}" : "eyddi {userName}", + "Add group" : "Bæta við hópi", + "Invalid quota value \"{val}\"" : "Óleyfilegt gildi kvóta \"{val}\"", "Changing the password will result in data loss, because data recovery is not available for this user" : "Breyting á þessu lykilorði mun valda gagnatapi, þar sem gagnaendurheimt er ekki tiltæk fyrir þennan notanda", "A valid username must be provided" : "Skráðu inn gilt notandanafn", "Error creating user: {message}" : "Villa við að búa til notanda: {message}", @@ -109,54 +121,17 @@ OC.L10N.register( "__language_name__" : "Íslenska", "Unlimited" : "Ótakmarkað", "Personal info" : "Persónulegar upplýsingar", + "Sessions" : "Setur", + "App passwords" : "Lykilorð forrita", "Sync clients" : "Samstilla biðlara", - "Everything (fatal issues, errors, warnings, info, debug)" : "Allt (aflúsun, upplýsingar, viðvaranir, villur og alvarlegar aðvaranir)", - "Info, warnings, errors and fatal issues" : "Upplýsingar, viðvaranir, villur og alvarlegar aðvaranir", - "Warnings, errors and fatal issues" : "Viðvaranir, villur og alvarlegar aðvaranir", - "Errors and fatal issues" : "Villur og alvarlegar aðvaranir", - "Fatal issues only" : "Einungis alvarlegar aðvaranir", "None" : "Ekkert", "Login" : "Innskráning", "Plain" : "Einfalt", "NT LAN Manager" : "NT LAN stjórnun", "SSL" : "SSL", "TLS" : "TLS", - "System locale can not be set to a one which supports UTF-8." : "Ekki var hægt að setja staðfærslu kerfisins á neina sem styður UTF-8.", - "All checks passed." : "Stóðst allar prófanir.", + "Email server" : "Póstþjónn", "Open documentation" : "Opna hjálparskjöl", - "Allow apps to use the Share API" : "Leyfa forritum að nota Share API", - "Allow users to share via link" : "Leyfa notendum að deila með tengli", - "Allow public uploads" : "Leyfa opinberar innsendingar", - "Enforce password protection" : "Krefjast verndunar með aðgangsorði", - "Set default expiration date" : "Setja sjálfgefinn gildistíma", - "Allow users to send mail notification for shared files" : "Leyfa notendum að senda tilkynningar í tölvupósti vegna deildra skráa", - "Expire after " : "Rennur út eftir ", - "days" : "daga", - "Enforce expiration date" : "Krefjast dagsetningar á gildistíma", - "Allow resharing" : "Leyfa endurdeilingu", - "Allow sharing with groups" : "Leyfa deilingu með hópum", - "Restrict users to only share with users in their groups" : "Takmarka notendur við að deila með notendum í þeirra eigin hópum", - "Allow users to send mail notification for shared files to other users" : "Leyfa notendum að senda tilkynningar til annarra notenda í tölvupósti vegna deildra skráa", - "Exclude groups from sharing" : "Undanskilja hópa frá því að deila", - "These groups will still be able to receive shares, but not to initiate them." : "Þessir hópar munu samt geta tekið við deildum sameignum, en ekki geta útbúið þær.", - "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Leyfa sjálfklárun notandanafns í deilingarglugga. Ef þetta er óvirkt þarf að setja inn fullt nafn notanda.", - "Last cron job execution: %s." : "Síðasta keyrsla cron-verks: %s.", - "Last cron job execution: %s. Something seems wrong." : "Síðasta keyrsla cron-verks: %s. Eitthvað er ekki eins og það á að sér að vera.", - "Cron was not executed yet!" : "Cron hefur ekki ennþá verið keyrt!", - "Execute one task with each page loaded" : "Framkvæma eitt verk með hverri innhlaðinni síðu", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php er skráð á webcron-þjónustu til að kalla á cron.php á 15 mínútna fresti yfir http.", - "Use system's cron service to call the cron.php file every 15 minutes." : "Nota cron-þjónustu kerfisins til að kalla á cron.php skrána á 15 mínútna fresti.", - "Enable server-side encryption" : "Virkja dulritun á þjóni", - "Please read carefully before activating server-side encryption: " : "Lestu eftirfarandi gaumgæfilega áður en þú virkjar dulritun á þjóni: ", - "Be aware that encryption always increases the file size." : "Hafðu í huga að dulritun eykur alltaf skráastærð.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Það er góður siður að taka regluleg öryggisafrit af gögnunum þínum; ef um dulrituð gögn er að ræða, gakktu úr skugga um að einnig sé tekið öryggisafrit af dulritunarlyklum ásamt gögnunum.", - "This is the final warning: Do you really want to enable encryption?" : "Þetta er lokaaðvörun: Viltu örugglega virkja dulritun?", - "Enable encryption" : "Virkja dulritun", - "No encryption module loaded, please enable an encryption module in the app menu." : "Engin dulritunareining hlaðin inn, virkjaðu dulritunareiningu í valmynd forritsins.", - "Select default encryption module:" : "Veldu sjálfgefna dulritunareiningu:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Þú verður að yfirfæra dulritunarlyklana þína úr gömlu dulrituninni (ownCloud <= 8.0) yfir í þá nýju. Virkjaðu \"Sjálfgefna dulritunareiningu\" og keyrðu 'occ encryption:migrate'", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Þú verður að yfirfæra dulritunarlyklana þína úr gömlu dulrituninni (ownCloud <= 8.0) yfir í þá nýju.", - "Start migration" : "Hefja yfirfærslu", "This is used for sending out notifications." : "Þetta er notað til að senda út tilkynningar.", "Send mode" : "Sendihamur", "Encryption" : "Dulritun", @@ -172,20 +147,68 @@ OC.L10N.register( "Store credentials" : "Geyma auðkenni", "Test email settings" : "Prófa tölvupóststillingar", "Send email" : "Senda tölvupóst", + "Server-side encryption" : "Dulritun á þjóni", + "Enable server-side encryption" : "Virkja dulritun á þjóni", + "Please read carefully before activating server-side encryption: " : "Lestu eftirfarandi gaumgæfilega áður en þú virkjar dulritun á þjóni: ", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Dulritun ein og sér tryggir ekki öryggi kerfisins. Endilega skoðaðu hjálparskjölin um hvernig dulritunarforritið virkar, og dæmi um hvaða uppsetningar eru studdar.", + "Be aware that encryption always increases the file size." : "Hafðu í huga að dulritun eykur alltaf skráastærð.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Það er góður siður að taka regluleg öryggisafrit af gögnunum þínum; ef um dulrituð gögn er að ræða, gakktu úr skugga um að einnig sé tekið öryggisafrit af dulritunarlyklum ásamt gögnunum.", + "This is the final warning: Do you really want to enable encryption?" : "Þetta er lokaaðvörun: Viltu örugglega virkja dulritun?", + "Enable encryption" : "Virkja dulritun", + "No encryption module loaded, please enable an encryption module in the app menu." : "Engin dulritunareining hlaðin inn, virkjaðu dulritunareiningu í valmynd forritsins.", + "Select default encryption module:" : "Veldu sjálfgefna dulritunareiningu:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Þú verður að yfirfæra dulritunarlyklana þína úr gömlu dulrituninni (ownCloud <= 8.0) yfir í þá nýju. Virkjaðu \"Sjálfgefna dulritunareiningu\" og keyrðu 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Þú verður að yfirfæra dulritunarlyklana þína úr gömlu dulrituninni (ownCloud <= 8.0) yfir í þá nýju.", + "Start migration" : "Hefja yfirfærslu", + "Everything (fatal issues, errors, warnings, info, debug)" : "Allt (aflúsun, upplýsingar, viðvaranir, villur og alvarlegar aðvaranir)", + "Info, warnings, errors and fatal issues" : "Upplýsingar, viðvaranir, villur og alvarlegar aðvaranir", + "Warnings, errors and fatal issues" : "Viðvaranir, villur og alvarlegar aðvaranir", + "Errors and fatal issues" : "Villur og alvarlegar aðvaranir", + "Fatal issues only" : "Einungis alvarlegar aðvaranir", + "Log" : "Annáll", "What to log" : "Hvað á að skrá í annál", "Download logfile" : "Sækja annál", "More" : "Meira", "Less" : "Minna", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Annállinn er stærri en 100 MB.Þetta gæti tekið nokkra stund!", + "Security & setup warnings" : "Öryggi og aðvaranir vegna uppsetningar", + "System locale can not be set to a one which supports UTF-8." : "Ekki var hægt að setja staðfærslu kerfisins á neina sem styður UTF-8.", + "All checks passed." : "Stóðst allar prófanir.", + "Cron" : "CRON", + "Last cron job execution: %s." : "Síðasta keyrsla cron-verks: %s.", + "Last cron job execution: %s. Something seems wrong." : "Síðasta keyrsla cron-verks: %s. Eitthvað er ekki eins og það á að sér að vera.", + "Cron was not executed yet!" : "Cron hefur ekki ennþá verið keyrt!", + "Execute one task with each page loaded" : "Framkvæma eitt verk með hverri innhlaðinni síðu", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php er skráð á webcron-þjónustu til að kalla á cron.php á 15 mínútna fresti yfir http.", + "Use system's cron service to call the cron.php file every 15 minutes." : "Nota cron-þjónustu kerfisins til að kalla á cron.php skrána á 15 mínútna fresti.", + "Version" : "Útgáfa", + "Sharing" : "Deiling", + "Allow apps to use the Share API" : "Leyfa forritum að nota Share API", + "Allow users to share via link" : "Leyfa notendum að deila með tengli", + "Allow public uploads" : "Leyfa opinberar innsendingar", + "Enforce password protection" : "Krefjast verndunar með aðgangsorði", + "Set default expiration date" : "Setja sjálfgefinn gildistíma", + "Allow users to send mail notification for shared files" : "Leyfa notendum að senda tilkynningar í tölvupósti vegna deildra skráa", + "Expire after " : "Rennur út eftir ", + "days" : "daga", + "Enforce expiration date" : "Krefjast dagsetningar á gildistíma", + "Allow resharing" : "Leyfa endurdeilingu", + "Allow sharing with groups" : "Leyfa deilingu með hópum", + "Restrict users to only share with users in their groups" : "Takmarka notendur við að deila með notendum í þeirra eigin hópum", + "Allow users to send mail notification for shared files to other users" : "Leyfa notendum að senda tilkynningar til annarra notenda í tölvupósti vegna deildra skráa", + "Exclude groups from sharing" : "Undanskilja hópa frá því að deila", + "These groups will still be able to receive shares, but not to initiate them." : "Þessir hópar munu samt geta tekið við deildum sameignum, en ekki geta útbúið þær.", + "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Leyfa sjálfklárun notandanafns í deilingarglugga. Ef þetta er óvirkt þarf að setja inn fullt nafn notanda.", + "Tips & tricks" : "Ábendingar og góð ráð", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite er notað sem gagnagrunnur. Fyrir stærri uppsetningar mælum við með að velja annan gagnagrunnsbakenda.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Sérstaklega þegar tölvu forrit er notað til samræmingar þá er ekki mælt með notkunn SQLite.", + "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>." : "Til að yfirfæra í annan gagnagrunn skaltu nota skipanalínutólið: 'occ db:convert-type', eða lesa <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">hjálparskjölin ↗</a>.", "How to do backups" : "Hvernig á að taka öryggisafrit", "Advanced monitoring" : "Ítarleg vöktun", "Performance tuning" : "Fínstilling afkasta", "Improving the config.php" : "Bæting á config.php skránni", "Theming" : "Þemu", "Hardening and security guidance" : "Brynjun og öryggisleiðbeiningar", - "Version" : "Útgáfa", "Developer documentation" : "Skjölun fyrir þróunaraðila", "Experimental applications ahead" : "Forrit á tilraunastigi fyrst", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Tilraunaforrit eru ekki yfirfarin með tilliti til öryggisvandamála, þau eru þekkt fyrir að vera óstöðug og þróast hratt. Uppsetning þeirra getur valdið gagnatapi og öryggisbrestum.", @@ -194,9 +217,13 @@ OC.L10N.register( "Documentation:" : "Hjálparskjöl:", "User documentation" : "Hjálparskjöl notenda", "Admin documentation" : "Hjálparskjöl kerfisstjóra", + "Visit website" : "Heimsækja vefsvæðið", + "Report a bug" : "Tilkynna um villu", "Show description …" : "Birta lýsingu …", "Hide description …" : "Fela lýsingu …", "This app has an update available." : "Uppfærsla er tiltæk fyrir þetta forrit.", + "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Þetta vorrit er ekki með tiltekna neina lágmarksútgáfu Nextcloud. Þetta mun gefa villu í framtíðinni.", + "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Þetta vorrit er ekki með tiltekna neina hámarksútgáfu Nextcloud. Þetta mun gefa villu í framtíðinni.", "This app cannot be installed because the following dependencies are not fulfilled:" : "Ekki var hægt að setja upp forritið þar sem eftirfarandi kerfiskröfur eru ekki uppfylltar:", "Enable only for specific groups" : "Einungis fyrir sérstaka hópa", "Uninstall App" : "Fjarlægja/Henda út forriti", @@ -237,13 +264,21 @@ OC.L10N.register( "Change password" : "Breyta lykilorði", "Language" : "Tungumál", "Help translate" : "Hjálpa við þýðingu", - "Name" : "Heiti", - "Username" : "Notandanafn", "Get the apps to sync your files" : "Náðu í forrit til að samstilla skrárnar þínar", "Desktop client" : "Skjáborðsforrit", "Android app" : "Android-forrit", "iOS app" : "iOS-forrit", "Show First Run Wizard again" : "Birta Fyrsta-skiptis-leiðarvísinn aftur", + "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", + "Name" : "Heiti", + "App name" : "Heiti forrits", + "Create new app password" : "Búa til nýtt lykilorð forrits", + "For security reasons this password will only be shown once." : "Af öryggisástæðum er þetta lykilorð einungis birt einu sinni.", + "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.", "Show storage location" : "Birta staðsetningu gagnageymslu", "Show last log in" : "Birta síðustu innskráningu", "Show user backend" : "Birta bakenda notanda", @@ -256,12 +291,39 @@ OC.L10N.register( "Group" : "Hópur", "Everyone" : "Allir", "Admins" : "Kerfisstjórar", + "Default quota" : "Sjálfgefinn kvóti", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Settu inn geymslukvóta (t.d.: \"512 MB\" eða \"12 GB\")", "Other" : "Annað", + "Group admin for" : "Hópstjóri fyrir", "Quota" : "Kvóti", + "Storage location" : "Staðsetning gagnageymslu", + "User backend" : "Bakendi notanda", + "Last login" : "Síðasta innskráning", "change full name" : "breyta fullu nafni", "set new password" : "setja nýtt lykilorð", "change email address" : "breyta tölvupóstfangi", - "Default" : "Sjálfgefið" + "Default" : "Sjálfgefið", + "no group" : "enginn hópur", + "add group" : "bæta við hópi", + "Add Group" : "Bæta við hópi", + "Default Quota" : "Sjálfgefinn kvóti", + "Full Name" : "Fullt nafn", + "Group Admin for" : "Hópstjóri fyrir", + "Storage Location" : "Staðsetning gagnageymslu", + "User Backend" : "Bakendi notanda", + "Last Login" : "Síðasta innskráning", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Ytri gagnageymsla", + "Updates" : "Uppfærslur", + "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Opinber forrit eru þróuð af og innan Nextcloud samfélagsins. Þau virka með kjarnaeiginleikum Nextcloud og eru tilbúin til notkunar í raunvinnslu.", + "No apps found for \"{query}\"" : "Engin forrit fundust fyrir \"{query}\"", + "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Þjónninn þinn er keyrandi á Microsoft Windows. Við mælum sterklega með Linux til að njóta sem best allra eiginleika fyrir notendurna.", + "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Dulritun ein og sér tryggir ekki öryggi kerfisins. Endilega skoðaðu hjálparskjölin um hvernig dulritunarforritið virkar, og dæmi um hvaða uppsetningar eru studdar.", + "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Til að yfirfæra í annan gagnagrunn skaltu nota skipanalínutólið: 'occ db:convert-type', eða lesa <a target=\"_blank\" href=\"%s\">hjálparskjölin ↗</a>.", + "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Þetta vorrit er ekki með tiltekna neina lágmarksútgáfu Nextcloud. Þetta mun gefa villu í Nextcloud 11 og nýrri.", + "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Þetta vorrit er ekki með tiltekna neina hámarksútgáfu Nextcloud. Þetta mun gefa villu í Nextcloud 11 og nýrri.", + "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Ef þú vilt styðja við verkefnið\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">taktu þátt í þróuninni</a>\n\t\teða\n\t\t<a href=\"https://help.nextcloud.com\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">hjálpaðu öðrum notendum</a>!", + "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Þróað af {communityopen}Nextcloud samfélaginu{linkclose}, {githubopen}grunnkóðinn{linkclose} er gefinn út með {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} notkunarleyfinu." }, "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/settings/l10n/is.json b/settings/l10n/is.json index 43f8e85d501..c74ac514f40 100644 --- a/settings/l10n/is.json +++ b/settings/l10n/is.json @@ -1,14 +1,14 @@ { "translations": { + "Enabled" : "Virkt", + "Not enabled" : "Óvirkt", "Wrong password" : "Rangt lykilorð", "Saved" : "Vistað", "No user supplied" : "Enginn notandi gefinn", + "Unable to change password" : "Ekki tókst að breyta lykilorði", "Authentication error" : "Villa við auðkenningu", "Please provide an admin recovery password, otherwise all user data will be lost" : "Settu inn endurheimtulykilorð kerfisstjóra, annars munu öll notandagögn tapast", "Wrong admin recovery password. Please check the password and try again." : "Rangt endurheimtulykilorð kerfisstjóra, athugaðu lykilorðið og reyndu aftur.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Bakendi styður ekki breytingu á lykilorði, en það tókst að uppfæra dulritunarlykil notandans.", - "Unable to change password" : "Ekki tókst að breyta lykilorði", - "Enabled" : "Virkt", - "Not enabled" : "Óvirkt", "installing and updating apps via the app store or Federated Cloud Sharing" : "uppsetning eða uppfærsla forrita úr forritabúð eða með skýjasambandi", "Federated Cloud Sharing" : "Deiling með skýjasambandi", "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL er að nota úrelda útgáfu af %s (%s). Uppfærðu stýrikerfið þitt, annars er hætt við að eiginleikar á borð við %s virki ekki sem skyldi.", @@ -33,17 +33,6 @@ "Email saved" : "Tölvupóstfang vistað", "Your full name has been changed." : "Fullu nafni þínu hefur verið breytt.", "Unable to change full name" : "Get ekki breytt fullu nafni", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Öryggi og aðvaranir vegna uppsetningar", - "Sharing" : "Deiling", - "Server-side encryption" : "Dulritun á þjóni", - "External Storage" : "Ytri gagnageymsla", - "Cron" : "CRON", - "Email server" : "Póstþjónn", - "Log" : "Annáll", - "Tips & tricks" : "Ábendingar og góð ráð", - "Updates" : "Uppfærslur", "Couldn't remove app." : "Gat ekki fjarlægt forrit.", "Language changed" : "Tungumáli breytt", "Invalid request" : "Ógild fyrirspurn", @@ -61,6 +50,8 @@ "Experimental" : "Á tilraunastigi", "All" : "Allt", "No apps found for your version" : "Engin forrit fundust fyrir útgáfuna þína", + "The app will be downloaded from the app store" : "Forritinu verður hlaðið niður úr forritabúðinni", + "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Opinber forrit eru þróuð af og innan samfélagsins. Þau bjóða upp á ýmsa kjarnaeiginleika og eru tilbúin til notkunar í raunvinnslu.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Samþykkt forrit eru þróuð af treystum forriturum og hafa gengist undir lauslegar öryggisprófanir. Þau eru í virku viðhaldi í opnum hugbúnaðarsöfnum og umsjónarmenn þeirra dæma þau nógu stöðug til notkunar í allri venjulegri vinnslu.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Þetta forrit hefur ekki verið öryggisprófað, er nýtt erða þekkt fyrir ótöðugleika við vissar aðstæður. Uppsetning er á þína ábyrgð.", "Update to %s" : "Uppfæra í %s", @@ -81,6 +72,24 @@ "Uninstall" : "Henda út", "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", + "No apps found for {query}" : "Engin forrit fundust fyrir \"{query}", + "Disconnect" : "Aftengjast", + "Internet Explorer" : "Internet Explorer", + "Edge" : "Edge", + "Firefox" : "Firefox", + "Google Chrome" : "Google Chrome", + "Safari" : "Safari", + "Google Chrome for Android" : "Google Chrome fyrir Android", + "iPhone" : "iPhone", + "iOS Client" : "iOS-biðlari", + "Android Client" : "Android-biðlari", + "Sync client - {os}" : "Samstilla bilara - {os}", + "This session" : "Þessa setu", + "Copied!" : "Afritað!", + "Not supported!" : "Óstutt!", + "Press ⌘-C to copy." : "Ýttu á ⌘-C til að afrita.", + "Press Ctrl-C to copy." : "Ýttu á Ctrl-C til að afrita.", + "Error while deleting the token" : "Villa kom upp við að eyða teikninu", "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Villa kom upp. Sendu inn ASCII-kóðað PEM-skilríki.", "Valid until {date}" : "Gildir til {date}", "Delete" : "Eyða", @@ -97,8 +106,11 @@ "A valid group name must be provided" : "Skráðu inn gilt heiti á hópi", "deleted {groupName}" : "eyddi {groupName}", "undo" : "afturkalla", + "No group" : "Enginn hópur", "never" : "aldrei", "deleted {userName}" : "eyddi {userName}", + "Add group" : "Bæta við hópi", + "Invalid quota value \"{val}\"" : "Óleyfilegt gildi kvóta \"{val}\"", "Changing the password will result in data loss, because data recovery is not available for this user" : "Breyting á þessu lykilorði mun valda gagnatapi, þar sem gagnaendurheimt er ekki tiltæk fyrir þennan notanda", "A valid username must be provided" : "Skráðu inn gilt notandanafn", "Error creating user: {message}" : "Villa við að búa til notanda: {message}", @@ -107,54 +119,17 @@ "__language_name__" : "Íslenska", "Unlimited" : "Ótakmarkað", "Personal info" : "Persónulegar upplýsingar", + "Sessions" : "Setur", + "App passwords" : "Lykilorð forrita", "Sync clients" : "Samstilla biðlara", - "Everything (fatal issues, errors, warnings, info, debug)" : "Allt (aflúsun, upplýsingar, viðvaranir, villur og alvarlegar aðvaranir)", - "Info, warnings, errors and fatal issues" : "Upplýsingar, viðvaranir, villur og alvarlegar aðvaranir", - "Warnings, errors and fatal issues" : "Viðvaranir, villur og alvarlegar aðvaranir", - "Errors and fatal issues" : "Villur og alvarlegar aðvaranir", - "Fatal issues only" : "Einungis alvarlegar aðvaranir", "None" : "Ekkert", "Login" : "Innskráning", "Plain" : "Einfalt", "NT LAN Manager" : "NT LAN stjórnun", "SSL" : "SSL", "TLS" : "TLS", - "System locale can not be set to a one which supports UTF-8." : "Ekki var hægt að setja staðfærslu kerfisins á neina sem styður UTF-8.", - "All checks passed." : "Stóðst allar prófanir.", + "Email server" : "Póstþjónn", "Open documentation" : "Opna hjálparskjöl", - "Allow apps to use the Share API" : "Leyfa forritum að nota Share API", - "Allow users to share via link" : "Leyfa notendum að deila með tengli", - "Allow public uploads" : "Leyfa opinberar innsendingar", - "Enforce password protection" : "Krefjast verndunar með aðgangsorði", - "Set default expiration date" : "Setja sjálfgefinn gildistíma", - "Allow users to send mail notification for shared files" : "Leyfa notendum að senda tilkynningar í tölvupósti vegna deildra skráa", - "Expire after " : "Rennur út eftir ", - "days" : "daga", - "Enforce expiration date" : "Krefjast dagsetningar á gildistíma", - "Allow resharing" : "Leyfa endurdeilingu", - "Allow sharing with groups" : "Leyfa deilingu með hópum", - "Restrict users to only share with users in their groups" : "Takmarka notendur við að deila með notendum í þeirra eigin hópum", - "Allow users to send mail notification for shared files to other users" : "Leyfa notendum að senda tilkynningar til annarra notenda í tölvupósti vegna deildra skráa", - "Exclude groups from sharing" : "Undanskilja hópa frá því að deila", - "These groups will still be able to receive shares, but not to initiate them." : "Þessir hópar munu samt geta tekið við deildum sameignum, en ekki geta útbúið þær.", - "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Leyfa sjálfklárun notandanafns í deilingarglugga. Ef þetta er óvirkt þarf að setja inn fullt nafn notanda.", - "Last cron job execution: %s." : "Síðasta keyrsla cron-verks: %s.", - "Last cron job execution: %s. Something seems wrong." : "Síðasta keyrsla cron-verks: %s. Eitthvað er ekki eins og það á að sér að vera.", - "Cron was not executed yet!" : "Cron hefur ekki ennþá verið keyrt!", - "Execute one task with each page loaded" : "Framkvæma eitt verk með hverri innhlaðinni síðu", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php er skráð á webcron-þjónustu til að kalla á cron.php á 15 mínútna fresti yfir http.", - "Use system's cron service to call the cron.php file every 15 minutes." : "Nota cron-þjónustu kerfisins til að kalla á cron.php skrána á 15 mínútna fresti.", - "Enable server-side encryption" : "Virkja dulritun á þjóni", - "Please read carefully before activating server-side encryption: " : "Lestu eftirfarandi gaumgæfilega áður en þú virkjar dulritun á þjóni: ", - "Be aware that encryption always increases the file size." : "Hafðu í huga að dulritun eykur alltaf skráastærð.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Það er góður siður að taka regluleg öryggisafrit af gögnunum þínum; ef um dulrituð gögn er að ræða, gakktu úr skugga um að einnig sé tekið öryggisafrit af dulritunarlyklum ásamt gögnunum.", - "This is the final warning: Do you really want to enable encryption?" : "Þetta er lokaaðvörun: Viltu örugglega virkja dulritun?", - "Enable encryption" : "Virkja dulritun", - "No encryption module loaded, please enable an encryption module in the app menu." : "Engin dulritunareining hlaðin inn, virkjaðu dulritunareiningu í valmynd forritsins.", - "Select default encryption module:" : "Veldu sjálfgefna dulritunareiningu:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Þú verður að yfirfæra dulritunarlyklana þína úr gömlu dulrituninni (ownCloud <= 8.0) yfir í þá nýju. Virkjaðu \"Sjálfgefna dulritunareiningu\" og keyrðu 'occ encryption:migrate'", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Þú verður að yfirfæra dulritunarlyklana þína úr gömlu dulrituninni (ownCloud <= 8.0) yfir í þá nýju.", - "Start migration" : "Hefja yfirfærslu", "This is used for sending out notifications." : "Þetta er notað til að senda út tilkynningar.", "Send mode" : "Sendihamur", "Encryption" : "Dulritun", @@ -170,20 +145,68 @@ "Store credentials" : "Geyma auðkenni", "Test email settings" : "Prófa tölvupóststillingar", "Send email" : "Senda tölvupóst", + "Server-side encryption" : "Dulritun á þjóni", + "Enable server-side encryption" : "Virkja dulritun á þjóni", + "Please read carefully before activating server-side encryption: " : "Lestu eftirfarandi gaumgæfilega áður en þú virkjar dulritun á þjóni: ", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Dulritun ein og sér tryggir ekki öryggi kerfisins. Endilega skoðaðu hjálparskjölin um hvernig dulritunarforritið virkar, og dæmi um hvaða uppsetningar eru studdar.", + "Be aware that encryption always increases the file size." : "Hafðu í huga að dulritun eykur alltaf skráastærð.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Það er góður siður að taka regluleg öryggisafrit af gögnunum þínum; ef um dulrituð gögn er að ræða, gakktu úr skugga um að einnig sé tekið öryggisafrit af dulritunarlyklum ásamt gögnunum.", + "This is the final warning: Do you really want to enable encryption?" : "Þetta er lokaaðvörun: Viltu örugglega virkja dulritun?", + "Enable encryption" : "Virkja dulritun", + "No encryption module loaded, please enable an encryption module in the app menu." : "Engin dulritunareining hlaðin inn, virkjaðu dulritunareiningu í valmynd forritsins.", + "Select default encryption module:" : "Veldu sjálfgefna dulritunareiningu:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Þú verður að yfirfæra dulritunarlyklana þína úr gömlu dulrituninni (ownCloud <= 8.0) yfir í þá nýju. Virkjaðu \"Sjálfgefna dulritunareiningu\" og keyrðu 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Þú verður að yfirfæra dulritunarlyklana þína úr gömlu dulrituninni (ownCloud <= 8.0) yfir í þá nýju.", + "Start migration" : "Hefja yfirfærslu", + "Everything (fatal issues, errors, warnings, info, debug)" : "Allt (aflúsun, upplýsingar, viðvaranir, villur og alvarlegar aðvaranir)", + "Info, warnings, errors and fatal issues" : "Upplýsingar, viðvaranir, villur og alvarlegar aðvaranir", + "Warnings, errors and fatal issues" : "Viðvaranir, villur og alvarlegar aðvaranir", + "Errors and fatal issues" : "Villur og alvarlegar aðvaranir", + "Fatal issues only" : "Einungis alvarlegar aðvaranir", + "Log" : "Annáll", "What to log" : "Hvað á að skrá í annál", "Download logfile" : "Sækja annál", "More" : "Meira", "Less" : "Minna", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Annállinn er stærri en 100 MB.Þetta gæti tekið nokkra stund!", + "Security & setup warnings" : "Öryggi og aðvaranir vegna uppsetningar", + "System locale can not be set to a one which supports UTF-8." : "Ekki var hægt að setja staðfærslu kerfisins á neina sem styður UTF-8.", + "All checks passed." : "Stóðst allar prófanir.", + "Cron" : "CRON", + "Last cron job execution: %s." : "Síðasta keyrsla cron-verks: %s.", + "Last cron job execution: %s. Something seems wrong." : "Síðasta keyrsla cron-verks: %s. Eitthvað er ekki eins og það á að sér að vera.", + "Cron was not executed yet!" : "Cron hefur ekki ennþá verið keyrt!", + "Execute one task with each page loaded" : "Framkvæma eitt verk með hverri innhlaðinni síðu", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php er skráð á webcron-þjónustu til að kalla á cron.php á 15 mínútna fresti yfir http.", + "Use system's cron service to call the cron.php file every 15 minutes." : "Nota cron-þjónustu kerfisins til að kalla á cron.php skrána á 15 mínútna fresti.", + "Version" : "Útgáfa", + "Sharing" : "Deiling", + "Allow apps to use the Share API" : "Leyfa forritum að nota Share API", + "Allow users to share via link" : "Leyfa notendum að deila með tengli", + "Allow public uploads" : "Leyfa opinberar innsendingar", + "Enforce password protection" : "Krefjast verndunar með aðgangsorði", + "Set default expiration date" : "Setja sjálfgefinn gildistíma", + "Allow users to send mail notification for shared files" : "Leyfa notendum að senda tilkynningar í tölvupósti vegna deildra skráa", + "Expire after " : "Rennur út eftir ", + "days" : "daga", + "Enforce expiration date" : "Krefjast dagsetningar á gildistíma", + "Allow resharing" : "Leyfa endurdeilingu", + "Allow sharing with groups" : "Leyfa deilingu með hópum", + "Restrict users to only share with users in their groups" : "Takmarka notendur við að deila með notendum í þeirra eigin hópum", + "Allow users to send mail notification for shared files to other users" : "Leyfa notendum að senda tilkynningar til annarra notenda í tölvupósti vegna deildra skráa", + "Exclude groups from sharing" : "Undanskilja hópa frá því að deila", + "These groups will still be able to receive shares, but not to initiate them." : "Þessir hópar munu samt geta tekið við deildum sameignum, en ekki geta útbúið þær.", + "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Leyfa sjálfklárun notandanafns í deilingarglugga. Ef þetta er óvirkt þarf að setja inn fullt nafn notanda.", + "Tips & tricks" : "Ábendingar og góð ráð", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite er notað sem gagnagrunnur. Fyrir stærri uppsetningar mælum við með að velja annan gagnagrunnsbakenda.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Sérstaklega þegar tölvu forrit er notað til samræmingar þá er ekki mælt með notkunn SQLite.", + "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>." : "Til að yfirfæra í annan gagnagrunn skaltu nota skipanalínutólið: 'occ db:convert-type', eða lesa <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">hjálparskjölin ↗</a>.", "How to do backups" : "Hvernig á að taka öryggisafrit", "Advanced monitoring" : "Ítarleg vöktun", "Performance tuning" : "Fínstilling afkasta", "Improving the config.php" : "Bæting á config.php skránni", "Theming" : "Þemu", "Hardening and security guidance" : "Brynjun og öryggisleiðbeiningar", - "Version" : "Útgáfa", "Developer documentation" : "Skjölun fyrir þróunaraðila", "Experimental applications ahead" : "Forrit á tilraunastigi fyrst", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Tilraunaforrit eru ekki yfirfarin með tilliti til öryggisvandamála, þau eru þekkt fyrir að vera óstöðug og þróast hratt. Uppsetning þeirra getur valdið gagnatapi og öryggisbrestum.", @@ -192,9 +215,13 @@ "Documentation:" : "Hjálparskjöl:", "User documentation" : "Hjálparskjöl notenda", "Admin documentation" : "Hjálparskjöl kerfisstjóra", + "Visit website" : "Heimsækja vefsvæðið", + "Report a bug" : "Tilkynna um villu", "Show description …" : "Birta lýsingu …", "Hide description …" : "Fela lýsingu …", "This app has an update available." : "Uppfærsla er tiltæk fyrir þetta forrit.", + "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Þetta vorrit er ekki með tiltekna neina lágmarksútgáfu Nextcloud. Þetta mun gefa villu í framtíðinni.", + "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Þetta vorrit er ekki með tiltekna neina hámarksútgáfu Nextcloud. Þetta mun gefa villu í framtíðinni.", "This app cannot be installed because the following dependencies are not fulfilled:" : "Ekki var hægt að setja upp forritið þar sem eftirfarandi kerfiskröfur eru ekki uppfylltar:", "Enable only for specific groups" : "Einungis fyrir sérstaka hópa", "Uninstall App" : "Fjarlægja/Henda út forriti", @@ -235,13 +262,21 @@ "Change password" : "Breyta lykilorði", "Language" : "Tungumál", "Help translate" : "Hjálpa við þýðingu", - "Name" : "Heiti", - "Username" : "Notandanafn", "Get the apps to sync your files" : "Náðu í forrit til að samstilla skrárnar þínar", "Desktop client" : "Skjáborðsforrit", "Android app" : "Android-forrit", "iOS app" : "iOS-forrit", "Show First Run Wizard again" : "Birta Fyrsta-skiptis-leiðarvísinn aftur", + "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", + "Name" : "Heiti", + "App name" : "Heiti forrits", + "Create new app password" : "Búa til nýtt lykilorð forrits", + "For security reasons this password will only be shown once." : "Af öryggisástæðum er þetta lykilorð einungis birt einu sinni.", + "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.", "Show storage location" : "Birta staðsetningu gagnageymslu", "Show last log in" : "Birta síðustu innskráningu", "Show user backend" : "Birta bakenda notanda", @@ -254,12 +289,39 @@ "Group" : "Hópur", "Everyone" : "Allir", "Admins" : "Kerfisstjórar", + "Default quota" : "Sjálfgefinn kvóti", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Settu inn geymslukvóta (t.d.: \"512 MB\" eða \"12 GB\")", "Other" : "Annað", + "Group admin for" : "Hópstjóri fyrir", "Quota" : "Kvóti", + "Storage location" : "Staðsetning gagnageymslu", + "User backend" : "Bakendi notanda", + "Last login" : "Síðasta innskráning", "change full name" : "breyta fullu nafni", "set new password" : "setja nýtt lykilorð", "change email address" : "breyta tölvupóstfangi", - "Default" : "Sjálfgefið" + "Default" : "Sjálfgefið", + "no group" : "enginn hópur", + "add group" : "bæta við hópi", + "Add Group" : "Bæta við hópi", + "Default Quota" : "Sjálfgefinn kvóti", + "Full Name" : "Fullt nafn", + "Group Admin for" : "Hópstjóri fyrir", + "Storage Location" : "Staðsetning gagnageymslu", + "User Backend" : "Bakendi notanda", + "Last Login" : "Síðasta innskráning", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Ytri gagnageymsla", + "Updates" : "Uppfærslur", + "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Opinber forrit eru þróuð af og innan Nextcloud samfélagsins. Þau virka með kjarnaeiginleikum Nextcloud og eru tilbúin til notkunar í raunvinnslu.", + "No apps found for \"{query}\"" : "Engin forrit fundust fyrir \"{query}\"", + "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Þjónninn þinn er keyrandi á Microsoft Windows. Við mælum sterklega með Linux til að njóta sem best allra eiginleika fyrir notendurna.", + "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Dulritun ein og sér tryggir ekki öryggi kerfisins. Endilega skoðaðu hjálparskjölin um hvernig dulritunarforritið virkar, og dæmi um hvaða uppsetningar eru studdar.", + "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Til að yfirfæra í annan gagnagrunn skaltu nota skipanalínutólið: 'occ db:convert-type', eða lesa <a target=\"_blank\" href=\"%s\">hjálparskjölin ↗</a>.", + "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Þetta vorrit er ekki með tiltekna neina lágmarksútgáfu Nextcloud. Þetta mun gefa villu í Nextcloud 11 og nýrri.", + "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Þetta vorrit er ekki með tiltekna neina hámarksútgáfu Nextcloud. Þetta mun gefa villu í Nextcloud 11 og nýrri.", + "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Ef þú vilt styðja við verkefnið\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">taktu þátt í þróuninni</a>\n\t\teða\n\t\t<a href=\"https://help.nextcloud.com\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">hjálpaðu öðrum notendum</a>!", + "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Þróað af {communityopen}Nextcloud samfélaginu{linkclose}, {githubopen}grunnkóðinn{linkclose} er gefinn út með {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} notkunarleyfinu." },"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 7448f92cbf1..1b448d74222 100644 --- a/settings/l10n/it.js +++ b/settings/l10n/it.js @@ -1,16 +1,16 @@ OC.L10N.register( "settings", { + "Enabled" : "Abilitata", + "Not enabled" : "Non abilitata", "Wrong password" : "Password errata", "Saved" : "Salvato", "No user supplied" : "Non è stato fornito alcun utente", + "Unable to change password" : "Impossibile cambiare la password", "Authentication error" : "Errore di autenticazione", "Please provide an admin recovery password, otherwise all user data will be lost" : "Fornisci una password amministrativa di ripristino altrimenti tutti i dati degli utenti saranno persi.", "Wrong admin recovery password. Please check the password and try again." : "Password amministrativa di ripristino errata. Controlla la password e prova ancora.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Il motore non supporta la modifica della password, ma la chiave di cifratura dell'utente è stata aggiornata correttamente.", - "Unable to change password" : "Impossibile cambiare la password", - "Enabled" : "Abilitata", - "Not enabled" : "Non abilitata", "installing and updating apps via the app store or Federated Cloud Sharing" : "installazione e aggiornamento delle applicazioni tramite il negozio delle applicazioni o condivisione cloud federata", "Federated Cloud Sharing" : "Condivisione cloud federata", "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL utilizza una versione %s datata (%s). Aggiorna il tuo sistema operativo o funzionalità come %s non funzioneranno correttamente.", @@ -35,17 +35,6 @@ OC.L10N.register( "Email saved" : "Email salvata", "Your full name has been changed." : "Il tuo nome completo è stato cambiato.", "Unable to change full name" : "Impossibile cambiare il nome completo", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Avvisi di sicurezza e di configurazione", - "Sharing" : "Condivisione", - "Server-side encryption" : "Cifratura lato server", - "External Storage" : "Archiviazione esterna", - "Cron" : "Cron", - "Email server" : "Server di posta", - "Log" : "Log", - "Tips & tricks" : "Suggerimenti e trucchi", - "Updates" : "Aggiornamenti", "Couldn't remove app." : "Impossibile rimuovere l'applicazione.", "Language changed" : "Lingua modificata", "Invalid request" : "Richiesta non valida", @@ -98,6 +87,10 @@ OC.L10N.register( "Android Client" : "sistema Android", "Sync client - {os}" : "Client di sincronizzazione - {os}", "This session" : "Questa sessione", + "Copied!" : "Copiato!", + "Not supported!" : "Non supportato!", + "Press ⌘-C to copy." : "Premi ⌘-C per copiare.", + "Press Ctrl-C to copy." : "Premi Ctrl-C per copiare.", "Error while loading browser sessions and device tokens" : "Errore durante il caricamento delle sessioni del browser e dei token di dispositivo", "Error while creating device token" : "Errore durante la creazione del token di dispositivo", "Error while deleting the token" : "Errore durante l'eliminazione del token", @@ -133,17 +126,55 @@ OC.L10N.register( "Sessions" : "Sessioni", "App passwords" : "Password di applicazione", "Sync clients" : "Client di sincronizzazione", - "Everything (fatal issues, errors, warnings, info, debug)" : "Tutto (problemi gravi, errori, avvisi, informazioni, debug)", - "Info, warnings, errors and fatal issues" : "Informazioni, avvisi, errori e problemi gravi", - "Warnings, errors and fatal issues" : "Avvisi, errori e problemi gravi", - "Errors and fatal issues" : "Errori e problemi gravi", - "Fatal issues only" : "Solo problemi gravi", "None" : "Nessuno", "Login" : "Accesso", "Plain" : "Semplice", "NT LAN Manager" : "Gestore NT LAN", "SSL" : "SSL", "TLS" : "TLS", + "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", + "mail" : "posta", + "Authentication method" : "Metodo di autenticazione", + "Authentication required" : "Autenticazione richiesta", + "Server address" : "Indirizzo del server", + "Port" : "Porta", + "Credentials" : "Credenziali", + "SMTP Username" : "Nome utente SMTP", + "SMTP Password" : "Password SMTP", + "Store credentials" : "Memorizza le credenziali", + "Test email settings" : "Prova impostazioni email", + "Send email" : "Invia email", + "Server-side encryption" : "Cifratura lato server", + "Enable server-side encryption" : "Abilita cifratura lato server", + "Please read carefully before activating server-side encryption: " : "Leggi attentamente prima di attivare la cifratura lato server:", + "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." : "Quando la cifratura è abilitata, tutti i file caricati sul server da quel momento in poi saranno cifrati sul server. Sarà possibile solo disabilitare successivamente la cifratura se il modulo di cifratura attivo lo consente, e se tutti i prerequisiti (ad es. l'impostazione di una chiave di recupero) sono verificati.", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "La sola cifratura non garantisce la sicurezza del sistema. Leggi la documentazione per ottenere ulteriori informazioni sul funzionamento dell'applicazione di cifratura.", + "Be aware that encryption always increases the file size." : "Considera che la cifratura incrementa sempre la dimensione dei file.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Ti consigliamo di creare copie di sicurezza dei tuoi dati con regolarità, in caso di utilizzo della cifratura, assicurati di creare una copia delle chiavi di cifratura insieme ai tuoi dati.", + "This is the final warning: Do you really want to enable encryption?" : "Questo è l'ultimo avviso: vuoi davvero abilitare la cifratura?", + "Enable encryption" : "Abilita cifratura", + "No encryption module loaded, please enable an encryption module in the app menu." : "Nessun modulo di cifratura caricato, carica un modulo di cifratura nel menu delle applicazioni.", + "Select default encryption module:" : "Seleziona il modulo di cifratura predefinito:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Devi migrare le tue chiavi di cifratura dalla vecchia cifratura (ownCloud <= 8.0) alla nuova. Abilita il \"Modulo di cifratura predefinito\" ed esegui 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Devi migrare le tue chiavi di cifratura dalla vecchia cifratura (ownCloud <= 8.0) alla nuova.", + "Start migration" : "Avvia migrazione", + "Everything (fatal issues, errors, warnings, info, debug)" : "Tutto (problemi gravi, errori, avvisi, informazioni, debug)", + "Info, warnings, errors and fatal issues" : "Informazioni, avvisi, errori e problemi gravi", + "Warnings, errors and fatal issues" : "Avvisi, errori e problemi gravi", + "Errors and fatal issues" : "Errori e problemi gravi", + "Fatal issues only" : "Solo problemi gravi", + "Log" : "Log", + "What to log" : "Cosa registrare", + "Download logfile" : "Scarica file di log", + "More" : "Altro", + "Less" : "Meno", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Il file di log è più grande di 100MB. Scaricarlo potrebbe richiedere del tempo!", + "Security & setup warnings" : "Avvisi di sicurezza e di configurazione", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php non sembra essere configurato correttamente per interrogare le variabili d'ambiente di sistema. Il test con getenv(\"PATH\") restituisce solo una risposta vuota.", "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." : "Controlla la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentazione di installazione↗</a> per le note di configurazione di php e la configurazione del tuo server, in particolare quando utilizzi 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 configurazione di sola lettura è stata abilitata. Ciò impedisce l'impostazione di alcune configurazioni tramite l'interfaccia web. Inoltre, i file devono essere resi scrivibili manualmente per ogni aggiornamento.", @@ -160,7 +191,15 @@ OC.L10N.register( "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Non è stato possibile eseguire il job di cron tramite CLI. Sono apparsi i seguenti errori tecnici:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Leggi attentamente le <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">guide d'installazione ↗</a>, e controlla gli errori o gli avvisi nel <a href=\"#log-section\">log</a>.", "All checks passed." : "Tutti i controlli passati.", - "Open documentation" : "Apri la documentazione", + "Cron" : "Cron", + "Last cron job execution: %s." : "Ultima esecuzione di cron: %s.", + "Last cron job execution: %s. Something seems wrong." : "Ultima esecuzione di cron: %s. Potrebbe esserci un problema.", + "Cron was not executed yet!" : "Cron non è stato ancora eseguito!", + "Execute one task with each page loaded" : "Esegui un'operazione con ogni pagina caricata", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php è registrato su un servizio webcron per invocare cron.php ogni 15 minuti su http.", + "Use system's cron service to call the cron.php file every 15 minutes." : "Usa il servizio cron di sistema per invocare il file cron.php ogni 15 minuti.", + "Version" : "Versione", + "Sharing" : "Condivisione", "Allow apps to use the Share API" : "Consenti alle applicazioni di utilizzare le API di condivisione", "Allow users to share via link" : "Consenti agli utenti di condividere tramite collegamento", "Allow public uploads" : "Consenti caricamenti pubblici", @@ -177,45 +216,7 @@ OC.L10N.register( "Exclude groups from sharing" : "Escludi gruppi dalla condivisione", "These groups will still be able to receive shares, but not to initiate them." : "Questi gruppi saranno in grado di ricevere condivisioni, ma non iniziarle.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Consenti il completamento del nome utente nella finestra di condivisione. Se è disabilitata, è necessario digitare il nome utente completo.", - "Last cron job execution: %s." : "Ultima esecuzione di cron: %s.", - "Last cron job execution: %s. Something seems wrong." : "Ultima esecuzione di cron: %s. Potrebbe esserci un problema.", - "Cron was not executed yet!" : "Cron non è stato ancora eseguito!", - "Execute one task with each page loaded" : "Esegui un'operazione con ogni pagina caricata", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php è registrato su un servizio webcron per invocare cron.php ogni 15 minuti su http.", - "Use system's cron service to call the cron.php file every 15 minutes." : "Usa il servizio cron di sistema per invocare il file cron.php ogni 15 minuti.", - "Enable server-side encryption" : "Abilita cifratura lato server", - "Please read carefully before activating server-side encryption: " : "Leggi attentamente prima di attivare la cifratura lato server:", - "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." : "Quando la cifratura è abilitata, tutti i file caricati sul server da quel momento in poi saranno cifrati sul server. Sarà possibile solo disabilitare successivamente la cifratura se il modulo di cifratura attivo lo consente, e se tutti i prerequisiti (ad es. l'impostazione di una chiave di recupero) sono verificati.", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "La sola cifratura non garantisce la sicurezza del sistema. Leggi la documentazione per ottenere ulteriori informazioni sul funzionamento dell'applicazione di cifratura.", - "Be aware that encryption always increases the file size." : "Considera che la cifratura incrementa sempre la dimensione dei file.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Ti consigliamo di creare copie di sicurezza dei tuoi dati con regolarità, in caso di utilizzo della cifratura, assicurati di creare una copia delle chiavi di cifratura insieme ai tuoi dati.", - "This is the final warning: Do you really want to enable encryption?" : "Questo è l'ultimo avviso: vuoi davvero abilitare la cifratura?", - "Enable encryption" : "Abilita cifratura", - "No encryption module loaded, please enable an encryption module in the app menu." : "Nessun modulo di cifratura caricato, carica un modulo di cifratura nel menu delle applicazioni.", - "Select default encryption module:" : "Seleziona il modulo di cifratura predefinito:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Devi migrare le tue chiavi di cifratura dalla vecchia cifratura (ownCloud <= 8.0) alla nuova. Abilita il \"Modulo di cifratura predefinito\" ed esegui 'occ encryption:migrate'", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Devi migrare le tue chiavi di cifratura dalla vecchia cifratura (ownCloud <= 8.0) alla nuova.", - "Start migration" : "Avvia migrazione", - "This is used for sending out notifications." : "Viene utilizzato per inviare le notifiche.", - "Send mode" : "Modalità di invio", - "Encryption" : "Cifratura", - "From address" : "Indirizzo mittente", - "mail" : "posta", - "Authentication method" : "Metodo di autenticazione", - "Authentication required" : "Autenticazione richiesta", - "Server address" : "Indirizzo del server", - "Port" : "Porta", - "Credentials" : "Credenziali", - "SMTP Username" : "Nome utente SMTP", - "SMTP Password" : "Password SMTP", - "Store credentials" : "Memorizza le credenziali", - "Test email settings" : "Prova impostazioni email", - "Send email" : "Invia email", - "What to log" : "Cosa registrare", - "Download logfile" : "Scarica file di log", - "More" : "Altro", - "Less" : "Meno", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Il file di log è più grande di 100MB. Scaricarlo potrebbe richiedere del tempo!", + "Tips & tricks" : "Suggerimenti e trucchi", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite è utilizzato come database. Per installazioni più grandi consigliamo di passare a un motore di database diverso.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "In particolar modo, quando si utilizza il client desktop per la sincronizzazione dei file, l'uso di SQLite è sconsigliato.", "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>." : "Per migrare a un altro database, usa lo strumento da riga di comando: 'occ db:convert-type', o leggi la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentazione ↗</a>.", @@ -225,7 +226,6 @@ OC.L10N.register( "Improving the config.php" : "Ottimizzare il config.php", "Theming" : "Temi", "Hardening and security guidance" : "Guida alla messa in sicurezza", - "Version" : "Versione", "Developer documentation" : "Documentazione dello sviluppatore", "Experimental applications ahead" : "Prima le applicazioni sperimentali", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Le applicazioni sperimentali non sono sottoposte a controlli di sicurezza, sono nuove o notoriamente instabili e sotto sviluppo intensivo. La loro installazione può causare perdite di dati o problemi di sicurezza.", @@ -281,6 +281,11 @@ OC.L10N.register( "Change password" : "Modifica password", "Language" : "Lingua", "Help translate" : "Migliora la traduzione", + "Get the apps to sync your files" : "Scarica le applicazioni per sincronizzare i tuoi file", + "Desktop client" : "Client desktop", + "Android app" : "Applicazione Android", + "iOS app" : "Applicazione iOS", + "Show First Run Wizard again" : "Mostra nuovamente la procedura di primo avvio", "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à", @@ -291,13 +296,10 @@ OC.L10N.register( "Use the credentials below to configure your app or device." : "Utilizza le credenziali in basso per configurare la tua applicazione o dispositivo.", "Username" : "Nome utente", "Done" : "Completato", - "Get the apps to sync your files" : "Scarica le applicazioni per sincronizzare i tuoi file", - "Desktop client" : "Client desktop", - "Android app" : "Applicazione Android", - "iOS app" : "Applicazione iOS", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Se desideri supportare il progetto\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">contribuisci allo sviluppo</a>\n\t\to\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">diffondi il verbo</a>!", - "Show First Run Wizard again" : "Mostra nuovamente la procedura di primo avvio", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Sviluppato dalla {communityopen}comunità di Nextcloud{linkclose}, il {githubopen}codice sorgente{linkclose} è rilasciato nei termini della licenza {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", + "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!", + "Subscribe to our twitter channel!" : "Iscriviti al nostro canale twitter!", + "Subscribe to our newsletter!" : "Iscriviti alla nostra newsletter!", "Show storage location" : "Mostra posizione di archiviazione", "Show last log in" : "Mostra ultimo accesso", "Show user backend" : "Mostra il motore utente", @@ -321,6 +323,18 @@ OC.L10N.register( "change full name" : "modica nome completo", "set new password" : "imposta una nuova password", "change email address" : "cambia l'indirizzo email", - "Default" : "Predefinito" + "Default" : "Predefinito", + "no group" : "nessun gruppo", + "add group" : "aggiungi gruppo", + "Add Group" : "Aggiungi gruppo", + "Default Quota" : "Quota predefinita", + "Full Name" : "Nome completo", + "Group Admin for" : "Gruppo di amministrazione per", + "Storage Location" : "Posizione di archiviazione", + "Last Login" : "Ultimo accesso", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Archiviazione esterna", + "Updates" : "Aggiornamenti" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/it.json b/settings/l10n/it.json index f23e662f72f..5a89dac90ad 100644 --- a/settings/l10n/it.json +++ b/settings/l10n/it.json @@ -1,14 +1,14 @@ { "translations": { + "Enabled" : "Abilitata", + "Not enabled" : "Non abilitata", "Wrong password" : "Password errata", "Saved" : "Salvato", "No user supplied" : "Non è stato fornito alcun utente", + "Unable to change password" : "Impossibile cambiare la password", "Authentication error" : "Errore di autenticazione", "Please provide an admin recovery password, otherwise all user data will be lost" : "Fornisci una password amministrativa di ripristino altrimenti tutti i dati degli utenti saranno persi.", "Wrong admin recovery password. Please check the password and try again." : "Password amministrativa di ripristino errata. Controlla la password e prova ancora.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Il motore non supporta la modifica della password, ma la chiave di cifratura dell'utente è stata aggiornata correttamente.", - "Unable to change password" : "Impossibile cambiare la password", - "Enabled" : "Abilitata", - "Not enabled" : "Non abilitata", "installing and updating apps via the app store or Federated Cloud Sharing" : "installazione e aggiornamento delle applicazioni tramite il negozio delle applicazioni o condivisione cloud federata", "Federated Cloud Sharing" : "Condivisione cloud federata", "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL utilizza una versione %s datata (%s). Aggiorna il tuo sistema operativo o funzionalità come %s non funzioneranno correttamente.", @@ -33,17 +33,6 @@ "Email saved" : "Email salvata", "Your full name has been changed." : "Il tuo nome completo è stato cambiato.", "Unable to change full name" : "Impossibile cambiare il nome completo", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Avvisi di sicurezza e di configurazione", - "Sharing" : "Condivisione", - "Server-side encryption" : "Cifratura lato server", - "External Storage" : "Archiviazione esterna", - "Cron" : "Cron", - "Email server" : "Server di posta", - "Log" : "Log", - "Tips & tricks" : "Suggerimenti e trucchi", - "Updates" : "Aggiornamenti", "Couldn't remove app." : "Impossibile rimuovere l'applicazione.", "Language changed" : "Lingua modificata", "Invalid request" : "Richiesta non valida", @@ -96,6 +85,10 @@ "Android Client" : "sistema Android", "Sync client - {os}" : "Client di sincronizzazione - {os}", "This session" : "Questa sessione", + "Copied!" : "Copiato!", + "Not supported!" : "Non supportato!", + "Press ⌘-C to copy." : "Premi ⌘-C per copiare.", + "Press Ctrl-C to copy." : "Premi Ctrl-C per copiare.", "Error while loading browser sessions and device tokens" : "Errore durante il caricamento delle sessioni del browser e dei token di dispositivo", "Error while creating device token" : "Errore durante la creazione del token di dispositivo", "Error while deleting the token" : "Errore durante l'eliminazione del token", @@ -131,17 +124,55 @@ "Sessions" : "Sessioni", "App passwords" : "Password di applicazione", "Sync clients" : "Client di sincronizzazione", - "Everything (fatal issues, errors, warnings, info, debug)" : "Tutto (problemi gravi, errori, avvisi, informazioni, debug)", - "Info, warnings, errors and fatal issues" : "Informazioni, avvisi, errori e problemi gravi", - "Warnings, errors and fatal issues" : "Avvisi, errori e problemi gravi", - "Errors and fatal issues" : "Errori e problemi gravi", - "Fatal issues only" : "Solo problemi gravi", "None" : "Nessuno", "Login" : "Accesso", "Plain" : "Semplice", "NT LAN Manager" : "Gestore NT LAN", "SSL" : "SSL", "TLS" : "TLS", + "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", + "mail" : "posta", + "Authentication method" : "Metodo di autenticazione", + "Authentication required" : "Autenticazione richiesta", + "Server address" : "Indirizzo del server", + "Port" : "Porta", + "Credentials" : "Credenziali", + "SMTP Username" : "Nome utente SMTP", + "SMTP Password" : "Password SMTP", + "Store credentials" : "Memorizza le credenziali", + "Test email settings" : "Prova impostazioni email", + "Send email" : "Invia email", + "Server-side encryption" : "Cifratura lato server", + "Enable server-side encryption" : "Abilita cifratura lato server", + "Please read carefully before activating server-side encryption: " : "Leggi attentamente prima di attivare la cifratura lato server:", + "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." : "Quando la cifratura è abilitata, tutti i file caricati sul server da quel momento in poi saranno cifrati sul server. Sarà possibile solo disabilitare successivamente la cifratura se il modulo di cifratura attivo lo consente, e se tutti i prerequisiti (ad es. l'impostazione di una chiave di recupero) sono verificati.", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "La sola cifratura non garantisce la sicurezza del sistema. Leggi la documentazione per ottenere ulteriori informazioni sul funzionamento dell'applicazione di cifratura.", + "Be aware that encryption always increases the file size." : "Considera che la cifratura incrementa sempre la dimensione dei file.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Ti consigliamo di creare copie di sicurezza dei tuoi dati con regolarità, in caso di utilizzo della cifratura, assicurati di creare una copia delle chiavi di cifratura insieme ai tuoi dati.", + "This is the final warning: Do you really want to enable encryption?" : "Questo è l'ultimo avviso: vuoi davvero abilitare la cifratura?", + "Enable encryption" : "Abilita cifratura", + "No encryption module loaded, please enable an encryption module in the app menu." : "Nessun modulo di cifratura caricato, carica un modulo di cifratura nel menu delle applicazioni.", + "Select default encryption module:" : "Seleziona il modulo di cifratura predefinito:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Devi migrare le tue chiavi di cifratura dalla vecchia cifratura (ownCloud <= 8.0) alla nuova. Abilita il \"Modulo di cifratura predefinito\" ed esegui 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Devi migrare le tue chiavi di cifratura dalla vecchia cifratura (ownCloud <= 8.0) alla nuova.", + "Start migration" : "Avvia migrazione", + "Everything (fatal issues, errors, warnings, info, debug)" : "Tutto (problemi gravi, errori, avvisi, informazioni, debug)", + "Info, warnings, errors and fatal issues" : "Informazioni, avvisi, errori e problemi gravi", + "Warnings, errors and fatal issues" : "Avvisi, errori e problemi gravi", + "Errors and fatal issues" : "Errori e problemi gravi", + "Fatal issues only" : "Solo problemi gravi", + "Log" : "Log", + "What to log" : "Cosa registrare", + "Download logfile" : "Scarica file di log", + "More" : "Altro", + "Less" : "Meno", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Il file di log è più grande di 100MB. Scaricarlo potrebbe richiedere del tempo!", + "Security & setup warnings" : "Avvisi di sicurezza e di configurazione", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php non sembra essere configurato correttamente per interrogare le variabili d'ambiente di sistema. Il test con getenv(\"PATH\") restituisce solo una risposta vuota.", "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." : "Controlla la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentazione di installazione↗</a> per le note di configurazione di php e la configurazione del tuo server, in particolare quando utilizzi 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 configurazione di sola lettura è stata abilitata. Ciò impedisce l'impostazione di alcune configurazioni tramite l'interfaccia web. Inoltre, i file devono essere resi scrivibili manualmente per ogni aggiornamento.", @@ -158,7 +189,15 @@ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Non è stato possibile eseguire il job di cron tramite CLI. Sono apparsi i seguenti errori tecnici:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Leggi attentamente le <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">guide d'installazione ↗</a>, e controlla gli errori o gli avvisi nel <a href=\"#log-section\">log</a>.", "All checks passed." : "Tutti i controlli passati.", - "Open documentation" : "Apri la documentazione", + "Cron" : "Cron", + "Last cron job execution: %s." : "Ultima esecuzione di cron: %s.", + "Last cron job execution: %s. Something seems wrong." : "Ultima esecuzione di cron: %s. Potrebbe esserci un problema.", + "Cron was not executed yet!" : "Cron non è stato ancora eseguito!", + "Execute one task with each page loaded" : "Esegui un'operazione con ogni pagina caricata", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php è registrato su un servizio webcron per invocare cron.php ogni 15 minuti su http.", + "Use system's cron service to call the cron.php file every 15 minutes." : "Usa il servizio cron di sistema per invocare il file cron.php ogni 15 minuti.", + "Version" : "Versione", + "Sharing" : "Condivisione", "Allow apps to use the Share API" : "Consenti alle applicazioni di utilizzare le API di condivisione", "Allow users to share via link" : "Consenti agli utenti di condividere tramite collegamento", "Allow public uploads" : "Consenti caricamenti pubblici", @@ -175,45 +214,7 @@ "Exclude groups from sharing" : "Escludi gruppi dalla condivisione", "These groups will still be able to receive shares, but not to initiate them." : "Questi gruppi saranno in grado di ricevere condivisioni, ma non iniziarle.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Consenti il completamento del nome utente nella finestra di condivisione. Se è disabilitata, è necessario digitare il nome utente completo.", - "Last cron job execution: %s." : "Ultima esecuzione di cron: %s.", - "Last cron job execution: %s. Something seems wrong." : "Ultima esecuzione di cron: %s. Potrebbe esserci un problema.", - "Cron was not executed yet!" : "Cron non è stato ancora eseguito!", - "Execute one task with each page loaded" : "Esegui un'operazione con ogni pagina caricata", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php è registrato su un servizio webcron per invocare cron.php ogni 15 minuti su http.", - "Use system's cron service to call the cron.php file every 15 minutes." : "Usa il servizio cron di sistema per invocare il file cron.php ogni 15 minuti.", - "Enable server-side encryption" : "Abilita cifratura lato server", - "Please read carefully before activating server-side encryption: " : "Leggi attentamente prima di attivare la cifratura lato server:", - "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." : "Quando la cifratura è abilitata, tutti i file caricati sul server da quel momento in poi saranno cifrati sul server. Sarà possibile solo disabilitare successivamente la cifratura se il modulo di cifratura attivo lo consente, e se tutti i prerequisiti (ad es. l'impostazione di una chiave di recupero) sono verificati.", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "La sola cifratura non garantisce la sicurezza del sistema. Leggi la documentazione per ottenere ulteriori informazioni sul funzionamento dell'applicazione di cifratura.", - "Be aware that encryption always increases the file size." : "Considera che la cifratura incrementa sempre la dimensione dei file.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Ti consigliamo di creare copie di sicurezza dei tuoi dati con regolarità, in caso di utilizzo della cifratura, assicurati di creare una copia delle chiavi di cifratura insieme ai tuoi dati.", - "This is the final warning: Do you really want to enable encryption?" : "Questo è l'ultimo avviso: vuoi davvero abilitare la cifratura?", - "Enable encryption" : "Abilita cifratura", - "No encryption module loaded, please enable an encryption module in the app menu." : "Nessun modulo di cifratura caricato, carica un modulo di cifratura nel menu delle applicazioni.", - "Select default encryption module:" : "Seleziona il modulo di cifratura predefinito:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Devi migrare le tue chiavi di cifratura dalla vecchia cifratura (ownCloud <= 8.0) alla nuova. Abilita il \"Modulo di cifratura predefinito\" ed esegui 'occ encryption:migrate'", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Devi migrare le tue chiavi di cifratura dalla vecchia cifratura (ownCloud <= 8.0) alla nuova.", - "Start migration" : "Avvia migrazione", - "This is used for sending out notifications." : "Viene utilizzato per inviare le notifiche.", - "Send mode" : "Modalità di invio", - "Encryption" : "Cifratura", - "From address" : "Indirizzo mittente", - "mail" : "posta", - "Authentication method" : "Metodo di autenticazione", - "Authentication required" : "Autenticazione richiesta", - "Server address" : "Indirizzo del server", - "Port" : "Porta", - "Credentials" : "Credenziali", - "SMTP Username" : "Nome utente SMTP", - "SMTP Password" : "Password SMTP", - "Store credentials" : "Memorizza le credenziali", - "Test email settings" : "Prova impostazioni email", - "Send email" : "Invia email", - "What to log" : "Cosa registrare", - "Download logfile" : "Scarica file di log", - "More" : "Altro", - "Less" : "Meno", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Il file di log è più grande di 100MB. Scaricarlo potrebbe richiedere del tempo!", + "Tips & tricks" : "Suggerimenti e trucchi", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite è utilizzato come database. Per installazioni più grandi consigliamo di passare a un motore di database diverso.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "In particolar modo, quando si utilizza il client desktop per la sincronizzazione dei file, l'uso di SQLite è sconsigliato.", "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>." : "Per migrare a un altro database, usa lo strumento da riga di comando: 'occ db:convert-type', o leggi la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentazione ↗</a>.", @@ -223,7 +224,6 @@ "Improving the config.php" : "Ottimizzare il config.php", "Theming" : "Temi", "Hardening and security guidance" : "Guida alla messa in sicurezza", - "Version" : "Versione", "Developer documentation" : "Documentazione dello sviluppatore", "Experimental applications ahead" : "Prima le applicazioni sperimentali", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Le applicazioni sperimentali non sono sottoposte a controlli di sicurezza, sono nuove o notoriamente instabili e sotto sviluppo intensivo. La loro installazione può causare perdite di dati o problemi di sicurezza.", @@ -279,6 +279,11 @@ "Change password" : "Modifica password", "Language" : "Lingua", "Help translate" : "Migliora la traduzione", + "Get the apps to sync your files" : "Scarica le applicazioni per sincronizzare i tuoi file", + "Desktop client" : "Client desktop", + "Android app" : "Applicazione Android", + "iOS app" : "Applicazione iOS", + "Show First Run Wizard again" : "Mostra nuovamente la procedura di primo avvio", "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à", @@ -289,13 +294,10 @@ "Use the credentials below to configure your app or device." : "Utilizza le credenziali in basso per configurare la tua applicazione o dispositivo.", "Username" : "Nome utente", "Done" : "Completato", - "Get the apps to sync your files" : "Scarica le applicazioni per sincronizzare i tuoi file", - "Desktop client" : "Client desktop", - "Android app" : "Applicazione Android", - "iOS app" : "Applicazione iOS", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Se desideri supportare il progetto\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">contribuisci allo sviluppo</a>\n\t\to\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">diffondi il verbo</a>!", - "Show First Run Wizard again" : "Mostra nuovamente la procedura di primo avvio", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Sviluppato dalla {communityopen}comunità di Nextcloud{linkclose}, il {githubopen}codice sorgente{linkclose} è rilasciato nei termini della licenza {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", + "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!", + "Subscribe to our twitter channel!" : "Iscriviti al nostro canale twitter!", + "Subscribe to our newsletter!" : "Iscriviti alla nostra newsletter!", "Show storage location" : "Mostra posizione di archiviazione", "Show last log in" : "Mostra ultimo accesso", "Show user backend" : "Mostra il motore utente", @@ -319,6 +321,18 @@ "change full name" : "modica nome completo", "set new password" : "imposta una nuova password", "change email address" : "cambia l'indirizzo email", - "Default" : "Predefinito" + "Default" : "Predefinito", + "no group" : "nessun gruppo", + "add group" : "aggiungi gruppo", + "Add Group" : "Aggiungi gruppo", + "Default Quota" : "Quota predefinita", + "Full Name" : "Nome completo", + "Group Admin for" : "Gruppo di amministrazione per", + "Storage Location" : "Posizione di archiviazione", + "Last Login" : "Ultimo accesso", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Archiviazione esterna", + "Updates" : "Aggiornamenti" },"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 8d3dd803044..863138092d2 100644 --- a/settings/l10n/ja.js +++ b/settings/l10n/ja.js @@ -1,16 +1,16 @@ OC.L10N.register( "settings", { + "Enabled" : "有効なアプリ", + "Not enabled" : "無効なアプリ", "Wrong password" : "パスワードが間違っています", "Saved" : "保存されました", "No user supplied" : "ユーザーが指定されていません", + "Unable to change password" : "パスワードを変更できません", "Authentication error" : "認証エラー", "Please provide an admin recovery password, otherwise all user data will be lost" : "リカバリ用の管理者パスワードを入力してください。そうでない場合は、全ユーザーのデータが失われます。", "Wrong admin recovery password. Please check the password and try again." : "リカバリ用の管理者パスワードが間違っています。パスワードを確認して再度実行してください。", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "バックエンドはパスワードの変更をサポートしていませんが、ユーザーの暗号化キーは正常に更新されました。", - "Unable to change password" : "パスワードを変更できません", - "Enabled" : "有効なアプリ", - "Not enabled" : "無効なアプリ", "installing and updating apps via the app store or 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." : "%s バージョン (%s) の古い cURL を使っています。OSを更新するか、この機能 %s が正しく動くアプリに更新してください。", @@ -35,17 +35,6 @@ OC.L10N.register( "Email saved" : "メールアドレスを保存しました", "Your full name has been changed." : "名前を変更しました。", "Unable to change full name" : "名前を変更できません", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "セキュリティ&セットアップ警告", - "Sharing" : "共有", - "Server-side encryption" : "サーバーサイド暗号化", - "External Storage" : "外部ストレージ", - "Cron" : "Cron", - "Email server" : "メールサーバー", - "Log" : "ログ", - "Tips & tricks" : "ヒントとコツ", - "Updates" : "アップデート", "Couldn't remove app." : "アプリが削除できませんでした。", "Language changed" : "言語が変更されました", "Invalid request" : "不正なリクエスト", @@ -120,17 +109,55 @@ OC.L10N.register( "Sessions" : "セッション", "App passwords" : "アプリパスワード", "Sync clients" : "同期用クライアント", - "Everything (fatal issues, errors, warnings, info, debug)" : "すべて (致命的な問題、エラー、警告、情報、デバッグ)", - "Info, warnings, errors and fatal issues" : "情報、警告、エラー、致命的な問題", - "Warnings, errors and fatal issues" : "警告、エラー、致命的な問題", - "Errors and fatal issues" : "エラー、致命的な問題", - "Fatal issues only" : "致命的な問題のみ", "None" : "なし", "Login" : "ログイン", "Plain" : "平文", "NT LAN Manager" : "NT LAN マネージャー", "SSL" : "SSL", "TLS" : "TLS", + "Email server" : "メールサーバー", + "Open documentation" : "ドキュメントを開く", + "This is used for sending out notifications." : "通知を送信する際に使用します。", + "Send mode" : "送信モード", + "Encryption" : "暗号化", + "From address" : "送信元アドレス", + "mail" : "mail", + "Authentication method" : "認証方法", + "Authentication required" : "認証を必要とする", + "Server address" : "サーバーアドレス", + "Port" : "ポート", + "Credentials" : "資格情報", + "SMTP Username" : "SMTPユーザー名", + "SMTP Password" : "SMTP パスワード", + "Store credentials" : "資格情報を保存", + "Test email settings" : "メール設定のテスト", + "Send email" : "メールを送信", + "Server-side encryption" : "サーバーサイド暗号化", + "Enable server-side encryption" : "サーバーサイド暗号化を有効にする", + "Please read carefully before activating server-side encryption: " : "サーバーサイド暗号化を有効にする前によくお読みください:", + "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "暗号化を一度有効化すると、この時点からサーバーにアップロードされるファイルの全てが暗号化されサーバー上に入ります。有効化された暗号モジュールは復号化機能をサポートしますが、すべての前提条件が満たされている(例えば、回復キーが設定されている)場合にのみ、後日暗号化を無効にすることが可能です。", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "暗号化だけで、システムのセキュリティが保証されるものではありません。暗号化アプリがどのように動作するかの詳細について、およびサポートされているユースケースについてはownCloudのドキュメントを参照してください。", + "Be aware that encryption always increases the file size." : "暗号化は、常にファイルサイズが増加することに注意してください。", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "暗号化した場合には必ず、あなたのデータと共に暗号化キーをバックアップすることを確認し、定期的にデータをバックアップを作成することをお勧めします。", + "This is the final warning: Do you really want to enable encryption?" : "これが最後の警告です:本当に暗号化を有効にしますか?", + "Enable encryption" : "暗号化を有効に", + "No encryption module loaded, please enable an encryption module in the app menu." : "暗号化モジュールがロードされていません。アプリのメニューから暗号化モジュールを有効化してください。", + "Select default encryption module:" : "デフォルトの暗号化モジュールを選択:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "古い暗号化(ownCloud <= 8.0) から新しいものに暗号化キーを移行する必要があります。\"デフォルトの暗号化モジュール\" を有効にして 'occ encryption:migrate' を実行してください。", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "古い暗号化(ownCloud <= 8.0) から新しいものに暗号化キーを移行する必要があります。", + "Start migration" : "移行を開始", + "Everything (fatal issues, errors, warnings, info, debug)" : "すべて (致命的な問題、エラー、警告、情報、デバッグ)", + "Info, warnings, errors and fatal issues" : "情報、警告、エラー、致命的な問題", + "Warnings, errors and fatal issues" : "警告、エラー、致命的な問題", + "Errors and fatal issues" : "エラー、致命的な問題", + "Fatal issues only" : "致命的な問題のみ", + "Log" : "ログ", + "What to log" : "ログ出力対象", + "Download logfile" : "ログファイルのダウンロード", + "More" : "もっと見る", + "Less" : "閉じる", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "ログファイルが100MB以上あります。ダウンロードに時間がかかります!", + "Security & setup warnings" : "セキュリティ&セットアップ警告", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHPのシステム環境変数が正しく設定されていないようです。getenv(\"PATH\") コマンドでテストして何も値を返さないことを確認してください。", "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "PHP設定の注意事項と php-fpmを利用する場合のサーバー向け設定を <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\"> インストールドキュメント ↗</a> で確認してください。", "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." : "\"config\"は読み取り専用になってます。そのためにWEBインターフェースで設定できません可能性があります。さらに、更新時に\"config\"ファイルを書き込み権限を与えることが必要", @@ -146,7 +173,15 @@ OC.L10N.register( "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "CLI から cronジョブを実行することができませんでした。次の技術的なエラーが発生しています:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "<a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">インストールガイド ↗</a>をもう一度チェックして、<a href=\"#log-section\">ログ</a> にあるエラーまたは警告について確認してください。", "All checks passed." : "すべてのチェックに合格しました。", - "Open documentation" : "ドキュメントを開く", + "Cron" : "Cron", + "Last cron job execution: %s." : "最終cronジョブ実行: %s", + "Last cron job execution: %s. Something seems wrong." : "最終cronジョブ実行: %s 何らかの問題があります。", + "Cron was not executed yet!" : "cronはまだ実行されていません!", + "Execute one task with each page loaded" : "各ページの読み込み時にタスクを実行します。", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.phpは、HTTP経由で15分ごとにcron.phpを実行するようwebcronサービスに登録されます。", + "Use system's cron service to call the cron.php file every 15 minutes." : "システムのcronサービスを利用して、15分間隔でcron.phpファイルを実行します。", + "Version" : "バージョン", + "Sharing" : "共有", "Allow apps to use the Share API" : "アプリからの共有APIの利用を許可する", "Allow users to share via link" : "URLリンクでの共有を許可する", "Allow public uploads" : "パブリックなアップロードを許可する", @@ -163,45 +198,7 @@ OC.L10N.register( "Exclude groups from sharing" : "共有可能なグループから除外する", "These groups will still be able to receive shares, but not to initiate them." : "このグループでは、フォルダー共有を開始することはできませんが、共有されたフォルダーを参照することはできます。", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "共有ダイアログでのユーザー名の自動補完を有効にする。このチェックを無効にした場合は、完全なユーザー名を入力する必要があります。", - "Last cron job execution: %s." : "最終cronジョブ実行: %s", - "Last cron job execution: %s. Something seems wrong." : "最終cronジョブ実行: %s 何らかの問題があります。", - "Cron was not executed yet!" : "cronはまだ実行されていません!", - "Execute one task with each page loaded" : "各ページの読み込み時にタスクを実行します。", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.phpは、HTTP経由で15分ごとにcron.phpを実行するようwebcronサービスに登録されます。", - "Use system's cron service to call the cron.php file every 15 minutes." : "システムのcronサービスを利用して、15分間隔でcron.phpファイルを実行します。", - "Enable server-side encryption" : "サーバーサイド暗号化を有効にする", - "Please read carefully before activating server-side encryption: " : "サーバーサイド暗号化を有効にする前によくお読みください:", - "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "暗号化を一度有効化すると、この時点からサーバーにアップロードされるファイルの全てが暗号化されサーバー上に入ります。有効化された暗号モジュールは復号化機能をサポートしますが、すべての前提条件が満たされている(例えば、回復キーが設定されている)場合にのみ、後日暗号化を無効にすることが可能です。", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "暗号化だけで、システムのセキュリティが保証されるものではありません。暗号化アプリがどのように動作するかの詳細について、およびサポートされているユースケースについてはownCloudのドキュメントを参照してください。", - "Be aware that encryption always increases the file size." : "暗号化は、常にファイルサイズが増加することに注意してください。", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "暗号化した場合には必ず、あなたのデータと共に暗号化キーをバックアップすることを確認し、定期的にデータをバックアップを作成することをお勧めします。", - "This is the final warning: Do you really want to enable encryption?" : "これが最後の警告です:本当に暗号化を有効にしますか?", - "Enable encryption" : "暗号化を有効に", - "No encryption module loaded, please enable an encryption module in the app menu." : "暗号化モジュールがロードされていません。アプリのメニューから暗号化モジュールを有効化してください。", - "Select default encryption module:" : "デフォルトの暗号化モジュールを選択:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "古い暗号化(ownCloud <= 8.0) から新しいものに暗号化キーを移行する必要があります。\"デフォルトの暗号化モジュール\" を有効にして 'occ encryption:migrate' を実行してください。", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "古い暗号化(ownCloud <= 8.0) から新しいものに暗号化キーを移行する必要があります。", - "Start migration" : "移行を開始", - "This is used for sending out notifications." : "通知を送信する際に使用します。", - "Send mode" : "送信モード", - "Encryption" : "暗号化", - "From address" : "送信元アドレス", - "mail" : "mail", - "Authentication method" : "認証方法", - "Authentication required" : "認証を必要とする", - "Server address" : "サーバーアドレス", - "Port" : "ポート", - "Credentials" : "資格情報", - "SMTP Username" : "SMTPユーザー名", - "SMTP Password" : "SMTP パスワード", - "Store credentials" : "資格情報を保存", - "Test email settings" : "メール設定のテスト", - "Send email" : "メールを送信", - "What to log" : "ログ出力対象", - "Download logfile" : "ログファイルのダウンロード", - "More" : "もっと見る", - "Less" : "閉じる", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "ログファイルが100MB以上あります。ダウンロードに時間がかかります!", + "Tips & tricks" : "ヒントとコツ", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLiteがデータベースとして使用されています。大規模な運用では別のデータベースに切り替えることをお勧めします。", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "特にデスクトップクライアントをファイル同期に使用する場合,SQLiteは非推奨です.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "他のデータベースに移行する場合はコマンドラインツール: 'occ db:convert-type' を使うか、<a target=\"_blank\" rel=\"noreferrer\" href=\"%s\"> ドキュメント ↗</a>を参照してください。", @@ -211,7 +208,6 @@ OC.L10N.register( "Improving the config.php" : "config.phpの改善", "Theming" : "テーマ", "Hardening and security guidance" : "堅牢化とセキュリティガイダンス", - "Version" : "バージョン", "Developer documentation" : "開発者ドキュメント", "Experimental applications ahead" : "実験的なアプリケーションを試す", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "実験的なアプリは、脆弱性についてチェックされていませんし、不安定であったり、激しく開発中です。それらをインストールすると、データの損失やセキュリティ侵害を引き起こす可能性があります。", @@ -267,19 +263,17 @@ OC.L10N.register( "Change password" : "パスワードを変更", "Language" : "言語", "Help translate" : "翻訳に協力する", + "Get the apps to sync your files" : "ファイルを同期するアプリを取得しましょう", + "Desktop client" : "デスクトップクライアント", + "Android app" : "Androidアプリ", + "iOS app" : "iOSアプリ", + "Show First Run Wizard again" : "初回ウィザードを再表示する", "Name" : "名前", "App name" : "アプリ名", "Create new app password" : "新規アプリパスワードを作成", "Use the credentials below to configure your app or device." : "アプリや端末を設定するのに以下の認証情報を使用する。", "Username" : "ユーザーID", "Done" : "完了", - "Get the apps to sync your files" : "ファイルを同期するアプリを取得しましょう", - "Desktop client" : "デスクトップクライアント", - "Android app" : "Androidアプリ", - "iOS app" : "iOSアプリ", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "このプロジェクトを応援するには、\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">開発に参加</a>\n\t\tもしくは、\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">世界に拡散</a>!\nしてください。", - "Show First Run Wizard again" : "初回ウィザードを再表示する", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "{communityopen}Nextcloud community{linkclose} による開発されています。{githubopen}source code{linkclose} は、 {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} ライセンスで提供されています。", "Show storage location" : "データの保存場所を表示", "Show last log in" : "最終ログインを表示", "Show user backend" : "ユーザーバックエンドを表示", @@ -298,6 +292,10 @@ OC.L10N.register( "change full name" : "名前を変更", "set new password" : "新しいパスワードを設定", "change email address" : "メールアドレスを変更", - "Default" : "デフォルト" + "Default" : "デフォルト", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "外部ストレージ", + "Updates" : "アップデート" }, "nplurals=1; plural=0;"); diff --git a/settings/l10n/ja.json b/settings/l10n/ja.json index 67007d97fdd..93e83339e6b 100644 --- a/settings/l10n/ja.json +++ b/settings/l10n/ja.json @@ -1,14 +1,14 @@ { "translations": { + "Enabled" : "有効なアプリ", + "Not enabled" : "無効なアプリ", "Wrong password" : "パスワードが間違っています", "Saved" : "保存されました", "No user supplied" : "ユーザーが指定されていません", + "Unable to change password" : "パスワードを変更できません", "Authentication error" : "認証エラー", "Please provide an admin recovery password, otherwise all user data will be lost" : "リカバリ用の管理者パスワードを入力してください。そうでない場合は、全ユーザーのデータが失われます。", "Wrong admin recovery password. Please check the password and try again." : "リカバリ用の管理者パスワードが間違っています。パスワードを確認して再度実行してください。", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "バックエンドはパスワードの変更をサポートしていませんが、ユーザーの暗号化キーは正常に更新されました。", - "Unable to change password" : "パスワードを変更できません", - "Enabled" : "有効なアプリ", - "Not enabled" : "無効なアプリ", "installing and updating apps via the app store or 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." : "%s バージョン (%s) の古い cURL を使っています。OSを更新するか、この機能 %s が正しく動くアプリに更新してください。", @@ -33,17 +33,6 @@ "Email saved" : "メールアドレスを保存しました", "Your full name has been changed." : "名前を変更しました。", "Unable to change full name" : "名前を変更できません", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "セキュリティ&セットアップ警告", - "Sharing" : "共有", - "Server-side encryption" : "サーバーサイド暗号化", - "External Storage" : "外部ストレージ", - "Cron" : "Cron", - "Email server" : "メールサーバー", - "Log" : "ログ", - "Tips & tricks" : "ヒントとコツ", - "Updates" : "アップデート", "Couldn't remove app." : "アプリが削除できませんでした。", "Language changed" : "言語が変更されました", "Invalid request" : "不正なリクエスト", @@ -118,17 +107,55 @@ "Sessions" : "セッション", "App passwords" : "アプリパスワード", "Sync clients" : "同期用クライアント", - "Everything (fatal issues, errors, warnings, info, debug)" : "すべて (致命的な問題、エラー、警告、情報、デバッグ)", - "Info, warnings, errors and fatal issues" : "情報、警告、エラー、致命的な問題", - "Warnings, errors and fatal issues" : "警告、エラー、致命的な問題", - "Errors and fatal issues" : "エラー、致命的な問題", - "Fatal issues only" : "致命的な問題のみ", "None" : "なし", "Login" : "ログイン", "Plain" : "平文", "NT LAN Manager" : "NT LAN マネージャー", "SSL" : "SSL", "TLS" : "TLS", + "Email server" : "メールサーバー", + "Open documentation" : "ドキュメントを開く", + "This is used for sending out notifications." : "通知を送信する際に使用します。", + "Send mode" : "送信モード", + "Encryption" : "暗号化", + "From address" : "送信元アドレス", + "mail" : "mail", + "Authentication method" : "認証方法", + "Authentication required" : "認証を必要とする", + "Server address" : "サーバーアドレス", + "Port" : "ポート", + "Credentials" : "資格情報", + "SMTP Username" : "SMTPユーザー名", + "SMTP Password" : "SMTP パスワード", + "Store credentials" : "資格情報を保存", + "Test email settings" : "メール設定のテスト", + "Send email" : "メールを送信", + "Server-side encryption" : "サーバーサイド暗号化", + "Enable server-side encryption" : "サーバーサイド暗号化を有効にする", + "Please read carefully before activating server-side encryption: " : "サーバーサイド暗号化を有効にする前によくお読みください:", + "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "暗号化を一度有効化すると、この時点からサーバーにアップロードされるファイルの全てが暗号化されサーバー上に入ります。有効化された暗号モジュールは復号化機能をサポートしますが、すべての前提条件が満たされている(例えば、回復キーが設定されている)場合にのみ、後日暗号化を無効にすることが可能です。", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "暗号化だけで、システムのセキュリティが保証されるものではありません。暗号化アプリがどのように動作するかの詳細について、およびサポートされているユースケースについてはownCloudのドキュメントを参照してください。", + "Be aware that encryption always increases the file size." : "暗号化は、常にファイルサイズが増加することに注意してください。", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "暗号化した場合には必ず、あなたのデータと共に暗号化キーをバックアップすることを確認し、定期的にデータをバックアップを作成することをお勧めします。", + "This is the final warning: Do you really want to enable encryption?" : "これが最後の警告です:本当に暗号化を有効にしますか?", + "Enable encryption" : "暗号化を有効に", + "No encryption module loaded, please enable an encryption module in the app menu." : "暗号化モジュールがロードされていません。アプリのメニューから暗号化モジュールを有効化してください。", + "Select default encryption module:" : "デフォルトの暗号化モジュールを選択:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "古い暗号化(ownCloud <= 8.0) から新しいものに暗号化キーを移行する必要があります。\"デフォルトの暗号化モジュール\" を有効にして 'occ encryption:migrate' を実行してください。", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "古い暗号化(ownCloud <= 8.0) から新しいものに暗号化キーを移行する必要があります。", + "Start migration" : "移行を開始", + "Everything (fatal issues, errors, warnings, info, debug)" : "すべて (致命的な問題、エラー、警告、情報、デバッグ)", + "Info, warnings, errors and fatal issues" : "情報、警告、エラー、致命的な問題", + "Warnings, errors and fatal issues" : "警告、エラー、致命的な問題", + "Errors and fatal issues" : "エラー、致命的な問題", + "Fatal issues only" : "致命的な問題のみ", + "Log" : "ログ", + "What to log" : "ログ出力対象", + "Download logfile" : "ログファイルのダウンロード", + "More" : "もっと見る", + "Less" : "閉じる", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "ログファイルが100MB以上あります。ダウンロードに時間がかかります!", + "Security & setup warnings" : "セキュリティ&セットアップ警告", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHPのシステム環境変数が正しく設定されていないようです。getenv(\"PATH\") コマンドでテストして何も値を返さないことを確認してください。", "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "PHP設定の注意事項と php-fpmを利用する場合のサーバー向け設定を <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\"> インストールドキュメント ↗</a> で確認してください。", "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." : "\"config\"は読み取り専用になってます。そのためにWEBインターフェースで設定できません可能性があります。さらに、更新時に\"config\"ファイルを書き込み権限を与えることが必要", @@ -144,7 +171,15 @@ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "CLI から cronジョブを実行することができませんでした。次の技術的なエラーが発生しています:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "<a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">インストールガイド ↗</a>をもう一度チェックして、<a href=\"#log-section\">ログ</a> にあるエラーまたは警告について確認してください。", "All checks passed." : "すべてのチェックに合格しました。", - "Open documentation" : "ドキュメントを開く", + "Cron" : "Cron", + "Last cron job execution: %s." : "最終cronジョブ実行: %s", + "Last cron job execution: %s. Something seems wrong." : "最終cronジョブ実行: %s 何らかの問題があります。", + "Cron was not executed yet!" : "cronはまだ実行されていません!", + "Execute one task with each page loaded" : "各ページの読み込み時にタスクを実行します。", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.phpは、HTTP経由で15分ごとにcron.phpを実行するようwebcronサービスに登録されます。", + "Use system's cron service to call the cron.php file every 15 minutes." : "システムのcronサービスを利用して、15分間隔でcron.phpファイルを実行します。", + "Version" : "バージョン", + "Sharing" : "共有", "Allow apps to use the Share API" : "アプリからの共有APIの利用を許可する", "Allow users to share via link" : "URLリンクでの共有を許可する", "Allow public uploads" : "パブリックなアップロードを許可する", @@ -161,45 +196,7 @@ "Exclude groups from sharing" : "共有可能なグループから除外する", "These groups will still be able to receive shares, but not to initiate them." : "このグループでは、フォルダー共有を開始することはできませんが、共有されたフォルダーを参照することはできます。", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "共有ダイアログでのユーザー名の自動補完を有効にする。このチェックを無効にした場合は、完全なユーザー名を入力する必要があります。", - "Last cron job execution: %s." : "最終cronジョブ実行: %s", - "Last cron job execution: %s. Something seems wrong." : "最終cronジョブ実行: %s 何らかの問題があります。", - "Cron was not executed yet!" : "cronはまだ実行されていません!", - "Execute one task with each page loaded" : "各ページの読み込み時にタスクを実行します。", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.phpは、HTTP経由で15分ごとにcron.phpを実行するようwebcronサービスに登録されます。", - "Use system's cron service to call the cron.php file every 15 minutes." : "システムのcronサービスを利用して、15分間隔でcron.phpファイルを実行します。", - "Enable server-side encryption" : "サーバーサイド暗号化を有効にする", - "Please read carefully before activating server-side encryption: " : "サーバーサイド暗号化を有効にする前によくお読みください:", - "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "暗号化を一度有効化すると、この時点からサーバーにアップロードされるファイルの全てが暗号化されサーバー上に入ります。有効化された暗号モジュールは復号化機能をサポートしますが、すべての前提条件が満たされている(例えば、回復キーが設定されている)場合にのみ、後日暗号化を無効にすることが可能です。", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "暗号化だけで、システムのセキュリティが保証されるものではありません。暗号化アプリがどのように動作するかの詳細について、およびサポートされているユースケースについてはownCloudのドキュメントを参照してください。", - "Be aware that encryption always increases the file size." : "暗号化は、常にファイルサイズが増加することに注意してください。", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "暗号化した場合には必ず、あなたのデータと共に暗号化キーをバックアップすることを確認し、定期的にデータをバックアップを作成することをお勧めします。", - "This is the final warning: Do you really want to enable encryption?" : "これが最後の警告です:本当に暗号化を有効にしますか?", - "Enable encryption" : "暗号化を有効に", - "No encryption module loaded, please enable an encryption module in the app menu." : "暗号化モジュールがロードされていません。アプリのメニューから暗号化モジュールを有効化してください。", - "Select default encryption module:" : "デフォルトの暗号化モジュールを選択:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "古い暗号化(ownCloud <= 8.0) から新しいものに暗号化キーを移行する必要があります。\"デフォルトの暗号化モジュール\" を有効にして 'occ encryption:migrate' を実行してください。", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "古い暗号化(ownCloud <= 8.0) から新しいものに暗号化キーを移行する必要があります。", - "Start migration" : "移行を開始", - "This is used for sending out notifications." : "通知を送信する際に使用します。", - "Send mode" : "送信モード", - "Encryption" : "暗号化", - "From address" : "送信元アドレス", - "mail" : "mail", - "Authentication method" : "認証方法", - "Authentication required" : "認証を必要とする", - "Server address" : "サーバーアドレス", - "Port" : "ポート", - "Credentials" : "資格情報", - "SMTP Username" : "SMTPユーザー名", - "SMTP Password" : "SMTP パスワード", - "Store credentials" : "資格情報を保存", - "Test email settings" : "メール設定のテスト", - "Send email" : "メールを送信", - "What to log" : "ログ出力対象", - "Download logfile" : "ログファイルのダウンロード", - "More" : "もっと見る", - "Less" : "閉じる", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "ログファイルが100MB以上あります。ダウンロードに時間がかかります!", + "Tips & tricks" : "ヒントとコツ", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLiteがデータベースとして使用されています。大規模な運用では別のデータベースに切り替えることをお勧めします。", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "特にデスクトップクライアントをファイル同期に使用する場合,SQLiteは非推奨です.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "他のデータベースに移行する場合はコマンドラインツール: 'occ db:convert-type' を使うか、<a target=\"_blank\" rel=\"noreferrer\" href=\"%s\"> ドキュメント ↗</a>を参照してください。", @@ -209,7 +206,6 @@ "Improving the config.php" : "config.phpの改善", "Theming" : "テーマ", "Hardening and security guidance" : "堅牢化とセキュリティガイダンス", - "Version" : "バージョン", "Developer documentation" : "開発者ドキュメント", "Experimental applications ahead" : "実験的なアプリケーションを試す", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "実験的なアプリは、脆弱性についてチェックされていませんし、不安定であったり、激しく開発中です。それらをインストールすると、データの損失やセキュリティ侵害を引き起こす可能性があります。", @@ -265,19 +261,17 @@ "Change password" : "パスワードを変更", "Language" : "言語", "Help translate" : "翻訳に協力する", + "Get the apps to sync your files" : "ファイルを同期するアプリを取得しましょう", + "Desktop client" : "デスクトップクライアント", + "Android app" : "Androidアプリ", + "iOS app" : "iOSアプリ", + "Show First Run Wizard again" : "初回ウィザードを再表示する", "Name" : "名前", "App name" : "アプリ名", "Create new app password" : "新規アプリパスワードを作成", "Use the credentials below to configure your app or device." : "アプリや端末を設定するのに以下の認証情報を使用する。", "Username" : "ユーザーID", "Done" : "完了", - "Get the apps to sync your files" : "ファイルを同期するアプリを取得しましょう", - "Desktop client" : "デスクトップクライアント", - "Android app" : "Androidアプリ", - "iOS app" : "iOSアプリ", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "このプロジェクトを応援するには、\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">開発に参加</a>\n\t\tもしくは、\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">世界に拡散</a>!\nしてください。", - "Show First Run Wizard again" : "初回ウィザードを再表示する", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "{communityopen}Nextcloud community{linkclose} による開発されています。{githubopen}source code{linkclose} は、 {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} ライセンスで提供されています。", "Show storage location" : "データの保存場所を表示", "Show last log in" : "最終ログインを表示", "Show user backend" : "ユーザーバックエンドを表示", @@ -296,6 +290,10 @@ "change full name" : "名前を変更", "set new password" : "新しいパスワードを設定", "change email address" : "メールアドレスを変更", - "Default" : "デフォルト" + "Default" : "デフォルト", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "外部ストレージ", + "Updates" : "アップデート" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/settings/l10n/ko.js b/settings/l10n/ko.js index 07354f29815..ca8465de4d2 100644 --- a/settings/l10n/ko.js +++ b/settings/l10n/ko.js @@ -1,16 +1,16 @@ OC.L10N.register( "settings", { + "Enabled" : "활성", + "Not enabled" : "비활성", "Wrong password" : "잘못된 암호", "Saved" : "저장됨", "No user supplied" : "사용자가 지정되지 않음", + "Unable to change password" : "암호를 변경할 수 없음", "Authentication error" : "인증 오류", "Please provide an admin recovery password, otherwise all user data will be lost" : "관리자 복구 암호를 입력하지 않으면 모든 사용자 데이터가 삭제됩니다", "Wrong admin recovery password. Please check the password and try again." : "관리자 복구 암호가 잘못되었습니다. 암호를 다시 확인하십시오.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "백엔드에서 암호 변경을 지원하지 않지만, 암호화 키는 갱신되었습니다.", - "Unable to change password" : "암호를 변경할 수 없음", - "Enabled" : "활성", - "Not enabled" : "비활성", "installing and updating apps via the app store or 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이 오래된 %s 버전을 사용하고 있습니다(%s). 운영 체제나 기능을 업데이트하지 않으면 %s 등을 안정적으로 사용할 수 없습니다.", @@ -35,17 +35,6 @@ OC.L10N.register( "Email saved" : "이메일 저장됨", "Your full name has been changed." : "전체 이름이 변경되었습니다.", "Unable to change full name" : "전체 이름을 변경할 수 없음", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "보안 및 설치 경고", - "Sharing" : "공유", - "Server-side encryption" : "서버 측 암호화", - "External Storage" : "외부 저장소", - "Cron" : "Cron", - "Email server" : "이메일 서버", - "Log" : "로그", - "Tips & tricks" : "팁과 추가 정보", - "Updates" : "업데이트", "Couldn't remove app." : "앱을 삭제할 수 없습니다.", "Language changed" : "언어가 변경됨", "Invalid request" : "잘못된 요청", @@ -110,17 +99,54 @@ OC.L10N.register( "Unlimited" : "무제한", "Personal info" : "개인 정보", "Sync clients" : "동기화 클라이언트", - "Everything (fatal issues, errors, warnings, info, debug)" : "모두 (치명적 문제, 오류, 경고, 정보, 디버그)", - "Info, warnings, errors and fatal issues" : "정보, 경고, 오류, 치명적 문제", - "Warnings, errors and fatal issues" : "경고, 오류, 치명적 문제", - "Errors and fatal issues" : "오류, 치명적 문제", - "Fatal issues only" : "치명적 문제만", "None" : "없음", "Login" : "로그인", "Plain" : "일반", "NT LAN Manager" : "NT LAN 관리자", "SSL" : "SSL", "TLS" : "TLS", + "Email server" : "이메일 서버", + "Open documentation" : "문서 열기", + "This is used for sending out notifications." : "알림을 보낼 때 사용됩니다.", + "Send mode" : "보내기 모드", + "Encryption" : "암호화", + "From address" : "보낸 사람 주소", + "mail" : "메일", + "Authentication method" : "인증 방법", + "Authentication required" : "인증 필요함", + "Server address" : "서버 주소", + "Port" : "포트", + "Credentials" : "자격 정보", + "SMTP Username" : "SMTP 사용자 이름", + "SMTP Password" : "SMTP 암호", + "Store credentials" : "인증 정보 저장", + "Test email settings" : "이메일 설정 시험", + "Send email" : "이메일 보내기", + "Server-side encryption" : "서버 측 암호화", + "Enable server-side encryption" : "서버 측 암호화 사용", + "Please read carefully before activating server-side encryption: " : "서버 측 암호화를 활성화하기 전에 읽어 보십시오:", + "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "암호화를 사용하면, 사용하기 시작한 시간 이후에 서버에 업로드된 모든 파일이 암호화됩니다. 나중에 암호화를 사용하지 않으려면 사용하고 있는 암호화 모듈에서 비활성화를 지원해야 하고 모든 사전 조건(예: 복구 키 설정)을 만족해야 합니다.", + "Be aware that encryption always increases the file size." : "암호화된 파일의 크기는 항상 커집니다.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "데이터를 주기적으로 백업하는 것을 추천하며, 암호화를 사용하고 있다면 데이터와 더불어 암호화 키도 백업하십시오.", + "This is the final warning: Do you really want to enable encryption?" : "마지막 경고입니다. 암호화를 활성화하시겠습니까?", + "Enable encryption" : "암호화 사용", + "No encryption module loaded, please enable an encryption module in the app menu." : "암호화 모듈을 불러오지 않았습니다. 앱 메뉴에서 암호화 모듈을 활성화하십시오.", + "Select default encryption module:" : "기본 암호화 모듈 선택:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "과거에 사용하였던(ownCloud <= 8.0) 암호화된 데이터에서 키를 이전해야 합니다. \"기본 암호화 모듈\"을 활성화한 다음 'occ encryption:migrate'를 실행하십시오", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "ownCloud 8.0 이하에서 사용한 이전 암호화 키를 새 키로 이전해야 합니다.", + "Start migration" : "이전 시작", + "Everything (fatal issues, errors, warnings, info, debug)" : "모두 (치명적 문제, 오류, 경고, 정보, 디버그)", + "Info, warnings, errors and fatal issues" : "정보, 경고, 오류, 치명적 문제", + "Warnings, errors and fatal issues" : "경고, 오류, 치명적 문제", + "Errors and fatal issues" : "오류, 치명적 문제", + "Fatal issues only" : "치명적 문제만", + "Log" : "로그", + "What to log" : "남길 로그", + "Download logfile" : "로그 파일 다운로드", + "More" : "더 중요함", + "Less" : "덜 중요함", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "로그 파일이 100MB보다 큽니다. 다운로드하는 데 시간이 걸릴 수 있습니다!", + "Security & setup warnings" : "보안 및 설치 경고", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php가 시스템 환경 변수를 올바르게 조회할 수 있도록 설정되지 않았습니다. getenv(\"PATH\")의 값이 비어 있습니다.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "읽기 전용 설정이 활성화되었습니다. 이 상태에서는 웹 인터페이스를 통하여 일부 설정을 변경할 수 없습니다. 또한 매 업데이트마다 파일을 쓸 수 있는 상태로 변경해야 합니다.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP에서 인라인 doc 블록을 삭제하도록 설정되어 있습니다. 일부 코어 앱에 접근할 수 없을 수도 있습니다.", @@ -132,7 +158,15 @@ OC.L10N.register( "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "도메인의 루트 디렉터리 아래에 설치되어 있지 않고 시스템 cron을 사용한다면 URL 생성에 문제가 발생할 수도 있습니다. 이 문제를 해결하려면 설치본의 웹 루트 경로에 있는 config.php 파일의 \"overwrite.cli.url\" 옵션을 변경하십시오(제안: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "CLI로 cronjob을 실행할 수 없었습니다. 다음 기술적 오류가 발생했습니다:", "All checks passed." : "모든 검사를 통과했습니다.", - "Open documentation" : "문서 열기", + "Cron" : "Cron", + "Last cron job execution: %s." : "마지막 cron 작업 실행: %s.", + "Last cron job execution: %s. Something seems wrong." : "마지막 cron 작업 실행: %s. 문제가 발생한 것 같습니다.", + "Cron was not executed yet!" : "Cron이 실행되지 않았습니다!", + "Execute one task with each page loaded" : "개별 페이지를 불러올 때마다 실행", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php는 webcron 서비스에 등록되어 HTTP로 15분마다 cron.php에 접근합니다.", + "Use system's cron service to call the cron.php file every 15 minutes." : "시스템의 cron 서비스를 통하여 15분마다 cron.php 파일을 실행합니다.", + "Version" : "버전", + "Sharing" : "공유", "Allow apps to use the Share API" : "앱에서 공유 API를 사용할 수 있도록 허용", "Allow users to share via link" : "사용자별 링크 공유 허용", "Allow public uploads" : "공개 업로드 허용", @@ -148,44 +182,7 @@ OC.L10N.register( "Exclude groups from sharing" : "공유에서 그룹 제외", "These groups will still be able to receive shares, but not to initiate them." : "이 그룹의 사용자들은 다른 사용자가 공유한 파일을 받을 수는 있지만, 자기 파일을 공유할 수는 없습니다.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "공유 대화 상자에서 사용자 이름 자동 완성을 사용합니다. 이 설정을 사용하지 않으면 전체 사용자 이름을 입력해야 합니다.", - "Last cron job execution: %s." : "마지막 cron 작업 실행: %s.", - "Last cron job execution: %s. Something seems wrong." : "마지막 cron 작업 실행: %s. 문제가 발생한 것 같습니다.", - "Cron was not executed yet!" : "Cron이 실행되지 않았습니다!", - "Execute one task with each page loaded" : "개별 페이지를 불러올 때마다 실행", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php는 webcron 서비스에 등록되어 HTTP로 15분마다 cron.php에 접근합니다.", - "Use system's cron service to call the cron.php file every 15 minutes." : "시스템의 cron 서비스를 통하여 15분마다 cron.php 파일을 실행합니다.", - "Enable server-side encryption" : "서버 측 암호화 사용", - "Please read carefully before activating server-side encryption: " : "서버 측 암호화를 활성화하기 전에 읽어 보십시오:", - "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "암호화를 사용하면, 사용하기 시작한 시간 이후에 서버에 업로드된 모든 파일이 암호화됩니다. 나중에 암호화를 사용하지 않으려면 사용하고 있는 암호화 모듈에서 비활성화를 지원해야 하고 모든 사전 조건(예: 복구 키 설정)을 만족해야 합니다.", - "Be aware that encryption always increases the file size." : "암호화된 파일의 크기는 항상 커집니다.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "데이터를 주기적으로 백업하는 것을 추천하며, 암호화를 사용하고 있다면 데이터와 더불어 암호화 키도 백업하십시오.", - "This is the final warning: Do you really want to enable encryption?" : "마지막 경고입니다. 암호화를 활성화하시겠습니까?", - "Enable encryption" : "암호화 사용", - "No encryption module loaded, please enable an encryption module in the app menu." : "암호화 모듈을 불러오지 않았습니다. 앱 메뉴에서 암호화 모듈을 활성화하십시오.", - "Select default encryption module:" : "기본 암호화 모듈 선택:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "과거에 사용하였던(ownCloud <= 8.0) 암호화된 데이터에서 키를 이전해야 합니다. \"기본 암호화 모듈\"을 활성화한 다음 'occ encryption:migrate'를 실행하십시오", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "ownCloud 8.0 이하에서 사용한 이전 암호화 키를 새 키로 이전해야 합니다.", - "Start migration" : "이전 시작", - "This is used for sending out notifications." : "알림을 보낼 때 사용됩니다.", - "Send mode" : "보내기 모드", - "Encryption" : "암호화", - "From address" : "보낸 사람 주소", - "mail" : "메일", - "Authentication method" : "인증 방법", - "Authentication required" : "인증 필요함", - "Server address" : "서버 주소", - "Port" : "포트", - "Credentials" : "자격 정보", - "SMTP Username" : "SMTP 사용자 이름", - "SMTP Password" : "SMTP 암호", - "Store credentials" : "인증 정보 저장", - "Test email settings" : "이메일 설정 시험", - "Send email" : "이메일 보내기", - "What to log" : "남길 로그", - "Download logfile" : "로그 파일 다운로드", - "More" : "더 중요함", - "Less" : "덜 중요함", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "로그 파일이 100MB보다 큽니다. 다운로드하는 데 시간이 걸릴 수 있습니다!", + "Tips & tricks" : "팁과 추가 정보", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "데이터베이스로 SQLite를 사용하고 있습니다. 대규모의 파일을 관리하려고 한다면 다른 데이터베이스 백엔드로 전환할 것을 권장합니다.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "특히 파일 동기화를 위해 데스크톱 클라이언트를 사용할 예정이면, SQLite를 사용하지 않는 것이 좋습니다.", "How to do backups" : "백업 방법", @@ -194,7 +191,6 @@ OC.L10N.register( "Improving the config.php" : "config.php 개선", "Theming" : "테마 꾸미기", "Hardening and security guidance" : "보안 강화 지침", - "Version" : "버전", "Developer documentation" : "개발자 문서", "Experimental applications ahead" : "실험적인 앱 사용 예정", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "실험적인 앱은 보안 문제 검사를 통과하지 않았으며, 아직 새롭거나, 불안정하거나, 개발 중일 수도 있습니다. 이러한 앱을 설치하면 데이터 손실 및 보안 문제가 발생할 수도 있습니다.", @@ -244,14 +240,14 @@ OC.L10N.register( "Change password" : "암호 변경", "Language" : "언어", "Help translate" : "번역 돕기", - "Name" : "이름", - "Username" : "사용자 이름", - "Done" : "완료", "Get the apps to sync your files" : "파일 동기화 앱 가져오기", "Desktop client" : "데스크톱 클라이언트", "Android app" : "Android 앱", "iOS app" : "iOS 앱", "Show First Run Wizard again" : "첫 실행 마법사 다시 보이기", + "Name" : "이름", + "Username" : "사용자 이름", + "Done" : "완료", "Show storage location" : "저장소 위치 보이기", "Show last log in" : "마지막 로그인 시간 보이기", "Show user backend" : "사용자 백엔드 보이기", @@ -270,6 +266,10 @@ OC.L10N.register( "change full name" : "전체 이름 변경", "set new password" : "새 암호 설정", "change email address" : "이메일 주소 변경", - "Default" : "기본값" + "Default" : "기본값", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "외부 저장소", + "Updates" : "업데이트" }, "nplurals=1; plural=0;"); diff --git a/settings/l10n/ko.json b/settings/l10n/ko.json index 415afd7120f..19ada1449bf 100644 --- a/settings/l10n/ko.json +++ b/settings/l10n/ko.json @@ -1,14 +1,14 @@ { "translations": { + "Enabled" : "활성", + "Not enabled" : "비활성", "Wrong password" : "잘못된 암호", "Saved" : "저장됨", "No user supplied" : "사용자가 지정되지 않음", + "Unable to change password" : "암호를 변경할 수 없음", "Authentication error" : "인증 오류", "Please provide an admin recovery password, otherwise all user data will be lost" : "관리자 복구 암호를 입력하지 않으면 모든 사용자 데이터가 삭제됩니다", "Wrong admin recovery password. Please check the password and try again." : "관리자 복구 암호가 잘못되었습니다. 암호를 다시 확인하십시오.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "백엔드에서 암호 변경을 지원하지 않지만, 암호화 키는 갱신되었습니다.", - "Unable to change password" : "암호를 변경할 수 없음", - "Enabled" : "활성", - "Not enabled" : "비활성", "installing and updating apps via the app store or 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이 오래된 %s 버전을 사용하고 있습니다(%s). 운영 체제나 기능을 업데이트하지 않으면 %s 등을 안정적으로 사용할 수 없습니다.", @@ -33,17 +33,6 @@ "Email saved" : "이메일 저장됨", "Your full name has been changed." : "전체 이름이 변경되었습니다.", "Unable to change full name" : "전체 이름을 변경할 수 없음", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "보안 및 설치 경고", - "Sharing" : "공유", - "Server-side encryption" : "서버 측 암호화", - "External Storage" : "외부 저장소", - "Cron" : "Cron", - "Email server" : "이메일 서버", - "Log" : "로그", - "Tips & tricks" : "팁과 추가 정보", - "Updates" : "업데이트", "Couldn't remove app." : "앱을 삭제할 수 없습니다.", "Language changed" : "언어가 변경됨", "Invalid request" : "잘못된 요청", @@ -108,17 +97,54 @@ "Unlimited" : "무제한", "Personal info" : "개인 정보", "Sync clients" : "동기화 클라이언트", - "Everything (fatal issues, errors, warnings, info, debug)" : "모두 (치명적 문제, 오류, 경고, 정보, 디버그)", - "Info, warnings, errors and fatal issues" : "정보, 경고, 오류, 치명적 문제", - "Warnings, errors and fatal issues" : "경고, 오류, 치명적 문제", - "Errors and fatal issues" : "오류, 치명적 문제", - "Fatal issues only" : "치명적 문제만", "None" : "없음", "Login" : "로그인", "Plain" : "일반", "NT LAN Manager" : "NT LAN 관리자", "SSL" : "SSL", "TLS" : "TLS", + "Email server" : "이메일 서버", + "Open documentation" : "문서 열기", + "This is used for sending out notifications." : "알림을 보낼 때 사용됩니다.", + "Send mode" : "보내기 모드", + "Encryption" : "암호화", + "From address" : "보낸 사람 주소", + "mail" : "메일", + "Authentication method" : "인증 방법", + "Authentication required" : "인증 필요함", + "Server address" : "서버 주소", + "Port" : "포트", + "Credentials" : "자격 정보", + "SMTP Username" : "SMTP 사용자 이름", + "SMTP Password" : "SMTP 암호", + "Store credentials" : "인증 정보 저장", + "Test email settings" : "이메일 설정 시험", + "Send email" : "이메일 보내기", + "Server-side encryption" : "서버 측 암호화", + "Enable server-side encryption" : "서버 측 암호화 사용", + "Please read carefully before activating server-side encryption: " : "서버 측 암호화를 활성화하기 전에 읽어 보십시오:", + "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "암호화를 사용하면, 사용하기 시작한 시간 이후에 서버에 업로드된 모든 파일이 암호화됩니다. 나중에 암호화를 사용하지 않으려면 사용하고 있는 암호화 모듈에서 비활성화를 지원해야 하고 모든 사전 조건(예: 복구 키 설정)을 만족해야 합니다.", + "Be aware that encryption always increases the file size." : "암호화된 파일의 크기는 항상 커집니다.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "데이터를 주기적으로 백업하는 것을 추천하며, 암호화를 사용하고 있다면 데이터와 더불어 암호화 키도 백업하십시오.", + "This is the final warning: Do you really want to enable encryption?" : "마지막 경고입니다. 암호화를 활성화하시겠습니까?", + "Enable encryption" : "암호화 사용", + "No encryption module loaded, please enable an encryption module in the app menu." : "암호화 모듈을 불러오지 않았습니다. 앱 메뉴에서 암호화 모듈을 활성화하십시오.", + "Select default encryption module:" : "기본 암호화 모듈 선택:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "과거에 사용하였던(ownCloud <= 8.0) 암호화된 데이터에서 키를 이전해야 합니다. \"기본 암호화 모듈\"을 활성화한 다음 'occ encryption:migrate'를 실행하십시오", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "ownCloud 8.0 이하에서 사용한 이전 암호화 키를 새 키로 이전해야 합니다.", + "Start migration" : "이전 시작", + "Everything (fatal issues, errors, warnings, info, debug)" : "모두 (치명적 문제, 오류, 경고, 정보, 디버그)", + "Info, warnings, errors and fatal issues" : "정보, 경고, 오류, 치명적 문제", + "Warnings, errors and fatal issues" : "경고, 오류, 치명적 문제", + "Errors and fatal issues" : "오류, 치명적 문제", + "Fatal issues only" : "치명적 문제만", + "Log" : "로그", + "What to log" : "남길 로그", + "Download logfile" : "로그 파일 다운로드", + "More" : "더 중요함", + "Less" : "덜 중요함", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "로그 파일이 100MB보다 큽니다. 다운로드하는 데 시간이 걸릴 수 있습니다!", + "Security & setup warnings" : "보안 및 설치 경고", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php가 시스템 환경 변수를 올바르게 조회할 수 있도록 설정되지 않았습니다. getenv(\"PATH\")의 값이 비어 있습니다.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "읽기 전용 설정이 활성화되었습니다. 이 상태에서는 웹 인터페이스를 통하여 일부 설정을 변경할 수 없습니다. 또한 매 업데이트마다 파일을 쓸 수 있는 상태로 변경해야 합니다.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP에서 인라인 doc 블록을 삭제하도록 설정되어 있습니다. 일부 코어 앱에 접근할 수 없을 수도 있습니다.", @@ -130,7 +156,15 @@ "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "도메인의 루트 디렉터리 아래에 설치되어 있지 않고 시스템 cron을 사용한다면 URL 생성에 문제가 발생할 수도 있습니다. 이 문제를 해결하려면 설치본의 웹 루트 경로에 있는 config.php 파일의 \"overwrite.cli.url\" 옵션을 변경하십시오(제안: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "CLI로 cronjob을 실행할 수 없었습니다. 다음 기술적 오류가 발생했습니다:", "All checks passed." : "모든 검사를 통과했습니다.", - "Open documentation" : "문서 열기", + "Cron" : "Cron", + "Last cron job execution: %s." : "마지막 cron 작업 실행: %s.", + "Last cron job execution: %s. Something seems wrong." : "마지막 cron 작업 실행: %s. 문제가 발생한 것 같습니다.", + "Cron was not executed yet!" : "Cron이 실행되지 않았습니다!", + "Execute one task with each page loaded" : "개별 페이지를 불러올 때마다 실행", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php는 webcron 서비스에 등록되어 HTTP로 15분마다 cron.php에 접근합니다.", + "Use system's cron service to call the cron.php file every 15 minutes." : "시스템의 cron 서비스를 통하여 15분마다 cron.php 파일을 실행합니다.", + "Version" : "버전", + "Sharing" : "공유", "Allow apps to use the Share API" : "앱에서 공유 API를 사용할 수 있도록 허용", "Allow users to share via link" : "사용자별 링크 공유 허용", "Allow public uploads" : "공개 업로드 허용", @@ -146,44 +180,7 @@ "Exclude groups from sharing" : "공유에서 그룹 제외", "These groups will still be able to receive shares, but not to initiate them." : "이 그룹의 사용자들은 다른 사용자가 공유한 파일을 받을 수는 있지만, 자기 파일을 공유할 수는 없습니다.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "공유 대화 상자에서 사용자 이름 자동 완성을 사용합니다. 이 설정을 사용하지 않으면 전체 사용자 이름을 입력해야 합니다.", - "Last cron job execution: %s." : "마지막 cron 작업 실행: %s.", - "Last cron job execution: %s. Something seems wrong." : "마지막 cron 작업 실행: %s. 문제가 발생한 것 같습니다.", - "Cron was not executed yet!" : "Cron이 실행되지 않았습니다!", - "Execute one task with each page loaded" : "개별 페이지를 불러올 때마다 실행", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php는 webcron 서비스에 등록되어 HTTP로 15분마다 cron.php에 접근합니다.", - "Use system's cron service to call the cron.php file every 15 minutes." : "시스템의 cron 서비스를 통하여 15분마다 cron.php 파일을 실행합니다.", - "Enable server-side encryption" : "서버 측 암호화 사용", - "Please read carefully before activating server-side encryption: " : "서버 측 암호화를 활성화하기 전에 읽어 보십시오:", - "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "암호화를 사용하면, 사용하기 시작한 시간 이후에 서버에 업로드된 모든 파일이 암호화됩니다. 나중에 암호화를 사용하지 않으려면 사용하고 있는 암호화 모듈에서 비활성화를 지원해야 하고 모든 사전 조건(예: 복구 키 설정)을 만족해야 합니다.", - "Be aware that encryption always increases the file size." : "암호화된 파일의 크기는 항상 커집니다.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "데이터를 주기적으로 백업하는 것을 추천하며, 암호화를 사용하고 있다면 데이터와 더불어 암호화 키도 백업하십시오.", - "This is the final warning: Do you really want to enable encryption?" : "마지막 경고입니다. 암호화를 활성화하시겠습니까?", - "Enable encryption" : "암호화 사용", - "No encryption module loaded, please enable an encryption module in the app menu." : "암호화 모듈을 불러오지 않았습니다. 앱 메뉴에서 암호화 모듈을 활성화하십시오.", - "Select default encryption module:" : "기본 암호화 모듈 선택:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "과거에 사용하였던(ownCloud <= 8.0) 암호화된 데이터에서 키를 이전해야 합니다. \"기본 암호화 모듈\"을 활성화한 다음 'occ encryption:migrate'를 실행하십시오", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "ownCloud 8.0 이하에서 사용한 이전 암호화 키를 새 키로 이전해야 합니다.", - "Start migration" : "이전 시작", - "This is used for sending out notifications." : "알림을 보낼 때 사용됩니다.", - "Send mode" : "보내기 모드", - "Encryption" : "암호화", - "From address" : "보낸 사람 주소", - "mail" : "메일", - "Authentication method" : "인증 방법", - "Authentication required" : "인증 필요함", - "Server address" : "서버 주소", - "Port" : "포트", - "Credentials" : "자격 정보", - "SMTP Username" : "SMTP 사용자 이름", - "SMTP Password" : "SMTP 암호", - "Store credentials" : "인증 정보 저장", - "Test email settings" : "이메일 설정 시험", - "Send email" : "이메일 보내기", - "What to log" : "남길 로그", - "Download logfile" : "로그 파일 다운로드", - "More" : "더 중요함", - "Less" : "덜 중요함", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "로그 파일이 100MB보다 큽니다. 다운로드하는 데 시간이 걸릴 수 있습니다!", + "Tips & tricks" : "팁과 추가 정보", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "데이터베이스로 SQLite를 사용하고 있습니다. 대규모의 파일을 관리하려고 한다면 다른 데이터베이스 백엔드로 전환할 것을 권장합니다.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "특히 파일 동기화를 위해 데스크톱 클라이언트를 사용할 예정이면, SQLite를 사용하지 않는 것이 좋습니다.", "How to do backups" : "백업 방법", @@ -192,7 +189,6 @@ "Improving the config.php" : "config.php 개선", "Theming" : "테마 꾸미기", "Hardening and security guidance" : "보안 강화 지침", - "Version" : "버전", "Developer documentation" : "개발자 문서", "Experimental applications ahead" : "실험적인 앱 사용 예정", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "실험적인 앱은 보안 문제 검사를 통과하지 않았으며, 아직 새롭거나, 불안정하거나, 개발 중일 수도 있습니다. 이러한 앱을 설치하면 데이터 손실 및 보안 문제가 발생할 수도 있습니다.", @@ -242,14 +238,14 @@ "Change password" : "암호 변경", "Language" : "언어", "Help translate" : "번역 돕기", - "Name" : "이름", - "Username" : "사용자 이름", - "Done" : "완료", "Get the apps to sync your files" : "파일 동기화 앱 가져오기", "Desktop client" : "데스크톱 클라이언트", "Android app" : "Android 앱", "iOS app" : "iOS 앱", "Show First Run Wizard again" : "첫 실행 마법사 다시 보이기", + "Name" : "이름", + "Username" : "사용자 이름", + "Done" : "완료", "Show storage location" : "저장소 위치 보이기", "Show last log in" : "마지막 로그인 시간 보이기", "Show user backend" : "사용자 백엔드 보이기", @@ -268,6 +264,10 @@ "change full name" : "전체 이름 변경", "set new password" : "새 암호 설정", "change email address" : "이메일 주소 변경", - "Default" : "기본값" + "Default" : "기본값", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "외부 저장소", + "Updates" : "업데이트" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/settings/l10n/nb_NO.js b/settings/l10n/nb_NO.js index 3978bc41e47..5f7f9a6223c 100644 --- a/settings/l10n/nb_NO.js +++ b/settings/l10n/nb_NO.js @@ -1,16 +1,16 @@ OC.L10N.register( "settings", { + "Enabled" : "Aktiv", + "Not enabled" : "Ikke aktivert", "Wrong password" : "Feil passord", "Saved" : "Lagret", "No user supplied" : "Ingen bruker angitt", + "Unable to change password" : "Kunne ikke endre passord", "Authentication error" : "Autentiseringsfeil", "Please provide an admin recovery password, otherwise all user data will be lost" : "Vennligst oppgi et administrativt gjenopprettingspassord. Ellers vil alle brukerdata gå tapt", "Wrong admin recovery password. Please check the password and try again." : "Feil administrativt gjenopprettingspassord. Sjekk passordet og prøv igjen.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Serveren støtter ikke endring av passord, men oppdatering av brukerens krypteringsnøkkel var vellykket.", - "Unable to change password" : "Kunne ikke endre passord", - "Enabled" : "Aktiv", - "Not enabled" : "Ikke aktivert", "installing and updating apps via the app store or Federated Cloud Sharing" : "installering og oppdatering av apper via app-butikken eller ved deling i Sammenknyttet sky", "Federated Cloud Sharing" : "Sammenknyttet sky-deling", "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL bruker en utdatert %s-versjon (%s). Vennligst oppdater operativsystemet ditt; ellers vil ikke funksjoner som %s virke korrekt.", @@ -35,17 +35,6 @@ OC.L10N.register( "Email saved" : "Epost lagret", "Your full name has been changed." : "Ditt fulle navn er blitt endret.", "Unable to change full name" : "Klarte ikke å endre fullt navn", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Advarsler om sikkerhet og oppsett", - "Sharing" : "Deling", - "Server-side encryption" : "Serverkryptering", - "External Storage" : "Ekstern lagring", - "Cron" : "Cron", - "Email server" : "E-postserver", - "Log" : "Logg", - "Tips & tricks" : "Tips og triks", - "Updates" : "Oppdateringer", "Couldn't remove app." : "Klarte ikke å fjerne app.", "Language changed" : "Språk endret", "Invalid request" : "Ugyldig forespørsel", @@ -111,17 +100,54 @@ OC.L10N.register( "Unlimited" : "Ubegrenset", "Personal info" : "Personlig informasjon", "Sync clients" : "Synkroniseringsklienter", - "Everything (fatal issues, errors, warnings, info, debug)" : "Alt (fatale problemer, feil, advarsler, info, debug)", - "Info, warnings, errors and fatal issues" : "Info, advarsler, feil og fatale problemer", - "Warnings, errors and fatal issues" : "Advarsler, feil og fatale problemer", - "Errors and fatal issues" : "Feil og fatale problemer", - "Fatal issues only" : "Kun fatale problemer", "None" : "Ingen", "Login" : "Logg inn", "Plain" : "Enkel", "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", + "Email server" : "E-postserver", + "Open documentation" : "Åpne dokumentasjonen", + "This is used for sending out notifications." : "Dette brukes for utsending av varsler.", + "Send mode" : "Sendemåte", + "Encryption" : "Kryptering", + "From address" : "Fra adresse", + "mail" : "e-post", + "Authentication method" : "Autentiseringsmetode", + "Authentication required" : "Autentisering kreves", + "Server address" : "Server-adresse", + "Port" : "Port", + "Credentials" : "Påloggingsdetaljer", + "SMTP Username" : "SMTP-brukernavn", + "SMTP Password" : "SMTP-passord", + "Store credentials" : "Lagre påloggingsdetaljer", + "Test email settings" : "Test innstillinger for e-post", + "Send email" : "Send e-post", + "Server-side encryption" : "Serverkryptering", + "Enable server-side encryption" : "Aktiver serverkryptering", + "Please read carefully before activating server-side encryption: " : "Vennligst les dette nøye før du aktiverer serverkrykptering:", + "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 serveren fra det tidspunktet av bli lagret kryptert på serveren. 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.", + "Be aware that encryption always increases the file size." : "Vær oppmerksom på at kryptering alltid øker filstørrelsen.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Det er alltid bra å ta regelmessig sikkerhetskopi av dataene dine. Pass på å ta kopi av krypteringsnøklene sammen med dataene når kryptering er i bruk.", + "This is the final warning: Do you really want to enable encryption?" : "Dette er siste advarsel: Vil du virkelig aktivere kryptering?", + "Enable encryption" : "Aktiver kryptering", + "No encryption module loaded, please enable an encryption module in the app menu." : "Ingen krypteringsmodul er lastet. Aktiver en krypteringsmodul i app-menyen.", + "Select default encryption module:" : "Velg standard krypteringsmodul:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Du må migrere krypteringsnøklene din fra den gamle krypteringen (ownCloud <= 8.0) til den nye. Vennligst aktiver \"Standard krypteringsmodul\" og kjør 'occ encryption:migrate'", + "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", + "Everything (fatal issues, errors, warnings, info, debug)" : "Alt (fatale problemer, feil, advarsler, info, debug)", + "Info, warnings, errors and fatal issues" : "Info, advarsler, feil og fatale problemer", + "Warnings, errors and fatal issues" : "Advarsler, feil og fatale problemer", + "Errors and fatal issues" : "Feil og fatale problemer", + "Fatal issues only" : "Kun fatale problemer", + "Log" : "Logg", + "What to log" : "Hva som skal logges", + "Download logfile" : "Last ned loggfil", + "More" : "Mer", + "Less" : "Mindre", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Loggfilen er over 100 MB, nedlastingen kan ta en stund!", + "Security & setup warnings" : "Advarsler om sikkerhet og oppsett", "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å serveren 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." : "Den skrivebeskyttede konfigurasjonen er blitt aktivert. Dette forhindrer setting av visse konfigureringer via web-grensesnittet. Videre må config-filen gjøres skrivbar manuelt for hver oppdatering.", @@ -137,7 +163,15 @@ OC.L10N.register( "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Det var ikke mulig å kjøre cron-jobben vi CLI. Følgende tekniske feil oppstod:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Vennligst dobbeltsjekk <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installasjonsguidene ↗</a>, og se etter feil eller advarsler i <a href=\"#log-section\">loggen</a>.", "All checks passed." : "Alle sjekker bestått.", - "Open documentation" : "Åpne dokumentasjonen", + "Cron" : "Cron", + "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 er ikke utført ennå!", + "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 15. minutt.", + "Version" : "Versjon", + "Sharing" : "Deling", "Allow apps to use the Share API" : "Tillat apper å bruke API for Deling", "Allow users to share via link" : "Tillat brukere å dele via lenke", "Allow public uploads" : "Tillat offentlig opplasting", @@ -154,44 +188,7 @@ OC.L10N.register( "Exclude groups from sharing" : "Utelukk grupper fra deling", "These groups will still be able to receive shares, but not to initiate them." : "Disse gruppene vil fremdeles kunne motta delinger men ikke lage dem.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Tillat automatisk fullføring av brukernavn i delingsdialogen. Uten dette valget må hele brukernavnet oppgis.", - "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 er ikke utført ennå!", - "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 15. minutt.", - "Enable server-side encryption" : "Aktiver serverkryptering", - "Please read carefully before activating server-side encryption: " : "Vennligst les dette nøye før du aktiverer serverkrykptering:", - "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 serveren fra det tidspunktet av bli lagret kryptert på serveren. 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.", - "Be aware that encryption always increases the file size." : "Vær oppmerksom på at kryptering alltid øker filstørrelsen.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Det er alltid bra å ta regelmessig sikkerhetskopi av dataene dine. Pass på å ta kopi av krypteringsnøklene sammen med dataene når kryptering er i bruk.", - "This is the final warning: Do you really want to enable encryption?" : "Dette er siste advarsel: Vil du virkelig aktivere kryptering?", - "Enable encryption" : "Aktiver kryptering", - "No encryption module loaded, please enable an encryption module in the app menu." : "Ingen krypteringsmodul er lastet. Aktiver en krypteringsmodul i app-menyen.", - "Select default encryption module:" : "Velg standard krypteringsmodul:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Du må migrere krypteringsnøklene din fra den gamle krypteringen (ownCloud <= 8.0) til den nye. Vennligst aktiver \"Standard krypteringsmodul\" og kjør 'occ encryption:migrate'", - "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", - "This is used for sending out notifications." : "Dette brukes for utsending av varsler.", - "Send mode" : "Sendemåte", - "Encryption" : "Kryptering", - "From address" : "Fra adresse", - "mail" : "e-post", - "Authentication method" : "Autentiseringsmetode", - "Authentication required" : "Autentisering kreves", - "Server address" : "Server-adresse", - "Port" : "Port", - "Credentials" : "Påloggingsdetaljer", - "SMTP Username" : "SMTP-brukernavn", - "SMTP Password" : "SMTP-passord", - "Store credentials" : "Lagre påloggingsdetaljer", - "Test email settings" : "Test innstillinger for e-post", - "Send email" : "Send e-post", - "What to log" : "Hva som skal logges", - "Download logfile" : "Last ned loggfil", - "More" : "Mer", - "Less" : "Mindre", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Loggfilen er over 100 MB, nedlastingen kan ta en stund!", + "Tips & tricks" : "Tips og triks", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite brukes som database. For større installasjoner anbefaler vi å bytte til en annen database-server.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "SQLite er spesielt frarådet om man bruker desktopklienten til 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>.", @@ -201,7 +198,6 @@ OC.L10N.register( "Improving the config.php" : "Tilpasninger i config.php", "Theming" : "Temaer", "Hardening and security guidance" : "Herding og sikkerhetsveiledning", - "Version" : "Versjon", "Developer documentation" : "Utviklerdokumentasjon", "Experimental applications ahead" : "Eksperimentelle applikasjoner forut", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Eksperimentelle apper er ikke sjekket for sikkerhetsproblemer. De er nye eller de anses som ustabile og under stadig utvikling. Å installere slike apper kan forårsake tap av data eller brudd på sikkerheten.", @@ -253,14 +249,14 @@ OC.L10N.register( "Change password" : "Endre passord", "Language" : "Språk", "Help translate" : "Bidra til oversettelsen", - "Name" : "Navn", - "Username" : "Brukernavn", - "Done" : "Ferdig", "Get the apps to sync your files" : "Hent apper som synkroniserer filene dine", "Desktop client" : "Skrivebordsklient", "Android app" : "Android-app", "iOS app" : "iOS-app", "Show First Run Wizard again" : "Vis \"Førstegangs veiviser\" på nytt", + "Name" : "Navn", + "Username" : "Brukernavn", + "Done" : "Ferdig", "Show storage location" : "Vis lagringssted", "Show last log in" : "Vis site innlogging", "Show user backend" : "Vis bruker-server", @@ -279,6 +275,10 @@ OC.L10N.register( "change full name" : "endre fullt navn", "set new password" : "sett nytt passord", "change email address" : "endre e-postadresse", - "Default" : "Standard" + "Default" : "Standard", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Ekstern lagring", + "Updates" : "Oppdateringer" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/nb_NO.json b/settings/l10n/nb_NO.json index 917b7f49ad4..eef9e799d86 100644 --- a/settings/l10n/nb_NO.json +++ b/settings/l10n/nb_NO.json @@ -1,14 +1,14 @@ { "translations": { + "Enabled" : "Aktiv", + "Not enabled" : "Ikke aktivert", "Wrong password" : "Feil passord", "Saved" : "Lagret", "No user supplied" : "Ingen bruker angitt", + "Unable to change password" : "Kunne ikke endre passord", "Authentication error" : "Autentiseringsfeil", "Please provide an admin recovery password, otherwise all user data will be lost" : "Vennligst oppgi et administrativt gjenopprettingspassord. Ellers vil alle brukerdata gå tapt", "Wrong admin recovery password. Please check the password and try again." : "Feil administrativt gjenopprettingspassord. Sjekk passordet og prøv igjen.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Serveren støtter ikke endring av passord, men oppdatering av brukerens krypteringsnøkkel var vellykket.", - "Unable to change password" : "Kunne ikke endre passord", - "Enabled" : "Aktiv", - "Not enabled" : "Ikke aktivert", "installing and updating apps via the app store or Federated Cloud Sharing" : "installering og oppdatering av apper via app-butikken eller ved deling i Sammenknyttet sky", "Federated Cloud Sharing" : "Sammenknyttet sky-deling", "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL bruker en utdatert %s-versjon (%s). Vennligst oppdater operativsystemet ditt; ellers vil ikke funksjoner som %s virke korrekt.", @@ -33,17 +33,6 @@ "Email saved" : "Epost lagret", "Your full name has been changed." : "Ditt fulle navn er blitt endret.", "Unable to change full name" : "Klarte ikke å endre fullt navn", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Advarsler om sikkerhet og oppsett", - "Sharing" : "Deling", - "Server-side encryption" : "Serverkryptering", - "External Storage" : "Ekstern lagring", - "Cron" : "Cron", - "Email server" : "E-postserver", - "Log" : "Logg", - "Tips & tricks" : "Tips og triks", - "Updates" : "Oppdateringer", "Couldn't remove app." : "Klarte ikke å fjerne app.", "Language changed" : "Språk endret", "Invalid request" : "Ugyldig forespørsel", @@ -109,17 +98,54 @@ "Unlimited" : "Ubegrenset", "Personal info" : "Personlig informasjon", "Sync clients" : "Synkroniseringsklienter", - "Everything (fatal issues, errors, warnings, info, debug)" : "Alt (fatale problemer, feil, advarsler, info, debug)", - "Info, warnings, errors and fatal issues" : "Info, advarsler, feil og fatale problemer", - "Warnings, errors and fatal issues" : "Advarsler, feil og fatale problemer", - "Errors and fatal issues" : "Feil og fatale problemer", - "Fatal issues only" : "Kun fatale problemer", "None" : "Ingen", "Login" : "Logg inn", "Plain" : "Enkel", "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", + "Email server" : "E-postserver", + "Open documentation" : "Åpne dokumentasjonen", + "This is used for sending out notifications." : "Dette brukes for utsending av varsler.", + "Send mode" : "Sendemåte", + "Encryption" : "Kryptering", + "From address" : "Fra adresse", + "mail" : "e-post", + "Authentication method" : "Autentiseringsmetode", + "Authentication required" : "Autentisering kreves", + "Server address" : "Server-adresse", + "Port" : "Port", + "Credentials" : "Påloggingsdetaljer", + "SMTP Username" : "SMTP-brukernavn", + "SMTP Password" : "SMTP-passord", + "Store credentials" : "Lagre påloggingsdetaljer", + "Test email settings" : "Test innstillinger for e-post", + "Send email" : "Send e-post", + "Server-side encryption" : "Serverkryptering", + "Enable server-side encryption" : "Aktiver serverkryptering", + "Please read carefully before activating server-side encryption: " : "Vennligst les dette nøye før du aktiverer serverkrykptering:", + "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 serveren fra det tidspunktet av bli lagret kryptert på serveren. 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.", + "Be aware that encryption always increases the file size." : "Vær oppmerksom på at kryptering alltid øker filstørrelsen.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Det er alltid bra å ta regelmessig sikkerhetskopi av dataene dine. Pass på å ta kopi av krypteringsnøklene sammen med dataene når kryptering er i bruk.", + "This is the final warning: Do you really want to enable encryption?" : "Dette er siste advarsel: Vil du virkelig aktivere kryptering?", + "Enable encryption" : "Aktiver kryptering", + "No encryption module loaded, please enable an encryption module in the app menu." : "Ingen krypteringsmodul er lastet. Aktiver en krypteringsmodul i app-menyen.", + "Select default encryption module:" : "Velg standard krypteringsmodul:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Du må migrere krypteringsnøklene din fra den gamle krypteringen (ownCloud <= 8.0) til den nye. Vennligst aktiver \"Standard krypteringsmodul\" og kjør 'occ encryption:migrate'", + "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", + "Everything (fatal issues, errors, warnings, info, debug)" : "Alt (fatale problemer, feil, advarsler, info, debug)", + "Info, warnings, errors and fatal issues" : "Info, advarsler, feil og fatale problemer", + "Warnings, errors and fatal issues" : "Advarsler, feil og fatale problemer", + "Errors and fatal issues" : "Feil og fatale problemer", + "Fatal issues only" : "Kun fatale problemer", + "Log" : "Logg", + "What to log" : "Hva som skal logges", + "Download logfile" : "Last ned loggfil", + "More" : "Mer", + "Less" : "Mindre", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Loggfilen er over 100 MB, nedlastingen kan ta en stund!", + "Security & setup warnings" : "Advarsler om sikkerhet og oppsett", "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å serveren 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." : "Den skrivebeskyttede konfigurasjonen er blitt aktivert. Dette forhindrer setting av visse konfigureringer via web-grensesnittet. Videre må config-filen gjøres skrivbar manuelt for hver oppdatering.", @@ -135,7 +161,15 @@ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Det var ikke mulig å kjøre cron-jobben vi CLI. Følgende tekniske feil oppstod:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Vennligst dobbeltsjekk <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installasjonsguidene ↗</a>, og se etter feil eller advarsler i <a href=\"#log-section\">loggen</a>.", "All checks passed." : "Alle sjekker bestått.", - "Open documentation" : "Åpne dokumentasjonen", + "Cron" : "Cron", + "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 er ikke utført ennå!", + "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 15. minutt.", + "Version" : "Versjon", + "Sharing" : "Deling", "Allow apps to use the Share API" : "Tillat apper å bruke API for Deling", "Allow users to share via link" : "Tillat brukere å dele via lenke", "Allow public uploads" : "Tillat offentlig opplasting", @@ -152,44 +186,7 @@ "Exclude groups from sharing" : "Utelukk grupper fra deling", "These groups will still be able to receive shares, but not to initiate them." : "Disse gruppene vil fremdeles kunne motta delinger men ikke lage dem.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Tillat automatisk fullføring av brukernavn i delingsdialogen. Uten dette valget må hele brukernavnet oppgis.", - "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 er ikke utført ennå!", - "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 15. minutt.", - "Enable server-side encryption" : "Aktiver serverkryptering", - "Please read carefully before activating server-side encryption: " : "Vennligst les dette nøye før du aktiverer serverkrykptering:", - "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 serveren fra det tidspunktet av bli lagret kryptert på serveren. 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.", - "Be aware that encryption always increases the file size." : "Vær oppmerksom på at kryptering alltid øker filstørrelsen.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Det er alltid bra å ta regelmessig sikkerhetskopi av dataene dine. Pass på å ta kopi av krypteringsnøklene sammen med dataene når kryptering er i bruk.", - "This is the final warning: Do you really want to enable encryption?" : "Dette er siste advarsel: Vil du virkelig aktivere kryptering?", - "Enable encryption" : "Aktiver kryptering", - "No encryption module loaded, please enable an encryption module in the app menu." : "Ingen krypteringsmodul er lastet. Aktiver en krypteringsmodul i app-menyen.", - "Select default encryption module:" : "Velg standard krypteringsmodul:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Du må migrere krypteringsnøklene din fra den gamle krypteringen (ownCloud <= 8.0) til den nye. Vennligst aktiver \"Standard krypteringsmodul\" og kjør 'occ encryption:migrate'", - "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", - "This is used for sending out notifications." : "Dette brukes for utsending av varsler.", - "Send mode" : "Sendemåte", - "Encryption" : "Kryptering", - "From address" : "Fra adresse", - "mail" : "e-post", - "Authentication method" : "Autentiseringsmetode", - "Authentication required" : "Autentisering kreves", - "Server address" : "Server-adresse", - "Port" : "Port", - "Credentials" : "Påloggingsdetaljer", - "SMTP Username" : "SMTP-brukernavn", - "SMTP Password" : "SMTP-passord", - "Store credentials" : "Lagre påloggingsdetaljer", - "Test email settings" : "Test innstillinger for e-post", - "Send email" : "Send e-post", - "What to log" : "Hva som skal logges", - "Download logfile" : "Last ned loggfil", - "More" : "Mer", - "Less" : "Mindre", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Loggfilen er over 100 MB, nedlastingen kan ta en stund!", + "Tips & tricks" : "Tips og triks", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite brukes som database. For større installasjoner anbefaler vi å bytte til en annen database-server.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "SQLite er spesielt frarådet om man bruker desktopklienten til 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>.", @@ -199,7 +196,6 @@ "Improving the config.php" : "Tilpasninger i config.php", "Theming" : "Temaer", "Hardening and security guidance" : "Herding og sikkerhetsveiledning", - "Version" : "Versjon", "Developer documentation" : "Utviklerdokumentasjon", "Experimental applications ahead" : "Eksperimentelle applikasjoner forut", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Eksperimentelle apper er ikke sjekket for sikkerhetsproblemer. De er nye eller de anses som ustabile og under stadig utvikling. Å installere slike apper kan forårsake tap av data eller brudd på sikkerheten.", @@ -251,14 +247,14 @@ "Change password" : "Endre passord", "Language" : "Språk", "Help translate" : "Bidra til oversettelsen", - "Name" : "Navn", - "Username" : "Brukernavn", - "Done" : "Ferdig", "Get the apps to sync your files" : "Hent apper som synkroniserer filene dine", "Desktop client" : "Skrivebordsklient", "Android app" : "Android-app", "iOS app" : "iOS-app", "Show First Run Wizard again" : "Vis \"Førstegangs veiviser\" på nytt", + "Name" : "Navn", + "Username" : "Brukernavn", + "Done" : "Ferdig", "Show storage location" : "Vis lagringssted", "Show last log in" : "Vis site innlogging", "Show user backend" : "Vis bruker-server", @@ -277,6 +273,10 @@ "change full name" : "endre fullt navn", "set new password" : "sett nytt passord", "change email address" : "endre e-postadresse", - "Default" : "Standard" + "Default" : "Standard", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Ekstern lagring", + "Updates" : "Oppdateringer" },"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 9747c2d3991..b477d16985c 100644 --- a/settings/l10n/nl.js +++ b/settings/l10n/nl.js @@ -1,16 +1,16 @@ OC.L10N.register( "settings", { + "Enabled" : "Geactiveerd", + "Not enabled" : "Niet ingeschakeld", "Wrong password" : "Onjuist wachtwoord", "Saved" : "Bewaard", "No user supplied" : "Geen gebruiker opgegeven", + "Unable to change password" : "Kan wachtwoord niet wijzigen", "Authentication error" : "Authenticatie fout", "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 successfully updated." : "De Back-end ondersteunt geen wachtwoordwijzigingen, maar de cryptosleutel van de gebruiker is succesvol bijgewerkt.", - "Unable to change password" : "Kan wachtwoord niet wijzigen", - "Enabled" : "Geactiveerd", - "Not enabled" : "Niet ingeschakeld", "installing and updating apps via the app store or Federated Cloud Sharing" : "installeren en bijwerken applicaties via de app store of Federated Cloud Sharing", "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.", @@ -35,17 +35,6 @@ OC.L10N.register( "Email saved" : "E-mail bewaard", "Your full name has been changed." : "Je volledige naam is gewijzigd.", "Unable to change full name" : "Kan de volledige naam niet wijzigen", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Beveiligings- en instellingswaarschuwingen", - "Sharing" : "Delen", - "Server-side encryption" : "Server-side versleuteling", - "External Storage" : "Externe opslag", - "Cron" : "Cron", - "Email server" : "E-mailserver", - "Log" : "Log", - "Tips & tricks" : "Tips & trucs", - "Updates" : "Updates", "Couldn't remove app." : "Kon app niet verwijderen.", "Language changed" : "Taal aangepast", "Invalid request" : "Ongeldige aanvraag", @@ -133,17 +122,55 @@ OC.L10N.register( "Sessions" : "Sessies", "App passwords" : "App wachtwoorden", "Sync clients" : "Sync clients", - "Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale problemen, fouten, waarschuwingen, info, debug)", - "Info, warnings, errors and fatal issues" : "Info, waarschuwingen, fouten en fatale problemen", - "Warnings, errors and fatal issues" : "Waarschuwingen, fouten en fatale problemen", - "Errors and fatal issues" : "Fouten en fatale problemen", - "Fatal issues only" : "Alleen fatale problemen", "None" : "Geen", "Login" : "Login", "Plain" : "Gewoon", "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", + "Email server" : "E-mailserver", + "Open documentation" : "Open documentatie", + "This is used for sending out notifications." : "Dit wordt gebruikt voor het verzenden van meldingen.", + "Send mode" : "Verstuurmodus", + "Encryption" : "Versleuteling", + "From address" : "Afzenderadres", + "mail" : "e-mail", + "Authentication method" : "Authenticatiemethode", + "Authentication required" : "Authenticatie vereist", + "Server address" : "Server adres", + "Port" : "Poort", + "Credentials" : "Inloggegevens", + "SMTP Username" : "SMTP gebruikersnaam", + "SMTP Password" : "SMTP wachtwoord", + "Store credentials" : "Opslaan inloggegevens", + "Test email settings" : "Test e-mailinstellingen", + "Send email" : "Versturen e-mail", + "Server-side encryption" : "Server-side versleuteling", + "Enable server-side encryption" : "Server-side versleuteling inschakelen", + "Please read carefully before activating server-side encryption: " : "Lees dit goed, voordat u de serverside versleuteling activeert:", + "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." : "Als versleuteling is ingeschakeld, worden alle geüploade bestanden vanaf dat moment versleuteld opgeslagen op de server. Het is alleen mogelijk om de versleuteling later uit te schakelen als de actieve versleutelingsmodule dit ondersteunt en aan alle pré-condities (mn de ingestelde herstelsleutel) wordt voldaan.", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Versleuteling alleen gerandeert geen beveiliging van het systeem. Lees de documentatie voor meer achtergrond over de werking van de crypto app an de relevante use cases.", + "Be aware that encryption always increases the file size." : "Let erop dat versleuteling de bestandsomvang altijd laat toenemen.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Het is altijd verstandig om regelmatig backups van je bestanden te maken. Zorg ervoor dat je in geval van versleuteling ook de cryptosleutel met je gegevens backupt.", + "This is the final warning: Do you really want to enable encryption?" : "Dit is de laatste waarschuwing: Wil je versleuteling echt inschakelen?", + "Enable encryption" : "Versleuteling inschakelen", + "No encryption module loaded, please enable an encryption module in the app menu." : "Er is geen cryptomodule geladen, activeer een cryptomodule in het appmenu", + "Select default encryption module:" : "Selecteer de standaard cryptomodule:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Je moet je cryptosleutels van de oude versleuteling (ownCloud <= 8.0) migreren naar de nieuwe. Activeer de \"Standaard cryptomodule\" en start 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Je moet je cryptosleutels van de oude versleuteling (ownCloud <= 8.0) migreren naar de nieuwe.", + "Start migration" : "Start migratie", + "Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale problemen, fouten, waarschuwingen, info, debug)", + "Info, warnings, errors and fatal issues" : "Info, waarschuwingen, fouten en fatale problemen", + "Warnings, errors and fatal issues" : "Waarschuwingen, fouten en fatale problemen", + "Errors and fatal issues" : "Fouten en fatale problemen", + "Fatal issues only" : "Alleen fatale problemen", + "Log" : "Log", + "What to log" : "Wat loggen", + "Download logfile" : "Download logbestand", + "More" : "Meer", + "Less" : "Minder", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Het logbestand is groter dan 100MB. Downloaden kost even tijd!", + "Security & setup warnings" : "Beveiligings- en instellingswaarschuwingen", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php lijkt niet goed te zijn ingesteld om systeemomgevingsvariabelen te bevragen. De test met getenv(\"PATH\") gaf een leeg resultaat.", "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." : "Lees de <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installatiedocumentatie ↗</a> voor php configuratienotities en de php configuratie van je server, zeker bij gebruik van 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." : "De Alleen-lezen config is geactiveerd. Dit voorkomt het via de webinterface wijzigen van verschillende instellingen. Bovendien moet het bestand voor elke aanpassing handmatig op beschrijfbaar worden ingesteld.", @@ -160,7 +187,15 @@ OC.L10N.register( "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "het was niet mogelijk om de cronjob via CLI uit te voeren. De volgende technische problemen traden op:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Lees de <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installatie handleiding</a> goed door en controleer op fouten en waarschuwingen in de <a href=\"#log-section\">logging</a>.", "All checks passed." : "Alle checks geslaagd", - "Open documentation" : "Open documentatie", + "Cron" : "Cron", + "Last cron job execution: %s." : "Laatst uitgevoerde cronjob: %s.", + "Last cron job execution: %s. Something seems wrong." : "Laatst uitgevoerde cronjob: %s. Er lijkt iets fout gegaan.", + "Cron was not executed yet!" : "Cron is nog niet uitgevoerd!", + "Execute one task with each page loaded" : "Bij laden van elke pagina één taak uitvoeren", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php is geregisteerd bij een webcron service om elke 15 minuten cron.php over http aan te roepen.", + "Use system's cron service to call the cron.php file every 15 minutes." : "Gebruik de systeem cron service om cron.php elke 15 minuten aan te roepen.", + "Version" : "Versie", + "Sharing" : "Delen", "Allow apps to use the Share API" : "Apps toestaan de Share API te gebruiken", "Allow users to share via link" : "Sta gebruikers toe om te delen via een link", "Allow public uploads" : "Sta publieke uploads toe", @@ -177,45 +212,7 @@ OC.L10N.register( "Exclude groups from sharing" : "Sluit groepen uit van delen", "These groups will still be able to receive shares, but not to initiate them." : "Deze groepen kunnen gedeelde mappen bestanden ontvangen, maar kunnen ze niet starten.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Sta auto-aanvullen van gebruikersnaam toe in de Delen-dialoog. Als dit is uitgeschakeld, moet de gebruikersnaam volledig worden ingevuld.", - "Last cron job execution: %s." : "Laatst uitgevoerde cronjob: %s.", - "Last cron job execution: %s. Something seems wrong." : "Laatst uitgevoerde cronjob: %s. Er lijkt iets fout gegaan.", - "Cron was not executed yet!" : "Cron is nog niet uitgevoerd!", - "Execute one task with each page loaded" : "Bij laden van elke pagina één taak uitvoeren", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php is geregisteerd bij een webcron service om elke 15 minuten cron.php over http aan te roepen.", - "Use system's cron service to call the cron.php file every 15 minutes." : "Gebruik de systeem cron service om cron.php elke 15 minuten aan te roepen.", - "Enable server-side encryption" : "Server-side versleuteling inschakelen", - "Please read carefully before activating server-side encryption: " : "Lees dit goed, voordat u de serverside versleuteling activeert:", - "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." : "Als versleuteling is ingeschakeld, worden alle geüploade bestanden vanaf dat moment versleuteld opgeslagen op de server. Het is alleen mogelijk om de versleuteling later uit te schakelen als de actieve versleutelingsmodule dit ondersteunt en aan alle pré-condities (mn de ingestelde herstelsleutel) wordt voldaan.", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Versleuteling alleen gerandeert geen beveiliging van het systeem. Lees de documentatie voor meer achtergrond over de werking van de crypto app an de relevante use cases.", - "Be aware that encryption always increases the file size." : "Let erop dat versleuteling de bestandsomvang altijd laat toenemen.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Het is altijd verstandig om regelmatig backups van je bestanden te maken. Zorg ervoor dat je in geval van versleuteling ook de cryptosleutel met je gegevens backupt.", - "This is the final warning: Do you really want to enable encryption?" : "Dit is de laatste waarschuwing: Wil je versleuteling echt inschakelen?", - "Enable encryption" : "Versleuteling inschakelen", - "No encryption module loaded, please enable an encryption module in the app menu." : "Er is geen cryptomodule geladen, activeer een cryptomodule in het appmenu", - "Select default encryption module:" : "Selecteer de standaard cryptomodule:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Je moet je cryptosleutels van de oude versleuteling (ownCloud <= 8.0) migreren naar de nieuwe. Activeer de \"Standaard cryptomodule\" en start 'occ encryption:migrate'", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Je moet je cryptosleutels van de oude versleuteling (ownCloud <= 8.0) migreren naar de nieuwe.", - "Start migration" : "Start migratie", - "This is used for sending out notifications." : "Dit wordt gebruikt voor het verzenden van meldingen.", - "Send mode" : "Verstuurmodus", - "Encryption" : "Versleuteling", - "From address" : "Afzenderadres", - "mail" : "e-mail", - "Authentication method" : "Authenticatiemethode", - "Authentication required" : "Authenticatie vereist", - "Server address" : "Server adres", - "Port" : "Poort", - "Credentials" : "Inloggegevens", - "SMTP Username" : "SMTP gebruikersnaam", - "SMTP Password" : "SMTP wachtwoord", - "Store credentials" : "Opslaan inloggegevens", - "Test email settings" : "Test e-mailinstellingen", - "Send email" : "Versturen e-mail", - "What to log" : "Wat loggen", - "Download logfile" : "Download logbestand", - "More" : "Meer", - "Less" : "Minder", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Het logbestand is groter dan 100MB. Downloaden kost even tijd!", + "Tips & tricks" : "Tips & trucs", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite wordt gebruikt als database. Voor grotere installaties adviseren we om te schakelen naar een andere database engine.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Vooral wanneer de desktop client wordt gebruik voor bestandssynchronisatie wordt gebruik van sqlite afgeraden.", "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>." : "Om te migreren naar een andere database moet u de commandoregel tool gebruiken: 'occ db:convert-type', lees de <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentatie ↗</a>.", @@ -225,7 +222,6 @@ OC.L10N.register( "Improving the config.php" : "config.php verbeteren", "Theming" : "Thema's", "Hardening and security guidance" : "Hardening en security advies", - "Version" : "Versie", "Developer documentation" : "Ontwikkelaarsdocumentatie", "Experimental applications ahead" : "Experimentele applicaties vooraan", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimentele apps zijn niet gecontroleerd op beveiligingsproblemen, zijn nieuw of staan bekend als instabiel en worden volop ontwikkeld. Installatie kan leiden tot gegevensverlies of beveiligingsincidenten.", @@ -281,6 +277,11 @@ OC.L10N.register( "Change password" : "Wijzig wachtwoord", "Language" : "Taal", "Help translate" : "Help met vertalen", + "Get the apps to sync your files" : "Download de apps om bestanden te synchroniseren", + "Desktop client" : "Desktop client", + "Android app" : "Android app", + "iOS app" : "iOS app", + "Show First Run Wizard again" : "Toon de Eerste start Wizard opnieuw", "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", @@ -291,13 +292,7 @@ OC.L10N.register( "Use the credentials below to configure your app or device." : "Gebruik onderstaande inloggegevens om je app of apparaat te configureren.", "Username" : "Gebruikersnaam", "Done" : "Gedaan", - "Get the apps to sync your files" : "Download de apps om bestanden te synchroniseren", - "Desktop client" : "Desktop client", - "Android app" : "Android app", - "iOS app" : "iOS app", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ondersteun het project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">ontwikkel het mee</a>\n\t\tof\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">verkondig het woord</a>!", - "Show First Run Wizard again" : "Toon de Eerste start Wizard opnieuw", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Ontwikkeld door de {communityopen}Nextcloud community{linkclose}, de {githubopen}broncode{linkclose} is gelicenseerd onder de {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", + "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}.", "Show storage location" : "Toon opslaglocatie", "Show last log in" : "Toon laatste inlog", "Show user backend" : "Toon backend gebruiker", @@ -321,6 +316,10 @@ OC.L10N.register( "change full name" : "wijzigen volledige naam", "set new password" : "Instellen nieuw wachtwoord", "change email address" : "wijzig e-mailadres", - "Default" : "Standaard" + "Default" : "Standaard", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Externe opslag", + "Updates" : "Updates" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/nl.json b/settings/l10n/nl.json index e5cb8d11020..62a009eedb6 100644 --- a/settings/l10n/nl.json +++ b/settings/l10n/nl.json @@ -1,14 +1,14 @@ { "translations": { + "Enabled" : "Geactiveerd", + "Not enabled" : "Niet ingeschakeld", "Wrong password" : "Onjuist wachtwoord", "Saved" : "Bewaard", "No user supplied" : "Geen gebruiker opgegeven", + "Unable to change password" : "Kan wachtwoord niet wijzigen", "Authentication error" : "Authenticatie fout", "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 successfully updated." : "De Back-end ondersteunt geen wachtwoordwijzigingen, maar de cryptosleutel van de gebruiker is succesvol bijgewerkt.", - "Unable to change password" : "Kan wachtwoord niet wijzigen", - "Enabled" : "Geactiveerd", - "Not enabled" : "Niet ingeschakeld", "installing and updating apps via the app store or Federated Cloud Sharing" : "installeren en bijwerken applicaties via de app store of Federated Cloud Sharing", "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.", @@ -33,17 +33,6 @@ "Email saved" : "E-mail bewaard", "Your full name has been changed." : "Je volledige naam is gewijzigd.", "Unable to change full name" : "Kan de volledige naam niet wijzigen", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Beveiligings- en instellingswaarschuwingen", - "Sharing" : "Delen", - "Server-side encryption" : "Server-side versleuteling", - "External Storage" : "Externe opslag", - "Cron" : "Cron", - "Email server" : "E-mailserver", - "Log" : "Log", - "Tips & tricks" : "Tips & trucs", - "Updates" : "Updates", "Couldn't remove app." : "Kon app niet verwijderen.", "Language changed" : "Taal aangepast", "Invalid request" : "Ongeldige aanvraag", @@ -131,17 +120,55 @@ "Sessions" : "Sessies", "App passwords" : "App wachtwoorden", "Sync clients" : "Sync clients", - "Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale problemen, fouten, waarschuwingen, info, debug)", - "Info, warnings, errors and fatal issues" : "Info, waarschuwingen, fouten en fatale problemen", - "Warnings, errors and fatal issues" : "Waarschuwingen, fouten en fatale problemen", - "Errors and fatal issues" : "Fouten en fatale problemen", - "Fatal issues only" : "Alleen fatale problemen", "None" : "Geen", "Login" : "Login", "Plain" : "Gewoon", "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", + "Email server" : "E-mailserver", + "Open documentation" : "Open documentatie", + "This is used for sending out notifications." : "Dit wordt gebruikt voor het verzenden van meldingen.", + "Send mode" : "Verstuurmodus", + "Encryption" : "Versleuteling", + "From address" : "Afzenderadres", + "mail" : "e-mail", + "Authentication method" : "Authenticatiemethode", + "Authentication required" : "Authenticatie vereist", + "Server address" : "Server adres", + "Port" : "Poort", + "Credentials" : "Inloggegevens", + "SMTP Username" : "SMTP gebruikersnaam", + "SMTP Password" : "SMTP wachtwoord", + "Store credentials" : "Opslaan inloggegevens", + "Test email settings" : "Test e-mailinstellingen", + "Send email" : "Versturen e-mail", + "Server-side encryption" : "Server-side versleuteling", + "Enable server-side encryption" : "Server-side versleuteling inschakelen", + "Please read carefully before activating server-side encryption: " : "Lees dit goed, voordat u de serverside versleuteling activeert:", + "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." : "Als versleuteling is ingeschakeld, worden alle geüploade bestanden vanaf dat moment versleuteld opgeslagen op de server. Het is alleen mogelijk om de versleuteling later uit te schakelen als de actieve versleutelingsmodule dit ondersteunt en aan alle pré-condities (mn de ingestelde herstelsleutel) wordt voldaan.", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Versleuteling alleen gerandeert geen beveiliging van het systeem. Lees de documentatie voor meer achtergrond over de werking van de crypto app an de relevante use cases.", + "Be aware that encryption always increases the file size." : "Let erop dat versleuteling de bestandsomvang altijd laat toenemen.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Het is altijd verstandig om regelmatig backups van je bestanden te maken. Zorg ervoor dat je in geval van versleuteling ook de cryptosleutel met je gegevens backupt.", + "This is the final warning: Do you really want to enable encryption?" : "Dit is de laatste waarschuwing: Wil je versleuteling echt inschakelen?", + "Enable encryption" : "Versleuteling inschakelen", + "No encryption module loaded, please enable an encryption module in the app menu." : "Er is geen cryptomodule geladen, activeer een cryptomodule in het appmenu", + "Select default encryption module:" : "Selecteer de standaard cryptomodule:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Je moet je cryptosleutels van de oude versleuteling (ownCloud <= 8.0) migreren naar de nieuwe. Activeer de \"Standaard cryptomodule\" en start 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Je moet je cryptosleutels van de oude versleuteling (ownCloud <= 8.0) migreren naar de nieuwe.", + "Start migration" : "Start migratie", + "Everything (fatal issues, errors, warnings, info, debug)" : "Alles (fatale problemen, fouten, waarschuwingen, info, debug)", + "Info, warnings, errors and fatal issues" : "Info, waarschuwingen, fouten en fatale problemen", + "Warnings, errors and fatal issues" : "Waarschuwingen, fouten en fatale problemen", + "Errors and fatal issues" : "Fouten en fatale problemen", + "Fatal issues only" : "Alleen fatale problemen", + "Log" : "Log", + "What to log" : "Wat loggen", + "Download logfile" : "Download logbestand", + "More" : "Meer", + "Less" : "Minder", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Het logbestand is groter dan 100MB. Downloaden kost even tijd!", + "Security & setup warnings" : "Beveiligings- en instellingswaarschuwingen", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php lijkt niet goed te zijn ingesteld om systeemomgevingsvariabelen te bevragen. De test met getenv(\"PATH\") gaf een leeg resultaat.", "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." : "Lees de <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installatiedocumentatie ↗</a> voor php configuratienotities en de php configuratie van je server, zeker bij gebruik van 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." : "De Alleen-lezen config is geactiveerd. Dit voorkomt het via de webinterface wijzigen van verschillende instellingen. Bovendien moet het bestand voor elke aanpassing handmatig op beschrijfbaar worden ingesteld.", @@ -158,7 +185,15 @@ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "het was niet mogelijk om de cronjob via CLI uit te voeren. De volgende technische problemen traden op:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Lees de <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installatie handleiding</a> goed door en controleer op fouten en waarschuwingen in de <a href=\"#log-section\">logging</a>.", "All checks passed." : "Alle checks geslaagd", - "Open documentation" : "Open documentatie", + "Cron" : "Cron", + "Last cron job execution: %s." : "Laatst uitgevoerde cronjob: %s.", + "Last cron job execution: %s. Something seems wrong." : "Laatst uitgevoerde cronjob: %s. Er lijkt iets fout gegaan.", + "Cron was not executed yet!" : "Cron is nog niet uitgevoerd!", + "Execute one task with each page loaded" : "Bij laden van elke pagina één taak uitvoeren", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php is geregisteerd bij een webcron service om elke 15 minuten cron.php over http aan te roepen.", + "Use system's cron service to call the cron.php file every 15 minutes." : "Gebruik de systeem cron service om cron.php elke 15 minuten aan te roepen.", + "Version" : "Versie", + "Sharing" : "Delen", "Allow apps to use the Share API" : "Apps toestaan de Share API te gebruiken", "Allow users to share via link" : "Sta gebruikers toe om te delen via een link", "Allow public uploads" : "Sta publieke uploads toe", @@ -175,45 +210,7 @@ "Exclude groups from sharing" : "Sluit groepen uit van delen", "These groups will still be able to receive shares, but not to initiate them." : "Deze groepen kunnen gedeelde mappen bestanden ontvangen, maar kunnen ze niet starten.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Sta auto-aanvullen van gebruikersnaam toe in de Delen-dialoog. Als dit is uitgeschakeld, moet de gebruikersnaam volledig worden ingevuld.", - "Last cron job execution: %s." : "Laatst uitgevoerde cronjob: %s.", - "Last cron job execution: %s. Something seems wrong." : "Laatst uitgevoerde cronjob: %s. Er lijkt iets fout gegaan.", - "Cron was not executed yet!" : "Cron is nog niet uitgevoerd!", - "Execute one task with each page loaded" : "Bij laden van elke pagina één taak uitvoeren", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php is geregisteerd bij een webcron service om elke 15 minuten cron.php over http aan te roepen.", - "Use system's cron service to call the cron.php file every 15 minutes." : "Gebruik de systeem cron service om cron.php elke 15 minuten aan te roepen.", - "Enable server-side encryption" : "Server-side versleuteling inschakelen", - "Please read carefully before activating server-side encryption: " : "Lees dit goed, voordat u de serverside versleuteling activeert:", - "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." : "Als versleuteling is ingeschakeld, worden alle geüploade bestanden vanaf dat moment versleuteld opgeslagen op de server. Het is alleen mogelijk om de versleuteling later uit te schakelen als de actieve versleutelingsmodule dit ondersteunt en aan alle pré-condities (mn de ingestelde herstelsleutel) wordt voldaan.", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Versleuteling alleen gerandeert geen beveiliging van het systeem. Lees de documentatie voor meer achtergrond over de werking van de crypto app an de relevante use cases.", - "Be aware that encryption always increases the file size." : "Let erop dat versleuteling de bestandsomvang altijd laat toenemen.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Het is altijd verstandig om regelmatig backups van je bestanden te maken. Zorg ervoor dat je in geval van versleuteling ook de cryptosleutel met je gegevens backupt.", - "This is the final warning: Do you really want to enable encryption?" : "Dit is de laatste waarschuwing: Wil je versleuteling echt inschakelen?", - "Enable encryption" : "Versleuteling inschakelen", - "No encryption module loaded, please enable an encryption module in the app menu." : "Er is geen cryptomodule geladen, activeer een cryptomodule in het appmenu", - "Select default encryption module:" : "Selecteer de standaard cryptomodule:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Je moet je cryptosleutels van de oude versleuteling (ownCloud <= 8.0) migreren naar de nieuwe. Activeer de \"Standaard cryptomodule\" en start 'occ encryption:migrate'", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Je moet je cryptosleutels van de oude versleuteling (ownCloud <= 8.0) migreren naar de nieuwe.", - "Start migration" : "Start migratie", - "This is used for sending out notifications." : "Dit wordt gebruikt voor het verzenden van meldingen.", - "Send mode" : "Verstuurmodus", - "Encryption" : "Versleuteling", - "From address" : "Afzenderadres", - "mail" : "e-mail", - "Authentication method" : "Authenticatiemethode", - "Authentication required" : "Authenticatie vereist", - "Server address" : "Server adres", - "Port" : "Poort", - "Credentials" : "Inloggegevens", - "SMTP Username" : "SMTP gebruikersnaam", - "SMTP Password" : "SMTP wachtwoord", - "Store credentials" : "Opslaan inloggegevens", - "Test email settings" : "Test e-mailinstellingen", - "Send email" : "Versturen e-mail", - "What to log" : "Wat loggen", - "Download logfile" : "Download logbestand", - "More" : "Meer", - "Less" : "Minder", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Het logbestand is groter dan 100MB. Downloaden kost even tijd!", + "Tips & tricks" : "Tips & trucs", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite wordt gebruikt als database. Voor grotere installaties adviseren we om te schakelen naar een andere database engine.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Vooral wanneer de desktop client wordt gebruik voor bestandssynchronisatie wordt gebruik van sqlite afgeraden.", "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>." : "Om te migreren naar een andere database moet u de commandoregel tool gebruiken: 'occ db:convert-type', lees de <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentatie ↗</a>.", @@ -223,7 +220,6 @@ "Improving the config.php" : "config.php verbeteren", "Theming" : "Thema's", "Hardening and security guidance" : "Hardening en security advies", - "Version" : "Versie", "Developer documentation" : "Ontwikkelaarsdocumentatie", "Experimental applications ahead" : "Experimentele applicaties vooraan", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimentele apps zijn niet gecontroleerd op beveiligingsproblemen, zijn nieuw of staan bekend als instabiel en worden volop ontwikkeld. Installatie kan leiden tot gegevensverlies of beveiligingsincidenten.", @@ -279,6 +275,11 @@ "Change password" : "Wijzig wachtwoord", "Language" : "Taal", "Help translate" : "Help met vertalen", + "Get the apps to sync your files" : "Download de apps om bestanden te synchroniseren", + "Desktop client" : "Desktop client", + "Android app" : "Android app", + "iOS app" : "iOS app", + "Show First Run Wizard again" : "Toon de Eerste start Wizard opnieuw", "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", @@ -289,13 +290,7 @@ "Use the credentials below to configure your app or device." : "Gebruik onderstaande inloggegevens om je app of apparaat te configureren.", "Username" : "Gebruikersnaam", "Done" : "Gedaan", - "Get the apps to sync your files" : "Download de apps om bestanden te synchroniseren", - "Desktop client" : "Desktop client", - "Android app" : "Android app", - "iOS app" : "iOS app", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ondersteun het project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">ontwikkel het mee</a>\n\t\tof\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">verkondig het woord</a>!", - "Show First Run Wizard again" : "Toon de Eerste start Wizard opnieuw", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Ontwikkeld door de {communityopen}Nextcloud community{linkclose}, de {githubopen}broncode{linkclose} is gelicenseerd onder de {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", + "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}.", "Show storage location" : "Toon opslaglocatie", "Show last log in" : "Toon laatste inlog", "Show user backend" : "Toon backend gebruiker", @@ -319,6 +314,10 @@ "change full name" : "wijzigen volledige naam", "set new password" : "Instellen nieuw wachtwoord", "change email address" : "wijzig e-mailadres", - "Default" : "Standaard" + "Default" : "Standaard", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Externe opslag", + "Updates" : "Updates" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/settings/l10n/pt_BR.js b/settings/l10n/pt_BR.js index 1ef37d471fd..cf2ce7d08ec 100644 --- a/settings/l10n/pt_BR.js +++ b/settings/l10n/pt_BR.js @@ -1,16 +1,16 @@ OC.L10N.register( "settings", { + "Enabled" : "Habilitado", + "Not enabled" : "Desabilitado", "Wrong password" : "Senha incorreta", "Saved" : "Salvo", "No user supplied" : "Nenhum usuário fornecido", + "Unable to change password" : "Não é possível modificar a senha", "Authentication error" : "Erro de autenticação", "Please provide an admin recovery password, otherwise all user data will be lost" : "Por favor, forneça uma senha de recuperação admin, caso contrário todos os dados do usuário serão perdidos", "Wrong admin recovery password. Please check the password and try again." : "Senha de recuperação do administrador incorreta. Por favor, verifique a senha e tente novamente.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Back-end não suporta alteração de senha, mas a chave de criptografia do usuário foi atualizada com sucesso.", - "Unable to change password" : "Não é possível modificar a senha", - "Enabled" : "Habilitado", - "Not enabled" : "Desabilitado", "installing and updating apps via the app store or Federated Cloud Sharing" : "instalando e atualizando aplicativos via app store ou Nuvem Compartilhada Federada", "Federated Cloud Sharing" : "Compartilhamento de Nuvem Conglomerada", "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL está usando um desatualizado %s versão (%s). Por favor, atualize seu sistema operacional ou recursos como %s não vai funcionar de forma confiável.", @@ -35,17 +35,6 @@ OC.L10N.register( "Email saved" : "E-mail salvo", "Your full name has been changed." : "Seu nome completo foi alterado.", "Unable to change full name" : "Não é possível alterar o nome completo", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Segurança & avisos de configuração", - "Sharing" : "Compartilhamento", - "Server-side encryption" : "Criptografia do lado do servidor", - "External Storage" : "Armazenamento externo", - "Cron" : "Cron", - "Email server" : "Servidor de e-mail", - "Log" : "Registro", - "Tips & tricks" : "Dicas & Truques", - "Updates" : "Atualizações", "Couldn't remove app." : "Não foi possível remover aplicativos.", "Language changed" : "Idioma alterado", "Invalid request" : "Pedido inválido", @@ -98,6 +87,10 @@ OC.L10N.register( "Android Client" : "Cliente Android", "Sync client - {os}" : "Sincronizar cliente - {os}", "This session" : "Esta sessão", + "Copied!" : "Copiado!", + "Not supported!" : "Não Suportado!", + "Press ⌘-C to copy." : "Pressione ⌘-C para copiar", + "Press Ctrl-C to copy." : "Pressione Ctrl+C para copiar", "Error while loading browser sessions and device tokens" : "Erro durante carregamento de sessões do navegador e tokens de dispositivos", "Error while creating device token" : "Erro ao criar token de dispositivo", "Error while deleting the token" : "Erro ao excluir o token", @@ -133,17 +126,55 @@ OC.L10N.register( "Sessions" : "Sessões", "App passwords" : "Senhas de aplicativos", "Sync clients" : "Clientes de Sincronização", - "Everything (fatal issues, errors, warnings, info, debug)" : "Tudo (questões fatais, erros, avisos, informações, depuração)", - "Info, warnings, errors and fatal issues" : "Informações, avisos, erros e problemas fatais", - "Warnings, errors and fatal issues" : "Avisos, erros e problemas fatais", - "Errors and fatal issues" : "Erros e problemas fatais", - "Fatal issues only" : "Somente questões fatais", "None" : "Nada", "Login" : "Login", "Plain" : "Plano", "NT LAN Manager" : "Gerenciador NT LAN", "SSL" : "SSL", "TLS" : "TLS", + "Email server" : "Servidor de e-mail", + "Open documentation" : "Abrir documentação", + "This is used for sending out notifications." : "Isto é usado para o envio de notificações.", + "Send mode" : "Modo enviar", + "Encryption" : "Criptografia", + "From address" : "Do Endereço", + "mail" : "email", + "Authentication method" : "Método de autenticação", + "Authentication required" : "Autenticação é requerida", + "Server address" : "Endereço do servidor", + "Port" : "Porta", + "Credentials" : "Credenciais", + "SMTP Username" : "Nome do Usuário SMTP", + "SMTP Password" : "Senha SMTP", + "Store credentials" : "Armazenar credenciais", + "Test email settings" : "Configurações de e-mail de teste", + "Send email" : "Enviar email", + "Server-side encryption" : "Criptografia do lado do servidor", + "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 carregados para o servidor a partir desse ponto em diante serão criptografados e estarão disponíveis no servidor. Só será possível desativar a criptografia em uma data posterior, se o módulo de criptografia ativo suporta essa função, e todas as pré-condições sejam cumpridas(por exemplo, definindo uma chave de recuperação).", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Encriptação, por si só, não garante segurança do sistema. Por favor, veja a documentação para mais informações sobe como o aplicativo de encriptação funciona e os casos de uso suportados.", + "Be aware that encryption always increases the file size." : "Esteja ciente de que a criptografia sempre aumenta o tamanho do arquivo.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "É sempre bom criar backups regulares dos seus dados, em caso de criptografia certifique-se de fazer backup das chaves de criptografia, juntamente com os seus dados.", + "This is the final warning: Do you really want to enable encryption?" : "Este é o aviso final: Você realmente quer ativar a criptografia?", + "Enable encryption" : "Ativar criptografia", + "No encryption module loaded, please enable an encryption module in the app menu." : "Nenhum módulo de criptografia carregado, por favor, ative um módulo de criptografia no menu de aplicativos.", + "Select default encryption module:" : "Selecione o módulo de criptografia padrão:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Você precisa migrar suas chaves de criptografia a partir da antiga criptografia (ownCloud <= 8,0) para a nova. Ative o \"módulo de criptografia padrão\" e execute 'occ encryption:migrate'", + "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", + "Everything (fatal issues, errors, warnings, info, debug)" : "Tudo (questões fatais, erros, avisos, informações, depuração)", + "Info, warnings, errors and fatal issues" : "Informações, avisos, erros e problemas fatais", + "Warnings, errors and fatal issues" : "Avisos, erros e problemas fatais", + "Errors and fatal issues" : "Erros e problemas fatais", + "Fatal issues only" : "Somente questões fatais", + "Log" : "Registro", + "What to log" : "O que colocar no log", + "Download logfile" : "Baixar o arquivo de log", + "More" : "Mais", + "Less" : "Menos", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "O arquivo de log é maior que 100 MB. Baixar esse arquivo requer algum tempo!", + "Security & setup warnings" : "Segurança & avisos de configuração", "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 parecem esta 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 notas configuração do PHP e a configuração do PHP do seu 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 a interface web. Além disso, o arquivo precisa ter permissão de escrita manual para cada atualização.", @@ -160,7 +191,15 @@ OC.L10N.register( "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Não foi possível executar o cron via CLI. Os seguintes erros técnicos têm aparecido:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Por favor, verifique o <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">guias de instalação ↗</a>, e verificar se há erros ou avisos no <a href=\"#log-section\">log</a>.", "All checks passed." : "Todas as verificações passaram.", - "Open documentation" : "Abrir documentação", + "Cron" : "Cron", + "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!", + "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 sobre 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 cada 15 minutos.", + "Version" : "Versão", + "Sharing" : "Compartilhamento", "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", @@ -177,45 +216,7 @@ OC.L10N.register( "Exclude groups from sharing" : "Excluir grupos de compartilhamento", "These groups will still be able to receive shares, but not to initiate them." : "Esses grupos ainda serão capazes de receber compartilhamentos, mas não para iniciá-los.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Permitir autocompletar nome de usuário no diálogo de compartilhamento. Se isto estiver desativado o nome de usuário completo precisa ser inserido.", - "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!", - "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 sobre 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 cada 15 minutos.", - "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 carregados para o servidor a partir desse ponto em diante serão criptografados e estarão disponíveis no servidor. Só será possível desativar a criptografia em uma data posterior, se o módulo de criptografia ativo suporta essa função, e todas as pré-condições sejam cumpridas(por exemplo, definindo uma chave de recuperação).", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Encriptação, por si só, não garante segurança do sistema. Por favor, veja a documentação para mais informações sobe como o aplicativo de encriptação funciona e os casos de uso suportados.", - "Be aware that encryption always increases the file size." : "Esteja ciente de que a criptografia sempre aumenta o tamanho do arquivo.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "É sempre bom criar backups regulares dos seus dados, em caso de criptografia certifique-se de fazer backup das chaves de criptografia, juntamente com os seus dados.", - "This is the final warning: Do you really want to enable encryption?" : "Este é o aviso final: Você realmente quer ativar a criptografia?", - "Enable encryption" : "Ativar criptografia", - "No encryption module loaded, please enable an encryption module in the app menu." : "Nenhum módulo de criptografia carregado, por favor, ative um módulo de criptografia no menu de aplicativos.", - "Select default encryption module:" : "Selecione o módulo de criptografia padrão:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Você precisa migrar suas chaves de criptografia a partir da antiga criptografia (ownCloud <= 8,0) para a nova. Ative o \"módulo de criptografia padrão\" e execute 'occ encryption:migrate'", - "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", - "This is used for sending out notifications." : "Isto é usado para o envio de notificações.", - "Send mode" : "Modo enviar", - "Encryption" : "Criptografia", - "From address" : "Do Endereço", - "mail" : "email", - "Authentication method" : "Método de autenticação", - "Authentication required" : "Autenticação é requerida", - "Server address" : "Endereço do servidor", - "Port" : "Porta", - "Credentials" : "Credenciais", - "SMTP Username" : "Nome do Usuário SMTP", - "SMTP Password" : "Senha SMTP", - "Store credentials" : "Armazenar credenciais", - "Test email settings" : "Configurações de e-mail de teste", - "Send email" : "Enviar email", - "What to log" : "O que colocar no log", - "Download logfile" : "Baixar o arquivo de log", - "More" : "Mais", - "Less" : "Menos", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "O arquivo de log é maior que 100 MB. Baixar esse arquivo requer algum tempo!", + "Tips & tricks" : "Dicas & Truques", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite é usada como base de dados. Para instalações maiores recomendamos mudar para um backend de banco de dados diferente.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Especialmente quando se utiliza o cliente de desktop para sincronização de arquivos o uso de SQLite é desencorajado.", "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 usar a ferramenta de linha de comando: 'occ db:convert-type', ou consulte a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação ↗</a>.", @@ -225,7 +226,6 @@ OC.L10N.register( "Improving the config.php" : "Melhorando o config.php", "Theming" : "Elaborar um tema", "Hardening and security guidance" : "Orientações de proteção e segurança", - "Version" : "Versão", "Developer documentation" : "Documentação do desenvolvedor", "Experimental applications ahead" : "Aplicações experimentais à frente", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Aplicativos experimentais não são marcados por questões de segurança, por serem novos ou conhecidos como instáveis e sob forte desenvolvimento. Instalá-los pode causar perda de dados ou falhas de segurança.", @@ -281,6 +281,11 @@ OC.L10N.register( "Change password" : "Alterar senha", "Language" : "Idioma", "Help translate" : "Ajude a traduzir", + "Get the apps to sync your files" : "Obtenha apps para sincronizar seus arquivos", + "Desktop client" : "Cliente Desktop", + "Android app" : "App Android", + "iOS app" : "App iOS", + "Show First Run Wizard again" : "Mostrar Assistente de Primeira Execução novamente", "Web, desktop and mobile clients currently logged in to your account." : "Clientes Web, desktop e móvel estão conectados à sua conta.", "Device" : "Dispositivo", "Last activity" : "Última atividade", @@ -289,15 +294,14 @@ OC.L10N.register( "App name" : "Nome do aplicativo", "Create new app password" : "Criar uma nova senha do aplicativo", "Use the credentials below to configure your app or device." : "Use as credenciais abaixo para configurar seu aplicativo ou dispositivo.", + "For security reasons this password will only be shown once." : "Por motivo de segurança, esta senha só será exibida uma vez.", "Username" : "Nome de Usuário", "Done" : "Concluída", - "Get the apps to sync your files" : "Obtenha apps para sincronizar seus arquivos", - "Desktop client" : "Cliente Desktop", - "Android app" : "App Android", - "iOS app" : "App iOS", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Se você deseja apoiar o projeto,\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">juntar-se ao desenvolvimento</a>\n\t\tou\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">contar para todo mundo</a>!", - "Show First Run Wizard again" : "Mostrar Assistente de Primeira Execução novamente", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Desenvolvido pela {communityopen}comunidade Nextcloud{linkclose}, o {githubopen}código fonte{linkclose} está licenciado sob {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", + "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!", + "Like our facebook page!" : "Curta nossa página no Facebook!", + "Subscribe to our news feed!" : "Assine nosso feed de notícias!", + "Subscribe to our newsletter!" : "Inscreva-se para receber nosso boletim informativo!", "Show storage location" : "Mostrar localização de armazenamento", "Show last log in" : "Mostrar o último acesso", "Show user backend" : "Mostrar administrador do usuário", @@ -321,6 +325,20 @@ OC.L10N.register( "change full name" : "alterar nome completo", "set new password" : "definir nova senha", "change email address" : "Trocar o endereço de email", - "Default" : "Padrão" + "Default" : "Padrão", + "no group" : "nenhum grupo", + "add group" : "adicionar grupo", + "Add Group" : "Adicionar grupo", + "Default Quota" : "Quota Padrão", + "Full Name" : "Nome Completo", + "Group Admin for" : "Grupo Admin para", + "Storage Location" : "Local de Armazenamento", + "User Backend" : "Administrador do Usuário", + "Last Login" : "Último Login", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Armazenamento externo", + "Updates" : "Atualizações", + "No apps found for \"{query}\"" : "Nenhum aplicativo encontrado para \"{query}\"" }, "nplurals=2; plural=(n > 1);"); diff --git a/settings/l10n/pt_BR.json b/settings/l10n/pt_BR.json index 09f609fa78f..21e86df6325 100644 --- a/settings/l10n/pt_BR.json +++ b/settings/l10n/pt_BR.json @@ -1,14 +1,14 @@ { "translations": { + "Enabled" : "Habilitado", + "Not enabled" : "Desabilitado", "Wrong password" : "Senha incorreta", "Saved" : "Salvo", "No user supplied" : "Nenhum usuário fornecido", + "Unable to change password" : "Não é possível modificar a senha", "Authentication error" : "Erro de autenticação", "Please provide an admin recovery password, otherwise all user data will be lost" : "Por favor, forneça uma senha de recuperação admin, caso contrário todos os dados do usuário serão perdidos", "Wrong admin recovery password. Please check the password and try again." : "Senha de recuperação do administrador incorreta. Por favor, verifique a senha e tente novamente.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Back-end não suporta alteração de senha, mas a chave de criptografia do usuário foi atualizada com sucesso.", - "Unable to change password" : "Não é possível modificar a senha", - "Enabled" : "Habilitado", - "Not enabled" : "Desabilitado", "installing and updating apps via the app store or Federated Cloud Sharing" : "instalando e atualizando aplicativos via app store ou Nuvem Compartilhada Federada", "Federated Cloud Sharing" : "Compartilhamento de Nuvem Conglomerada", "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL está usando um desatualizado %s versão (%s). Por favor, atualize seu sistema operacional ou recursos como %s não vai funcionar de forma confiável.", @@ -33,17 +33,6 @@ "Email saved" : "E-mail salvo", "Your full name has been changed." : "Seu nome completo foi alterado.", "Unable to change full name" : "Não é possível alterar o nome completo", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Segurança & avisos de configuração", - "Sharing" : "Compartilhamento", - "Server-side encryption" : "Criptografia do lado do servidor", - "External Storage" : "Armazenamento externo", - "Cron" : "Cron", - "Email server" : "Servidor de e-mail", - "Log" : "Registro", - "Tips & tricks" : "Dicas & Truques", - "Updates" : "Atualizações", "Couldn't remove app." : "Não foi possível remover aplicativos.", "Language changed" : "Idioma alterado", "Invalid request" : "Pedido inválido", @@ -96,6 +85,10 @@ "Android Client" : "Cliente Android", "Sync client - {os}" : "Sincronizar cliente - {os}", "This session" : "Esta sessão", + "Copied!" : "Copiado!", + "Not supported!" : "Não Suportado!", + "Press ⌘-C to copy." : "Pressione ⌘-C para copiar", + "Press Ctrl-C to copy." : "Pressione Ctrl+C para copiar", "Error while loading browser sessions and device tokens" : "Erro durante carregamento de sessões do navegador e tokens de dispositivos", "Error while creating device token" : "Erro ao criar token de dispositivo", "Error while deleting the token" : "Erro ao excluir o token", @@ -131,17 +124,55 @@ "Sessions" : "Sessões", "App passwords" : "Senhas de aplicativos", "Sync clients" : "Clientes de Sincronização", - "Everything (fatal issues, errors, warnings, info, debug)" : "Tudo (questões fatais, erros, avisos, informações, depuração)", - "Info, warnings, errors and fatal issues" : "Informações, avisos, erros e problemas fatais", - "Warnings, errors and fatal issues" : "Avisos, erros e problemas fatais", - "Errors and fatal issues" : "Erros e problemas fatais", - "Fatal issues only" : "Somente questões fatais", "None" : "Nada", "Login" : "Login", "Plain" : "Plano", "NT LAN Manager" : "Gerenciador NT LAN", "SSL" : "SSL", "TLS" : "TLS", + "Email server" : "Servidor de e-mail", + "Open documentation" : "Abrir documentação", + "This is used for sending out notifications." : "Isto é usado para o envio de notificações.", + "Send mode" : "Modo enviar", + "Encryption" : "Criptografia", + "From address" : "Do Endereço", + "mail" : "email", + "Authentication method" : "Método de autenticação", + "Authentication required" : "Autenticação é requerida", + "Server address" : "Endereço do servidor", + "Port" : "Porta", + "Credentials" : "Credenciais", + "SMTP Username" : "Nome do Usuário SMTP", + "SMTP Password" : "Senha SMTP", + "Store credentials" : "Armazenar credenciais", + "Test email settings" : "Configurações de e-mail de teste", + "Send email" : "Enviar email", + "Server-side encryption" : "Criptografia do lado do servidor", + "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 carregados para o servidor a partir desse ponto em diante serão criptografados e estarão disponíveis no servidor. Só será possível desativar a criptografia em uma data posterior, se o módulo de criptografia ativo suporta essa função, e todas as pré-condições sejam cumpridas(por exemplo, definindo uma chave de recuperação).", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Encriptação, por si só, não garante segurança do sistema. Por favor, veja a documentação para mais informações sobe como o aplicativo de encriptação funciona e os casos de uso suportados.", + "Be aware that encryption always increases the file size." : "Esteja ciente de que a criptografia sempre aumenta o tamanho do arquivo.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "É sempre bom criar backups regulares dos seus dados, em caso de criptografia certifique-se de fazer backup das chaves de criptografia, juntamente com os seus dados.", + "This is the final warning: Do you really want to enable encryption?" : "Este é o aviso final: Você realmente quer ativar a criptografia?", + "Enable encryption" : "Ativar criptografia", + "No encryption module loaded, please enable an encryption module in the app menu." : "Nenhum módulo de criptografia carregado, por favor, ative um módulo de criptografia no menu de aplicativos.", + "Select default encryption module:" : "Selecione o módulo de criptografia padrão:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Você precisa migrar suas chaves de criptografia a partir da antiga criptografia (ownCloud <= 8,0) para a nova. Ative o \"módulo de criptografia padrão\" e execute 'occ encryption:migrate'", + "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", + "Everything (fatal issues, errors, warnings, info, debug)" : "Tudo (questões fatais, erros, avisos, informações, depuração)", + "Info, warnings, errors and fatal issues" : "Informações, avisos, erros e problemas fatais", + "Warnings, errors and fatal issues" : "Avisos, erros e problemas fatais", + "Errors and fatal issues" : "Erros e problemas fatais", + "Fatal issues only" : "Somente questões fatais", + "Log" : "Registro", + "What to log" : "O que colocar no log", + "Download logfile" : "Baixar o arquivo de log", + "More" : "Mais", + "Less" : "Menos", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "O arquivo de log é maior que 100 MB. Baixar esse arquivo requer algum tempo!", + "Security & setup warnings" : "Segurança & avisos de configuração", "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 parecem esta 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 notas configuração do PHP e a configuração do PHP do seu 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 a interface web. Além disso, o arquivo precisa ter permissão de escrita manual para cada atualização.", @@ -158,7 +189,15 @@ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Não foi possível executar o cron via CLI. Os seguintes erros técnicos têm aparecido:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Por favor, verifique o <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">guias de instalação ↗</a>, e verificar se há erros ou avisos no <a href=\"#log-section\">log</a>.", "All checks passed." : "Todas as verificações passaram.", - "Open documentation" : "Abrir documentação", + "Cron" : "Cron", + "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!", + "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 sobre 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 cada 15 minutos.", + "Version" : "Versão", + "Sharing" : "Compartilhamento", "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", @@ -175,45 +214,7 @@ "Exclude groups from sharing" : "Excluir grupos de compartilhamento", "These groups will still be able to receive shares, but not to initiate them." : "Esses grupos ainda serão capazes de receber compartilhamentos, mas não para iniciá-los.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Permitir autocompletar nome de usuário no diálogo de compartilhamento. Se isto estiver desativado o nome de usuário completo precisa ser inserido.", - "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!", - "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 sobre 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 cada 15 minutos.", - "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 carregados para o servidor a partir desse ponto em diante serão criptografados e estarão disponíveis no servidor. Só será possível desativar a criptografia em uma data posterior, se o módulo de criptografia ativo suporta essa função, e todas as pré-condições sejam cumpridas(por exemplo, definindo uma chave de recuperação).", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Encriptação, por si só, não garante segurança do sistema. Por favor, veja a documentação para mais informações sobe como o aplicativo de encriptação funciona e os casos de uso suportados.", - "Be aware that encryption always increases the file size." : "Esteja ciente de que a criptografia sempre aumenta o tamanho do arquivo.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "É sempre bom criar backups regulares dos seus dados, em caso de criptografia certifique-se de fazer backup das chaves de criptografia, juntamente com os seus dados.", - "This is the final warning: Do you really want to enable encryption?" : "Este é o aviso final: Você realmente quer ativar a criptografia?", - "Enable encryption" : "Ativar criptografia", - "No encryption module loaded, please enable an encryption module in the app menu." : "Nenhum módulo de criptografia carregado, por favor, ative um módulo de criptografia no menu de aplicativos.", - "Select default encryption module:" : "Selecione o módulo de criptografia padrão:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Você precisa migrar suas chaves de criptografia a partir da antiga criptografia (ownCloud <= 8,0) para a nova. Ative o \"módulo de criptografia padrão\" e execute 'occ encryption:migrate'", - "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", - "This is used for sending out notifications." : "Isto é usado para o envio de notificações.", - "Send mode" : "Modo enviar", - "Encryption" : "Criptografia", - "From address" : "Do Endereço", - "mail" : "email", - "Authentication method" : "Método de autenticação", - "Authentication required" : "Autenticação é requerida", - "Server address" : "Endereço do servidor", - "Port" : "Porta", - "Credentials" : "Credenciais", - "SMTP Username" : "Nome do Usuário SMTP", - "SMTP Password" : "Senha SMTP", - "Store credentials" : "Armazenar credenciais", - "Test email settings" : "Configurações de e-mail de teste", - "Send email" : "Enviar email", - "What to log" : "O que colocar no log", - "Download logfile" : "Baixar o arquivo de log", - "More" : "Mais", - "Less" : "Menos", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "O arquivo de log é maior que 100 MB. Baixar esse arquivo requer algum tempo!", + "Tips & tricks" : "Dicas & Truques", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite é usada como base de dados. Para instalações maiores recomendamos mudar para um backend de banco de dados diferente.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Especialmente quando se utiliza o cliente de desktop para sincronização de arquivos o uso de SQLite é desencorajado.", "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 usar a ferramenta de linha de comando: 'occ db:convert-type', ou consulte a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação ↗</a>.", @@ -223,7 +224,6 @@ "Improving the config.php" : "Melhorando o config.php", "Theming" : "Elaborar um tema", "Hardening and security guidance" : "Orientações de proteção e segurança", - "Version" : "Versão", "Developer documentation" : "Documentação do desenvolvedor", "Experimental applications ahead" : "Aplicações experimentais à frente", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Aplicativos experimentais não são marcados por questões de segurança, por serem novos ou conhecidos como instáveis e sob forte desenvolvimento. Instalá-los pode causar perda de dados ou falhas de segurança.", @@ -279,6 +279,11 @@ "Change password" : "Alterar senha", "Language" : "Idioma", "Help translate" : "Ajude a traduzir", + "Get the apps to sync your files" : "Obtenha apps para sincronizar seus arquivos", + "Desktop client" : "Cliente Desktop", + "Android app" : "App Android", + "iOS app" : "App iOS", + "Show First Run Wizard again" : "Mostrar Assistente de Primeira Execução novamente", "Web, desktop and mobile clients currently logged in to your account." : "Clientes Web, desktop e móvel estão conectados à sua conta.", "Device" : "Dispositivo", "Last activity" : "Última atividade", @@ -287,15 +292,14 @@ "App name" : "Nome do aplicativo", "Create new app password" : "Criar uma nova senha do aplicativo", "Use the credentials below to configure your app or device." : "Use as credenciais abaixo para configurar seu aplicativo ou dispositivo.", + "For security reasons this password will only be shown once." : "Por motivo de segurança, esta senha só será exibida uma vez.", "Username" : "Nome de Usuário", "Done" : "Concluída", - "Get the apps to sync your files" : "Obtenha apps para sincronizar seus arquivos", - "Desktop client" : "Cliente Desktop", - "Android app" : "App Android", - "iOS app" : "App iOS", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Se você deseja apoiar o projeto,\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">juntar-se ao desenvolvimento</a>\n\t\tou\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">contar para todo mundo</a>!", - "Show First Run Wizard again" : "Mostrar Assistente de Primeira Execução novamente", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Desenvolvido pela {communityopen}comunidade Nextcloud{linkclose}, o {githubopen}código fonte{linkclose} está licenciado sob {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", + "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!", + "Like our facebook page!" : "Curta nossa página no Facebook!", + "Subscribe to our news feed!" : "Assine nosso feed de notícias!", + "Subscribe to our newsletter!" : "Inscreva-se para receber nosso boletim informativo!", "Show storage location" : "Mostrar localização de armazenamento", "Show last log in" : "Mostrar o último acesso", "Show user backend" : "Mostrar administrador do usuário", @@ -319,6 +323,20 @@ "change full name" : "alterar nome completo", "set new password" : "definir nova senha", "change email address" : "Trocar o endereço de email", - "Default" : "Padrão" + "Default" : "Padrão", + "no group" : "nenhum grupo", + "add group" : "adicionar grupo", + "Add Group" : "Adicionar grupo", + "Default Quota" : "Quota Padrão", + "Full Name" : "Nome Completo", + "Group Admin for" : "Grupo Admin para", + "Storage Location" : "Local de Armazenamento", + "User Backend" : "Administrador do Usuário", + "Last Login" : "Último Login", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Armazenamento externo", + "Updates" : "Atualizações", + "No apps found for \"{query}\"" : "Nenhum aplicativo encontrado para \"{query}\"" },"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 9d430082365..5214cbaa30d 100644 --- a/settings/l10n/pt_PT.js +++ b/settings/l10n/pt_PT.js @@ -1,16 +1,16 @@ OC.L10N.register( "settings", { + "Enabled" : "Ativada", + "Not enabled" : "Desativada", "Wrong password" : "Palavra-passe errada", "Saved" : "Guardado", "No user supplied" : "Nenhum utilizador especificado", + "Unable to change password" : "Não foi possível alterar a sua palavra-passe ", "Authentication error" : "Erro na autenticação", "Please provide an admin recovery password, otherwise all user data will be lost" : "Por favor, forneça uma palavra-passe de recuperação de administrador, caso contrário serão perdidos todos os dados", "Wrong admin recovery password. Please check the password and try again." : "Palavra-passe de recuperação de administrador errada. Por favor, verifique a palavra-passe e tente novamente.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "A interface não suporta a alteração da palavra-passe, mas a chave de encriptação foi atualizada com sucesso.", - "Unable to change password" : "Não foi possível alterar a sua palavra-passe ", - "Enabled" : "Ativada", - "Not enabled" : "Desativada", "installing and updating apps via the app store or Federated Cloud Sharing" : "A instalar e a atualizar as aplicações através da loja de aplicações ou Federated Cloud Sharing", "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 está a usar uma versão %s desatualizada (%s). Por favor, atualize o seu sistema operativo ou algumas funcionalidades como %s não funcionarão corretamente.", @@ -35,17 +35,6 @@ OC.L10N.register( "Email saved" : "E-mail guardado", "Your full name has been changed." : "O seu nome completo foi alterado.", "Unable to change full name" : "Não foi possível alterar o seu nome completo", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Avisos de configuração e segurança", - "Sharing" : "Partilha", - "Server-side encryption" : "Atualizar App", - "External Storage" : "Armazenamento Externo", - "Cron" : "Cron", - "Email server" : "Servidor de Correio Eletrónico", - "Log" : "Registo", - "Tips & tricks" : "Dicas e truques", - "Updates" : "Atualizações", "Couldn't remove app." : "Não foi possível remover a aplicação.", "Language changed" : "Idioma alterado", "Invalid request" : "Pedido Inválido", @@ -117,17 +106,54 @@ OC.L10N.register( "Personal info" : "Informação pessoal", "Sessions" : "Sessões", "Sync clients" : "Clientes de sync", - "Everything (fatal issues, errors, warnings, info, debug)" : "Tudo (problemas fatais, erros, avisos, informação, depuração)", - "Info, warnings, errors and fatal issues" : "Informação, avisos, erros e problemas fatais", - "Warnings, errors and fatal issues" : "Avisos, erros e problemas fatais", - "Errors and fatal issues" : "Erros e problemas fatais", - "Fatal issues only" : "Apenas problemas fatais", "None" : "Nenhum", "Login" : "Iniciar Sessão", "Plain" : "Plano", "NT LAN Manager" : "Gestor de REDE NT", "SSL" : "SSL", "TLS" : "TLS", + "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", + "mail" : "Correio", + "Authentication method" : "Método de Autenticação", + "Authentication required" : "Autenticação necessária", + "Server address" : "Endereço do Servidor", + "Port" : "Porta", + "Credentials" : "Credenciais", + "SMTP Username" : "Nome de utilizador SMTP", + "SMTP Password" : "Palavra-passe SMTP", + "Store credentials" : "Armazenar credenciais", + "Test email settings" : "Testar definições de e-mail", + "Send email" : "Enviar email", + "Server-side encryption" : "Atualizar App", + "Enable server-side encryption" : "Ativar encriptação do lado do servidor", + "Please read carefully before activating server-side encryption: " : "Por favor, leia cuidadosamente antes de ativar a encriptação 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 ativada a encriptação, todos os ficheiros carregados para o servidor a partir deste ponto serão encriptados pelo servidor. Só será possível desativar a encriptação numa data mais tarde se o módulo de encriptação ativo suportar essa função, assim como todas as pré-condições (e.g. definir chave de recuperação) sejam cumpridas.", + "Be aware that encryption always increases the file size." : "Tenha em conta que a encriptação aumenta sempre o tamanho do ficheiro.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "É sempre bom criar cópias de segurança regulares dos seus dados, em caso de encriptação tenha a certeza de que faz cópia das chaves de encriptação em conjunto com os seus dados.", + "This is the final warning: Do you really want to enable encryption?" : "Este é o aviso final: quer mesmo ativar a encriptação?", + "Enable encryption" : "Ative a encriptação", + "No encryption module loaded, please enable an encryption module in the app menu." : "Nenhum módulo de encriptação carregador, por favor ative um módulo de encriptação no menu das aplicações.", + "Select default encryption module:" : "Selecionar o módulo de encriptação predefinido:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Precisa de migrar as suas chaves de encriptação da encriptação antiga (ownCloud <= 8.0) para a nova. Por favor, ative o \"Módulo de encriptação padrão\" e execute 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Precisa de migrar as suas chaves de encriptação da encriptação antiga (ownCloud <= 8.0) para a nova.", + "Start migration" : "Iniciar migração", + "Everything (fatal issues, errors, warnings, info, debug)" : "Tudo (problemas fatais, erros, avisos, informação, depuração)", + "Info, warnings, errors and fatal issues" : "Informação, avisos, erros e problemas fatais", + "Warnings, errors and fatal issues" : "Avisos, erros e problemas fatais", + "Errors and fatal issues" : "Erros e problemas fatais", + "Fatal issues only" : "Apenas problemas fatais", + "Log" : "Registo", + "What to log" : "Fazer log do quê?", + "Download logfile" : "Descarregar logfile", + "More" : "Mais", + "Less" : "Menos", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "O logfile é maior que 100MB. O download do mesmo poderá demorar algum tempo!", + "Security & setup warnings" : "Avisos de configuração e segurança", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php não parece estar bem instalado para consultar variáveis de ambiente do sistema. O teste com getenv(\"PATH\") apenas devolveu uma resposta em branco.", "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 notas de configuração do php e configuração php do seu servidor, especialmente quando 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 Só-de-Leitura foi ativada. Isto evita definir algumas configurações através da interface da Web. Além disso, o ficheiro precisa de ser definido gravável manualmente para cada atualização.", @@ -143,7 +169,15 @@ OC.L10N.register( "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Não foi possível executar o cronjob via CLI. Os seguintes erros técnicos apareceram:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Por favor, verifique os <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">guias de instalação ↗</a>, e verifique se existe algum erro ou aviso no <a href=\"#log-section\">log</a>.", "All checks passed." : "Todas as verificações passaram.", - "Open documentation" : "Abrir documentação", + "Cron" : "Cron", + "Last cron job execution: %s." : "Última execução de cron job: %s.", + "Last cron job execution: %s. Something seems wrong." : "Última execução de cron job: %s. Algo está errado.", + "Cron was not executed yet!" : "Cron ainda não foi executado!", + "Execute one task with each page loaded" : "Executar 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á registado num serviço webcron para chamar a página cron.php por http a cada 15 minutos.", + "Use system's cron service to call the cron.php file every 15 minutes." : "Usar o serviço sistema cron para ligar o ficheiro cron.php a cada 15 minutos.", + "Version" : "Versão", + "Sharing" : "Partilha", "Allow apps to use the Share API" : "Permitir que os utilizadores usem a API de partilha", "Allow users to share via link" : "Permitir que os utilizadores partilhem através do link", "Allow public uploads" : "Permitir Envios Públicos", @@ -160,44 +194,7 @@ OC.L10N.register( "Exclude groups from sharing" : "Excluir grupos das partilhas", "These groups will still be able to receive shares, but not to initiate them." : "Estes grupos poderão receber partilhas, mas não poderão iniciá-las.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Permitir o auto-completar de nome de utilizador no diálogo da partilha. Se isto for desativado, será necessário preencher o nome de utilizador completo.", - "Last cron job execution: %s." : "Última execução de cron job: %s.", - "Last cron job execution: %s. Something seems wrong." : "Última execução de cron job: %s. Algo está errado.", - "Cron was not executed yet!" : "Cron ainda não foi executado!", - "Execute one task with each page loaded" : "Executar 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á registado num serviço webcron para chamar a página cron.php por http a cada 15 minutos.", - "Use system's cron service to call the cron.php file every 15 minutes." : "Usar o serviço sistema cron para ligar o ficheiro cron.php a cada 15 minutos.", - "Enable server-side encryption" : "Ativar encriptação do lado do servidor", - "Please read carefully before activating server-side encryption: " : "Por favor, leia cuidadosamente antes de ativar a encriptação 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 ativada a encriptação, todos os ficheiros carregados para o servidor a partir deste ponto serão encriptados pelo servidor. Só será possível desativar a encriptação numa data mais tarde se o módulo de encriptação ativo suportar essa função, assim como todas as pré-condições (e.g. definir chave de recuperação) sejam cumpridas.", - "Be aware that encryption always increases the file size." : "Tenha em conta que a encriptação aumenta sempre o tamanho do ficheiro.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "É sempre bom criar cópias de segurança regulares dos seus dados, em caso de encriptação tenha a certeza de que faz cópia das chaves de encriptação em conjunto com os seus dados.", - "This is the final warning: Do you really want to enable encryption?" : "Este é o aviso final: quer mesmo ativar a encriptação?", - "Enable encryption" : "Ative a encriptação", - "No encryption module loaded, please enable an encryption module in the app menu." : "Nenhum módulo de encriptação carregador, por favor ative um módulo de encriptação no menu das aplicações.", - "Select default encryption module:" : "Selecionar o módulo de encriptação predefinido:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Precisa de migrar as suas chaves de encriptação da encriptação antiga (ownCloud <= 8.0) para a nova. Por favor, ative o \"Módulo de encriptação padrão\" e execute 'occ encryption:migrate'", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Precisa de migrar as suas chaves de encriptação da encriptação antiga (ownCloud <= 8.0) para a nova.", - "Start migration" : "Iniciar migraçã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", - "mail" : "Correio", - "Authentication method" : "Método de Autenticação", - "Authentication required" : "Autenticação necessária", - "Server address" : "Endereço do Servidor", - "Port" : "Porta", - "Credentials" : "Credenciais", - "SMTP Username" : "Nome de utilizador SMTP", - "SMTP Password" : "Palavra-passe SMTP", - "Store credentials" : "Armazenar credenciais", - "Test email settings" : "Testar definições de e-mail", - "Send email" : "Enviar email", - "What to log" : "Fazer log do quê?", - "Download logfile" : "Descarregar logfile", - "More" : "Mais", - "Less" : "Menos", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "O logfile é maior que 100MB. O download do mesmo poderá demorar algum tempo!", + "Tips & tricks" : "Dicas e truques", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite é utilizado como uma base de dados. Para instalações maiores nós recomendamos que mude para uma interface de base de dados diferente.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "O uso de SQLite é desencorajado especialmente se estiver a pensar em dar uso ao cliente desktop para sincronizar os seus ficheiros no seu computador.", "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 tipo de base de dados, use a ferramenta de comando de linha: 'occ db:convert-type', ou veja a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação↗</a>.", @@ -207,7 +204,6 @@ OC.L10N.register( "Improving the config.php" : "Melhorar o config.php", "Theming" : "Temas", "Hardening and security guidance" : "Orientações de proteção e segurança", - "Version" : "Versão", "Developer documentation" : "Documentação de Programador", "Experimental applications ahead" : "Aplicações experimentais de futuro", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "As apps experimentais não estão selecionadas para problemas de segurança, nova ou conhecida como instável e em forte desenvolvimento. Ao instalá-las pode causar a perda de dados ou quebra de segurança.", @@ -260,14 +256,14 @@ OC.L10N.register( "Change password" : "Alterar palavra-passe", "Language" : "Idioma", "Help translate" : "Ajude a traduzir", - "Name" : "Nome", - "Username" : "Nome de utilizador", - "Done" : "Concluído", "Get the apps to sync your files" : "Obtenha as aplicações para sincronizar os seus ficheiros", "Desktop client" : "Cliente Desktop", "Android app" : "Aplicação Android", "iOS app" : "Aplicação iOS", "Show First Run Wizard again" : "Mostrar novamente Wizard de Arranque Inicial", + "Name" : "Nome", + "Username" : "Nome de utilizador", + "Done" : "Concluído", "Show storage location" : "Mostrar a localização do armazenamento", "Show last log in" : "Mostrar ultimo acesso de entrada", "Show user backend" : "Mostrar interface do utilizador", @@ -286,6 +282,10 @@ OC.L10N.register( "change full name" : "alterar nome completo", "set new password" : "definir nova palavra-passe", "change email address" : "alterar endereço do correio eletrónico", - "Default" : "Padrão" + "Default" : "Padrão", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Armazenamento Externo", + "Updates" : "Atualizações" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/pt_PT.json b/settings/l10n/pt_PT.json index 7a0acaf80da..035ab9dcacd 100644 --- a/settings/l10n/pt_PT.json +++ b/settings/l10n/pt_PT.json @@ -1,14 +1,14 @@ { "translations": { + "Enabled" : "Ativada", + "Not enabled" : "Desativada", "Wrong password" : "Palavra-passe errada", "Saved" : "Guardado", "No user supplied" : "Nenhum utilizador especificado", + "Unable to change password" : "Não foi possível alterar a sua palavra-passe ", "Authentication error" : "Erro na autenticação", "Please provide an admin recovery password, otherwise all user data will be lost" : "Por favor, forneça uma palavra-passe de recuperação de administrador, caso contrário serão perdidos todos os dados", "Wrong admin recovery password. Please check the password and try again." : "Palavra-passe de recuperação de administrador errada. Por favor, verifique a palavra-passe e tente novamente.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "A interface não suporta a alteração da palavra-passe, mas a chave de encriptação foi atualizada com sucesso.", - "Unable to change password" : "Não foi possível alterar a sua palavra-passe ", - "Enabled" : "Ativada", - "Not enabled" : "Desativada", "installing and updating apps via the app store or Federated Cloud Sharing" : "A instalar e a atualizar as aplicações através da loja de aplicações ou Federated Cloud Sharing", "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 está a usar uma versão %s desatualizada (%s). Por favor, atualize o seu sistema operativo ou algumas funcionalidades como %s não funcionarão corretamente.", @@ -33,17 +33,6 @@ "Email saved" : "E-mail guardado", "Your full name has been changed." : "O seu nome completo foi alterado.", "Unable to change full name" : "Não foi possível alterar o seu nome completo", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Avisos de configuração e segurança", - "Sharing" : "Partilha", - "Server-side encryption" : "Atualizar App", - "External Storage" : "Armazenamento Externo", - "Cron" : "Cron", - "Email server" : "Servidor de Correio Eletrónico", - "Log" : "Registo", - "Tips & tricks" : "Dicas e truques", - "Updates" : "Atualizações", "Couldn't remove app." : "Não foi possível remover a aplicação.", "Language changed" : "Idioma alterado", "Invalid request" : "Pedido Inválido", @@ -115,17 +104,54 @@ "Personal info" : "Informação pessoal", "Sessions" : "Sessões", "Sync clients" : "Clientes de sync", - "Everything (fatal issues, errors, warnings, info, debug)" : "Tudo (problemas fatais, erros, avisos, informação, depuração)", - "Info, warnings, errors and fatal issues" : "Informação, avisos, erros e problemas fatais", - "Warnings, errors and fatal issues" : "Avisos, erros e problemas fatais", - "Errors and fatal issues" : "Erros e problemas fatais", - "Fatal issues only" : "Apenas problemas fatais", "None" : "Nenhum", "Login" : "Iniciar Sessão", "Plain" : "Plano", "NT LAN Manager" : "Gestor de REDE NT", "SSL" : "SSL", "TLS" : "TLS", + "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", + "mail" : "Correio", + "Authentication method" : "Método de Autenticação", + "Authentication required" : "Autenticação necessária", + "Server address" : "Endereço do Servidor", + "Port" : "Porta", + "Credentials" : "Credenciais", + "SMTP Username" : "Nome de utilizador SMTP", + "SMTP Password" : "Palavra-passe SMTP", + "Store credentials" : "Armazenar credenciais", + "Test email settings" : "Testar definições de e-mail", + "Send email" : "Enviar email", + "Server-side encryption" : "Atualizar App", + "Enable server-side encryption" : "Ativar encriptação do lado do servidor", + "Please read carefully before activating server-side encryption: " : "Por favor, leia cuidadosamente antes de ativar a encriptação 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 ativada a encriptação, todos os ficheiros carregados para o servidor a partir deste ponto serão encriptados pelo servidor. Só será possível desativar a encriptação numa data mais tarde se o módulo de encriptação ativo suportar essa função, assim como todas as pré-condições (e.g. definir chave de recuperação) sejam cumpridas.", + "Be aware that encryption always increases the file size." : "Tenha em conta que a encriptação aumenta sempre o tamanho do ficheiro.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "É sempre bom criar cópias de segurança regulares dos seus dados, em caso de encriptação tenha a certeza de que faz cópia das chaves de encriptação em conjunto com os seus dados.", + "This is the final warning: Do you really want to enable encryption?" : "Este é o aviso final: quer mesmo ativar a encriptação?", + "Enable encryption" : "Ative a encriptação", + "No encryption module loaded, please enable an encryption module in the app menu." : "Nenhum módulo de encriptação carregador, por favor ative um módulo de encriptação no menu das aplicações.", + "Select default encryption module:" : "Selecionar o módulo de encriptação predefinido:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Precisa de migrar as suas chaves de encriptação da encriptação antiga (ownCloud <= 8.0) para a nova. Por favor, ative o \"Módulo de encriptação padrão\" e execute 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Precisa de migrar as suas chaves de encriptação da encriptação antiga (ownCloud <= 8.0) para a nova.", + "Start migration" : "Iniciar migração", + "Everything (fatal issues, errors, warnings, info, debug)" : "Tudo (problemas fatais, erros, avisos, informação, depuração)", + "Info, warnings, errors and fatal issues" : "Informação, avisos, erros e problemas fatais", + "Warnings, errors and fatal issues" : "Avisos, erros e problemas fatais", + "Errors and fatal issues" : "Erros e problemas fatais", + "Fatal issues only" : "Apenas problemas fatais", + "Log" : "Registo", + "What to log" : "Fazer log do quê?", + "Download logfile" : "Descarregar logfile", + "More" : "Mais", + "Less" : "Menos", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "O logfile é maior que 100MB. O download do mesmo poderá demorar algum tempo!", + "Security & setup warnings" : "Avisos de configuração e segurança", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php não parece estar bem instalado para consultar variáveis de ambiente do sistema. O teste com getenv(\"PATH\") apenas devolveu uma resposta em branco.", "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 notas de configuração do php e configuração php do seu servidor, especialmente quando 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 Só-de-Leitura foi ativada. Isto evita definir algumas configurações através da interface da Web. Além disso, o ficheiro precisa de ser definido gravável manualmente para cada atualização.", @@ -141,7 +167,15 @@ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Não foi possível executar o cronjob via CLI. Os seguintes erros técnicos apareceram:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Por favor, verifique os <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">guias de instalação ↗</a>, e verifique se existe algum erro ou aviso no <a href=\"#log-section\">log</a>.", "All checks passed." : "Todas as verificações passaram.", - "Open documentation" : "Abrir documentação", + "Cron" : "Cron", + "Last cron job execution: %s." : "Última execução de cron job: %s.", + "Last cron job execution: %s. Something seems wrong." : "Última execução de cron job: %s. Algo está errado.", + "Cron was not executed yet!" : "Cron ainda não foi executado!", + "Execute one task with each page loaded" : "Executar 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á registado num serviço webcron para chamar a página cron.php por http a cada 15 minutos.", + "Use system's cron service to call the cron.php file every 15 minutes." : "Usar o serviço sistema cron para ligar o ficheiro cron.php a cada 15 minutos.", + "Version" : "Versão", + "Sharing" : "Partilha", "Allow apps to use the Share API" : "Permitir que os utilizadores usem a API de partilha", "Allow users to share via link" : "Permitir que os utilizadores partilhem através do link", "Allow public uploads" : "Permitir Envios Públicos", @@ -158,44 +192,7 @@ "Exclude groups from sharing" : "Excluir grupos das partilhas", "These groups will still be able to receive shares, but not to initiate them." : "Estes grupos poderão receber partilhas, mas não poderão iniciá-las.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Permitir o auto-completar de nome de utilizador no diálogo da partilha. Se isto for desativado, será necessário preencher o nome de utilizador completo.", - "Last cron job execution: %s." : "Última execução de cron job: %s.", - "Last cron job execution: %s. Something seems wrong." : "Última execução de cron job: %s. Algo está errado.", - "Cron was not executed yet!" : "Cron ainda não foi executado!", - "Execute one task with each page loaded" : "Executar 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á registado num serviço webcron para chamar a página cron.php por http a cada 15 minutos.", - "Use system's cron service to call the cron.php file every 15 minutes." : "Usar o serviço sistema cron para ligar o ficheiro cron.php a cada 15 minutos.", - "Enable server-side encryption" : "Ativar encriptação do lado do servidor", - "Please read carefully before activating server-side encryption: " : "Por favor, leia cuidadosamente antes de ativar a encriptação 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 ativada a encriptação, todos os ficheiros carregados para o servidor a partir deste ponto serão encriptados pelo servidor. Só será possível desativar a encriptação numa data mais tarde se o módulo de encriptação ativo suportar essa função, assim como todas as pré-condições (e.g. definir chave de recuperação) sejam cumpridas.", - "Be aware that encryption always increases the file size." : "Tenha em conta que a encriptação aumenta sempre o tamanho do ficheiro.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "É sempre bom criar cópias de segurança regulares dos seus dados, em caso de encriptação tenha a certeza de que faz cópia das chaves de encriptação em conjunto com os seus dados.", - "This is the final warning: Do you really want to enable encryption?" : "Este é o aviso final: quer mesmo ativar a encriptação?", - "Enable encryption" : "Ative a encriptação", - "No encryption module loaded, please enable an encryption module in the app menu." : "Nenhum módulo de encriptação carregador, por favor ative um módulo de encriptação no menu das aplicações.", - "Select default encryption module:" : "Selecionar o módulo de encriptação predefinido:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Precisa de migrar as suas chaves de encriptação da encriptação antiga (ownCloud <= 8.0) para a nova. Por favor, ative o \"Módulo de encriptação padrão\" e execute 'occ encryption:migrate'", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Precisa de migrar as suas chaves de encriptação da encriptação antiga (ownCloud <= 8.0) para a nova.", - "Start migration" : "Iniciar migraçã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", - "mail" : "Correio", - "Authentication method" : "Método de Autenticação", - "Authentication required" : "Autenticação necessária", - "Server address" : "Endereço do Servidor", - "Port" : "Porta", - "Credentials" : "Credenciais", - "SMTP Username" : "Nome de utilizador SMTP", - "SMTP Password" : "Palavra-passe SMTP", - "Store credentials" : "Armazenar credenciais", - "Test email settings" : "Testar definições de e-mail", - "Send email" : "Enviar email", - "What to log" : "Fazer log do quê?", - "Download logfile" : "Descarregar logfile", - "More" : "Mais", - "Less" : "Menos", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "O logfile é maior que 100MB. O download do mesmo poderá demorar algum tempo!", + "Tips & tricks" : "Dicas e truques", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite é utilizado como uma base de dados. Para instalações maiores nós recomendamos que mude para uma interface de base de dados diferente.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "O uso de SQLite é desencorajado especialmente se estiver a pensar em dar uso ao cliente desktop para sincronizar os seus ficheiros no seu computador.", "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 tipo de base de dados, use a ferramenta de comando de linha: 'occ db:convert-type', ou veja a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação↗</a>.", @@ -205,7 +202,6 @@ "Improving the config.php" : "Melhorar o config.php", "Theming" : "Temas", "Hardening and security guidance" : "Orientações de proteção e segurança", - "Version" : "Versão", "Developer documentation" : "Documentação de Programador", "Experimental applications ahead" : "Aplicações experimentais de futuro", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "As apps experimentais não estão selecionadas para problemas de segurança, nova ou conhecida como instável e em forte desenvolvimento. Ao instalá-las pode causar a perda de dados ou quebra de segurança.", @@ -258,14 +254,14 @@ "Change password" : "Alterar palavra-passe", "Language" : "Idioma", "Help translate" : "Ajude a traduzir", - "Name" : "Nome", - "Username" : "Nome de utilizador", - "Done" : "Concluído", "Get the apps to sync your files" : "Obtenha as aplicações para sincronizar os seus ficheiros", "Desktop client" : "Cliente Desktop", "Android app" : "Aplicação Android", "iOS app" : "Aplicação iOS", "Show First Run Wizard again" : "Mostrar novamente Wizard de Arranque Inicial", + "Name" : "Nome", + "Username" : "Nome de utilizador", + "Done" : "Concluído", "Show storage location" : "Mostrar a localização do armazenamento", "Show last log in" : "Mostrar ultimo acesso de entrada", "Show user backend" : "Mostrar interface do utilizador", @@ -284,6 +280,10 @@ "change full name" : "alterar nome completo", "set new password" : "definir nova palavra-passe", "change email address" : "alterar endereço do correio eletrónico", - "Default" : "Padrão" + "Default" : "Padrão", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Armazenamento Externo", + "Updates" : "Atualizações" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/settings/l10n/ru.js b/settings/l10n/ru.js index 0b8d8bdaea8..504e1c84e8d 100644 --- a/settings/l10n/ru.js +++ b/settings/l10n/ru.js @@ -1,16 +1,16 @@ OC.L10N.register( "settings", { + "Enabled" : "Включено", + "Not enabled" : "Не включено", "Wrong password" : "Неправильный пароль", "Saved" : "Сохранено", "No user supplied" : "Пользователь не задан", + "Unable to change password" : "Невозможно изменить пароль", "Authentication error" : "Ошибка аутентификации", "Please provide an admin recovery password, otherwise all user data will be lost" : "Введите пароль восстановления администратора, в противном случае все пользовательские данные будут утеряны", "Wrong admin recovery password. Please check the password and try again." : "Неправильный пароль восстановления администратора. Проверьте пароль и попробуйте еще раз.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Используемый механизм не поддерживает смену паролей, но пользовательский ключ шифрования был успешно обновлён", - "Unable to change password" : "Невозможно изменить пароль", - "Enabled" : "Включено", - "Not enabled" : "Не включено", "installing and updating apps via the app store or 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 использует устаревшую версию %s (%s). Пожалуйста, обновите Вашу операционную систему, иначе такие возможности, как %s, не будут работать надежно.", @@ -35,17 +35,6 @@ OC.L10N.register( "Email saved" : "Адрес сохранен", "Your full name has been changed." : "Ваше полное имя было изменено.", "Unable to change full name" : "Невозможно изменить полное имя", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Предупреждения безопасности и установки", - "Sharing" : "Общий доступ", - "Server-side encryption" : "Шифрование на стороне сервера", - "External Storage" : "Внешнее хранилище", - "Cron" : "Cron (планировщик задач)", - "Email server" : "Почтовый сервер", - "Log" : "Журнал", - "Tips & tricks" : "Советы и трюки", - "Updates" : "Обновления", "Couldn't remove app." : "Не удалось удалить приложение.", "Language changed" : "Язык изменён", "Invalid request" : "Неправильный запрос", @@ -133,17 +122,55 @@ OC.L10N.register( "Sessions" : "Сессии", "App passwords" : "Пароль приложения", "Sync clients" : "Синхронизирующиеся клиенты", - "Everything (fatal issues, errors, warnings, info, debug)" : "Все (критические проблемы, ошибки, предупреждения, информационные, отладочные)", - "Info, warnings, errors and fatal issues" : "Информационные, предупреждения, ошибки и критические проблемы", - "Warnings, errors and fatal issues" : "Предупреждения, ошибки и критические проблемы", - "Errors and fatal issues" : "Ошибки и критические проблемы", - "Fatal issues only" : "Только критические проблемы", "None" : "Отсутствует", "Login" : "Логин", "Plain" : "Простой", "NT LAN Manager" : "Менеджер NT LAN", "SSL" : "SSL", "TLS" : "TLS", + "Email server" : "Почтовый сервер", + "Open documentation" : "Открыть документацию", + "This is used for sending out notifications." : "Используется для отправки уведомлений.", + "Send mode" : "Способ отправки", + "Encryption" : "Шифрование", + "From address" : "Адрес отправителя", + "mail" : "почта", + "Authentication method" : "Метод проверки подлинности", + "Authentication required" : "Требуется аутентификация ", + "Server address" : "Адрес сервера", + "Port" : "Порт", + "Credentials" : "Учётные данные", + "SMTP Username" : "Пользователь SMTP", + "SMTP Password" : "Пароль SMTP", + "Store credentials" : "Сохранить учётные данные", + "Test email settings" : "Проверить настройки почты", + "Send email" : "Отправить email", + "Server-side encryption" : "Шифрование на стороне сервера", + "Enable server-side encryption" : "Включить шифрование на стороне сервера", + "Please read carefully before activating server-side encryption: " : "Пожалуйста прочтите внимательно прежде чем включать шифрование на стороне сервера:", + "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Когда вы включите шифрование, все файлы, загруженные с этого момента на сервер, будут храниться в зашифрованном виде. Отключить шифрование в более позднее время возможно только в случае, если выбранный модуль шифрования поддерживает эту функцию, и все дополнительные условия соблюдены (например настроен ключ восстановления).", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Шифрование само по себе не гарантирует безопасность системы. Пожалуйста ознакомтесь с документацией для получения более подробной информации о том, как работают приложения шифрования и соответствующие примеры.", + "Be aware that encryption always increases the file size." : "Будьте в курсе, что шифрование всегда увеличивает размер файла.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Хорошая практика делать регулярные резервные копии ваших данных. При использовании шифрования сохраняйте не только данные, но и ключи.", + "This is the final warning: Do you really want to enable encryption?" : "Это последнее предупреждение: Вы действительно желаете включить шифрование?", + "Enable encryption" : "Включить шифрование", + "No encryption module loaded, please enable an encryption module in the app menu." : "Модуль шифрования не загружен, пожалуйста включите модуль шифрования в меню приложений.", + "Select default encryption module:" : "Выберите модуль шифрования по умолчанию:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Вам необходимо произвести конвертацию ключей шифрования из старого формата (ownCloud <= 8.0) в новый. Пожалуйста включите \"Модуль шифрования по умолчанию\" и запустите команду 'occ encryption:migrate'.", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Вам необходимо произвести конвертацию ключей шифрования из старого формата (ownCloud <= 8.0) в новый.", + "Start migration" : "Запустить миграцию", + "Everything (fatal issues, errors, warnings, info, debug)" : "Все (критические проблемы, ошибки, предупреждения, информационные, отладочные)", + "Info, warnings, errors and fatal issues" : "Информационные, предупреждения, ошибки и критические проблемы", + "Warnings, errors and fatal issues" : "Предупреждения, ошибки и критические проблемы", + "Errors and fatal issues" : "Ошибки и критические проблемы", + "Fatal issues only" : "Только критические проблемы", + "Log" : "Журнал", + "What to log" : "Что записывать в журнал", + "Download logfile" : "Скачать журнал", + "More" : "Больше", + "Less" : "Меньше", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Лог-файл - больше 100 мб. Его скачивание может занять некоторое время!", + "Security & setup warnings" : "Предупреждения безопасности и установки", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP был установлен неверно. Запрос getenv(\"PATH\") возвращает пустые результаты.", "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Пожалуйста обратитесь к <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">документации по установке ↗</a> для получения информации по настройке php на вашем сервере, особенно это касается php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Конфигурационный файл в режиме только для чтения. В связи с этим некоторые настройки веб-интерфейса невозможно изменить. Учтите, что для установки обновлений, вам потребуется самостоятельно разрешить запись в конфигурационный файл.", @@ -160,7 +187,15 @@ OC.L10N.register( "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Не удается запустить задачу планировщика через CLI. Произошли следующие технические ошибки:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Пожалуйста еще раз обратитесь к <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">документации по установке ↗</a> и проверьте <a href=\"#log-section\">журнал</a>на наличие ошибок", "All checks passed." : "Все проверки пройдены.", - "Open documentation" : "Открыть документацию", + "Cron" : "Cron (планировщик задач)", + "Last cron job execution: %s." : "Последнее выполненное задание планировщика: %s.", + "Last cron job execution: %s. Something seems wrong." : "Последнее выполненное задание планировщика: %s. Похоже, что-то не в порядке.", + "Cron was not executed yet!" : "Задачи cron ещё не запускались!", + "Execute one task with each page loaded" : "Выполнять одно задание с каждой загруженной страницей", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php зарегистрирован в webcron и будет вызываться каждые 15 минут по http.", + "Use system's cron service to call the cron.php file every 15 minutes." : "Использовать системный cron для вызова cron.php каждые 15 минут.", + "Version" : "Версия", + "Sharing" : "Общий доступ", "Allow apps to use the Share API" : "Позволить приложениям использовать API общего доступа", "Allow users to share via link" : "Разрешить пользователям публикации через ссылки", "Allow public uploads" : "Разрешить открытые/публичные загрузки", @@ -177,45 +212,7 @@ OC.L10N.register( "Exclude groups from sharing" : "Исключить группы из общего доступа", "These groups will still be able to receive shares, but not to initiate them." : "Эти группы смогут получать общие ресурсы, но не могут их создавать.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Включить автоматическое завершение имен пользователей в окне общего доступа. Если отключено, то необходимо вводить полное имя вручную.", - "Last cron job execution: %s." : "Последнее выполненное задание планировщика: %s.", - "Last cron job execution: %s. Something seems wrong." : "Последнее выполненное задание планировщика: %s. Похоже, что-то не в порядке.", - "Cron was not executed yet!" : "Задачи cron ещё не запускались!", - "Execute one task with each page loaded" : "Выполнять одно задание с каждой загруженной страницей", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php зарегистрирован в webcron и будет вызываться каждые 15 минут по http.", - "Use system's cron service to call the cron.php file every 15 minutes." : "Использовать системный cron для вызова cron.php каждые 15 минут.", - "Enable server-side encryption" : "Включить шифрование на стороне сервера", - "Please read carefully before activating server-side encryption: " : "Пожалуйста прочтите внимательно прежде чем включать шифрование на стороне сервера:", - "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Когда вы включите шифрование, все файлы, загруженные с этого момента на сервер, будут храниться в зашифрованном виде. Отключить шифрование в более позднее время возможно только в случае, если выбранный модуль шифрования поддерживает эту функцию, и все дополнительные условия соблюдены (например настроен ключ восстановления).", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Шифрование само по себе не гарантирует безопасность системы. Пожалуйста ознакомтесь с документацией для получения более подробной информации о том, как работают приложения шифрования и соответствующие примеры.", - "Be aware that encryption always increases the file size." : "Будьте в курсе, что шифрование всегда увеличивает размер файла.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Хорошая практика делать регулярные резервные копии ваших данных. При использовании шифрования сохраняйте не только данные, но и ключи.", - "This is the final warning: Do you really want to enable encryption?" : "Это последнее предупреждение: Вы действительно желаете включить шифрование?", - "Enable encryption" : "Включить шифрование", - "No encryption module loaded, please enable an encryption module in the app menu." : "Модуль шифрования не загружен, пожалуйста включите модуль шифрования в меню приложений.", - "Select default encryption module:" : "Выберите модуль шифрования по умолчанию:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Вам необходимо произвести конвертацию ключей шифрования из старого формата (ownCloud <= 8.0) в новый. Пожалуйста включите \"Модуль шифрования по умолчанию\" и запустите команду 'occ encryption:migrate'.", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Вам необходимо произвести конвертацию ключей шифрования из старого формата (ownCloud <= 8.0) в новый.", - "Start migration" : "Запустить миграцию", - "This is used for sending out notifications." : "Используется для отправки уведомлений.", - "Send mode" : "Способ отправки", - "Encryption" : "Шифрование", - "From address" : "Адрес отправителя", - "mail" : "почта", - "Authentication method" : "Метод проверки подлинности", - "Authentication required" : "Требуется аутентификация ", - "Server address" : "Адрес сервера", - "Port" : "Порт", - "Credentials" : "Учётные данные", - "SMTP Username" : "Пользователь SMTP", - "SMTP Password" : "Пароль SMTP", - "Store credentials" : "Сохранить учётные данные", - "Test email settings" : "Проверить настройки почты", - "Send email" : "Отправить email", - "What to log" : "Что записывать в журнал", - "Download logfile" : "Скачать журнал", - "More" : "Больше", - "Less" : "Меньше", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Лог-файл - больше 100 мб. Его скачивание может занять некоторое время!", + "Tips & tricks" : "Советы и трюки", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "В качестве базы данных используется SQLite. Для больших установок мы рекомендуем переключиться на другую серверную базу данных.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Особенно вызывает сомнение использование SQLite при синхронизации файлов с использованием клиента для ПК.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Для миграции на другую базу данных используйте команду: 'occ db:convert-type' или обратитесь к a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">документации ↗</a>.", @@ -225,7 +222,6 @@ OC.L10N.register( "Improving the config.php" : "Улучшение config.php", "Theming" : "Темы оформления", "Hardening and security guidance" : "Руководство по безопасности и защите", - "Version" : "Версия", "Developer documentation" : "Документация для разработчиков", "Experimental applications ahead" : "Экспериментальные приложения", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Экспериментальные приложения не проверялись на наличие уязвимостей безопасности, они также могут быть нестабильны, т.к. находятся в активной разработке. Их установка может повлечь потерю информации или нарушение безопасности.", @@ -281,6 +277,11 @@ OC.L10N.register( "Change password" : "Сменить пароль", "Language" : "Язык", "Help translate" : "Помочь с переводом", + "Get the apps to sync your files" : "Получить приложения для синхронизации ваших файлов", + "Desktop client" : "Клиент для ПК", + "Android app" : "Android приложение", + "iOS app" : "iOS приложение", + "Show First Run Wizard again" : "Показать помощник настройки снова", "Web, desktop and mobile clients currently logged in to your account." : "Веб, настольные и мобильные клиенты, которые в настоящий момент авторизованы вашей учётной записью.", "Device" : "Устройство", "Last activity" : "Последние действия", @@ -291,13 +292,7 @@ OC.L10N.register( "Use the credentials below to configure your app or device." : "Используйте учётные данные ниже для настройки вашего приложения или устройства.", "Username" : "Имя пользователя", "Done" : "Выполнено", - "Get the apps to sync your files" : "Получить приложения для синхронизации ваших файлов", - "Desktop client" : "Клиент для ПК", - "Android app" : "Android приложение", - "iOS app" : "iOS приложение", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Если Вы хотите поддержать проект\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">присоединяйтесь к разработке</a>\n\t\tили\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">расскажите о нас</a>!", - "Show First Run Wizard again" : "Показать помощник настройки снова", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Разработано {communityopen}сообществом Nextcloud{linkclose}, {githubopen}исходный код{linkclose} лицензируется в соответствии с {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", + "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}.", "Show storage location" : "Показать местонахождение хранилища", "Show last log in" : "Показать последний вход в систему", "Show user backend" : "Показать механизм учёта пользователей", @@ -321,6 +316,10 @@ OC.L10N.register( "change full name" : "изменить полное имя", "set new password" : "установить новый пароль", "change email address" : "изменить адрес почты", - "Default" : "По умолчанию" + "Default" : "По умолчанию", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Внешнее хранилище", + "Updates" : "Обновления" }, "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 5e33c1689ad..c1c41f067e5 100644 --- a/settings/l10n/ru.json +++ b/settings/l10n/ru.json @@ -1,14 +1,14 @@ { "translations": { + "Enabled" : "Включено", + "Not enabled" : "Не включено", "Wrong password" : "Неправильный пароль", "Saved" : "Сохранено", "No user supplied" : "Пользователь не задан", + "Unable to change password" : "Невозможно изменить пароль", "Authentication error" : "Ошибка аутентификации", "Please provide an admin recovery password, otherwise all user data will be lost" : "Введите пароль восстановления администратора, в противном случае все пользовательские данные будут утеряны", "Wrong admin recovery password. Please check the password and try again." : "Неправильный пароль восстановления администратора. Проверьте пароль и попробуйте еще раз.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Используемый механизм не поддерживает смену паролей, но пользовательский ключ шифрования был успешно обновлён", - "Unable to change password" : "Невозможно изменить пароль", - "Enabled" : "Включено", - "Not enabled" : "Не включено", "installing and updating apps via the app store or 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 использует устаревшую версию %s (%s). Пожалуйста, обновите Вашу операционную систему, иначе такие возможности, как %s, не будут работать надежно.", @@ -33,17 +33,6 @@ "Email saved" : "Адрес сохранен", "Your full name has been changed." : "Ваше полное имя было изменено.", "Unable to change full name" : "Невозможно изменить полное имя", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Предупреждения безопасности и установки", - "Sharing" : "Общий доступ", - "Server-side encryption" : "Шифрование на стороне сервера", - "External Storage" : "Внешнее хранилище", - "Cron" : "Cron (планировщик задач)", - "Email server" : "Почтовый сервер", - "Log" : "Журнал", - "Tips & tricks" : "Советы и трюки", - "Updates" : "Обновления", "Couldn't remove app." : "Не удалось удалить приложение.", "Language changed" : "Язык изменён", "Invalid request" : "Неправильный запрос", @@ -131,17 +120,55 @@ "Sessions" : "Сессии", "App passwords" : "Пароль приложения", "Sync clients" : "Синхронизирующиеся клиенты", - "Everything (fatal issues, errors, warnings, info, debug)" : "Все (критические проблемы, ошибки, предупреждения, информационные, отладочные)", - "Info, warnings, errors and fatal issues" : "Информационные, предупреждения, ошибки и критические проблемы", - "Warnings, errors and fatal issues" : "Предупреждения, ошибки и критические проблемы", - "Errors and fatal issues" : "Ошибки и критические проблемы", - "Fatal issues only" : "Только критические проблемы", "None" : "Отсутствует", "Login" : "Логин", "Plain" : "Простой", "NT LAN Manager" : "Менеджер NT LAN", "SSL" : "SSL", "TLS" : "TLS", + "Email server" : "Почтовый сервер", + "Open documentation" : "Открыть документацию", + "This is used for sending out notifications." : "Используется для отправки уведомлений.", + "Send mode" : "Способ отправки", + "Encryption" : "Шифрование", + "From address" : "Адрес отправителя", + "mail" : "почта", + "Authentication method" : "Метод проверки подлинности", + "Authentication required" : "Требуется аутентификация ", + "Server address" : "Адрес сервера", + "Port" : "Порт", + "Credentials" : "Учётные данные", + "SMTP Username" : "Пользователь SMTP", + "SMTP Password" : "Пароль SMTP", + "Store credentials" : "Сохранить учётные данные", + "Test email settings" : "Проверить настройки почты", + "Send email" : "Отправить email", + "Server-side encryption" : "Шифрование на стороне сервера", + "Enable server-side encryption" : "Включить шифрование на стороне сервера", + "Please read carefully before activating server-side encryption: " : "Пожалуйста прочтите внимательно прежде чем включать шифрование на стороне сервера:", + "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Когда вы включите шифрование, все файлы, загруженные с этого момента на сервер, будут храниться в зашифрованном виде. Отключить шифрование в более позднее время возможно только в случае, если выбранный модуль шифрования поддерживает эту функцию, и все дополнительные условия соблюдены (например настроен ключ восстановления).", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Шифрование само по себе не гарантирует безопасность системы. Пожалуйста ознакомтесь с документацией для получения более подробной информации о том, как работают приложения шифрования и соответствующие примеры.", + "Be aware that encryption always increases the file size." : "Будьте в курсе, что шифрование всегда увеличивает размер файла.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Хорошая практика делать регулярные резервные копии ваших данных. При использовании шифрования сохраняйте не только данные, но и ключи.", + "This is the final warning: Do you really want to enable encryption?" : "Это последнее предупреждение: Вы действительно желаете включить шифрование?", + "Enable encryption" : "Включить шифрование", + "No encryption module loaded, please enable an encryption module in the app menu." : "Модуль шифрования не загружен, пожалуйста включите модуль шифрования в меню приложений.", + "Select default encryption module:" : "Выберите модуль шифрования по умолчанию:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Вам необходимо произвести конвертацию ключей шифрования из старого формата (ownCloud <= 8.0) в новый. Пожалуйста включите \"Модуль шифрования по умолчанию\" и запустите команду 'occ encryption:migrate'.", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Вам необходимо произвести конвертацию ключей шифрования из старого формата (ownCloud <= 8.0) в новый.", + "Start migration" : "Запустить миграцию", + "Everything (fatal issues, errors, warnings, info, debug)" : "Все (критические проблемы, ошибки, предупреждения, информационные, отладочные)", + "Info, warnings, errors and fatal issues" : "Информационные, предупреждения, ошибки и критические проблемы", + "Warnings, errors and fatal issues" : "Предупреждения, ошибки и критические проблемы", + "Errors and fatal issues" : "Ошибки и критические проблемы", + "Fatal issues only" : "Только критические проблемы", + "Log" : "Журнал", + "What to log" : "Что записывать в журнал", + "Download logfile" : "Скачать журнал", + "More" : "Больше", + "Less" : "Меньше", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Лог-файл - больше 100 мб. Его скачивание может занять некоторое время!", + "Security & setup warnings" : "Предупреждения безопасности и установки", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP был установлен неверно. Запрос getenv(\"PATH\") возвращает пустые результаты.", "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Пожалуйста обратитесь к <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">документации по установке ↗</a> для получения информации по настройке php на вашем сервере, особенно это касается php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Конфигурационный файл в режиме только для чтения. В связи с этим некоторые настройки веб-интерфейса невозможно изменить. Учтите, что для установки обновлений, вам потребуется самостоятельно разрешить запись в конфигурационный файл.", @@ -158,7 +185,15 @@ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Не удается запустить задачу планировщика через CLI. Произошли следующие технические ошибки:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Пожалуйста еще раз обратитесь к <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">документации по установке ↗</a> и проверьте <a href=\"#log-section\">журнал</a>на наличие ошибок", "All checks passed." : "Все проверки пройдены.", - "Open documentation" : "Открыть документацию", + "Cron" : "Cron (планировщик задач)", + "Last cron job execution: %s." : "Последнее выполненное задание планировщика: %s.", + "Last cron job execution: %s. Something seems wrong." : "Последнее выполненное задание планировщика: %s. Похоже, что-то не в порядке.", + "Cron was not executed yet!" : "Задачи cron ещё не запускались!", + "Execute one task with each page loaded" : "Выполнять одно задание с каждой загруженной страницей", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php зарегистрирован в webcron и будет вызываться каждые 15 минут по http.", + "Use system's cron service to call the cron.php file every 15 minutes." : "Использовать системный cron для вызова cron.php каждые 15 минут.", + "Version" : "Версия", + "Sharing" : "Общий доступ", "Allow apps to use the Share API" : "Позволить приложениям использовать API общего доступа", "Allow users to share via link" : "Разрешить пользователям публикации через ссылки", "Allow public uploads" : "Разрешить открытые/публичные загрузки", @@ -175,45 +210,7 @@ "Exclude groups from sharing" : "Исключить группы из общего доступа", "These groups will still be able to receive shares, but not to initiate them." : "Эти группы смогут получать общие ресурсы, но не могут их создавать.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Включить автоматическое завершение имен пользователей в окне общего доступа. Если отключено, то необходимо вводить полное имя вручную.", - "Last cron job execution: %s." : "Последнее выполненное задание планировщика: %s.", - "Last cron job execution: %s. Something seems wrong." : "Последнее выполненное задание планировщика: %s. Похоже, что-то не в порядке.", - "Cron was not executed yet!" : "Задачи cron ещё не запускались!", - "Execute one task with each page loaded" : "Выполнять одно задание с каждой загруженной страницей", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php зарегистрирован в webcron и будет вызываться каждые 15 минут по http.", - "Use system's cron service to call the cron.php file every 15 minutes." : "Использовать системный cron для вызова cron.php каждые 15 минут.", - "Enable server-side encryption" : "Включить шифрование на стороне сервера", - "Please read carefully before activating server-side encryption: " : "Пожалуйста прочтите внимательно прежде чем включать шифрование на стороне сервера:", - "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Когда вы включите шифрование, все файлы, загруженные с этого момента на сервер, будут храниться в зашифрованном виде. Отключить шифрование в более позднее время возможно только в случае, если выбранный модуль шифрования поддерживает эту функцию, и все дополнительные условия соблюдены (например настроен ключ восстановления).", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Шифрование само по себе не гарантирует безопасность системы. Пожалуйста ознакомтесь с документацией для получения более подробной информации о том, как работают приложения шифрования и соответствующие примеры.", - "Be aware that encryption always increases the file size." : "Будьте в курсе, что шифрование всегда увеличивает размер файла.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Хорошая практика делать регулярные резервные копии ваших данных. При использовании шифрования сохраняйте не только данные, но и ключи.", - "This is the final warning: Do you really want to enable encryption?" : "Это последнее предупреждение: Вы действительно желаете включить шифрование?", - "Enable encryption" : "Включить шифрование", - "No encryption module loaded, please enable an encryption module in the app menu." : "Модуль шифрования не загружен, пожалуйста включите модуль шифрования в меню приложений.", - "Select default encryption module:" : "Выберите модуль шифрования по умолчанию:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Вам необходимо произвести конвертацию ключей шифрования из старого формата (ownCloud <= 8.0) в новый. Пожалуйста включите \"Модуль шифрования по умолчанию\" и запустите команду 'occ encryption:migrate'.", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Вам необходимо произвести конвертацию ключей шифрования из старого формата (ownCloud <= 8.0) в новый.", - "Start migration" : "Запустить миграцию", - "This is used for sending out notifications." : "Используется для отправки уведомлений.", - "Send mode" : "Способ отправки", - "Encryption" : "Шифрование", - "From address" : "Адрес отправителя", - "mail" : "почта", - "Authentication method" : "Метод проверки подлинности", - "Authentication required" : "Требуется аутентификация ", - "Server address" : "Адрес сервера", - "Port" : "Порт", - "Credentials" : "Учётные данные", - "SMTP Username" : "Пользователь SMTP", - "SMTP Password" : "Пароль SMTP", - "Store credentials" : "Сохранить учётные данные", - "Test email settings" : "Проверить настройки почты", - "Send email" : "Отправить email", - "What to log" : "Что записывать в журнал", - "Download logfile" : "Скачать журнал", - "More" : "Больше", - "Less" : "Меньше", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Лог-файл - больше 100 мб. Его скачивание может занять некоторое время!", + "Tips & tricks" : "Советы и трюки", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "В качестве базы данных используется SQLite. Для больших установок мы рекомендуем переключиться на другую серверную базу данных.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Особенно вызывает сомнение использование SQLite при синхронизации файлов с использованием клиента для ПК.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Для миграции на другую базу данных используйте команду: 'occ db:convert-type' или обратитесь к a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">документации ↗</a>.", @@ -223,7 +220,6 @@ "Improving the config.php" : "Улучшение config.php", "Theming" : "Темы оформления", "Hardening and security guidance" : "Руководство по безопасности и защите", - "Version" : "Версия", "Developer documentation" : "Документация для разработчиков", "Experimental applications ahead" : "Экспериментальные приложения", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Экспериментальные приложения не проверялись на наличие уязвимостей безопасности, они также могут быть нестабильны, т.к. находятся в активной разработке. Их установка может повлечь потерю информации или нарушение безопасности.", @@ -279,6 +275,11 @@ "Change password" : "Сменить пароль", "Language" : "Язык", "Help translate" : "Помочь с переводом", + "Get the apps to sync your files" : "Получить приложения для синхронизации ваших файлов", + "Desktop client" : "Клиент для ПК", + "Android app" : "Android приложение", + "iOS app" : "iOS приложение", + "Show First Run Wizard again" : "Показать помощник настройки снова", "Web, desktop and mobile clients currently logged in to your account." : "Веб, настольные и мобильные клиенты, которые в настоящий момент авторизованы вашей учётной записью.", "Device" : "Устройство", "Last activity" : "Последние действия", @@ -289,13 +290,7 @@ "Use the credentials below to configure your app or device." : "Используйте учётные данные ниже для настройки вашего приложения или устройства.", "Username" : "Имя пользователя", "Done" : "Выполнено", - "Get the apps to sync your files" : "Получить приложения для синхронизации ваших файлов", - "Desktop client" : "Клиент для ПК", - "Android app" : "Android приложение", - "iOS app" : "iOS приложение", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Если Вы хотите поддержать проект\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">присоединяйтесь к разработке</a>\n\t\tили\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">расскажите о нас</a>!", - "Show First Run Wizard again" : "Показать помощник настройки снова", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Разработано {communityopen}сообществом Nextcloud{linkclose}, {githubopen}исходный код{linkclose} лицензируется в соответствии с {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", + "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}.", "Show storage location" : "Показать местонахождение хранилища", "Show last log in" : "Показать последний вход в систему", "Show user backend" : "Показать механизм учёта пользователей", @@ -319,6 +314,10 @@ "change full name" : "изменить полное имя", "set new password" : "установить новый пароль", "change email address" : "изменить адрес почты", - "Default" : "По умолчанию" + "Default" : "По умолчанию", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Внешнее хранилище", + "Updates" : "Обновления" },"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/sl.js b/settings/l10n/sl.js index 6de06e3b64f..30498b6c8aa 100644 --- a/settings/l10n/sl.js +++ b/settings/l10n/sl.js @@ -1,16 +1,16 @@ OC.L10N.register( "settings", { + "Enabled" : "Omogočeno", + "Not enabled" : "Ni omogočeno", "Wrong password" : "Napačno geslo", "Saved" : "Shranjeno", "No user supplied" : "Ni navedenega uporabnika", + "Unable to change password" : "Ni mogoče spremeniti gesla", "Authentication error" : "Napaka med overjanjem", "Please provide an admin recovery password, otherwise all user data will be lost" : "Podati je treba skrbniško obnovitveno geslo, sicer bodo vsi uporabniški podatki izgubljeni.", "Wrong admin recovery password. Please check the password and try again." : "Napačno navedeno skrbniško obnovitveno geslo. Preverite geslo in poskusite znova.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Ozadnji program ne podpira spreminjanja gesla, je pa uspešno posodobljeno uporabniško šifriranje.", - "Unable to change password" : "Ni mogoče spremeniti gesla", - "Enabled" : "Omogočeno", - "Not enabled" : "Ni omogočeno", "installing and updating apps via the app store or Federated Cloud Sharing" : "nameščanje in posodabljanje programov prek programske zbirke ali zveznega oblaka", "Federated Cloud Sharing" : "Souporaba zveznega oblaka", "A problem occurred, please check your log files (Error: %s)" : "Prišlo je do napake. Preverite dnevniške zapise (napaka: %s).", @@ -34,17 +34,6 @@ OC.L10N.register( "Email saved" : "Elektronski naslov je shranjen", "Your full name has been changed." : "Vaše polno ime je spremenjeno.", "Unable to change full name" : "Ni mogoče spremeniti polnega imena", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Varnost in namestitvena opozorila", - "Sharing" : "Souporaba", - "Server-side encryption" : "Šifriranje na strežniku", - "External Storage" : "Zunanja podatkovna shramba", - "Cron" : "Periodično opravilo", - "Email server" : "Poštni strežnik", - "Log" : "Dnevnik", - "Tips & tricks" : "Nasveti in triki", - "Updates" : "Posodobitve", "Couldn't remove app." : "Ni mogoče odstraniti programa.", "Language changed" : "Jezik je spremenjen", "Invalid request" : "Neveljavna zahteva", @@ -115,53 +104,14 @@ OC.L10N.register( "Sessions" : "Seje", "App passwords" : " Gesla aplikacije", "Sync clients" : "Uskladi odjemalce", - "Everything (fatal issues, errors, warnings, info, debug)" : "Vse (podrobnosti, opozorila, hrošče, napake in usodne dogodke)", - "Info, warnings, errors and fatal issues" : "Podrobnosti, opozorila, napake in usodne dogodke", - "Warnings, errors and fatal issues" : "Opozorila, napake in usodne dogodke", - "Errors and fatal issues" : "Napake in usodne dogodke", - "Fatal issues only" : "Le usodne dogodke", "None" : "Brez", "Login" : "Prijava", "Plain" : "Besedilno", "NT LAN Manager" : "Upravljalnik NT LAN", "SSL" : "SSL", "TLS" : "TLS", - "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : " Izgleda, da je PHP nastavljen, da odreže znake v 'inline doc' blokih. To bo povzročilo, da nekateri osnovni moduli ne bodo dosegljivi.", - "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Napako je najverjetneje povzročil predpomnilnik ali pospeševalnik, kot sta Zend OPcache ali eAccelerator.", - "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.", - "System locale can not be set to a one which supports UTF-8." : "Sistemskih jezikovnih nastavitev ni mogoče nastaviti na možnost, ki podpira nabor UTF-8.", - "This means that there might be problems with certain characters in file names." : "To pomeni, da se lahko pojavijo napake pri nekaterih znakih v imenih datotek.", - "All checks passed." : "Vsa preverjanja so uspešno zaključena.", + "Email server" : "Poštni strežnik", "Open documentation" : "Odprta dokumentacija", - "Allow apps to use the Share API" : "Dovoli programom uporabo vmesnika API souporabe", - "Allow users to share via link" : "Uporabnikom dovoli omogočanje souporabe s povezavami", - "Allow public uploads" : "Dovoli javno pošiljanje datotek v oblak", - "Enforce password protection" : "Vsili zaščito z geslom", - "Set default expiration date" : "Nastavitev privzetega datuma poteka", - "Allow users to send mail notification for shared files" : "Dovoli uporabnikom pošiljati obvestila o souporabi datotek po elektronski pošti.", - "Expire after " : "Preteče po", - "days" : "dneh", - "Enforce expiration date" : "Vsili datum preteka", - "Allow resharing" : "Dovoli nadaljnjo souporabo", - "Allow sharing with groups" : "Dovoli souporabo s skupinami", - "Restrict users to only share with users in their groups" : "Uporabnikom dovoli omogočanje souporabe le znotraj njihove skupine", - "Allow users to send mail notification for shared files to other users" : "Dovoli uporabnikom pošiljanje obvestil o souporabi datotek z drugimi uporabniki.", - "Exclude groups from sharing" : "Izloči skupine iz souporabe", - "These groups will still be able to receive shares, but not to initiate them." : "Te skupine lahko sprejemajo mape v souporabo, ne morejo pa souporabe dovoliti", - "Last cron job execution: %s." : " Zadnje periodično opravilo: %s.", - "Last cron job execution: %s. Something seems wrong." : " Zadnje periodično opravilo: %s. Nekaj izgleda narobe.", - "Cron was not executed yet!" : "Periodično opravilo cron še ni zagnano!", - "Execute one task with each page loaded" : "Izvedi eno nalogo z vsako naloženo stranjo.", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "Datoteka cron.php je vpisana za periodično opravilo webcron za potrditev sklica vsakih 15 minut pri povezavi preko HTTP.", - "Use system's cron service to call the cron.php file every 15 minutes." : "Uporabi storitev periodičnih opravil za klic datoteke cron.php vsakih 15 minut.", - "Enable server-side encryption" : "Omogoči šifriranje na strežniku", - "Please read carefully before activating server-side encryption: " : "Pozorno preberite opombe, preden omogočite strežniško šifriranje:", - "Be aware that encryption always increases the file size." : " Upoštevajte, da šifriranje vedno poveča velikost datoteke.", - "This is the final warning: Do you really want to enable encryption?" : " To je zadnje opozorilo. Ali resnično želite vključiti šifriranje?", - "Enable encryption" : "Omogoči šifriranje", - "No encryption module loaded, please enable an encryption module in the app menu." : "Modul za šifriranje ni naložen. Prosim, omogočite en šifrirni modul v spisku aplikacij.", - "Select default encryption module:" : "Izbor privzetega modula za šifriranje:", - "Start migration" : "Začni selitev", "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", @@ -177,11 +127,58 @@ OC.L10N.register( "Store credentials" : "Shrani poverila", "Test email settings" : "Preizkus nastavitev elektronske pošte", "Send email" : "Pošlji elektronsko sporočilo", + "Server-side encryption" : "Šifriranje na strežniku", + "Enable server-side encryption" : "Omogoči šifriranje na strežniku", + "Please read carefully before activating server-side encryption: " : "Pozorno preberite opombe, preden omogočite strežniško šifriranje:", + "Be aware that encryption always increases the file size." : " Upoštevajte, da šifriranje vedno poveča velikost datoteke.", + "This is the final warning: Do you really want to enable encryption?" : " To je zadnje opozorilo. Ali resnično želite vključiti šifriranje?", + "Enable encryption" : "Omogoči šifriranje", + "No encryption module loaded, please enable an encryption module in the app menu." : "Modul za šifriranje ni naložen. Prosim, omogočite en šifrirni modul v spisku aplikacij.", + "Select default encryption module:" : "Izbor privzetega modula za šifriranje:", + "Start migration" : "Začni selitev", + "Everything (fatal issues, errors, warnings, info, debug)" : "Vse (podrobnosti, opozorila, hrošče, napake in usodne dogodke)", + "Info, warnings, errors and fatal issues" : "Podrobnosti, opozorila, napake in usodne dogodke", + "Warnings, errors and fatal issues" : "Opozorila, napake in usodne dogodke", + "Errors and fatal issues" : "Napake in usodne dogodke", + "Fatal issues only" : "Le usodne dogodke", + "Log" : "Dnevnik", "What to log" : "Kaj naj se beleži?", "Download logfile" : "Prejmi dnevniško datoteko", "More" : "Več", "Less" : "Manj", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Dnevniškega datoteka je večja od 100 MB. Hitrost prejema je odvisna od širokopasovne povezave!", + "Security & setup warnings" : "Varnost in namestitvena opozorila", + "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : " Izgleda, da je PHP nastavljen, da odreže znake v 'inline doc' blokih. To bo povzročilo, da nekateri osnovni moduli ne bodo dosegljivi.", + "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Napako je najverjetneje povzročil predpomnilnik ali pospeševalnik, kot sta Zend OPcache ali eAccelerator.", + "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.", + "System locale can not be set to a one which supports UTF-8." : "Sistemskih jezikovnih nastavitev ni mogoče nastaviti na možnost, ki podpira nabor UTF-8.", + "This means that there might be problems with certain characters in file names." : "To pomeni, da se lahko pojavijo napake pri nekaterih znakih v imenih datotek.", + "All checks passed." : "Vsa preverjanja so uspešno zaključena.", + "Cron" : "Periodično opravilo", + "Last cron job execution: %s." : " Zadnje periodično opravilo: %s.", + "Last cron job execution: %s. Something seems wrong." : " Zadnje periodično opravilo: %s. Nekaj izgleda narobe.", + "Cron was not executed yet!" : "Periodično opravilo cron še ni zagnano!", + "Execute one task with each page loaded" : "Izvedi eno nalogo z vsako naloženo stranjo.", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "Datoteka cron.php je vpisana za periodično opravilo webcron za potrditev sklica vsakih 15 minut pri povezavi preko HTTP.", + "Use system's cron service to call the cron.php file every 15 minutes." : "Uporabi storitev periodičnih opravil za klic datoteke cron.php vsakih 15 minut.", + "Version" : "Različica", + "Sharing" : "Souporaba", + "Allow apps to use the Share API" : "Dovoli programom uporabo vmesnika API souporabe", + "Allow users to share via link" : "Uporabnikom dovoli omogočanje souporabe s povezavami", + "Allow public uploads" : "Dovoli javno pošiljanje datotek v oblak", + "Enforce password protection" : "Vsili zaščito z geslom", + "Set default expiration date" : "Nastavitev privzetega datuma poteka", + "Allow users to send mail notification for shared files" : "Dovoli uporabnikom pošiljati obvestila o souporabi datotek po elektronski pošti.", + "Expire after " : "Preteče po", + "days" : "dneh", + "Enforce expiration date" : "Vsili datum preteka", + "Allow resharing" : "Dovoli nadaljnjo souporabo", + "Allow sharing with groups" : "Dovoli souporabo s skupinami", + "Restrict users to only share with users in their groups" : "Uporabnikom dovoli omogočanje souporabe le znotraj njihove skupine", + "Allow users to send mail notification for shared files to other users" : "Dovoli uporabnikom pošiljanje obvestil o souporabi datotek z drugimi uporabniki.", + "Exclude groups from sharing" : "Izloči skupine iz souporabe", + "These groups will still be able to receive shares, but not to initiate them." : "Te skupine lahko sprejemajo mape v souporabo, ne morejo pa souporabe dovoliti", + "Tips & tricks" : "Nasveti in triki", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Uporabljena zbirka je SQLite. Za obsežnejše sisteme je priporočljiv prehod na drugo vrsto zbirke.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Uporaba SQLite ni priporočljiva iz varnostnih razlogov, to še posebej velja, če se sistem krajevno usklajuje z namizjem prek odjemalca.", "How to do backups" : "Kako ustvariti varnostne kopije", @@ -190,7 +187,6 @@ OC.L10N.register( "Improving the config.php" : "Izboljšave v config.php", "Theming" : "Teme", "Hardening and security guidance" : "Varnost in varnostni napotki", - "Version" : "Različica", "Developer documentation" : "Dokumentacija za razvijalce", "Experimental applications ahead" : "Preizkusni programi", "%s-licensed" : "dovoljenje-%s", @@ -244,16 +240,16 @@ OC.L10N.register( "Change password" : "Spremeni geslo", "Language" : "Jezik", "Help translate" : "Sodelujte pri prevajanju", - "Name" : "Ime", - "App name" : "Ime aplikacije", - "Create new app password" : "Ustvari novo geslo aplikacije", - "Username" : "Uporabniško ime", - "Done" : "Končano", "Get the apps to sync your files" : "Pridobi programe za usklajevanje datotek", "Desktop client" : "Namizni odjemalec", "Android app" : "Program za Android", "iOS app" : "Program za iOS", "Show First Run Wizard again" : "Zaženi čarovnika prvega zagona", + "Name" : "Ime", + "App name" : "Ime aplikacije", + "Create new app password" : "Ustvari novo geslo aplikacije", + "Username" : "Uporabniško ime", + "Done" : "Končano", "Show storage location" : "Pokaži mesto shrambe", "Show last log in" : "Pokaži podatke zadnje prijave", "Show user backend" : "Pokaži ozadnji program", @@ -272,6 +268,10 @@ OC.L10N.register( "change full name" : "Spremeni polno ime", "set new password" : "nastavi novo geslo", "change email address" : "spremeni naslov elektronske pošte", - "Default" : "Privzeto" + "Default" : "Privzeto", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Zunanja podatkovna shramba", + "Updates" : "Posodobitve" }, "nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"); diff --git a/settings/l10n/sl.json b/settings/l10n/sl.json index 44b7c9e55d6..34419617913 100644 --- a/settings/l10n/sl.json +++ b/settings/l10n/sl.json @@ -1,14 +1,14 @@ { "translations": { + "Enabled" : "Omogočeno", + "Not enabled" : "Ni omogočeno", "Wrong password" : "Napačno geslo", "Saved" : "Shranjeno", "No user supplied" : "Ni navedenega uporabnika", + "Unable to change password" : "Ni mogoče spremeniti gesla", "Authentication error" : "Napaka med overjanjem", "Please provide an admin recovery password, otherwise all user data will be lost" : "Podati je treba skrbniško obnovitveno geslo, sicer bodo vsi uporabniški podatki izgubljeni.", "Wrong admin recovery password. Please check the password and try again." : "Napačno navedeno skrbniško obnovitveno geslo. Preverite geslo in poskusite znova.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Ozadnji program ne podpira spreminjanja gesla, je pa uspešno posodobljeno uporabniško šifriranje.", - "Unable to change password" : "Ni mogoče spremeniti gesla", - "Enabled" : "Omogočeno", - "Not enabled" : "Ni omogočeno", "installing and updating apps via the app store or Federated Cloud Sharing" : "nameščanje in posodabljanje programov prek programske zbirke ali zveznega oblaka", "Federated Cloud Sharing" : "Souporaba zveznega oblaka", "A problem occurred, please check your log files (Error: %s)" : "Prišlo je do napake. Preverite dnevniške zapise (napaka: %s).", @@ -32,17 +32,6 @@ "Email saved" : "Elektronski naslov je shranjen", "Your full name has been changed." : "Vaše polno ime je spremenjeno.", "Unable to change full name" : "Ni mogoče spremeniti polnega imena", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Varnost in namestitvena opozorila", - "Sharing" : "Souporaba", - "Server-side encryption" : "Šifriranje na strežniku", - "External Storage" : "Zunanja podatkovna shramba", - "Cron" : "Periodično opravilo", - "Email server" : "Poštni strežnik", - "Log" : "Dnevnik", - "Tips & tricks" : "Nasveti in triki", - "Updates" : "Posodobitve", "Couldn't remove app." : "Ni mogoče odstraniti programa.", "Language changed" : "Jezik je spremenjen", "Invalid request" : "Neveljavna zahteva", @@ -113,53 +102,14 @@ "Sessions" : "Seje", "App passwords" : " Gesla aplikacije", "Sync clients" : "Uskladi odjemalce", - "Everything (fatal issues, errors, warnings, info, debug)" : "Vse (podrobnosti, opozorila, hrošče, napake in usodne dogodke)", - "Info, warnings, errors and fatal issues" : "Podrobnosti, opozorila, napake in usodne dogodke", - "Warnings, errors and fatal issues" : "Opozorila, napake in usodne dogodke", - "Errors and fatal issues" : "Napake in usodne dogodke", - "Fatal issues only" : "Le usodne dogodke", "None" : "Brez", "Login" : "Prijava", "Plain" : "Besedilno", "NT LAN Manager" : "Upravljalnik NT LAN", "SSL" : "SSL", "TLS" : "TLS", - "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : " Izgleda, da je PHP nastavljen, da odreže znake v 'inline doc' blokih. To bo povzročilo, da nekateri osnovni moduli ne bodo dosegljivi.", - "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Napako je najverjetneje povzročil predpomnilnik ali pospeševalnik, kot sta Zend OPcache ali eAccelerator.", - "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.", - "System locale can not be set to a one which supports UTF-8." : "Sistemskih jezikovnih nastavitev ni mogoče nastaviti na možnost, ki podpira nabor UTF-8.", - "This means that there might be problems with certain characters in file names." : "To pomeni, da se lahko pojavijo napake pri nekaterih znakih v imenih datotek.", - "All checks passed." : "Vsa preverjanja so uspešno zaključena.", + "Email server" : "Poštni strežnik", "Open documentation" : "Odprta dokumentacija", - "Allow apps to use the Share API" : "Dovoli programom uporabo vmesnika API souporabe", - "Allow users to share via link" : "Uporabnikom dovoli omogočanje souporabe s povezavami", - "Allow public uploads" : "Dovoli javno pošiljanje datotek v oblak", - "Enforce password protection" : "Vsili zaščito z geslom", - "Set default expiration date" : "Nastavitev privzetega datuma poteka", - "Allow users to send mail notification for shared files" : "Dovoli uporabnikom pošiljati obvestila o souporabi datotek po elektronski pošti.", - "Expire after " : "Preteče po", - "days" : "dneh", - "Enforce expiration date" : "Vsili datum preteka", - "Allow resharing" : "Dovoli nadaljnjo souporabo", - "Allow sharing with groups" : "Dovoli souporabo s skupinami", - "Restrict users to only share with users in their groups" : "Uporabnikom dovoli omogočanje souporabe le znotraj njihove skupine", - "Allow users to send mail notification for shared files to other users" : "Dovoli uporabnikom pošiljanje obvestil o souporabi datotek z drugimi uporabniki.", - "Exclude groups from sharing" : "Izloči skupine iz souporabe", - "These groups will still be able to receive shares, but not to initiate them." : "Te skupine lahko sprejemajo mape v souporabo, ne morejo pa souporabe dovoliti", - "Last cron job execution: %s." : " Zadnje periodično opravilo: %s.", - "Last cron job execution: %s. Something seems wrong." : " Zadnje periodično opravilo: %s. Nekaj izgleda narobe.", - "Cron was not executed yet!" : "Periodično opravilo cron še ni zagnano!", - "Execute one task with each page loaded" : "Izvedi eno nalogo z vsako naloženo stranjo.", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "Datoteka cron.php je vpisana za periodično opravilo webcron za potrditev sklica vsakih 15 minut pri povezavi preko HTTP.", - "Use system's cron service to call the cron.php file every 15 minutes." : "Uporabi storitev periodičnih opravil za klic datoteke cron.php vsakih 15 minut.", - "Enable server-side encryption" : "Omogoči šifriranje na strežniku", - "Please read carefully before activating server-side encryption: " : "Pozorno preberite opombe, preden omogočite strežniško šifriranje:", - "Be aware that encryption always increases the file size." : " Upoštevajte, da šifriranje vedno poveča velikost datoteke.", - "This is the final warning: Do you really want to enable encryption?" : " To je zadnje opozorilo. Ali resnično želite vključiti šifriranje?", - "Enable encryption" : "Omogoči šifriranje", - "No encryption module loaded, please enable an encryption module in the app menu." : "Modul za šifriranje ni naložen. Prosim, omogočite en šifrirni modul v spisku aplikacij.", - "Select default encryption module:" : "Izbor privzetega modula za šifriranje:", - "Start migration" : "Začni selitev", "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", @@ -175,11 +125,58 @@ "Store credentials" : "Shrani poverila", "Test email settings" : "Preizkus nastavitev elektronske pošte", "Send email" : "Pošlji elektronsko sporočilo", + "Server-side encryption" : "Šifriranje na strežniku", + "Enable server-side encryption" : "Omogoči šifriranje na strežniku", + "Please read carefully before activating server-side encryption: " : "Pozorno preberite opombe, preden omogočite strežniško šifriranje:", + "Be aware that encryption always increases the file size." : " Upoštevajte, da šifriranje vedno poveča velikost datoteke.", + "This is the final warning: Do you really want to enable encryption?" : " To je zadnje opozorilo. Ali resnično želite vključiti šifriranje?", + "Enable encryption" : "Omogoči šifriranje", + "No encryption module loaded, please enable an encryption module in the app menu." : "Modul za šifriranje ni naložen. Prosim, omogočite en šifrirni modul v spisku aplikacij.", + "Select default encryption module:" : "Izbor privzetega modula za šifriranje:", + "Start migration" : "Začni selitev", + "Everything (fatal issues, errors, warnings, info, debug)" : "Vse (podrobnosti, opozorila, hrošče, napake in usodne dogodke)", + "Info, warnings, errors and fatal issues" : "Podrobnosti, opozorila, napake in usodne dogodke", + "Warnings, errors and fatal issues" : "Opozorila, napake in usodne dogodke", + "Errors and fatal issues" : "Napake in usodne dogodke", + "Fatal issues only" : "Le usodne dogodke", + "Log" : "Dnevnik", "What to log" : "Kaj naj se beleži?", "Download logfile" : "Prejmi dnevniško datoteko", "More" : "Več", "Less" : "Manj", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Dnevniškega datoteka je večja od 100 MB. Hitrost prejema je odvisna od širokopasovne povezave!", + "Security & setup warnings" : "Varnost in namestitvena opozorila", + "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : " Izgleda, da je PHP nastavljen, da odreže znake v 'inline doc' blokih. To bo povzročilo, da nekateri osnovni moduli ne bodo dosegljivi.", + "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Napako je najverjetneje povzročil predpomnilnik ali pospeševalnik, kot sta Zend OPcache ali eAccelerator.", + "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.", + "System locale can not be set to a one which supports UTF-8." : "Sistemskih jezikovnih nastavitev ni mogoče nastaviti na možnost, ki podpira nabor UTF-8.", + "This means that there might be problems with certain characters in file names." : "To pomeni, da se lahko pojavijo napake pri nekaterih znakih v imenih datotek.", + "All checks passed." : "Vsa preverjanja so uspešno zaključena.", + "Cron" : "Periodično opravilo", + "Last cron job execution: %s." : " Zadnje periodično opravilo: %s.", + "Last cron job execution: %s. Something seems wrong." : " Zadnje periodično opravilo: %s. Nekaj izgleda narobe.", + "Cron was not executed yet!" : "Periodično opravilo cron še ni zagnano!", + "Execute one task with each page loaded" : "Izvedi eno nalogo z vsako naloženo stranjo.", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "Datoteka cron.php je vpisana za periodično opravilo webcron za potrditev sklica vsakih 15 minut pri povezavi preko HTTP.", + "Use system's cron service to call the cron.php file every 15 minutes." : "Uporabi storitev periodičnih opravil za klic datoteke cron.php vsakih 15 minut.", + "Version" : "Različica", + "Sharing" : "Souporaba", + "Allow apps to use the Share API" : "Dovoli programom uporabo vmesnika API souporabe", + "Allow users to share via link" : "Uporabnikom dovoli omogočanje souporabe s povezavami", + "Allow public uploads" : "Dovoli javno pošiljanje datotek v oblak", + "Enforce password protection" : "Vsili zaščito z geslom", + "Set default expiration date" : "Nastavitev privzetega datuma poteka", + "Allow users to send mail notification for shared files" : "Dovoli uporabnikom pošiljati obvestila o souporabi datotek po elektronski pošti.", + "Expire after " : "Preteče po", + "days" : "dneh", + "Enforce expiration date" : "Vsili datum preteka", + "Allow resharing" : "Dovoli nadaljnjo souporabo", + "Allow sharing with groups" : "Dovoli souporabo s skupinami", + "Restrict users to only share with users in their groups" : "Uporabnikom dovoli omogočanje souporabe le znotraj njihove skupine", + "Allow users to send mail notification for shared files to other users" : "Dovoli uporabnikom pošiljanje obvestil o souporabi datotek z drugimi uporabniki.", + "Exclude groups from sharing" : "Izloči skupine iz souporabe", + "These groups will still be able to receive shares, but not to initiate them." : "Te skupine lahko sprejemajo mape v souporabo, ne morejo pa souporabe dovoliti", + "Tips & tricks" : "Nasveti in triki", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Uporabljena zbirka je SQLite. Za obsežnejše sisteme je priporočljiv prehod na drugo vrsto zbirke.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Uporaba SQLite ni priporočljiva iz varnostnih razlogov, to še posebej velja, če se sistem krajevno usklajuje z namizjem prek odjemalca.", "How to do backups" : "Kako ustvariti varnostne kopije", @@ -188,7 +185,6 @@ "Improving the config.php" : "Izboljšave v config.php", "Theming" : "Teme", "Hardening and security guidance" : "Varnost in varnostni napotki", - "Version" : "Različica", "Developer documentation" : "Dokumentacija za razvijalce", "Experimental applications ahead" : "Preizkusni programi", "%s-licensed" : "dovoljenje-%s", @@ -242,16 +238,16 @@ "Change password" : "Spremeni geslo", "Language" : "Jezik", "Help translate" : "Sodelujte pri prevajanju", - "Name" : "Ime", - "App name" : "Ime aplikacije", - "Create new app password" : "Ustvari novo geslo aplikacije", - "Username" : "Uporabniško ime", - "Done" : "Končano", "Get the apps to sync your files" : "Pridobi programe za usklajevanje datotek", "Desktop client" : "Namizni odjemalec", "Android app" : "Program za Android", "iOS app" : "Program za iOS", "Show First Run Wizard again" : "Zaženi čarovnika prvega zagona", + "Name" : "Ime", + "App name" : "Ime aplikacije", + "Create new app password" : "Ustvari novo geslo aplikacije", + "Username" : "Uporabniško ime", + "Done" : "Končano", "Show storage location" : "Pokaži mesto shrambe", "Show last log in" : "Pokaži podatke zadnje prijave", "Show user backend" : "Pokaži ozadnji program", @@ -270,6 +266,10 @@ "change full name" : "Spremeni polno ime", "set new password" : "nastavi novo geslo", "change email address" : "spremeni naslov elektronske pošte", - "Default" : "Privzeto" + "Default" : "Privzeto", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Zunanja podatkovna shramba", + "Updates" : "Posodobitve" },"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);" }
\ No newline at end of file diff --git a/settings/l10n/sq.js b/settings/l10n/sq.js index 6fb6afaf4b4..83793ca7035 100644 --- a/settings/l10n/sq.js +++ b/settings/l10n/sq.js @@ -1,16 +1,16 @@ OC.L10N.register( "settings", { + "Enabled" : "E aktivizuar", + "Not enabled" : "E paaktivizuar", "Wrong password" : "Fjalëkalim i gabuar", "Saved" : "U ruajt", "No user supplied" : "S’u dha përdorues", + "Unable to change password" : "S’arrin të ndryshojë fjalëkalimin", "Authentication error" : "Gabim mirëfilltësimi", "Please provide an admin recovery password, otherwise all user data will be lost" : "Ju lutemi, jepni një fjalëkalim rikthimesh për përgjegjësin, në të kundërt të gjitha të dhënat do të humbasin", "Wrong admin recovery password. Please check the password and try again." : "Fjalëkalim i gabuar rikthimesh për përgjegjësin. Ju lutemi, kontrolloni fjalëkalimin dhe provoni përsëri.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Programi klient s’mbulon ndryshime fjalëkalimi, por kyçi i përdoruesi për fshehtëzime u përditësua me sukses.", - "Unable to change password" : "S’arrin të ndryshojë fjalëkalimin", - "Enabled" : "E aktivizuar", - "Not enabled" : "E paaktivizuar", "installing and updating apps via the app store or Federated Cloud Sharing" : "instalim dhe përditësim aplikacionesh përmes shitores së aplikacioneve ose Federated Cloud Sharing", "Federated Cloud Sharing" : "Ndarje Në Re të Federuar ", "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL-ja po përdor një version %s të vjetruar (%s). Ju lutemi, përditësoni sistemin tuaj operativ ose përndryshe veçori të tilla si %s nuk do të punojnë në mënyrë të qëndrueshme.", @@ -35,17 +35,6 @@ OC.L10N.register( "Email saved" : "Email-i u ruajt", "Your full name has been changed." : "Emri juaj i plotë u ndryshua.", "Unable to change full name" : "S’arrin të ndryshojë emrin e plotë", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Sinjalizime sigurie & rregullimi", - "Sharing" : "Ndarje me të tjerët", - "Server-side encryption" : "Fshehtëzim më anë shërbyesi", - "External Storage" : "Depozitim i Jashtëm", - "Cron" : "Cron", - "Email server" : "Shërbyes email-esh", - "Log" : "Regjistër", - "Tips & tricks" : "Ndihmëza & rrengje", - "Updates" : "Përditësime", "Couldn't remove app." : "S’hoqi dot aplikacionin.", "Language changed" : "Gjuha u ndryshua", "Invalid request" : "Kërkesë e pavlefshme", @@ -118,17 +107,54 @@ OC.L10N.register( "Sessions" : "Sesione", "App passwords" : "Fjalëkalim aplikacioni", "Sync clients" : "Klientë njëkohësimi", - "Everything (fatal issues, errors, warnings, info, debug)" : "Gjithçka (probleme fatale, gabime, sinjalizime, të dhëna, diagnostikim)", - "Info, warnings, errors and fatal issues" : "Të dhëna, sinjalizime, gabime dhe probleme fatale", - "Warnings, errors and fatal issues" : "Sinjalizime, gabime dhe probleme fatale", - "Errors and fatal issues" : "Gabime dhe probleme fatale", - "Fatal issues only" : "Vetëm probleme fatale", "None" : "Asnjë", "Login" : "Hyrje", "Plain" : "E thjeshtë", "NT LAN Manager" : "Përgjegjës Rrjeti NT", "SSL" : "SSL", "TLS" : "TLS", + "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", + "mail" : "email", + "Authentication method" : "Metodë mirëfilltësimi", + "Authentication required" : "Lypset mirëfilltësim", + "Server address" : "Adresë shërbyesi", + "Port" : "Portë", + "Credentials" : "Kredenciale", + "SMTP Username" : "Emër përdoruesi SMTP", + "SMTP Password" : "Fjalëkalim SMTP", + "Store credentials" : "Depozitoji kredencialet", + "Test email settings" : "Testoni rregullimet e email-it", + "Send email" : "Dërgo email", + "Server-side encryption" : "Fshehtëzim më anë shërbyesi", + "Enable server-side encryption" : "Aktivizo fshehtëzim më anë të shërbyesit", + "Please read carefully before activating server-side encryption: " : "Ju lutemi, lexoni me kujdes përpara aktivizimit të fshehtëzimeve më anë shërbyesi: ", + "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." : "Pasi të jetë aktivizuar fshehtëzimi, krejt kartelat e ngarkuara te shërbyesi nga kjo pikë e tutje do të fshehtëzohen pasi të jenë depozituar në shërbyes. Çaktivizimi i fshehtëzimit në një datë të mëvonshme do të jetë i mundur vetëm nëse moduli aktiv i fshehtëzimeve e mbulon këtë funksion, dhe nëse plotësohen krejt parakushtet (p.sh. caktimi i një kyçi rimarrjesh).", + "Be aware that encryption always increases the file size." : "Kini parasysh që fshehtëzimi e rrit gjithnjë madhësinë e kartelës.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Është gjithmonë ide e mirë të krijohen kopjeruajtje të rregullta të të dhënave tuaja, në rast fshehtëzimi sigurohuni që bëni kopjeruajtje të kyçeve të fshehtëzimit, tok me të dhënat tuaja.", + "This is the final warning: Do you really want to enable encryption?" : "Ky është sinjalizimi përfundimtar: Doni vërtet të aktivizohet fshehtëzimi?", + "Enable encryption" : "Aktivizoni fshehtëzim", + "No encryption module loaded, please enable an encryption module in the app menu." : "S’ka të ngarkuar modul fshehtëzimi, ju lutemi, aktivizoni një modul fshehtëzimi që nga menuja e aplikacionit.", + "Select default encryption module:" : "Përzgjidhni modul parazgjedhje fshehtëzimi:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Lypset të migroni kyçet tuaj të fshehtëzimit nga fshehtëzimi i vjetër (ownCloud <= 8.0) te i riu. Ju lutemi, aktivizoni \"Modul parazgjedhje fshehtëzimesh\" dhe ekzekutoni 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Lypset të migroni kyçet tuaj të fshehtëzimit nga fshehtëzimi i vjetër (ownCloud <= 8.0) te i riu.", + "Start migration" : "Fillo migrimin", + "Everything (fatal issues, errors, warnings, info, debug)" : "Gjithçka (probleme fatale, gabime, sinjalizime, të dhëna, diagnostikim)", + "Info, warnings, errors and fatal issues" : "Të dhëna, sinjalizime, gabime dhe probleme fatale", + "Warnings, errors and fatal issues" : "Sinjalizime, gabime dhe probleme fatale", + "Errors and fatal issues" : "Gabime dhe probleme fatale", + "Fatal issues only" : "Vetëm probleme fatale", + "Log" : "Regjistër", + "What to log" : "Ç’të regjistrohet", + "Download logfile" : "Shkarkoni kartelën regjistër", + "More" : "Më tepër", + "Less" : "Më pak", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Kartela regjistër është më e madhe se 100 MB. Shkarkimi i saj mund të hajë ca kohë!", + "Security & setup warnings" : "Sinjalizime sigurie & rregullimi", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP-ja nuk duket të jetë rregulluar si duhet për të kërkuar ndryshore mjedisi sistemi. Testi me getenv(\"PATH\") kthen vetëm një përgjigje të zbrazët.", "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." : "Ju lutemi, kontrolloni <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentimin e instalimit ↗</a> për shënime rreth formësimit të php-së dhe formësimin php të shërbyesit tuaj, veçanërisht kur përdoret using 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." : "Rregullimi Vetëm-Lexim u aktivizua. Kjo parandalon rregullimin e disa parametrave përmes ndërfaqes web. Më tej, për çdo përditësim kartela lyp të kalohet dorazi si e shkrueshme.", @@ -144,7 +170,15 @@ OC.L10N.register( "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "S’qe e mundur të përmbushej akti cron përmes CLI-së. U shfaqën gabimet teknike vijuese:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Ju lutemi, rihidhuni një sy <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">udhërrëfyesve të instalimit ↗</a>, dhe kontrolloni te <a href=\"#log-section\">regjistri</a> për çfarëdo gabimesh apo sinjalizimesh.", "All checks passed." : "I kaloi krejt kontrollet.", - "Open documentation" : "Hapni dokumentimin", + "Cron" : "Cron", + "Last cron job execution: %s." : "Përmbushja e fundit e aktit cron: %s.", + "Last cron job execution: %s. Something seems wrong." : "Përmbushja e fundit e aktit cron: %s. Duket se nuk shkon diçka.", + "Cron was not executed yet!" : "Cron-i s’qe ekzekutuar ende!", + "Execute one task with each page loaded" : "Kryeni vetëm një veprim me secilën prej faqeve të ngarkuara", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php është regjistruar te një shërbim webcron që ta aktivizojë cron.php-në çdo 15 minuta përmes http-je.", + "Use system's cron service to call the cron.php file every 15 minutes." : "Përdorni shërbimin cron të sistemit që ta aktivizojë cron.php-në çdo 15 minuta.", + "Version" : "Version", + "Sharing" : "Ndarje me të tjerët", "Allow apps to use the Share API" : "Lejoni aplikacionet të përdorin API Share", "Allow users to share via link" : "Lejoji përdoruesit të ndajnë me të tjerët përmes lidhjesh", "Allow public uploads" : "Lejo ngarkime publike", @@ -161,44 +195,7 @@ OC.L10N.register( "Exclude groups from sharing" : "Përjashtoni grupe nga ndarjet", "These groups will still be able to receive shares, but not to initiate them." : "Këto grupe prapë do të jenë në gjendje të marrin ndarje nga të tjerët, por jo të fillojnë të tilla.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Lejo vetëplotësim emra përdoruesish te dialogu i ndarjeve me të tjerët. Nëse kjo është e çaktivizuar, do të duhet të jepen emra përdoruesish.", - "Last cron job execution: %s." : "Përmbushja e fundit e aktit cron: %s.", - "Last cron job execution: %s. Something seems wrong." : "Përmbushja e fundit e aktit cron: %s. Duket se nuk shkon diçka.", - "Cron was not executed yet!" : "Cron-i s’qe ekzekutuar ende!", - "Execute one task with each page loaded" : "Kryeni vetëm një veprim me secilën prej faqeve të ngarkuara", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php është regjistruar te një shërbim webcron që ta aktivizojë cron.php-në çdo 15 minuta përmes http-je.", - "Use system's cron service to call the cron.php file every 15 minutes." : "Përdorni shërbimin cron të sistemit që ta aktivizojë cron.php-në çdo 15 minuta.", - "Enable server-side encryption" : "Aktivizo fshehtëzim më anë të shërbyesit", - "Please read carefully before activating server-side encryption: " : "Ju lutemi, lexoni me kujdes përpara aktivizimit të fshehtëzimeve më anë shërbyesi: ", - "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." : "Pasi të jetë aktivizuar fshehtëzimi, krejt kartelat e ngarkuara te shërbyesi nga kjo pikë e tutje do të fshehtëzohen pasi të jenë depozituar në shërbyes. Çaktivizimi i fshehtëzimit në një datë të mëvonshme do të jetë i mundur vetëm nëse moduli aktiv i fshehtëzimeve e mbulon këtë funksion, dhe nëse plotësohen krejt parakushtet (p.sh. caktimi i një kyçi rimarrjesh).", - "Be aware that encryption always increases the file size." : "Kini parasysh që fshehtëzimi e rrit gjithnjë madhësinë e kartelës.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Është gjithmonë ide e mirë të krijohen kopjeruajtje të rregullta të të dhënave tuaja, në rast fshehtëzimi sigurohuni që bëni kopjeruajtje të kyçeve të fshehtëzimit, tok me të dhënat tuaja.", - "This is the final warning: Do you really want to enable encryption?" : "Ky është sinjalizimi përfundimtar: Doni vërtet të aktivizohet fshehtëzimi?", - "Enable encryption" : "Aktivizoni fshehtëzim", - "No encryption module loaded, please enable an encryption module in the app menu." : "S’ka të ngarkuar modul fshehtëzimi, ju lutemi, aktivizoni një modul fshehtëzimi që nga menuja e aplikacionit.", - "Select default encryption module:" : "Përzgjidhni modul parazgjedhje fshehtëzimi:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Lypset të migroni kyçet tuaj të fshehtëzimit nga fshehtëzimi i vjetër (ownCloud <= 8.0) te i riu. Ju lutemi, aktivizoni \"Modul parazgjedhje fshehtëzimesh\" dhe ekzekutoni 'occ encryption:migrate'", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Lypset të migroni kyçet tuaj të fshehtëzimit nga fshehtëzimi i vjetër (ownCloud <= 8.0) te i riu.", - "Start migration" : "Fillo migrimin", - "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", - "mail" : "email", - "Authentication method" : "Metodë mirëfilltësimi", - "Authentication required" : "Lypset mirëfilltësim", - "Server address" : "Adresë shërbyesi", - "Port" : "Portë", - "Credentials" : "Kredenciale", - "SMTP Username" : "Emër përdoruesi SMTP", - "SMTP Password" : "Fjalëkalim SMTP", - "Store credentials" : "Depozitoji kredencialet", - "Test email settings" : "Testoni rregullimet e email-it", - "Send email" : "Dërgo email", - "What to log" : "Ç’të regjistrohet", - "Download logfile" : "Shkarkoni kartelën regjistër", - "More" : "Më tepër", - "Less" : "Më pak", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Kartela regjistër është më e madhe se 100 MB. Shkarkimi i saj mund të hajë ca kohë!", + "Tips & tricks" : "Ndihmëza & rrengje", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Si bazë të dhënash përdoret SQLite. Për instalime më të ngarkuara, këshillojmë të kalohet në një program tjetër baze të dhënash.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Përdorimi i SQLite-it nuk këshillohet veçanërisht kur përdoret klienti desktop për njëkohësim kartelash.", "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>." : "Për të kaluar te një tjetër bazë të dhënash përdorni mjetin rresht urdhrash: 'occ db:convert-type', ose shihni <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentimin ↗</a>.", @@ -208,7 +205,6 @@ OC.L10N.register( "Improving the config.php" : "Si të përmirësohet config.php", "Theming" : "Ndryshim teme grafike", "Hardening and security guidance" : "Udhëzime për forcim dhe siguri", - "Version" : "Version", "Developer documentation" : "Dokumentim për zhvillues", "Experimental applications ahead" : "Keni përpara aplikacione eksperimentale", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Aplikacionet eksperimentale nuk kontrollohen për probleme sigurie, mund të jenë të rinj ose të njohur si të paqëndrueshëm, dhe nën zhvillim intensiv. Instalimi i tyre mund të shkaktojë humbje të dhënash ose cenim të sigurisë.", @@ -262,16 +258,16 @@ OC.L10N.register( "Change password" : "Ndrysho fjalëkalimin", "Language" : "Gjuhë", "Help translate" : "Ndihmoni në përkthim", - "Name" : "Emër", - "App name" : "Emër aplikacioni", - "Create new app password" : "Krijoni fjalëkalim aplikacioni të ri", - "Username" : "Emër përdoruesi", - "Done" : "U bë", "Get the apps to sync your files" : "Merrni aplikacionet për njëkohësim të kartelave tuaja", "Desktop client" : "Klient desktopi", "Android app" : "Aplikacion për Android", "iOS app" : "Aplikacion për iOS", "Show First Run Wizard again" : "Shfaqe sërish Ndihmësin e Herës së Parë", + "Name" : "Emër", + "App name" : "Emër aplikacioni", + "Create new app password" : "Krijoni fjalëkalim aplikacioni të ri", + "Username" : "Emër përdoruesi", + "Done" : "U bë", "Show storage location" : "Shfaq vendndodhje depozite", "Show last log in" : "Shfaq hyrjen e fundit", "Show user backend" : "Shfaq programin klient të përdoruesit", @@ -290,6 +286,10 @@ OC.L10N.register( "change full name" : "ndryshoni emrin e plotë", "set new password" : "caktoni fjalëkalim të ri", "change email address" : "ndryshoni adresën email", - "Default" : "Parazgjedhje" + "Default" : "Parazgjedhje", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Depozitim i Jashtëm", + "Updates" : "Përditësime" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/sq.json b/settings/l10n/sq.json index e4b4ac4dee5..d4d5c2b5523 100644 --- a/settings/l10n/sq.json +++ b/settings/l10n/sq.json @@ -1,14 +1,14 @@ { "translations": { + "Enabled" : "E aktivizuar", + "Not enabled" : "E paaktivizuar", "Wrong password" : "Fjalëkalim i gabuar", "Saved" : "U ruajt", "No user supplied" : "S’u dha përdorues", + "Unable to change password" : "S’arrin të ndryshojë fjalëkalimin", "Authentication error" : "Gabim mirëfilltësimi", "Please provide an admin recovery password, otherwise all user data will be lost" : "Ju lutemi, jepni një fjalëkalim rikthimesh për përgjegjësin, në të kundërt të gjitha të dhënat do të humbasin", "Wrong admin recovery password. Please check the password and try again." : "Fjalëkalim i gabuar rikthimesh për përgjegjësin. Ju lutemi, kontrolloni fjalëkalimin dhe provoni përsëri.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Programi klient s’mbulon ndryshime fjalëkalimi, por kyçi i përdoruesi për fshehtëzime u përditësua me sukses.", - "Unable to change password" : "S’arrin të ndryshojë fjalëkalimin", - "Enabled" : "E aktivizuar", - "Not enabled" : "E paaktivizuar", "installing and updating apps via the app store or Federated Cloud Sharing" : "instalim dhe përditësim aplikacionesh përmes shitores së aplikacioneve ose Federated Cloud Sharing", "Federated Cloud Sharing" : "Ndarje Në Re të Federuar ", "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL-ja po përdor një version %s të vjetruar (%s). Ju lutemi, përditësoni sistemin tuaj operativ ose përndryshe veçori të tilla si %s nuk do të punojnë në mënyrë të qëndrueshme.", @@ -33,17 +33,6 @@ "Email saved" : "Email-i u ruajt", "Your full name has been changed." : "Emri juaj i plotë u ndryshua.", "Unable to change full name" : "S’arrin të ndryshojë emrin e plotë", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Sinjalizime sigurie & rregullimi", - "Sharing" : "Ndarje me të tjerët", - "Server-side encryption" : "Fshehtëzim më anë shërbyesi", - "External Storage" : "Depozitim i Jashtëm", - "Cron" : "Cron", - "Email server" : "Shërbyes email-esh", - "Log" : "Regjistër", - "Tips & tricks" : "Ndihmëza & rrengje", - "Updates" : "Përditësime", "Couldn't remove app." : "S’hoqi dot aplikacionin.", "Language changed" : "Gjuha u ndryshua", "Invalid request" : "Kërkesë e pavlefshme", @@ -116,17 +105,54 @@ "Sessions" : "Sesione", "App passwords" : "Fjalëkalim aplikacioni", "Sync clients" : "Klientë njëkohësimi", - "Everything (fatal issues, errors, warnings, info, debug)" : "Gjithçka (probleme fatale, gabime, sinjalizime, të dhëna, diagnostikim)", - "Info, warnings, errors and fatal issues" : "Të dhëna, sinjalizime, gabime dhe probleme fatale", - "Warnings, errors and fatal issues" : "Sinjalizime, gabime dhe probleme fatale", - "Errors and fatal issues" : "Gabime dhe probleme fatale", - "Fatal issues only" : "Vetëm probleme fatale", "None" : "Asnjë", "Login" : "Hyrje", "Plain" : "E thjeshtë", "NT LAN Manager" : "Përgjegjës Rrjeti NT", "SSL" : "SSL", "TLS" : "TLS", + "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", + "mail" : "email", + "Authentication method" : "Metodë mirëfilltësimi", + "Authentication required" : "Lypset mirëfilltësim", + "Server address" : "Adresë shërbyesi", + "Port" : "Portë", + "Credentials" : "Kredenciale", + "SMTP Username" : "Emër përdoruesi SMTP", + "SMTP Password" : "Fjalëkalim SMTP", + "Store credentials" : "Depozitoji kredencialet", + "Test email settings" : "Testoni rregullimet e email-it", + "Send email" : "Dërgo email", + "Server-side encryption" : "Fshehtëzim më anë shërbyesi", + "Enable server-side encryption" : "Aktivizo fshehtëzim më anë të shërbyesit", + "Please read carefully before activating server-side encryption: " : "Ju lutemi, lexoni me kujdes përpara aktivizimit të fshehtëzimeve më anë shërbyesi: ", + "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." : "Pasi të jetë aktivizuar fshehtëzimi, krejt kartelat e ngarkuara te shërbyesi nga kjo pikë e tutje do të fshehtëzohen pasi të jenë depozituar në shërbyes. Çaktivizimi i fshehtëzimit në një datë të mëvonshme do të jetë i mundur vetëm nëse moduli aktiv i fshehtëzimeve e mbulon këtë funksion, dhe nëse plotësohen krejt parakushtet (p.sh. caktimi i një kyçi rimarrjesh).", + "Be aware that encryption always increases the file size." : "Kini parasysh që fshehtëzimi e rrit gjithnjë madhësinë e kartelës.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Është gjithmonë ide e mirë të krijohen kopjeruajtje të rregullta të të dhënave tuaja, në rast fshehtëzimi sigurohuni që bëni kopjeruajtje të kyçeve të fshehtëzimit, tok me të dhënat tuaja.", + "This is the final warning: Do you really want to enable encryption?" : "Ky është sinjalizimi përfundimtar: Doni vërtet të aktivizohet fshehtëzimi?", + "Enable encryption" : "Aktivizoni fshehtëzim", + "No encryption module loaded, please enable an encryption module in the app menu." : "S’ka të ngarkuar modul fshehtëzimi, ju lutemi, aktivizoni një modul fshehtëzimi që nga menuja e aplikacionit.", + "Select default encryption module:" : "Përzgjidhni modul parazgjedhje fshehtëzimi:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Lypset të migroni kyçet tuaj të fshehtëzimit nga fshehtëzimi i vjetër (ownCloud <= 8.0) te i riu. Ju lutemi, aktivizoni \"Modul parazgjedhje fshehtëzimesh\" dhe ekzekutoni 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Lypset të migroni kyçet tuaj të fshehtëzimit nga fshehtëzimi i vjetër (ownCloud <= 8.0) te i riu.", + "Start migration" : "Fillo migrimin", + "Everything (fatal issues, errors, warnings, info, debug)" : "Gjithçka (probleme fatale, gabime, sinjalizime, të dhëna, diagnostikim)", + "Info, warnings, errors and fatal issues" : "Të dhëna, sinjalizime, gabime dhe probleme fatale", + "Warnings, errors and fatal issues" : "Sinjalizime, gabime dhe probleme fatale", + "Errors and fatal issues" : "Gabime dhe probleme fatale", + "Fatal issues only" : "Vetëm probleme fatale", + "Log" : "Regjistër", + "What to log" : "Ç’të regjistrohet", + "Download logfile" : "Shkarkoni kartelën regjistër", + "More" : "Më tepër", + "Less" : "Më pak", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Kartela regjistër është më e madhe se 100 MB. Shkarkimi i saj mund të hajë ca kohë!", + "Security & setup warnings" : "Sinjalizime sigurie & rregullimi", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP-ja nuk duket të jetë rregulluar si duhet për të kërkuar ndryshore mjedisi sistemi. Testi me getenv(\"PATH\") kthen vetëm një përgjigje të zbrazët.", "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." : "Ju lutemi, kontrolloni <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentimin e instalimit ↗</a> për shënime rreth formësimit të php-së dhe formësimin php të shërbyesit tuaj, veçanërisht kur përdoret using 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." : "Rregullimi Vetëm-Lexim u aktivizua. Kjo parandalon rregullimin e disa parametrave përmes ndërfaqes web. Më tej, për çdo përditësim kartela lyp të kalohet dorazi si e shkrueshme.", @@ -142,7 +168,15 @@ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "S’qe e mundur të përmbushej akti cron përmes CLI-së. U shfaqën gabimet teknike vijuese:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Ju lutemi, rihidhuni një sy <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">udhërrëfyesve të instalimit ↗</a>, dhe kontrolloni te <a href=\"#log-section\">regjistri</a> për çfarëdo gabimesh apo sinjalizimesh.", "All checks passed." : "I kaloi krejt kontrollet.", - "Open documentation" : "Hapni dokumentimin", + "Cron" : "Cron", + "Last cron job execution: %s." : "Përmbushja e fundit e aktit cron: %s.", + "Last cron job execution: %s. Something seems wrong." : "Përmbushja e fundit e aktit cron: %s. Duket se nuk shkon diçka.", + "Cron was not executed yet!" : "Cron-i s’qe ekzekutuar ende!", + "Execute one task with each page loaded" : "Kryeni vetëm një veprim me secilën prej faqeve të ngarkuara", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php është regjistruar te një shërbim webcron që ta aktivizojë cron.php-në çdo 15 minuta përmes http-je.", + "Use system's cron service to call the cron.php file every 15 minutes." : "Përdorni shërbimin cron të sistemit që ta aktivizojë cron.php-në çdo 15 minuta.", + "Version" : "Version", + "Sharing" : "Ndarje me të tjerët", "Allow apps to use the Share API" : "Lejoni aplikacionet të përdorin API Share", "Allow users to share via link" : "Lejoji përdoruesit të ndajnë me të tjerët përmes lidhjesh", "Allow public uploads" : "Lejo ngarkime publike", @@ -159,44 +193,7 @@ "Exclude groups from sharing" : "Përjashtoni grupe nga ndarjet", "These groups will still be able to receive shares, but not to initiate them." : "Këto grupe prapë do të jenë në gjendje të marrin ndarje nga të tjerët, por jo të fillojnë të tilla.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Lejo vetëplotësim emra përdoruesish te dialogu i ndarjeve me të tjerët. Nëse kjo është e çaktivizuar, do të duhet të jepen emra përdoruesish.", - "Last cron job execution: %s." : "Përmbushja e fundit e aktit cron: %s.", - "Last cron job execution: %s. Something seems wrong." : "Përmbushja e fundit e aktit cron: %s. Duket se nuk shkon diçka.", - "Cron was not executed yet!" : "Cron-i s’qe ekzekutuar ende!", - "Execute one task with each page loaded" : "Kryeni vetëm një veprim me secilën prej faqeve të ngarkuara", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php është regjistruar te një shërbim webcron që ta aktivizojë cron.php-në çdo 15 minuta përmes http-je.", - "Use system's cron service to call the cron.php file every 15 minutes." : "Përdorni shërbimin cron të sistemit që ta aktivizojë cron.php-në çdo 15 minuta.", - "Enable server-side encryption" : "Aktivizo fshehtëzim më anë të shërbyesit", - "Please read carefully before activating server-side encryption: " : "Ju lutemi, lexoni me kujdes përpara aktivizimit të fshehtëzimeve më anë shërbyesi: ", - "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." : "Pasi të jetë aktivizuar fshehtëzimi, krejt kartelat e ngarkuara te shërbyesi nga kjo pikë e tutje do të fshehtëzohen pasi të jenë depozituar në shërbyes. Çaktivizimi i fshehtëzimit në një datë të mëvonshme do të jetë i mundur vetëm nëse moduli aktiv i fshehtëzimeve e mbulon këtë funksion, dhe nëse plotësohen krejt parakushtet (p.sh. caktimi i një kyçi rimarrjesh).", - "Be aware that encryption always increases the file size." : "Kini parasysh që fshehtëzimi e rrit gjithnjë madhësinë e kartelës.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Është gjithmonë ide e mirë të krijohen kopjeruajtje të rregullta të të dhënave tuaja, në rast fshehtëzimi sigurohuni që bëni kopjeruajtje të kyçeve të fshehtëzimit, tok me të dhënat tuaja.", - "This is the final warning: Do you really want to enable encryption?" : "Ky është sinjalizimi përfundimtar: Doni vërtet të aktivizohet fshehtëzimi?", - "Enable encryption" : "Aktivizoni fshehtëzim", - "No encryption module loaded, please enable an encryption module in the app menu." : "S’ka të ngarkuar modul fshehtëzimi, ju lutemi, aktivizoni një modul fshehtëzimi që nga menuja e aplikacionit.", - "Select default encryption module:" : "Përzgjidhni modul parazgjedhje fshehtëzimi:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Lypset të migroni kyçet tuaj të fshehtëzimit nga fshehtëzimi i vjetër (ownCloud <= 8.0) te i riu. Ju lutemi, aktivizoni \"Modul parazgjedhje fshehtëzimesh\" dhe ekzekutoni 'occ encryption:migrate'", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Lypset të migroni kyçet tuaj të fshehtëzimit nga fshehtëzimi i vjetër (ownCloud <= 8.0) te i riu.", - "Start migration" : "Fillo migrimin", - "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", - "mail" : "email", - "Authentication method" : "Metodë mirëfilltësimi", - "Authentication required" : "Lypset mirëfilltësim", - "Server address" : "Adresë shërbyesi", - "Port" : "Portë", - "Credentials" : "Kredenciale", - "SMTP Username" : "Emër përdoruesi SMTP", - "SMTP Password" : "Fjalëkalim SMTP", - "Store credentials" : "Depozitoji kredencialet", - "Test email settings" : "Testoni rregullimet e email-it", - "Send email" : "Dërgo email", - "What to log" : "Ç’të regjistrohet", - "Download logfile" : "Shkarkoni kartelën regjistër", - "More" : "Më tepër", - "Less" : "Më pak", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Kartela regjistër është më e madhe se 100 MB. Shkarkimi i saj mund të hajë ca kohë!", + "Tips & tricks" : "Ndihmëza & rrengje", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Si bazë të dhënash përdoret SQLite. Për instalime më të ngarkuara, këshillojmë të kalohet në një program tjetër baze të dhënash.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Përdorimi i SQLite-it nuk këshillohet veçanërisht kur përdoret klienti desktop për njëkohësim kartelash.", "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>." : "Për të kaluar te një tjetër bazë të dhënash përdorni mjetin rresht urdhrash: 'occ db:convert-type', ose shihni <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentimin ↗</a>.", @@ -206,7 +203,6 @@ "Improving the config.php" : "Si të përmirësohet config.php", "Theming" : "Ndryshim teme grafike", "Hardening and security guidance" : "Udhëzime për forcim dhe siguri", - "Version" : "Version", "Developer documentation" : "Dokumentim për zhvillues", "Experimental applications ahead" : "Keni përpara aplikacione eksperimentale", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Aplikacionet eksperimentale nuk kontrollohen për probleme sigurie, mund të jenë të rinj ose të njohur si të paqëndrueshëm, dhe nën zhvillim intensiv. Instalimi i tyre mund të shkaktojë humbje të dhënash ose cenim të sigurisë.", @@ -260,16 +256,16 @@ "Change password" : "Ndrysho fjalëkalimin", "Language" : "Gjuhë", "Help translate" : "Ndihmoni në përkthim", - "Name" : "Emër", - "App name" : "Emër aplikacioni", - "Create new app password" : "Krijoni fjalëkalim aplikacioni të ri", - "Username" : "Emër përdoruesi", - "Done" : "U bë", "Get the apps to sync your files" : "Merrni aplikacionet për njëkohësim të kartelave tuaja", "Desktop client" : "Klient desktopi", "Android app" : "Aplikacion për Android", "iOS app" : "Aplikacion për iOS", "Show First Run Wizard again" : "Shfaqe sërish Ndihmësin e Herës së Parë", + "Name" : "Emër", + "App name" : "Emër aplikacioni", + "Create new app password" : "Krijoni fjalëkalim aplikacioni të ri", + "Username" : "Emër përdoruesi", + "Done" : "U bë", "Show storage location" : "Shfaq vendndodhje depozite", "Show last log in" : "Shfaq hyrjen e fundit", "Show user backend" : "Shfaq programin klient të përdoruesit", @@ -288,6 +284,10 @@ "change full name" : "ndryshoni emrin e plotë", "set new password" : "caktoni fjalëkalim të ri", "change email address" : "ndryshoni adresën email", - "Default" : "Parazgjedhje" + "Default" : "Parazgjedhje", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Depozitim i Jashtëm", + "Updates" : "Përditësime" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/settings/l10n/sv.js b/settings/l10n/sv.js index cdde7e7e6e7..61226e1c147 100644 --- a/settings/l10n/sv.js +++ b/settings/l10n/sv.js @@ -1,16 +1,16 @@ OC.L10N.register( "settings", { + "Enabled" : "Aktiverad", + "Not enabled" : "Inte aktiverad", "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" : "Ange ett återställningslösenord för administratören. Annars kommer all användardata förloras", "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.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Backend stödjer ej lösenordsbyte, men användarens ändring av krypteringsnyckel lyckades.", - "Unable to change password" : "Kunde inte ändra lösenord", - "Enabled" : "Aktiverad", - "Not enabled" : "Inte aktiverad", "installing and updating apps via the app store or Federated Cloud Sharing" : "installering och uppdatering utav applikationer eller Federate Cloud delning.", "Federated Cloud Sharing" : "Federate Cloud delning", "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL använder en föråldrad %s version (%s). Var god uppdatera ditt operativsystem annars kan funktioner som %s sluta fungera pålitligt.", @@ -35,17 +35,6 @@ OC.L10N.register( "Email saved" : "E-post sparad", "Your full name has been changed." : "Hela ditt namn har ändrats", "Unable to change full name" : "Kunde inte ändra hela namnet", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Säkerhet & systemvarningar", - "Sharing" : "Dela", - "Server-side encryption" : "Serverkryptering", - "External Storage" : "Extern lagring", - "Cron" : "Cron", - "Email server" : "E-post server", - "Log" : "Logg", - "Tips & tricks" : "Tips & tricks", - "Updates" : "Uppdateringar", "Couldn't remove app." : "Kunde inte ta bort applikationen.", "Language changed" : "Språk ändrades", "Invalid request" : "Ogiltig begäran", @@ -117,17 +106,54 @@ OC.L10N.register( "Personal info" : "Personlig information", "Sessions" : "Sessioner", "Sync clients" : "Synk-klienter", - "Everything (fatal issues, errors, warnings, info, debug)" : "Allting (allvarliga fel, fel, varningar, info, debug)", - "Info, warnings, errors and fatal issues" : "Info, varningar och allvarliga fel", - "Warnings, errors and fatal issues" : "Varningar, fel och allvarliga fel", - "Errors and fatal issues" : "Fel och allvarliga fel", - "Fatal issues only" : "Endast allvarliga fel", "None" : "Ingen", "Login" : "Logga in", "Plain" : "Enkel", "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", + "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", + "mail" : "mail", + "Authentication method" : "Autentiseringsmetod", + "Authentication required" : "Autentisering krävs", + "Server address" : "Serveradress", + "Port" : "Port", + "Credentials" : "Inloggningsuppgifter", + "SMTP Username" : "SMTP-användarnamn", + "SMTP Password" : "SMTP-lösenord", + "Store credentials" : "Lagra inloggningsuppgifter", + "Test email settings" : "Testa e-postinställningar", + "Send email" : "Skicka e-post", + "Server-side encryption" : "Serverkryptering", + "Enable server-side encryption" : "Aktivera kryptering på server.", + "Please read carefully before activating server-side encryption: " : "OBS: Var god läs noga innan kryptering aktiveras på servern.", + "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 är aktiverat, så kommer alla filer som laddas upp till servern från den tidpunkt och frammåt bli krypterad på servern. Det kommer bara vara möjligt att inaktivera kryptering vid ett senare tillfälle om krypteringsmodulen stödjer den funktionen och alla förvillkor (exempelvis använder återställningsnyckel) är mötta.", + "Be aware that encryption always increases the file size." : "OBS! Observera att kryptering alltid ökar filstorleken", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Det är alltid en god ide att skapa regelbundna säkerhetskopior av din data, om kryptering används var säker på att även krypteringsnycklarna säkerhetskopieras tillsammans med din data.", + "This is the final warning: Do you really want to enable encryption?" : "Detta är en slutgiltig varning: Vill du verkligen aktivera kryptering?", + "Enable encryption" : "Aktivera kryptering", + "No encryption module loaded, please enable an encryption module in the app menu." : "Ingen krypteringsmodul laddad, var god aktivera krypteringsmodulen i applikationsmenyn.", + "Select default encryption module:" : "Välj standard krypteringsmodul:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Du behöver migrera dina krypteringsnycklar från den gamla krypteringen (owncloud <= 8.0) till den nya. Var god aktivera \"Default encryption module\" och kör 'occ encryption:migrate'.", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Du behöver migrera dina krypteringsnycklar från den gamla krypteringen (owncloud <= 8.0) till den nya.", + "Start migration" : "Starta migrering", + "Everything (fatal issues, errors, warnings, info, debug)" : "Allting (allvarliga fel, fel, varningar, info, debug)", + "Info, warnings, errors and fatal issues" : "Info, varningar och allvarliga fel", + "Warnings, errors and fatal issues" : "Varningar, fel och allvarliga fel", + "Errors and fatal issues" : "Fel och allvarliga fel", + "Fatal issues only" : "Endast allvarliga fel", + "Log" : "Logg", + "What to log" : "Vad som ska loggas", + "Download logfile" : "Ladda ner loggfil", + "More" : "Mer", + "Less" : "Mindre", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Logfilen är större än 100 MB. Nerladdningen kan ta en stund!", + "Security & setup warnings" : "Säkerhet & systemvarningar", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php verkar ej vara konfigurerat för att kunna skicka förfrågan om systemmiljövariabler. Testet med getenv(\"PATH\") returnerade bara ett 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." : "Var god kontrollera <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\"> installationsdokumentationen ↗</a> för konfigurationsanteckningar för php och för php konfigurationen för din server, speciellt när php-fpm används.", "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." : "Läs-bara konfigureringen har blivit aktiv. Detta förhindrar att några konfigureringar kan sättas via web-gränssnittet.", @@ -143,7 +169,15 @@ OC.L10N.register( "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Det var ej möjligt att exekvera cronjob via CLI. Följande tekniska fel har uppstått:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Var god dubbelkontrollera <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\"> installationsguiden ↗</a>, och kontrollera efter några fel eller varningar i <a href=\"#log-section\"> logfilen</a>.", "All checks passed." : "Alla kontroller lyckades!", - "Open documentation" : "Öppna dokumentation", + "Cron" : "Cron", + "Last cron job execution: %s." : "Sista cron kördes %s", + "Last cron job execution: %s. Something seems wrong." : "Sista cron kördes %s. Något verkar vara fel.", + "Cron was not executed yet!" : "Cron har inte körts ännu!", + "Execute one task with each page loaded" : "Exekvera en uppgift vid varje sidladdning", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php är registrerad som en webcron service att ropa på cron.php varje 15 minuter över http.", + "Use system's cron service to call the cron.php file every 15 minutes." : "Använd systemets cron-tjänst för att anropa cron.php var 15:e minut.", + "Version" : "Version", + "Sharing" : "Dela", "Allow apps to use the Share API" : "Tillåt applikationer att använda delat API", "Allow users to share via link" : "Tillåt användare att dela via länk", "Allow public uploads" : "Tillåt offentlig uppladdning", @@ -160,44 +194,7 @@ OC.L10N.register( "Exclude groups from sharing" : "Exkludera grupp från att dela", "These groups will still be able to receive shares, but not to initiate them." : "Dessa grupper kommer fortfarande kunna ta emot delningar, men inte skapa delningar.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Tillåt användarnamn att autokompletteras i delningsfönstret. Om det är inaktiverat krävs fullständigt användarnamn i rutan.", - "Last cron job execution: %s." : "Sista cron kördes %s", - "Last cron job execution: %s. Something seems wrong." : "Sista cron kördes %s. Något verkar vara fel.", - "Cron was not executed yet!" : "Cron har inte körts ännu!", - "Execute one task with each page loaded" : "Exekvera en uppgift vid varje sidladdning", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php är registrerad som en webcron service att ropa på cron.php varje 15 minuter över http.", - "Use system's cron service to call the cron.php file every 15 minutes." : "Använd systemets cron-tjänst för att anropa cron.php var 15:e minut.", - "Enable server-side encryption" : "Aktivera kryptering på server.", - "Please read carefully before activating server-side encryption: " : "OBS: Var god läs noga innan kryptering aktiveras på servern.", - "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 är aktiverat, så kommer alla filer som laddas upp till servern från den tidpunkt och frammåt bli krypterad på servern. Det kommer bara vara möjligt att inaktivera kryptering vid ett senare tillfälle om krypteringsmodulen stödjer den funktionen och alla förvillkor (exempelvis använder återställningsnyckel) är mötta.", - "Be aware that encryption always increases the file size." : "OBS! Observera att kryptering alltid ökar filstorleken", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Det är alltid en god ide att skapa regelbundna säkerhetskopior av din data, om kryptering används var säker på att även krypteringsnycklarna säkerhetskopieras tillsammans med din data.", - "This is the final warning: Do you really want to enable encryption?" : "Detta är en slutgiltig varning: Vill du verkligen aktivera kryptering?", - "Enable encryption" : "Aktivera kryptering", - "No encryption module loaded, please enable an encryption module in the app menu." : "Ingen krypteringsmodul laddad, var god aktivera krypteringsmodulen i applikationsmenyn.", - "Select default encryption module:" : "Välj standard krypteringsmodul:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Du behöver migrera dina krypteringsnycklar från den gamla krypteringen (owncloud <= 8.0) till den nya. Var god aktivera \"Default encryption module\" och kör 'occ encryption:migrate'.", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Du behöver migrera dina krypteringsnycklar från den gamla krypteringen (owncloud <= 8.0) till den nya.", - "Start migration" : "Starta migrering", - "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", - "mail" : "mail", - "Authentication method" : "Autentiseringsmetod", - "Authentication required" : "Autentisering krävs", - "Server address" : "Serveradress", - "Port" : "Port", - "Credentials" : "Inloggningsuppgifter", - "SMTP Username" : "SMTP-användarnamn", - "SMTP Password" : "SMTP-lösenord", - "Store credentials" : "Lagra inloggningsuppgifter", - "Test email settings" : "Testa e-postinställningar", - "Send email" : "Skicka e-post", - "What to log" : "Vad som ska loggas", - "Download logfile" : "Ladda ner loggfil", - "More" : "Mer", - "Less" : "Mindre", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Logfilen är större än 100 MB. Nerladdningen kan ta en stund!", + "Tips & tricks" : "Tips & tricks", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite används som databas. För större installationer så rekommenderar vi ett byte till en annan databasmotor.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Speciellt när desktop klienten för filsynkronisering används så avråds användande av SQLite.", "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>." : "För att migrera till en annan databas använd kommandoverktyget 'occ db:convert-type' eller se <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\"> dokumentationen ↗</a>", @@ -207,7 +204,6 @@ OC.L10N.register( "Improving the config.php" : "Förbättra config.php", "Theming" : "Teman", "Hardening and security guidance" : "Säkerhetsriktlinjer", - "Version" : "Version", "Developer documentation" : "Utvecklar dokumentation", "Experimental applications ahead" : "Experimentiella applikationer framför", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimentella applikationer är ej kontrollerade för säkerhetsproblem, nya eller kända att vara instabila och under föränderlig utveckling. Installation utav dessa kan orsaka dataförlust eller säkerhetsbrott.", @@ -261,14 +257,14 @@ OC.L10N.register( "Change password" : "Ändra lösenord", "Language" : "Språk", "Help translate" : "Hjälp att översätta", - "Name" : "Namn", - "Username" : "Användarnamn", - "Done" : "Färdig", "Get the apps to sync your files" : "Skaffa apparna för att synkronisera dina filer", "Desktop client" : "Skrivbordsklient", "Android app" : "Android-app", "iOS app" : "iOS-app", "Show First Run Wizard again" : "Visa Första uppstarts-guiden igen", + "Name" : "Namn", + "Username" : "Användarnamn", + "Done" : "Färdig", "Show storage location" : "Visa lagringsplats", "Show last log in" : "Visa senaste inloggning", "Show user backend" : "Visa användar-backend", @@ -287,6 +283,10 @@ OC.L10N.register( "change full name" : "ändra hela namnet", "set new password" : "ange nytt lösenord", "change email address" : "ändra e-postadress", - "Default" : "Förvald" + "Default" : "Förvald", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Extern lagring", + "Updates" : "Uppdateringar" }, "nplurals=2; plural=(n != 1);"); diff --git a/settings/l10n/sv.json b/settings/l10n/sv.json index 6f77c010307..e9dfb36d82f 100644 --- a/settings/l10n/sv.json +++ b/settings/l10n/sv.json @@ -1,14 +1,14 @@ { "translations": { + "Enabled" : "Aktiverad", + "Not enabled" : "Inte aktiverad", "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" : "Ange ett återställningslösenord för administratören. Annars kommer all användardata förloras", "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.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Backend stödjer ej lösenordsbyte, men användarens ändring av krypteringsnyckel lyckades.", - "Unable to change password" : "Kunde inte ändra lösenord", - "Enabled" : "Aktiverad", - "Not enabled" : "Inte aktiverad", "installing and updating apps via the app store or Federated Cloud Sharing" : "installering och uppdatering utav applikationer eller Federate Cloud delning.", "Federated Cloud Sharing" : "Federate Cloud delning", "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL använder en föråldrad %s version (%s). Var god uppdatera ditt operativsystem annars kan funktioner som %s sluta fungera pålitligt.", @@ -33,17 +33,6 @@ "Email saved" : "E-post sparad", "Your full name has been changed." : "Hela ditt namn har ändrats", "Unable to change full name" : "Kunde inte ändra hela namnet", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Säkerhet & systemvarningar", - "Sharing" : "Dela", - "Server-side encryption" : "Serverkryptering", - "External Storage" : "Extern lagring", - "Cron" : "Cron", - "Email server" : "E-post server", - "Log" : "Logg", - "Tips & tricks" : "Tips & tricks", - "Updates" : "Uppdateringar", "Couldn't remove app." : "Kunde inte ta bort applikationen.", "Language changed" : "Språk ändrades", "Invalid request" : "Ogiltig begäran", @@ -115,17 +104,54 @@ "Personal info" : "Personlig information", "Sessions" : "Sessioner", "Sync clients" : "Synk-klienter", - "Everything (fatal issues, errors, warnings, info, debug)" : "Allting (allvarliga fel, fel, varningar, info, debug)", - "Info, warnings, errors and fatal issues" : "Info, varningar och allvarliga fel", - "Warnings, errors and fatal issues" : "Varningar, fel och allvarliga fel", - "Errors and fatal issues" : "Fel och allvarliga fel", - "Fatal issues only" : "Endast allvarliga fel", "None" : "Ingen", "Login" : "Logga in", "Plain" : "Enkel", "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", + "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", + "mail" : "mail", + "Authentication method" : "Autentiseringsmetod", + "Authentication required" : "Autentisering krävs", + "Server address" : "Serveradress", + "Port" : "Port", + "Credentials" : "Inloggningsuppgifter", + "SMTP Username" : "SMTP-användarnamn", + "SMTP Password" : "SMTP-lösenord", + "Store credentials" : "Lagra inloggningsuppgifter", + "Test email settings" : "Testa e-postinställningar", + "Send email" : "Skicka e-post", + "Server-side encryption" : "Serverkryptering", + "Enable server-side encryption" : "Aktivera kryptering på server.", + "Please read carefully before activating server-side encryption: " : "OBS: Var god läs noga innan kryptering aktiveras på servern.", + "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 är aktiverat, så kommer alla filer som laddas upp till servern från den tidpunkt och frammåt bli krypterad på servern. Det kommer bara vara möjligt att inaktivera kryptering vid ett senare tillfälle om krypteringsmodulen stödjer den funktionen och alla förvillkor (exempelvis använder återställningsnyckel) är mötta.", + "Be aware that encryption always increases the file size." : "OBS! Observera att kryptering alltid ökar filstorleken", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Det är alltid en god ide att skapa regelbundna säkerhetskopior av din data, om kryptering används var säker på att även krypteringsnycklarna säkerhetskopieras tillsammans med din data.", + "This is the final warning: Do you really want to enable encryption?" : "Detta är en slutgiltig varning: Vill du verkligen aktivera kryptering?", + "Enable encryption" : "Aktivera kryptering", + "No encryption module loaded, please enable an encryption module in the app menu." : "Ingen krypteringsmodul laddad, var god aktivera krypteringsmodulen i applikationsmenyn.", + "Select default encryption module:" : "Välj standard krypteringsmodul:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Du behöver migrera dina krypteringsnycklar från den gamla krypteringen (owncloud <= 8.0) till den nya. Var god aktivera \"Default encryption module\" och kör 'occ encryption:migrate'.", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Du behöver migrera dina krypteringsnycklar från den gamla krypteringen (owncloud <= 8.0) till den nya.", + "Start migration" : "Starta migrering", + "Everything (fatal issues, errors, warnings, info, debug)" : "Allting (allvarliga fel, fel, varningar, info, debug)", + "Info, warnings, errors and fatal issues" : "Info, varningar och allvarliga fel", + "Warnings, errors and fatal issues" : "Varningar, fel och allvarliga fel", + "Errors and fatal issues" : "Fel och allvarliga fel", + "Fatal issues only" : "Endast allvarliga fel", + "Log" : "Logg", + "What to log" : "Vad som ska loggas", + "Download logfile" : "Ladda ner loggfil", + "More" : "Mer", + "Less" : "Mindre", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Logfilen är större än 100 MB. Nerladdningen kan ta en stund!", + "Security & setup warnings" : "Säkerhet & systemvarningar", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php verkar ej vara konfigurerat för att kunna skicka förfrågan om systemmiljövariabler. Testet med getenv(\"PATH\") returnerade bara ett 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." : "Var god kontrollera <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\"> installationsdokumentationen ↗</a> för konfigurationsanteckningar för php och för php konfigurationen för din server, speciellt när php-fpm används.", "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." : "Läs-bara konfigureringen har blivit aktiv. Detta förhindrar att några konfigureringar kan sättas via web-gränssnittet.", @@ -141,7 +167,15 @@ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Det var ej möjligt att exekvera cronjob via CLI. Följande tekniska fel har uppstått:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Var god dubbelkontrollera <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\"> installationsguiden ↗</a>, och kontrollera efter några fel eller varningar i <a href=\"#log-section\"> logfilen</a>.", "All checks passed." : "Alla kontroller lyckades!", - "Open documentation" : "Öppna dokumentation", + "Cron" : "Cron", + "Last cron job execution: %s." : "Sista cron kördes %s", + "Last cron job execution: %s. Something seems wrong." : "Sista cron kördes %s. Något verkar vara fel.", + "Cron was not executed yet!" : "Cron har inte körts ännu!", + "Execute one task with each page loaded" : "Exekvera en uppgift vid varje sidladdning", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php är registrerad som en webcron service att ropa på cron.php varje 15 minuter över http.", + "Use system's cron service to call the cron.php file every 15 minutes." : "Använd systemets cron-tjänst för att anropa cron.php var 15:e minut.", + "Version" : "Version", + "Sharing" : "Dela", "Allow apps to use the Share API" : "Tillåt applikationer att använda delat API", "Allow users to share via link" : "Tillåt användare att dela via länk", "Allow public uploads" : "Tillåt offentlig uppladdning", @@ -158,44 +192,7 @@ "Exclude groups from sharing" : "Exkludera grupp från att dela", "These groups will still be able to receive shares, but not to initiate them." : "Dessa grupper kommer fortfarande kunna ta emot delningar, men inte skapa delningar.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Tillåt användarnamn att autokompletteras i delningsfönstret. Om det är inaktiverat krävs fullständigt användarnamn i rutan.", - "Last cron job execution: %s." : "Sista cron kördes %s", - "Last cron job execution: %s. Something seems wrong." : "Sista cron kördes %s. Något verkar vara fel.", - "Cron was not executed yet!" : "Cron har inte körts ännu!", - "Execute one task with each page loaded" : "Exekvera en uppgift vid varje sidladdning", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php är registrerad som en webcron service att ropa på cron.php varje 15 minuter över http.", - "Use system's cron service to call the cron.php file every 15 minutes." : "Använd systemets cron-tjänst för att anropa cron.php var 15:e minut.", - "Enable server-side encryption" : "Aktivera kryptering på server.", - "Please read carefully before activating server-side encryption: " : "OBS: Var god läs noga innan kryptering aktiveras på servern.", - "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 är aktiverat, så kommer alla filer som laddas upp till servern från den tidpunkt och frammåt bli krypterad på servern. Det kommer bara vara möjligt att inaktivera kryptering vid ett senare tillfälle om krypteringsmodulen stödjer den funktionen och alla förvillkor (exempelvis använder återställningsnyckel) är mötta.", - "Be aware that encryption always increases the file size." : "OBS! Observera att kryptering alltid ökar filstorleken", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Det är alltid en god ide att skapa regelbundna säkerhetskopior av din data, om kryptering används var säker på att även krypteringsnycklarna säkerhetskopieras tillsammans med din data.", - "This is the final warning: Do you really want to enable encryption?" : "Detta är en slutgiltig varning: Vill du verkligen aktivera kryptering?", - "Enable encryption" : "Aktivera kryptering", - "No encryption module loaded, please enable an encryption module in the app menu." : "Ingen krypteringsmodul laddad, var god aktivera krypteringsmodulen i applikationsmenyn.", - "Select default encryption module:" : "Välj standard krypteringsmodul:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Du behöver migrera dina krypteringsnycklar från den gamla krypteringen (owncloud <= 8.0) till den nya. Var god aktivera \"Default encryption module\" och kör 'occ encryption:migrate'.", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Du behöver migrera dina krypteringsnycklar från den gamla krypteringen (owncloud <= 8.0) till den nya.", - "Start migration" : "Starta migrering", - "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", - "mail" : "mail", - "Authentication method" : "Autentiseringsmetod", - "Authentication required" : "Autentisering krävs", - "Server address" : "Serveradress", - "Port" : "Port", - "Credentials" : "Inloggningsuppgifter", - "SMTP Username" : "SMTP-användarnamn", - "SMTP Password" : "SMTP-lösenord", - "Store credentials" : "Lagra inloggningsuppgifter", - "Test email settings" : "Testa e-postinställningar", - "Send email" : "Skicka e-post", - "What to log" : "Vad som ska loggas", - "Download logfile" : "Ladda ner loggfil", - "More" : "Mer", - "Less" : "Mindre", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Logfilen är större än 100 MB. Nerladdningen kan ta en stund!", + "Tips & tricks" : "Tips & tricks", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite används som databas. För större installationer så rekommenderar vi ett byte till en annan databasmotor.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Speciellt när desktop klienten för filsynkronisering används så avråds användande av SQLite.", "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>." : "För att migrera till en annan databas använd kommandoverktyget 'occ db:convert-type' eller se <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\"> dokumentationen ↗</a>", @@ -205,7 +202,6 @@ "Improving the config.php" : "Förbättra config.php", "Theming" : "Teman", "Hardening and security guidance" : "Säkerhetsriktlinjer", - "Version" : "Version", "Developer documentation" : "Utvecklar dokumentation", "Experimental applications ahead" : "Experimentiella applikationer framför", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimentella applikationer är ej kontrollerade för säkerhetsproblem, nya eller kända att vara instabila och under föränderlig utveckling. Installation utav dessa kan orsaka dataförlust eller säkerhetsbrott.", @@ -259,14 +255,14 @@ "Change password" : "Ändra lösenord", "Language" : "Språk", "Help translate" : "Hjälp att översätta", - "Name" : "Namn", - "Username" : "Användarnamn", - "Done" : "Färdig", "Get the apps to sync your files" : "Skaffa apparna för att synkronisera dina filer", "Desktop client" : "Skrivbordsklient", "Android app" : "Android-app", "iOS app" : "iOS-app", "Show First Run Wizard again" : "Visa Första uppstarts-guiden igen", + "Name" : "Namn", + "Username" : "Användarnamn", + "Done" : "Färdig", "Show storage location" : "Visa lagringsplats", "Show last log in" : "Visa senaste inloggning", "Show user backend" : "Visa användar-backend", @@ -285,6 +281,10 @@ "change full name" : "ändra hela namnet", "set new password" : "ange nytt lösenord", "change email address" : "ändra e-postadress", - "Default" : "Förvald" + "Default" : "Förvald", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Extern lagring", + "Updates" : "Uppdateringar" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/settings/l10n/th_TH.js b/settings/l10n/th_TH.js index fdbe3d7015e..411e6ed6723 100644 --- a/settings/l10n/th_TH.js +++ b/settings/l10n/th_TH.js @@ -1,16 +1,16 @@ OC.L10N.register( "settings", { + "Enabled" : "เปิดการใช้งาน", + "Not enabled" : "ใช้งานไม่ได้", "Wrong password" : "รหัสผ่านไม่ถูกต้อง", "Saved" : "บันทึกแล้ว", "No user supplied" : "ไม่มีผู้ใช้", + "Unable to change password" : "ไม่สามารถเปลี่ยนรหัสผ่าน", "Authentication error" : "เกิดข้อผิดพลาดในสิทธิ์การเข้าใช้งาน", "Please provide an admin recovery password, otherwise all user data will be lost" : "โปรดให้กู้คืนรหัสผ่านของผู้ดูแลระบบมิฉะนั้นข้อมูลของผู้ใช้ทั้งหมดจะหายไป", "Wrong admin recovery password. Please check the password and try again." : "กู้คืนรหัสผ่านของผู้ดูแลระบบไม่ถูกต้อง กรุณาตรวจสอบรหัสผ่านและลองอีกครั้ง.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "แบ็กเอนด์ไม่สนับสนุนการเปลี่ยนแปลงรหัสผ่าน แต่คีย์ที่เข้ารหัสลับของผู้ใช้ได้ถูกอัพเดทแล้ว", - "Unable to change password" : "ไม่สามารถเปลี่ยนรหัสผ่าน", - "Enabled" : "เปิดการใช้งาน", - "Not enabled" : "ใช้งานไม่ได้", "installing and updating apps via the app store or 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 %s รุ่นเก่ากว่า (%s)โปรดอัพเดทระบบปฏิบัติการหรือคุณสมบัติเป็น %s เพื่อการทำงานที่มีประสิทธิภาพ", @@ -35,17 +35,6 @@ OC.L10N.register( "Email saved" : "อีเมลถูกบันทึกแล้ว", "Your full name has been changed." : "ชื่อเต็มของคุณถูกเปลี่ยนแปลง", "Unable to change full name" : "ไม่สามารถเปลี่ยนชื่อเต็ม", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "คำเตือนความปลอดภัยและการติดตั้ง", - "Sharing" : "แชร์ข้อมูล", - "Server-side encryption" : "เข้ารหัสฝั่งเซิร์ฟเวอร์", - "External Storage" : "พื้นทีจัดเก็บข้อมูลจากภายนอก", - "Cron" : "Cron", - "Email server" : "อีเมลเซิร์ฟเวอร์", - "Log" : "บันทึกการเปลี่ยนแปลง", - "Tips & tricks" : "เคล็ดลับและเทคนิค", - "Updates" : "อัพเดท", "Couldn't remove app." : "ไม่สามารถลบแอพฯ", "Language changed" : "เปลี่ยนภาษาเรียบร้อยแล้ว", "Invalid request" : "คำร้องขอไม่ถูกต้อง", @@ -112,17 +101,54 @@ OC.L10N.register( "Unlimited" : "ไม่จำกัด", "Personal info" : "ข้อมูลส่วนบุคคล", "Sync clients" : "ประสานข้อมูลไคลเอนต์", - "Everything (fatal issues, errors, warnings, info, debug)" : "ทุกอย่าง (ปัญหาร้ายแรง ข้อผิดพลาด คำเตือน ข้อมูล การแก้ปัญหา)", - "Info, warnings, errors and fatal issues" : "ข้อมูล คำเตือน ข้อผิดพลาดและปัญหาร้ายแรง", - "Warnings, errors and fatal issues" : "คำเตือนข้อผิดพลาดและปัญหาที่ร้ายแรง", - "Errors and fatal issues" : "ข้อผิดพลาดและปัญหาที่ร้ายแรง", - "Fatal issues only" : "ปัญหาร้ายแรงเท่านั้น", "None" : "ไม่มี", "Login" : "เข้าสู่ระบบ", "Plain" : "ธรรมดา", "NT LAN Manager" : "ตัวจัดการ NT LAN", "SSL" : "SSL", "TLS" : "TLS", + "Email server" : "อีเมลเซิร์ฟเวอร์", + "Open documentation" : "เปิดเอกสาร", + "This is used for sending out notifications." : "นี้จะใช้สำหรับการส่งออกการแจ้งเตือน", + "Send mode" : "โหมดการส่ง", + "Encryption" : "การเข้ารหัส", + "From address" : "จากที่อยู่", + "mail" : "อีเมล", + "Authentication method" : "วิธีการตรวจสอบ", + "Authentication required" : "จำเป็นต้องตรวจสอบความถูกต้อง", + "Server address" : "ที่อยู่เซิร์ฟเวอร์", + "Port" : "พอร์ต", + "Credentials" : "ข้อมูลส่วนตัวสำหรับเข้าระบบ", + "SMTP Username" : "ชื่อผู้ใช้ SMTP", + "SMTP Password" : "รหัสผ่าน SMTP", + "Store credentials" : "ข้อมูลประจำตัวของร้านค้า", + "Test email settings" : "ทดสอบการตั้งค่าอีเมล", + "Send email" : "ส่งอีเมล", + "Server-side encryption" : "เข้ารหัสฝั่งเซิร์ฟเวอร์", + "Enable server-side encryption" : "เปิดการใช้งานเข้ารหัสฝั่งเซิร์ฟเวอร์", + "Please read carefully before activating server-side encryption: " : "กรุณาอ่านอย่างละเอียดก่อนที่จะเปิดใช้งานการเข้ารหัสฝั่งเซิร์ฟเวอร์:", + "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "เมื่อเปิดใช้งานการเข้ารหัส ไฟล์ทั้งหมดที่อัพโหลดไปยังเซิร์ฟเวอร์นั้นจะถูกเข้ารหัสในส่วนของเซิฟเวอร์ มันเป็นไปได้ที่จะปิดใช้งานการเข้ารหัสในภายหลัง ถ้าเปิดใช้ฟังก์ชั่นการสนับสนุนโมดูลการเข้ารหัสที่และเงื่อนไขก่อน (เช่น การตั้งค่าคีย์กู้คืน)", + "Be aware that encryption always increases the file size." : "โปรดทราบว่าหากเข้ารหัสไฟล์จะทำให้ขนาดของไฟล์ใหญ่ขึ้น", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "มันจะดีถ้าคุณสำรองข้อมูลบ่อยๆ ในกรณีของการเข้ารหัสโปรดแน่ใจว่าจะสำรองคีย์การเข้ารหัสลับพร้อมกับข้อมูลของคุณ", + "This is the final warning: Do you really want to enable encryption?" : "นี่คือการเตือนครั้งสุดท้าย: คุณต้องการที่จะเปิดใช้การเข้ารหัส?", + "Enable encryption" : "เปิดใช้งานการเข้ารหัส", + "No encryption module loaded, please enable an encryption module in the app menu." : "ไม่มีโมดูลการเข้ารหัสโหลดโปรดเปิดใช้งานโมดูลการเข้ารหัสในเมนูแอพฯ", + "Select default encryption module:" : "เลือกค่าเริ่มต้นโมดูลการเข้ารหัส:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "คุณจำเป็นต้องโอนย้ายคีย์การเข้ารหัสลับของคุณจากการเข้ารหัสเก่า (ownCloud <= 8.0) ไปใหม่ กรุณาเปิดใช้งาน \"โมดูลการเข้ารหัสเริ่มต้น\" และเรียกใช้ 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "คุณจำเป็นต้องโอนย้ายคีย์การเข้ารหัสลับของคุณจากการเข้ารหัสเก่า (ownCloud <= 8.0) ไปใหม่", + "Start migration" : "เริ่มการโยกย้าย", + "Everything (fatal issues, errors, warnings, info, debug)" : "ทุกอย่าง (ปัญหาร้ายแรง ข้อผิดพลาด คำเตือน ข้อมูล การแก้ปัญหา)", + "Info, warnings, errors and fatal issues" : "ข้อมูล คำเตือน ข้อผิดพลาดและปัญหาร้ายแรง", + "Warnings, errors and fatal issues" : "คำเตือนข้อผิดพลาดและปัญหาที่ร้ายแรง", + "Errors and fatal issues" : "ข้อผิดพลาดและปัญหาที่ร้ายแรง", + "Fatal issues only" : "ปัญหาร้ายแรงเท่านั้น", + "Log" : "บันทึกการเปลี่ยนแปลง", + "What to log" : "อะไรที่จะบันทึก", + "Download logfile" : "ดาวน์โหลดไฟล์บันทึก", + "More" : "มาก", + "Less" : "ย่อ", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "ไฟล์บันทึกมีขนาดใหญ่กว่า 100 เมกะไบต์ มันอาจจะใช้เวลาดาวน์โหลดนาน!", + "Security & setup warnings" : "คำเตือนความปลอดภัยและการติดตั้ง", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "ไม่ได้ติดตั้งphp อย่างถูกต้องค้นหาตัวแปรสภาพแวดล้อมของระบบการทดสอบกับ getenv(\"PATH\") ส่งกลับเฉพาะการตอบสนองที่ว่างเปล่า", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "ตั้งค่าให้สามารถอ่านได้อย่างเดียวถูกเปิดใช้งาน นี้จะช่วยป้องกันการตั้งค่าผ่านทางบางเว็บอินเตอร์เฟซ นอกจากนี้จะต้องเขียนไฟล์ด้วยตนเองสำหรับทุกการอัพเดท", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "เห็นได้ชัดว่าการตั้งค่า PHP จะตัดบล็อคเอกสารแบบอินไลน์ ซึ่งจะทำให้แอพพลิเคชันอีกหลายแกนไม่สามารถเข้าถึงได้", @@ -135,7 +161,15 @@ OC.L10N.register( "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "หากการติดตั้งของคุณไม่ได้ติดตั้งในรากของโดเมนและใช้ระบบ cron อาจมีปัญหาเกี่ยวกับการสร้าง URL เพื่อหลีกเลี่ยงปัญหาเหล่านี้โปรดไปตั้งค่า \"overwrite.cli.url\" ในไฟล์ config.php ของคุณไปยังเส้นทาง webroot ของการติดตั้งของคุณ (แนะนำ: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "มันเป็นไปไม่ได้ที่จะดำเนินการ cronjob ผ่านทาง CLI ข้อผิดพลาดทางเทคนิคต่อไปนี้จะปรากฏ:", "All checks passed." : "ผ่านการตรวจสอบทั้งหมด", - "Open documentation" : "เปิดเอกสาร", + "Cron" : "Cron", + "Last cron job execution: %s." : "การดำเนินการ cron job ล่าสุด: %s", + "Last cron job execution: %s. Something seems wrong." : "การดำเนินการ cron job ล่าสุด: %s ดูเหมือนมีบางสิ่งไม่ถูกต้อง", + "Cron was not executed yet!" : "Cron ไม่ได้ถูกดำเนินการ!", + "Execute one task with each page loaded" : "ประมวลผลหนึ่งงาน ในแต่ละครั้งที่มีการโหลดหน้าเว็บ", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php ได้ถูกลงทะเบียนที่บริการ Webcron เพื่อเรียก cron.php ทุกๆ 15 นาที บน Http", + "Use system's cron service to call the cron.php file every 15 minutes." : "ใช้ระบบบริการ cron เพื่อเรียกไฟล์ cron.php ทุก 15 นาที", + "Version" : "รุ่น", + "Sharing" : "แชร์ข้อมูล", "Allow apps to use the Share API" : "อนุญาตให้แอปฯสามารถใช้ API สำหรับแชร์ข้อมูลได้", "Allow users to share via link" : "อนุญาตให้ผู้ใช้สามารถแชร์ผ่านทางลิงค์", "Allow public uploads" : "อนุญาตให้อัพโหลดสาธารณะ", @@ -152,44 +186,7 @@ OC.L10N.register( "Exclude groups from sharing" : "ไม่รวมกลุ่มที่กำลังแชร์", "These groups will still be able to receive shares, but not to initiate them." : "กลุ่มนี้จะยังคงสามารถได้รับการแชร์ แต่พวกเขาจะไม่รู้จักมัน", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "อนุญาตให้เติมข้อความชื่อผู้ใช้อัตโนมัติในกล่องข้อความแชร์ ถ้านี้ถูกปิดใช้งานจะต้องกรอกชื่อผู้ใช้เอง", - "Last cron job execution: %s." : "การดำเนินการ cron job ล่าสุด: %s", - "Last cron job execution: %s. Something seems wrong." : "การดำเนินการ cron job ล่าสุด: %s ดูเหมือนมีบางสิ่งไม่ถูกต้อง", - "Cron was not executed yet!" : "Cron ไม่ได้ถูกดำเนินการ!", - "Execute one task with each page loaded" : "ประมวลผลหนึ่งงาน ในแต่ละครั้งที่มีการโหลดหน้าเว็บ", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php ได้ถูกลงทะเบียนที่บริการ Webcron เพื่อเรียก cron.php ทุกๆ 15 นาที บน Http", - "Use system's cron service to call the cron.php file every 15 minutes." : "ใช้ระบบบริการ cron เพื่อเรียกไฟล์ cron.php ทุก 15 นาที", - "Enable server-side encryption" : "เปิดการใช้งานเข้ารหัสฝั่งเซิร์ฟเวอร์", - "Please read carefully before activating server-side encryption: " : "กรุณาอ่านอย่างละเอียดก่อนที่จะเปิดใช้งานการเข้ารหัสฝั่งเซิร์ฟเวอร์:", - "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "เมื่อเปิดใช้งานการเข้ารหัส ไฟล์ทั้งหมดที่อัพโหลดไปยังเซิร์ฟเวอร์นั้นจะถูกเข้ารหัสในส่วนของเซิฟเวอร์ มันเป็นไปได้ที่จะปิดใช้งานการเข้ารหัสในภายหลัง ถ้าเปิดใช้ฟังก์ชั่นการสนับสนุนโมดูลการเข้ารหัสที่และเงื่อนไขก่อน (เช่น การตั้งค่าคีย์กู้คืน)", - "Be aware that encryption always increases the file size." : "โปรดทราบว่าหากเข้ารหัสไฟล์จะทำให้ขนาดของไฟล์ใหญ่ขึ้น", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "มันจะดีถ้าคุณสำรองข้อมูลบ่อยๆ ในกรณีของการเข้ารหัสโปรดแน่ใจว่าจะสำรองคีย์การเข้ารหัสลับพร้อมกับข้อมูลของคุณ", - "This is the final warning: Do you really want to enable encryption?" : "นี่คือการเตือนครั้งสุดท้าย: คุณต้องการที่จะเปิดใช้การเข้ารหัส?", - "Enable encryption" : "เปิดใช้งานการเข้ารหัส", - "No encryption module loaded, please enable an encryption module in the app menu." : "ไม่มีโมดูลการเข้ารหัสโหลดโปรดเปิดใช้งานโมดูลการเข้ารหัสในเมนูแอพฯ", - "Select default encryption module:" : "เลือกค่าเริ่มต้นโมดูลการเข้ารหัส:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "คุณจำเป็นต้องโอนย้ายคีย์การเข้ารหัสลับของคุณจากการเข้ารหัสเก่า (ownCloud <= 8.0) ไปใหม่ กรุณาเปิดใช้งาน \"โมดูลการเข้ารหัสเริ่มต้น\" และเรียกใช้ 'occ encryption:migrate'", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "คุณจำเป็นต้องโอนย้ายคีย์การเข้ารหัสลับของคุณจากการเข้ารหัสเก่า (ownCloud <= 8.0) ไปใหม่", - "Start migration" : "เริ่มการโยกย้าย", - "This is used for sending out notifications." : "นี้จะใช้สำหรับการส่งออกการแจ้งเตือน", - "Send mode" : "โหมดการส่ง", - "Encryption" : "การเข้ารหัส", - "From address" : "จากที่อยู่", - "mail" : "อีเมล", - "Authentication method" : "วิธีการตรวจสอบ", - "Authentication required" : "จำเป็นต้องตรวจสอบความถูกต้อง", - "Server address" : "ที่อยู่เซิร์ฟเวอร์", - "Port" : "พอร์ต", - "Credentials" : "ข้อมูลส่วนตัวสำหรับเข้าระบบ", - "SMTP Username" : "ชื่อผู้ใช้ SMTP", - "SMTP Password" : "รหัสผ่าน SMTP", - "Store credentials" : "ข้อมูลประจำตัวของร้านค้า", - "Test email settings" : "ทดสอบการตั้งค่าอีเมล", - "Send email" : "ส่งอีเมล", - "What to log" : "อะไรที่จะบันทึก", - "Download logfile" : "ดาวน์โหลดไฟล์บันทึก", - "More" : "มาก", - "Less" : "ย่อ", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "ไฟล์บันทึกมีขนาดใหญ่กว่า 100 เมกะไบต์ มันอาจจะใช้เวลาดาวน์โหลดนาน!", + "Tips & tricks" : "เคล็ดลับและเทคนิค", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "จะใช้ SQLite เป็นฐานข้อมูล สำหรับการติดตั้งขนาดใหญ่เราขอแนะนำเพื่อสลับไปยังฐานข้อมูลแบ็กเอนด์ที่แตกต่างกัน", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "โดยเฉพาะอย่างยิ่งเมื่อใช้ไคลเอนต์เดสก์ทอปสำหรับการประสานข้อมูลโดย SQLite", "How to do backups" : "วิธีการสำรองข้อมูล", @@ -198,7 +195,6 @@ OC.L10N.register( "Improving the config.php" : "ปรับปรุงไฟล์ config.php", "Theming" : "ชุดรูปแบบ", "Hardening and security guidance" : "คำแนะนำการรักษาความปลอดภัย", - "Version" : "รุ่น", "Developer documentation" : "เอกสารสำหรับนักพัฒนา", "Experimental applications ahead" : "การใช้งานก่อนการทดลอง", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "การทดลองแอพพลิเคชันไม่ได้ถูกตรวจสอบปัญหาด้านความปลอดภัย การติดตั้งพวกเขาสามารถก่อให้เกิดการสูญเสียข้อมูลหรือการละเมิดความปลอดภัย", @@ -249,14 +245,14 @@ OC.L10N.register( "Change password" : "เปลี่ยนรหัสผ่าน", "Language" : "ภาษา", "Help translate" : "มาช่วยกันแปลสิ!", - "Name" : "ชื่อ", - "Username" : "ชื่อผู้ใช้งาน", - "Done" : "เสร็จสิ้น", "Get the apps to sync your files" : "ใช้แอพพลิเคชันในการประสานไฟล์ของคุณ", "Desktop client" : "เดสก์ทอปผู้ใช้", "Android app" : "แอพฯ แอนดรอยด์", "iOS app" : "แอพฯ IOS", "Show First Run Wizard again" : "แสดงหน้าจอวิซาร์ดนำทางครั้งแรกอีกครั้ง", + "Name" : "ชื่อ", + "Username" : "ชื่อผู้ใช้งาน", + "Done" : "เสร็จสิ้น", "Show storage location" : "แสดงสถานที่จัดเก็บข้อมูล", "Show last log in" : "แสดงการเข้าสู่ระบบล่าสุด", "Show user backend" : "แสดงแบ็กเอนด์ของผู้ใช้", @@ -275,6 +271,10 @@ OC.L10N.register( "change full name" : "เปลี่ยนชื่อเต็ม", "set new password" : "ตั้งค่ารหัสผ่านใหม่", "change email address" : "เปลี่ยนแปลงที่อยู่อีเมล", - "Default" : "ค่าเริ่มต้น" + "Default" : "ค่าเริ่มต้น", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "พื้นทีจัดเก็บข้อมูลจากภายนอก", + "Updates" : "อัพเดท" }, "nplurals=1; plural=0;"); diff --git a/settings/l10n/th_TH.json b/settings/l10n/th_TH.json index b018e8e5dce..ecf1bd31fec 100644 --- a/settings/l10n/th_TH.json +++ b/settings/l10n/th_TH.json @@ -1,14 +1,14 @@ { "translations": { + "Enabled" : "เปิดการใช้งาน", + "Not enabled" : "ใช้งานไม่ได้", "Wrong password" : "รหัสผ่านไม่ถูกต้อง", "Saved" : "บันทึกแล้ว", "No user supplied" : "ไม่มีผู้ใช้", + "Unable to change password" : "ไม่สามารถเปลี่ยนรหัสผ่าน", "Authentication error" : "เกิดข้อผิดพลาดในสิทธิ์การเข้าใช้งาน", "Please provide an admin recovery password, otherwise all user data will be lost" : "โปรดให้กู้คืนรหัสผ่านของผู้ดูแลระบบมิฉะนั้นข้อมูลของผู้ใช้ทั้งหมดจะหายไป", "Wrong admin recovery password. Please check the password and try again." : "กู้คืนรหัสผ่านของผู้ดูแลระบบไม่ถูกต้อง กรุณาตรวจสอบรหัสผ่านและลองอีกครั้ง.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "แบ็กเอนด์ไม่สนับสนุนการเปลี่ยนแปลงรหัสผ่าน แต่คีย์ที่เข้ารหัสลับของผู้ใช้ได้ถูกอัพเดทแล้ว", - "Unable to change password" : "ไม่สามารถเปลี่ยนรหัสผ่าน", - "Enabled" : "เปิดการใช้งาน", - "Not enabled" : "ใช้งานไม่ได้", "installing and updating apps via the app store or 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 %s รุ่นเก่ากว่า (%s)โปรดอัพเดทระบบปฏิบัติการหรือคุณสมบัติเป็น %s เพื่อการทำงานที่มีประสิทธิภาพ", @@ -33,17 +33,6 @@ "Email saved" : "อีเมลถูกบันทึกแล้ว", "Your full name has been changed." : "ชื่อเต็มของคุณถูกเปลี่ยนแปลง", "Unable to change full name" : "ไม่สามารถเปลี่ยนชื่อเต็ม", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "คำเตือนความปลอดภัยและการติดตั้ง", - "Sharing" : "แชร์ข้อมูล", - "Server-side encryption" : "เข้ารหัสฝั่งเซิร์ฟเวอร์", - "External Storage" : "พื้นทีจัดเก็บข้อมูลจากภายนอก", - "Cron" : "Cron", - "Email server" : "อีเมลเซิร์ฟเวอร์", - "Log" : "บันทึกการเปลี่ยนแปลง", - "Tips & tricks" : "เคล็ดลับและเทคนิค", - "Updates" : "อัพเดท", "Couldn't remove app." : "ไม่สามารถลบแอพฯ", "Language changed" : "เปลี่ยนภาษาเรียบร้อยแล้ว", "Invalid request" : "คำร้องขอไม่ถูกต้อง", @@ -110,17 +99,54 @@ "Unlimited" : "ไม่จำกัด", "Personal info" : "ข้อมูลส่วนบุคคล", "Sync clients" : "ประสานข้อมูลไคลเอนต์", - "Everything (fatal issues, errors, warnings, info, debug)" : "ทุกอย่าง (ปัญหาร้ายแรง ข้อผิดพลาด คำเตือน ข้อมูล การแก้ปัญหา)", - "Info, warnings, errors and fatal issues" : "ข้อมูล คำเตือน ข้อผิดพลาดและปัญหาร้ายแรง", - "Warnings, errors and fatal issues" : "คำเตือนข้อผิดพลาดและปัญหาที่ร้ายแรง", - "Errors and fatal issues" : "ข้อผิดพลาดและปัญหาที่ร้ายแรง", - "Fatal issues only" : "ปัญหาร้ายแรงเท่านั้น", "None" : "ไม่มี", "Login" : "เข้าสู่ระบบ", "Plain" : "ธรรมดา", "NT LAN Manager" : "ตัวจัดการ NT LAN", "SSL" : "SSL", "TLS" : "TLS", + "Email server" : "อีเมลเซิร์ฟเวอร์", + "Open documentation" : "เปิดเอกสาร", + "This is used for sending out notifications." : "นี้จะใช้สำหรับการส่งออกการแจ้งเตือน", + "Send mode" : "โหมดการส่ง", + "Encryption" : "การเข้ารหัส", + "From address" : "จากที่อยู่", + "mail" : "อีเมล", + "Authentication method" : "วิธีการตรวจสอบ", + "Authentication required" : "จำเป็นต้องตรวจสอบความถูกต้อง", + "Server address" : "ที่อยู่เซิร์ฟเวอร์", + "Port" : "พอร์ต", + "Credentials" : "ข้อมูลส่วนตัวสำหรับเข้าระบบ", + "SMTP Username" : "ชื่อผู้ใช้ SMTP", + "SMTP Password" : "รหัสผ่าน SMTP", + "Store credentials" : "ข้อมูลประจำตัวของร้านค้า", + "Test email settings" : "ทดสอบการตั้งค่าอีเมล", + "Send email" : "ส่งอีเมล", + "Server-side encryption" : "เข้ารหัสฝั่งเซิร์ฟเวอร์", + "Enable server-side encryption" : "เปิดการใช้งานเข้ารหัสฝั่งเซิร์ฟเวอร์", + "Please read carefully before activating server-side encryption: " : "กรุณาอ่านอย่างละเอียดก่อนที่จะเปิดใช้งานการเข้ารหัสฝั่งเซิร์ฟเวอร์:", + "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "เมื่อเปิดใช้งานการเข้ารหัส ไฟล์ทั้งหมดที่อัพโหลดไปยังเซิร์ฟเวอร์นั้นจะถูกเข้ารหัสในส่วนของเซิฟเวอร์ มันเป็นไปได้ที่จะปิดใช้งานการเข้ารหัสในภายหลัง ถ้าเปิดใช้ฟังก์ชั่นการสนับสนุนโมดูลการเข้ารหัสที่และเงื่อนไขก่อน (เช่น การตั้งค่าคีย์กู้คืน)", + "Be aware that encryption always increases the file size." : "โปรดทราบว่าหากเข้ารหัสไฟล์จะทำให้ขนาดของไฟล์ใหญ่ขึ้น", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "มันจะดีถ้าคุณสำรองข้อมูลบ่อยๆ ในกรณีของการเข้ารหัสโปรดแน่ใจว่าจะสำรองคีย์การเข้ารหัสลับพร้อมกับข้อมูลของคุณ", + "This is the final warning: Do you really want to enable encryption?" : "นี่คือการเตือนครั้งสุดท้าย: คุณต้องการที่จะเปิดใช้การเข้ารหัส?", + "Enable encryption" : "เปิดใช้งานการเข้ารหัส", + "No encryption module loaded, please enable an encryption module in the app menu." : "ไม่มีโมดูลการเข้ารหัสโหลดโปรดเปิดใช้งานโมดูลการเข้ารหัสในเมนูแอพฯ", + "Select default encryption module:" : "เลือกค่าเริ่มต้นโมดูลการเข้ารหัส:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "คุณจำเป็นต้องโอนย้ายคีย์การเข้ารหัสลับของคุณจากการเข้ารหัสเก่า (ownCloud <= 8.0) ไปใหม่ กรุณาเปิดใช้งาน \"โมดูลการเข้ารหัสเริ่มต้น\" และเรียกใช้ 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "คุณจำเป็นต้องโอนย้ายคีย์การเข้ารหัสลับของคุณจากการเข้ารหัสเก่า (ownCloud <= 8.0) ไปใหม่", + "Start migration" : "เริ่มการโยกย้าย", + "Everything (fatal issues, errors, warnings, info, debug)" : "ทุกอย่าง (ปัญหาร้ายแรง ข้อผิดพลาด คำเตือน ข้อมูล การแก้ปัญหา)", + "Info, warnings, errors and fatal issues" : "ข้อมูล คำเตือน ข้อผิดพลาดและปัญหาร้ายแรง", + "Warnings, errors and fatal issues" : "คำเตือนข้อผิดพลาดและปัญหาที่ร้ายแรง", + "Errors and fatal issues" : "ข้อผิดพลาดและปัญหาที่ร้ายแรง", + "Fatal issues only" : "ปัญหาร้ายแรงเท่านั้น", + "Log" : "บันทึกการเปลี่ยนแปลง", + "What to log" : "อะไรที่จะบันทึก", + "Download logfile" : "ดาวน์โหลดไฟล์บันทึก", + "More" : "มาก", + "Less" : "ย่อ", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "ไฟล์บันทึกมีขนาดใหญ่กว่า 100 เมกะไบต์ มันอาจจะใช้เวลาดาวน์โหลดนาน!", + "Security & setup warnings" : "คำเตือนความปลอดภัยและการติดตั้ง", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "ไม่ได้ติดตั้งphp อย่างถูกต้องค้นหาตัวแปรสภาพแวดล้อมของระบบการทดสอบกับ getenv(\"PATH\") ส่งกลับเฉพาะการตอบสนองที่ว่างเปล่า", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "ตั้งค่าให้สามารถอ่านได้อย่างเดียวถูกเปิดใช้งาน นี้จะช่วยป้องกันการตั้งค่าผ่านทางบางเว็บอินเตอร์เฟซ นอกจากนี้จะต้องเขียนไฟล์ด้วยตนเองสำหรับทุกการอัพเดท", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "เห็นได้ชัดว่าการตั้งค่า PHP จะตัดบล็อคเอกสารแบบอินไลน์ ซึ่งจะทำให้แอพพลิเคชันอีกหลายแกนไม่สามารถเข้าถึงได้", @@ -133,7 +159,15 @@ "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "หากการติดตั้งของคุณไม่ได้ติดตั้งในรากของโดเมนและใช้ระบบ cron อาจมีปัญหาเกี่ยวกับการสร้าง URL เพื่อหลีกเลี่ยงปัญหาเหล่านี้โปรดไปตั้งค่า \"overwrite.cli.url\" ในไฟล์ config.php ของคุณไปยังเส้นทาง webroot ของการติดตั้งของคุณ (แนะนำ: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "มันเป็นไปไม่ได้ที่จะดำเนินการ cronjob ผ่านทาง CLI ข้อผิดพลาดทางเทคนิคต่อไปนี้จะปรากฏ:", "All checks passed." : "ผ่านการตรวจสอบทั้งหมด", - "Open documentation" : "เปิดเอกสาร", + "Cron" : "Cron", + "Last cron job execution: %s." : "การดำเนินการ cron job ล่าสุด: %s", + "Last cron job execution: %s. Something seems wrong." : "การดำเนินการ cron job ล่าสุด: %s ดูเหมือนมีบางสิ่งไม่ถูกต้อง", + "Cron was not executed yet!" : "Cron ไม่ได้ถูกดำเนินการ!", + "Execute one task with each page loaded" : "ประมวลผลหนึ่งงาน ในแต่ละครั้งที่มีการโหลดหน้าเว็บ", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php ได้ถูกลงทะเบียนที่บริการ Webcron เพื่อเรียก cron.php ทุกๆ 15 นาที บน Http", + "Use system's cron service to call the cron.php file every 15 minutes." : "ใช้ระบบบริการ cron เพื่อเรียกไฟล์ cron.php ทุก 15 นาที", + "Version" : "รุ่น", + "Sharing" : "แชร์ข้อมูล", "Allow apps to use the Share API" : "อนุญาตให้แอปฯสามารถใช้ API สำหรับแชร์ข้อมูลได้", "Allow users to share via link" : "อนุญาตให้ผู้ใช้สามารถแชร์ผ่านทางลิงค์", "Allow public uploads" : "อนุญาตให้อัพโหลดสาธารณะ", @@ -150,44 +184,7 @@ "Exclude groups from sharing" : "ไม่รวมกลุ่มที่กำลังแชร์", "These groups will still be able to receive shares, but not to initiate them." : "กลุ่มนี้จะยังคงสามารถได้รับการแชร์ แต่พวกเขาจะไม่รู้จักมัน", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "อนุญาตให้เติมข้อความชื่อผู้ใช้อัตโนมัติในกล่องข้อความแชร์ ถ้านี้ถูกปิดใช้งานจะต้องกรอกชื่อผู้ใช้เอง", - "Last cron job execution: %s." : "การดำเนินการ cron job ล่าสุด: %s", - "Last cron job execution: %s. Something seems wrong." : "การดำเนินการ cron job ล่าสุด: %s ดูเหมือนมีบางสิ่งไม่ถูกต้อง", - "Cron was not executed yet!" : "Cron ไม่ได้ถูกดำเนินการ!", - "Execute one task with each page loaded" : "ประมวลผลหนึ่งงาน ในแต่ละครั้งที่มีการโหลดหน้าเว็บ", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php ได้ถูกลงทะเบียนที่บริการ Webcron เพื่อเรียก cron.php ทุกๆ 15 นาที บน Http", - "Use system's cron service to call the cron.php file every 15 minutes." : "ใช้ระบบบริการ cron เพื่อเรียกไฟล์ cron.php ทุก 15 นาที", - "Enable server-side encryption" : "เปิดการใช้งานเข้ารหัสฝั่งเซิร์ฟเวอร์", - "Please read carefully before activating server-side encryption: " : "กรุณาอ่านอย่างละเอียดก่อนที่จะเปิดใช้งานการเข้ารหัสฝั่งเซิร์ฟเวอร์:", - "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "เมื่อเปิดใช้งานการเข้ารหัส ไฟล์ทั้งหมดที่อัพโหลดไปยังเซิร์ฟเวอร์นั้นจะถูกเข้ารหัสในส่วนของเซิฟเวอร์ มันเป็นไปได้ที่จะปิดใช้งานการเข้ารหัสในภายหลัง ถ้าเปิดใช้ฟังก์ชั่นการสนับสนุนโมดูลการเข้ารหัสที่และเงื่อนไขก่อน (เช่น การตั้งค่าคีย์กู้คืน)", - "Be aware that encryption always increases the file size." : "โปรดทราบว่าหากเข้ารหัสไฟล์จะทำให้ขนาดของไฟล์ใหญ่ขึ้น", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "มันจะดีถ้าคุณสำรองข้อมูลบ่อยๆ ในกรณีของการเข้ารหัสโปรดแน่ใจว่าจะสำรองคีย์การเข้ารหัสลับพร้อมกับข้อมูลของคุณ", - "This is the final warning: Do you really want to enable encryption?" : "นี่คือการเตือนครั้งสุดท้าย: คุณต้องการที่จะเปิดใช้การเข้ารหัส?", - "Enable encryption" : "เปิดใช้งานการเข้ารหัส", - "No encryption module loaded, please enable an encryption module in the app menu." : "ไม่มีโมดูลการเข้ารหัสโหลดโปรดเปิดใช้งานโมดูลการเข้ารหัสในเมนูแอพฯ", - "Select default encryption module:" : "เลือกค่าเริ่มต้นโมดูลการเข้ารหัส:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "คุณจำเป็นต้องโอนย้ายคีย์การเข้ารหัสลับของคุณจากการเข้ารหัสเก่า (ownCloud <= 8.0) ไปใหม่ กรุณาเปิดใช้งาน \"โมดูลการเข้ารหัสเริ่มต้น\" และเรียกใช้ 'occ encryption:migrate'", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "คุณจำเป็นต้องโอนย้ายคีย์การเข้ารหัสลับของคุณจากการเข้ารหัสเก่า (ownCloud <= 8.0) ไปใหม่", - "Start migration" : "เริ่มการโยกย้าย", - "This is used for sending out notifications." : "นี้จะใช้สำหรับการส่งออกการแจ้งเตือน", - "Send mode" : "โหมดการส่ง", - "Encryption" : "การเข้ารหัส", - "From address" : "จากที่อยู่", - "mail" : "อีเมล", - "Authentication method" : "วิธีการตรวจสอบ", - "Authentication required" : "จำเป็นต้องตรวจสอบความถูกต้อง", - "Server address" : "ที่อยู่เซิร์ฟเวอร์", - "Port" : "พอร์ต", - "Credentials" : "ข้อมูลส่วนตัวสำหรับเข้าระบบ", - "SMTP Username" : "ชื่อผู้ใช้ SMTP", - "SMTP Password" : "รหัสผ่าน SMTP", - "Store credentials" : "ข้อมูลประจำตัวของร้านค้า", - "Test email settings" : "ทดสอบการตั้งค่าอีเมล", - "Send email" : "ส่งอีเมล", - "What to log" : "อะไรที่จะบันทึก", - "Download logfile" : "ดาวน์โหลดไฟล์บันทึก", - "More" : "มาก", - "Less" : "ย่อ", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "ไฟล์บันทึกมีขนาดใหญ่กว่า 100 เมกะไบต์ มันอาจจะใช้เวลาดาวน์โหลดนาน!", + "Tips & tricks" : "เคล็ดลับและเทคนิค", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "จะใช้ SQLite เป็นฐานข้อมูล สำหรับการติดตั้งขนาดใหญ่เราขอแนะนำเพื่อสลับไปยังฐานข้อมูลแบ็กเอนด์ที่แตกต่างกัน", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "โดยเฉพาะอย่างยิ่งเมื่อใช้ไคลเอนต์เดสก์ทอปสำหรับการประสานข้อมูลโดย SQLite", "How to do backups" : "วิธีการสำรองข้อมูล", @@ -196,7 +193,6 @@ "Improving the config.php" : "ปรับปรุงไฟล์ config.php", "Theming" : "ชุดรูปแบบ", "Hardening and security guidance" : "คำแนะนำการรักษาความปลอดภัย", - "Version" : "รุ่น", "Developer documentation" : "เอกสารสำหรับนักพัฒนา", "Experimental applications ahead" : "การใช้งานก่อนการทดลอง", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "การทดลองแอพพลิเคชันไม่ได้ถูกตรวจสอบปัญหาด้านความปลอดภัย การติดตั้งพวกเขาสามารถก่อให้เกิดการสูญเสียข้อมูลหรือการละเมิดความปลอดภัย", @@ -247,14 +243,14 @@ "Change password" : "เปลี่ยนรหัสผ่าน", "Language" : "ภาษา", "Help translate" : "มาช่วยกันแปลสิ!", - "Name" : "ชื่อ", - "Username" : "ชื่อผู้ใช้งาน", - "Done" : "เสร็จสิ้น", "Get the apps to sync your files" : "ใช้แอพพลิเคชันในการประสานไฟล์ของคุณ", "Desktop client" : "เดสก์ทอปผู้ใช้", "Android app" : "แอพฯ แอนดรอยด์", "iOS app" : "แอพฯ IOS", "Show First Run Wizard again" : "แสดงหน้าจอวิซาร์ดนำทางครั้งแรกอีกครั้ง", + "Name" : "ชื่อ", + "Username" : "ชื่อผู้ใช้งาน", + "Done" : "เสร็จสิ้น", "Show storage location" : "แสดงสถานที่จัดเก็บข้อมูล", "Show last log in" : "แสดงการเข้าสู่ระบบล่าสุด", "Show user backend" : "แสดงแบ็กเอนด์ของผู้ใช้", @@ -273,6 +269,10 @@ "change full name" : "เปลี่ยนชื่อเต็ม", "set new password" : "ตั้งค่ารหัสผ่านใหม่", "change email address" : "เปลี่ยนแปลงที่อยู่อีเมล", - "Default" : "ค่าเริ่มต้น" + "Default" : "ค่าเริ่มต้น", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "พื้นทีจัดเก็บข้อมูลจากภายนอก", + "Updates" : "อัพเดท" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/settings/l10n/tr.js b/settings/l10n/tr.js index ee70f99e35c..0375e025654 100644 --- a/settings/l10n/tr.js +++ b/settings/l10n/tr.js @@ -1,16 +1,16 @@ OC.L10N.register( "settings", { + "Enabled" : "Etkin", + "Not enabled" : "Etkin değil", "Wrong password" : "Hatalı parola", "Saved" : "Kaydedildi", "No user supplied" : "Kullanıcı girilmedi", + "Unable to change password" : "Parola değiştirilemiyor", "Authentication error" : "Kimlik doğrulama hatası", "Please provide an admin recovery password, otherwise all user data will be lost" : "Lütfen yönetici kurtarma parolasını girin, aksi takdirde tüm kullanıcı verisi kaybedilecek", "Wrong admin recovery password. Please check the password and try again." : "Hatalı yönetici kurtarma parolası. Lütfen parolayı denetleyip yeniden deneyin.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Arka uç, parola değiştirmesini desteklemiyor, ancak kullanıcı şifreleme anahtarı başarıyla güncellendi.", - "Unable to change password" : "Parola değiştirilemiyor", - "Enabled" : "Etkin", - "Not enabled" : "Etkin değil", "installing and updating apps via the app store or Federated Cloud Sharing" : "uygulama mağazası ve Birleşmiş Bulut Paylaşımından uygulama kurma ve güncelleme", "Federated Cloud Sharing" : "Birleşmiş Bulut Paylaşımı", "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL eskide kalmış bir sürüm %s kullanıyor (%s). Lütfen işletim sisteminizi güncelleyin, aksi halde %s gibi özellikler düzgün çalışmayacaktır.", @@ -35,17 +35,6 @@ OC.L10N.register( "Email saved" : "E-posta kaydedildi", "Your full name has been changed." : "Tam adınız değiştirildi.", "Unable to change full name" : "Tam adınız değiştirilirken hata", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Güvenlik ve kurulum uyarıları", - "Sharing" : "Paylaşım", - "Server-side encryption" : "Sunucu taraflı şifreleme", - "External Storage" : "Harici Depolama", - "Cron" : "Cron", - "Email server" : "E-posta sunucusu", - "Log" : "Günlük", - "Tips & tricks" : "İpuçları ve hileler", - "Updates" : "Güncellemeler", "Couldn't remove app." : "Uygulama kaldırılamadı.", "Language changed" : "Dil değiştirildi", "Invalid request" : "Geçersiz istek", @@ -133,17 +122,55 @@ OC.L10N.register( "Sessions" : "Oturum", "App passwords" : "Uygulama parolaları", "Sync clients" : "Eşitleme istemcileri", - "Everything (fatal issues, errors, warnings, info, debug)" : "Her şey (Ciddi sorunlar, hatalar, uyarılar, bilgi, hata ayıklama)", - "Info, warnings, errors and fatal issues" : "Bilgi, uyarılar, hatalar ve ciddi sorunlar", - "Warnings, errors and fatal issues" : "Uyarılar, hatalar ve ciddi sorunlar", - "Errors and fatal issues" : "Hatalar ve ciddi sorunlar", - "Fatal issues only" : "Sadece ciddi sorunlar", "None" : "Hiçbiri", "Login" : "Oturum Aç", "Plain" : "Düz", "NT LAN Manager" : "NT Ağ Yöneticisi", "SSL" : "SSL", "TLS" : "TLS", + "Email server" : "E-posta sunucusu", + "Open documentation" : "Belgelendirmeyi aç", + "This is used for sending out notifications." : "Bu, bildirimler gönderilirken kullanılır.", + "Send mode" : "Gönderme kipi", + "Encryption" : "Şifreleme", + "From address" : "Kimden adresi", + "mail" : "posta", + "Authentication method" : "Kimlik doğrulama yöntemi", + "Authentication required" : "Kimlik doğrulama gerekli", + "Server address" : "Sunucu adresi", + "Port" : "Port", + "Credentials" : "Kimlik Bilgileri", + "SMTP Username" : "SMTP Kullanıcı Adı", + "SMTP Password" : "SMTP Parolası", + "Store credentials" : "Kimlik bilgilerini depola", + "Test email settings" : "E-posta ayarlarını sına", + "Send email" : "E-posta gönder", + "Server-side encryption" : "Sunucu taraflı şifreleme", + "Enable server-side encryption" : "Sunucu taraflı şifrelemeyi aç", + "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, sunucuya yüklenen tüm dosyalar şifrelenmiş olarak kalacaktır. Şifrelemeyi devre dışı bırakmak sadece ileriki zamanlarda aktif şifreleme modülü desteklediğinde ve ön koşullar (örn: düzenleme anahtarı oluşturulması) yerine getirildiğinde yapılabilir.", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Şifreleme tek başına sistemin güvenliğini garanti etmez. Lütfen şifreleme uygulamasının nasıl çalıştığı ve desteklenen durumlar hakkında daha fazla bilgi almak için belgelendirmeye bakınız.", + "Be aware that encryption always increases the file size." : "Şifrelemenin dosya boyutunu büyüteceğini unutmayın.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Verilerinizi düzenli yedekleyin ve şifreleme anahtarlarınızın verilerinizle birlikte yedeklendiğinden emin olun. ", + "This is the final warning: Do you really want to enable encryption?" : "Bu son uyarıdır: Şifrelemeyi etkinleştirmek istiyor musunuz?", + "Enable encryption" : "Şifrelemeyi aç", + "No encryption module loaded, please enable an encryption module in the app menu." : "Hiç şifrelenme modülü yüklenmemiş, lütfen uygulama menüsünden bir şifreleme modülü etkinleştirin.", + "Select default encryption module:" : "Öntanımlı şifreleme modülünü seçin:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Eski şifreleme anahtarlarınızı eski şifrelemeden (ownCloud <= 8.0) yenisine taşımanız gerekli. Lütfen \"Öntanımlı şifreleme modülü\"nü etkinleştirin ve 'occ encryption:migrate' çalıştırın", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Eski şifreleme anahtarlarınızı eski şifrelemeden (ownCloud <= 8.0) yenisine taşımanız gerekli.", + "Start migration" : "Taşınmayı başlat", + "Everything (fatal issues, errors, warnings, info, debug)" : "Her şey (Ciddi sorunlar, hatalar, uyarılar, bilgi, hata ayıklama)", + "Info, warnings, errors and fatal issues" : "Bilgi, uyarılar, hatalar ve ciddi sorunlar", + "Warnings, errors and fatal issues" : "Uyarılar, hatalar ve ciddi sorunlar", + "Errors and fatal issues" : "Hatalar ve ciddi sorunlar", + "Fatal issues only" : "Sadece ciddi sorunlar", + "Log" : "Günlük", + "What to log" : "Neler günlüklenmeli", + "Download logfile" : "Günlük dosyasını indir", + "More" : "Daha fazla", + "Less" : "Daha az", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Günlük dosyası 100 MB'dan daha büyük. İndirmek zaman alabilir!", + "Security & setup warnings" : "Güvenlik ve kurulum uyarıları", "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 değişkenleri sorgusuna uygun olarak ayarlanmamış görünüyor. getenv(\"PATH\") komutu sadece boş bir cevap döndürüyor.", "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 özellikler php-fpm kullanırken sunucu php yapılandırması için <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">kurulum belgelendirmesine ↗</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, bazı ayarların web arayüzü ile yapılandırılmasını önler. Ayrıca, bu dosya her güncelleme sırasında el ile yazılabilir yapılmalıdır.", @@ -160,7 +187,15 @@ OC.L10N.register( "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Bu CLI ile cronjobı çalıştırmak mümkün değildi. Aşağıdaki teknik hatalar ortaya çıkmıştır:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Lütfen <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">kurulum rehberlerine ↗</a> ve <a href=\"#log-section\">günlük</a> kısmındaki hata ve uyarılara bakın.", "All checks passed." : "Tüm kontroller geçildi.", - "Open documentation" : "Belgelendirmeyi aç", + "Cron" : "Cron", + "Last cron job execution: %s." : "Son cron çalıştırılma: %s.", + "Last cron job execution: %s. Something seems wrong." : "Son cron çalıştırılma: %s. Bir şeyler yanlış gibi görünüyor.", + "Cron was not executed yet!" : "Cron henüz çalıştırılmadı!", + "Execute one task with each page loaded" : "Yüklenen her sayfa ile bir görev çalıştır", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php, http üzerinden her 15 dakikada bir çağrılması için webcron hizmetine kaydedilir.", + "Use system's cron service to call the cron.php file every 15 minutes." : "Cron.php dosyasını her 15 dakikada bir çağırmak için sistem cron hizmetini kullan.", + "Version" : "Sürüm", + "Sharing" : "Paylaşım", "Allow apps to use the Share API" : "Uygulamaların paylaşım API'sini kullanmasına izin ver", "Allow users to share via link" : "Kullanıcıların bağlantı ile paylaşmasına izin ver", "Allow public uploads" : "Herkes tarafından yüklemeye izin ver", @@ -177,45 +212,7 @@ OC.L10N.register( "Exclude groups from sharing" : "Grupları paylaşma eyleminden hariç tut", "These groups will still be able to receive shares, but not to initiate them." : "Bu gruplar hala paylaşımları alabilecek, ancak başlatamayacaktır.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Paylaşma iletişim kutusunda kullanıcı adı otomatik tamamlamasını etkinleştir. Devre dışı olduğunda tam kullanıcı adı girilmeli.", - "Last cron job execution: %s." : "Son cron çalıştırılma: %s.", - "Last cron job execution: %s. Something seems wrong." : "Son cron çalıştırılma: %s. Bir şeyler yanlış gibi görünüyor.", - "Cron was not executed yet!" : "Cron henüz çalıştırılmadı!", - "Execute one task with each page loaded" : "Yüklenen her sayfa ile bir görev çalıştır", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php, http üzerinden her 15 dakikada bir çağrılması için webcron hizmetine kaydedilir.", - "Use system's cron service to call the cron.php file every 15 minutes." : "Cron.php dosyasını her 15 dakikada bir çağırmak için sistem cron hizmetini kullan.", - "Enable server-side encryption" : "Sunucu taraflı şifrelemeyi aç", - "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, sunucuya yüklenen tüm dosyalar şifrelenmiş olarak kalacaktır. Şifrelemeyi devre dışı bırakmak sadece ileriki zamanlarda aktif şifreleme modülü desteklediğinde ve ön koşullar (örn: düzenleme anahtarı oluşturulması) yerine getirildiğinde yapılabilir.", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Şifreleme tek başına sistemin güvenliğini garanti etmez. Lütfen şifreleme uygulamasının nasıl çalıştığı ve desteklenen durumlar hakkında daha fazla bilgi almak için belgelendirmeye bakınız.", - "Be aware that encryption always increases the file size." : "Şifrelemenin dosya boyutunu büyüteceğini unutmayın.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Verilerinizi düzenli yedekleyin ve şifreleme anahtarlarınızın verilerinizle birlikte yedeklendiğinden emin olun. ", - "This is the final warning: Do you really want to enable encryption?" : "Bu son uyarıdır: Şifrelemeyi etkinleştirmek istiyor musunuz?", - "Enable encryption" : "Şifrelemeyi aç", - "No encryption module loaded, please enable an encryption module in the app menu." : "Hiç şifrelenme modülü yüklenmemiş, lütfen uygulama menüsünden bir şifreleme modülü etkinleştirin.", - "Select default encryption module:" : "Öntanımlı şifreleme modülünü seçin:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Eski şifreleme anahtarlarınızı eski şifrelemeden (ownCloud <= 8.0) yenisine taşımanız gerekli. Lütfen \"Öntanımlı şifreleme modülü\"nü etkinleştirin ve 'occ encryption:migrate' çalıştırın", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Eski şifreleme anahtarlarınızı eski şifrelemeden (ownCloud <= 8.0) yenisine taşımanız gerekli.", - "Start migration" : "Taşınmayı başlat", - "This is used for sending out notifications." : "Bu, bildirimler gönderilirken kullanılır.", - "Send mode" : "Gönderme kipi", - "Encryption" : "Şifreleme", - "From address" : "Kimden adresi", - "mail" : "posta", - "Authentication method" : "Kimlik doğrulama yöntemi", - "Authentication required" : "Kimlik doğrulama gerekli", - "Server address" : "Sunucu adresi", - "Port" : "Port", - "Credentials" : "Kimlik Bilgileri", - "SMTP Username" : "SMTP Kullanıcı Adı", - "SMTP Password" : "SMTP Parolası", - "Store credentials" : "Kimlik bilgilerini depola", - "Test email settings" : "E-posta ayarlarını sına", - "Send email" : "E-posta gönder", - "What to log" : "Neler günlüklenmeli", - "Download logfile" : "Günlük dosyasını indir", - "More" : "Daha fazla", - "Less" : "Daha az", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Günlük dosyası 100 MB'dan daha büyük. İndirmek zaman alabilir!", + "Tips & tricks" : "İpuçları ve hileler", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Veritabanı olarak SQLite kullanılıyor. Daha büyük kurulumlar için farklı bir veritabanı arka ucuna geçmenizi öneriyoruz.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Ö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' veya <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">belgelendirmeye ↗</a> bakın.", @@ -225,7 +222,6 @@ OC.L10N.register( "Improving the config.php" : "config.php iyileştirme", "Theming" : "Tema", "Hardening and security guidance" : "Sağlamlaştırma ve güvenlik rehberliği", - "Version" : "Sürüm", "Developer documentation" : "Geliştirici belgelendirmesi", "Experimental applications ahead" : "İlerideki deneysel uygulamalar", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Deneysel uygulamalar güvenlik açısından denetlenmemiş, yeni veya kararsız olmaya açık ya da geliştirilme aşamasında olan uygulamalardır. Yüklemek veri kaybı veya güvenlik açıklarına sebep olabilir.", @@ -281,6 +277,11 @@ OC.L10N.register( "Change password" : "Parola değiştir", "Language" : "Dil", "Help translate" : "Çevirilere yardım edin", + "Get the apps to sync your files" : "Dosyalarınızı eşitlemek için uygulamaları indirin", + "Desktop client" : "Masaüstü istemcisi", + "Android app" : "Android uygulaması", + "iOS app" : "iOS uygulaması", + "Show First Run Wizard again" : "İlk Çalıştırma Sihirbazı'nı yeniden göster", "Web, desktop and mobile clients currently logged in to your account." : "Web, masaüstü ve mobil şu anda hesabınıza oturum açmış durumda.", "Device" : "Aygıt", "Last activity" : "Son etkinlik", @@ -291,13 +292,6 @@ OC.L10N.register( "Use the credentials below to configure your app or device." : "Uygulama veya aygıtınızı yapılandırmak için aşağıdaki kimlik bilgilerini kullan.", "Username" : "Kullanıcı Adı", "Done" : "Bitti", - "Get the apps to sync your files" : "Dosyalarınızı eşitlemek için uygulamaları indirin", - "Desktop client" : "Masaüstü istemcisi", - "Android app" : "Android uygulaması", - "iOS app" : "iOS uygulaması", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Projeyi desteklemek isterseniz\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">gelişimine katılın</a>\n\t\tya da\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">dünyaya duyurun</a>!", - "Show First Run Wizard again" : "İlk Çalıştırma Sihirbazı'nı yeniden göster", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "{communityopen}Nextcloud topluluğu tarafından geliştirilmiştir{linkclose}, {githubopen}kaynak kod{linkclose} {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} ile lisanslanmıştır.", "Show storage location" : "Depolama konumunu göster", "Show last log in" : "Son oturum açılma zamanını göster", "Show user backend" : "Kullanıcı arka ucunu göster", @@ -321,6 +315,10 @@ OC.L10N.register( "change full name" : "tam adı değiştir", "set new password" : "yeni parola belirle", "change email address" : "e-posta adresini değiştir", - "Default" : "Öntanımlı" + "Default" : "Öntanımlı", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Harici Depolama", + "Updates" : "Güncellemeler" }, "nplurals=2; plural=(n > 1);"); diff --git a/settings/l10n/tr.json b/settings/l10n/tr.json index 401fdb3e1cf..892374cfb6c 100644 --- a/settings/l10n/tr.json +++ b/settings/l10n/tr.json @@ -1,14 +1,14 @@ { "translations": { + "Enabled" : "Etkin", + "Not enabled" : "Etkin değil", "Wrong password" : "Hatalı parola", "Saved" : "Kaydedildi", "No user supplied" : "Kullanıcı girilmedi", + "Unable to change password" : "Parola değiştirilemiyor", "Authentication error" : "Kimlik doğrulama hatası", "Please provide an admin recovery password, otherwise all user data will be lost" : "Lütfen yönetici kurtarma parolasını girin, aksi takdirde tüm kullanıcı verisi kaybedilecek", "Wrong admin recovery password. Please check the password and try again." : "Hatalı yönetici kurtarma parolası. Lütfen parolayı denetleyip yeniden deneyin.", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "Arka uç, parola değiştirmesini desteklemiyor, ancak kullanıcı şifreleme anahtarı başarıyla güncellendi.", - "Unable to change password" : "Parola değiştirilemiyor", - "Enabled" : "Etkin", - "Not enabled" : "Etkin değil", "installing and updating apps via the app store or Federated Cloud Sharing" : "uygulama mağazası ve Birleşmiş Bulut Paylaşımından uygulama kurma ve güncelleme", "Federated Cloud Sharing" : "Birleşmiş Bulut Paylaşımı", "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL eskide kalmış bir sürüm %s kullanıyor (%s). Lütfen işletim sisteminizi güncelleyin, aksi halde %s gibi özellikler düzgün çalışmayacaktır.", @@ -33,17 +33,6 @@ "Email saved" : "E-posta kaydedildi", "Your full name has been changed." : "Tam adınız değiştirildi.", "Unable to change full name" : "Tam adınız değiştirilirken hata", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "Güvenlik ve kurulum uyarıları", - "Sharing" : "Paylaşım", - "Server-side encryption" : "Sunucu taraflı şifreleme", - "External Storage" : "Harici Depolama", - "Cron" : "Cron", - "Email server" : "E-posta sunucusu", - "Log" : "Günlük", - "Tips & tricks" : "İpuçları ve hileler", - "Updates" : "Güncellemeler", "Couldn't remove app." : "Uygulama kaldırılamadı.", "Language changed" : "Dil değiştirildi", "Invalid request" : "Geçersiz istek", @@ -131,17 +120,55 @@ "Sessions" : "Oturum", "App passwords" : "Uygulama parolaları", "Sync clients" : "Eşitleme istemcileri", - "Everything (fatal issues, errors, warnings, info, debug)" : "Her şey (Ciddi sorunlar, hatalar, uyarılar, bilgi, hata ayıklama)", - "Info, warnings, errors and fatal issues" : "Bilgi, uyarılar, hatalar ve ciddi sorunlar", - "Warnings, errors and fatal issues" : "Uyarılar, hatalar ve ciddi sorunlar", - "Errors and fatal issues" : "Hatalar ve ciddi sorunlar", - "Fatal issues only" : "Sadece ciddi sorunlar", "None" : "Hiçbiri", "Login" : "Oturum Aç", "Plain" : "Düz", "NT LAN Manager" : "NT Ağ Yöneticisi", "SSL" : "SSL", "TLS" : "TLS", + "Email server" : "E-posta sunucusu", + "Open documentation" : "Belgelendirmeyi aç", + "This is used for sending out notifications." : "Bu, bildirimler gönderilirken kullanılır.", + "Send mode" : "Gönderme kipi", + "Encryption" : "Şifreleme", + "From address" : "Kimden adresi", + "mail" : "posta", + "Authentication method" : "Kimlik doğrulama yöntemi", + "Authentication required" : "Kimlik doğrulama gerekli", + "Server address" : "Sunucu adresi", + "Port" : "Port", + "Credentials" : "Kimlik Bilgileri", + "SMTP Username" : "SMTP Kullanıcı Adı", + "SMTP Password" : "SMTP Parolası", + "Store credentials" : "Kimlik bilgilerini depola", + "Test email settings" : "E-posta ayarlarını sına", + "Send email" : "E-posta gönder", + "Server-side encryption" : "Sunucu taraflı şifreleme", + "Enable server-side encryption" : "Sunucu taraflı şifrelemeyi aç", + "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, sunucuya yüklenen tüm dosyalar şifrelenmiş olarak kalacaktır. Şifrelemeyi devre dışı bırakmak sadece ileriki zamanlarda aktif şifreleme modülü desteklediğinde ve ön koşullar (örn: düzenleme anahtarı oluşturulması) yerine getirildiğinde yapılabilir.", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Şifreleme tek başına sistemin güvenliğini garanti etmez. Lütfen şifreleme uygulamasının nasıl çalıştığı ve desteklenen durumlar hakkında daha fazla bilgi almak için belgelendirmeye bakınız.", + "Be aware that encryption always increases the file size." : "Şifrelemenin dosya boyutunu büyüteceğini unutmayın.", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Verilerinizi düzenli yedekleyin ve şifreleme anahtarlarınızın verilerinizle birlikte yedeklendiğinden emin olun. ", + "This is the final warning: Do you really want to enable encryption?" : "Bu son uyarıdır: Şifrelemeyi etkinleştirmek istiyor musunuz?", + "Enable encryption" : "Şifrelemeyi aç", + "No encryption module loaded, please enable an encryption module in the app menu." : "Hiç şifrelenme modülü yüklenmemiş, lütfen uygulama menüsünden bir şifreleme modülü etkinleştirin.", + "Select default encryption module:" : "Öntanımlı şifreleme modülünü seçin:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Eski şifreleme anahtarlarınızı eski şifrelemeden (ownCloud <= 8.0) yenisine taşımanız gerekli. Lütfen \"Öntanımlı şifreleme modülü\"nü etkinleştirin ve 'occ encryption:migrate' çalıştırın", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Eski şifreleme anahtarlarınızı eski şifrelemeden (ownCloud <= 8.0) yenisine taşımanız gerekli.", + "Start migration" : "Taşınmayı başlat", + "Everything (fatal issues, errors, warnings, info, debug)" : "Her şey (Ciddi sorunlar, hatalar, uyarılar, bilgi, hata ayıklama)", + "Info, warnings, errors and fatal issues" : "Bilgi, uyarılar, hatalar ve ciddi sorunlar", + "Warnings, errors and fatal issues" : "Uyarılar, hatalar ve ciddi sorunlar", + "Errors and fatal issues" : "Hatalar ve ciddi sorunlar", + "Fatal issues only" : "Sadece ciddi sorunlar", + "Log" : "Günlük", + "What to log" : "Neler günlüklenmeli", + "Download logfile" : "Günlük dosyasını indir", + "More" : "Daha fazla", + "Less" : "Daha az", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Günlük dosyası 100 MB'dan daha büyük. İndirmek zaman alabilir!", + "Security & setup warnings" : "Güvenlik ve kurulum uyarıları", "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 değişkenleri sorgusuna uygun olarak ayarlanmamış görünüyor. getenv(\"PATH\") komutu sadece boş bir cevap döndürüyor.", "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 özellikler php-fpm kullanırken sunucu php yapılandırması için <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">kurulum belgelendirmesine ↗</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, bazı ayarların web arayüzü ile yapılandırılmasını önler. Ayrıca, bu dosya her güncelleme sırasında el ile yazılabilir yapılmalıdır.", @@ -158,7 +185,15 @@ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Bu CLI ile cronjobı çalıştırmak mümkün değildi. Aşağıdaki teknik hatalar ortaya çıkmıştır:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Lütfen <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">kurulum rehberlerine ↗</a> ve <a href=\"#log-section\">günlük</a> kısmındaki hata ve uyarılara bakın.", "All checks passed." : "Tüm kontroller geçildi.", - "Open documentation" : "Belgelendirmeyi aç", + "Cron" : "Cron", + "Last cron job execution: %s." : "Son cron çalıştırılma: %s.", + "Last cron job execution: %s. Something seems wrong." : "Son cron çalıştırılma: %s. Bir şeyler yanlış gibi görünüyor.", + "Cron was not executed yet!" : "Cron henüz çalıştırılmadı!", + "Execute one task with each page loaded" : "Yüklenen her sayfa ile bir görev çalıştır", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php, http üzerinden her 15 dakikada bir çağrılması için webcron hizmetine kaydedilir.", + "Use system's cron service to call the cron.php file every 15 minutes." : "Cron.php dosyasını her 15 dakikada bir çağırmak için sistem cron hizmetini kullan.", + "Version" : "Sürüm", + "Sharing" : "Paylaşım", "Allow apps to use the Share API" : "Uygulamaların paylaşım API'sini kullanmasına izin ver", "Allow users to share via link" : "Kullanıcıların bağlantı ile paylaşmasına izin ver", "Allow public uploads" : "Herkes tarafından yüklemeye izin ver", @@ -175,45 +210,7 @@ "Exclude groups from sharing" : "Grupları paylaşma eyleminden hariç tut", "These groups will still be able to receive shares, but not to initiate them." : "Bu gruplar hala paylaşımları alabilecek, ancak başlatamayacaktır.", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Paylaşma iletişim kutusunda kullanıcı adı otomatik tamamlamasını etkinleştir. Devre dışı olduğunda tam kullanıcı adı girilmeli.", - "Last cron job execution: %s." : "Son cron çalıştırılma: %s.", - "Last cron job execution: %s. Something seems wrong." : "Son cron çalıştırılma: %s. Bir şeyler yanlış gibi görünüyor.", - "Cron was not executed yet!" : "Cron henüz çalıştırılmadı!", - "Execute one task with each page loaded" : "Yüklenen her sayfa ile bir görev çalıştır", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php, http üzerinden her 15 dakikada bir çağrılması için webcron hizmetine kaydedilir.", - "Use system's cron service to call the cron.php file every 15 minutes." : "Cron.php dosyasını her 15 dakikada bir çağırmak için sistem cron hizmetini kullan.", - "Enable server-side encryption" : "Sunucu taraflı şifrelemeyi aç", - "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, sunucuya yüklenen tüm dosyalar şifrelenmiş olarak kalacaktır. Şifrelemeyi devre dışı bırakmak sadece ileriki zamanlarda aktif şifreleme modülü desteklediğinde ve ön koşullar (örn: düzenleme anahtarı oluşturulması) yerine getirildiğinde yapılabilir.", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Şifreleme tek başına sistemin güvenliğini garanti etmez. Lütfen şifreleme uygulamasının nasıl çalıştığı ve desteklenen durumlar hakkında daha fazla bilgi almak için belgelendirmeye bakınız.", - "Be aware that encryption always increases the file size." : "Şifrelemenin dosya boyutunu büyüteceğini unutmayın.", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Verilerinizi düzenli yedekleyin ve şifreleme anahtarlarınızın verilerinizle birlikte yedeklendiğinden emin olun. ", - "This is the final warning: Do you really want to enable encryption?" : "Bu son uyarıdır: Şifrelemeyi etkinleştirmek istiyor musunuz?", - "Enable encryption" : "Şifrelemeyi aç", - "No encryption module loaded, please enable an encryption module in the app menu." : "Hiç şifrelenme modülü yüklenmemiş, lütfen uygulama menüsünden bir şifreleme modülü etkinleştirin.", - "Select default encryption module:" : "Öntanımlı şifreleme modülünü seçin:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Eski şifreleme anahtarlarınızı eski şifrelemeden (ownCloud <= 8.0) yenisine taşımanız gerekli. Lütfen \"Öntanımlı şifreleme modülü\"nü etkinleştirin ve 'occ encryption:migrate' çalıştırın", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Eski şifreleme anahtarlarınızı eski şifrelemeden (ownCloud <= 8.0) yenisine taşımanız gerekli.", - "Start migration" : "Taşınmayı başlat", - "This is used for sending out notifications." : "Bu, bildirimler gönderilirken kullanılır.", - "Send mode" : "Gönderme kipi", - "Encryption" : "Şifreleme", - "From address" : "Kimden adresi", - "mail" : "posta", - "Authentication method" : "Kimlik doğrulama yöntemi", - "Authentication required" : "Kimlik doğrulama gerekli", - "Server address" : "Sunucu adresi", - "Port" : "Port", - "Credentials" : "Kimlik Bilgileri", - "SMTP Username" : "SMTP Kullanıcı Adı", - "SMTP Password" : "SMTP Parolası", - "Store credentials" : "Kimlik bilgilerini depola", - "Test email settings" : "E-posta ayarlarını sına", - "Send email" : "E-posta gönder", - "What to log" : "Neler günlüklenmeli", - "Download logfile" : "Günlük dosyasını indir", - "More" : "Daha fazla", - "Less" : "Daha az", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Günlük dosyası 100 MB'dan daha büyük. İndirmek zaman alabilir!", + "Tips & tricks" : "İpuçları ve hileler", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Veritabanı olarak SQLite kullanılıyor. Daha büyük kurulumlar için farklı bir veritabanı arka ucuna geçmenizi öneriyoruz.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Ö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' veya <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">belgelendirmeye ↗</a> bakın.", @@ -223,7 +220,6 @@ "Improving the config.php" : "config.php iyileştirme", "Theming" : "Tema", "Hardening and security guidance" : "Sağlamlaştırma ve güvenlik rehberliği", - "Version" : "Sürüm", "Developer documentation" : "Geliştirici belgelendirmesi", "Experimental applications ahead" : "İlerideki deneysel uygulamalar", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Deneysel uygulamalar güvenlik açısından denetlenmemiş, yeni veya kararsız olmaya açık ya da geliştirilme aşamasında olan uygulamalardır. Yüklemek veri kaybı veya güvenlik açıklarına sebep olabilir.", @@ -279,6 +275,11 @@ "Change password" : "Parola değiştir", "Language" : "Dil", "Help translate" : "Çevirilere yardım edin", + "Get the apps to sync your files" : "Dosyalarınızı eşitlemek için uygulamaları indirin", + "Desktop client" : "Masaüstü istemcisi", + "Android app" : "Android uygulaması", + "iOS app" : "iOS uygulaması", + "Show First Run Wizard again" : "İlk Çalıştırma Sihirbazı'nı yeniden göster", "Web, desktop and mobile clients currently logged in to your account." : "Web, masaüstü ve mobil şu anda hesabınıza oturum açmış durumda.", "Device" : "Aygıt", "Last activity" : "Son etkinlik", @@ -289,13 +290,6 @@ "Use the credentials below to configure your app or device." : "Uygulama veya aygıtınızı yapılandırmak için aşağıdaki kimlik bilgilerini kullan.", "Username" : "Kullanıcı Adı", "Done" : "Bitti", - "Get the apps to sync your files" : "Dosyalarınızı eşitlemek için uygulamaları indirin", - "Desktop client" : "Masaüstü istemcisi", - "Android app" : "Android uygulaması", - "iOS app" : "iOS uygulaması", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Projeyi desteklemek isterseniz\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">gelişimine katılın</a>\n\t\tya da\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">dünyaya duyurun</a>!", - "Show First Run Wizard again" : "İlk Çalıştırma Sihirbazı'nı yeniden göster", - "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "{communityopen}Nextcloud topluluğu tarafından geliştirilmiştir{linkclose}, {githubopen}kaynak kod{linkclose} {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} ile lisanslanmıştır.", "Show storage location" : "Depolama konumunu göster", "Show last log in" : "Son oturum açılma zamanını göster", "Show user backend" : "Kullanıcı arka ucunu göster", @@ -319,6 +313,10 @@ "change full name" : "tam adı değiştir", "set new password" : "yeni parola belirle", "change email address" : "e-posta adresini değiştir", - "Default" : "Öntanımlı" + "Default" : "Öntanımlı", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "Harici Depolama", + "Updates" : "Güncellemeler" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/settings/l10n/zh_CN.js b/settings/l10n/zh_CN.js index ca7541fe800..5b80d07ecda 100644 --- a/settings/l10n/zh_CN.js +++ b/settings/l10n/zh_CN.js @@ -1,16 +1,16 @@ OC.L10N.register( "settings", { + "Enabled" : "开启", + "Not enabled" : "未启用", "Wrong password" : "错误密码", "Saved" : "已保存", "No user supplied" : "没有满足的用户", + "Unable to change password" : "不能更改密码", "Authentication error" : "认证错误", "Please provide an admin recovery password, otherwise all user data will be lost" : "请提供管理员恢复密码,否则所有用户的数据都将遗失。", "Wrong admin recovery password. Please check the password and try again." : "错误的管理员恢复密码。请检查密码并重试。", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "后端不支持密码更改,但用户的加密密钥已成功更新。", - "Unable to change password" : "不能更改密码", - "Enabled" : "开启", - "Not enabled" : "未启用", "installing and updating apps via the app store or 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使用了过时 %s 版本 (%s)。请更新你的操作系统或功能比如 %s 将无法可靠地工作。", @@ -35,17 +35,6 @@ OC.L10N.register( "Email saved" : "电子邮件已保存", "Your full name has been changed." : "您的全名已修改。", "Unable to change full name" : "无法修改全名", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "安全及设置警告", - "Sharing" : "共享", - "Server-side encryption" : "服务器端加密", - "External Storage" : "外部存储", - "Cron" : "计划任务", - "Email server" : "电子邮件服务器", - "Log" : "日志", - "Tips & tricks" : "技巧提示", - "Updates" : "更新", "Couldn't remove app." : "无法删除应用。", "Language changed" : "语言已修改", "Invalid request" : "无效请求", @@ -110,17 +99,54 @@ OC.L10N.register( "Unlimited" : "无限", "Personal info" : "个人信息", "Sync clients" : "客户端", - "Everything (fatal issues, errors, warnings, info, debug)" : "所有(灾难性问题,错误,警告,信息,调试)", - "Info, warnings, errors and fatal issues" : "信息,警告,错误和灾难性问题", - "Warnings, errors and fatal issues" : "警告,错误和灾难性问题", - "Errors and fatal issues" : "错误和灾难性问题", - "Fatal issues only" : "仅灾难性问题", "None" : "无", "Login" : "登录", "Plain" : "Plain", "NT LAN Manager" : "NT LAN 管理器", "SSL" : "SSL", "TLS" : "TLS", + "Email server" : "电子邮件服务器", + "Open documentation" : "打开文档", + "This is used for sending out notifications." : "这被用于发送通知。", + "Send mode" : "发送模式", + "Encryption" : "加密", + "From address" : "来自地址", + "mail" : "邮件", + "Authentication method" : "认证方法", + "Authentication required" : "需要认证", + "Server address" : "服务器地址", + "Port" : "端口", + "Credentials" : "凭证", + "SMTP Username" : "SMTP 用户名", + "SMTP Password" : "SMTP 密码", + "Store credentials" : "存储凭据", + "Test email settings" : "测试电子邮件设置", + "Send email" : "发送邮件", + "Server-side encryption" : "服务器端加密", + "Enable server-side encryption" : "启用服务器端加密", + "Please read carefully before activating server-side encryption: " : "在激活服务器端加密之前,请仔细阅读:", + "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "一旦加密被启用,之后上传到服务器的所有文件都将服务器上加密。只有当启用状态的加密模块支持解密并且所有的先决条件(例如,设定恢复键)得到满足时才能解除加密。", + "Be aware that encryption always increases the file size." : "请注意,加密会增加文件大小。", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "定期备份数据有利于保证数据完整,并且确保备份您的加密数据和加密密钥。", + "This is the final warning: Do you really want to enable encryption?" : "这是最后一次警告:你真的想启用加密?", + "Enable encryption" : "启用加密", + "No encryption module loaded, please enable an encryption module in the app menu." : "没有加载加密模块,请在 APP 应用菜单中启用加密模块。", + "Select default encryption module:" : "选择默认的加密模块:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "你需要升级你的加密密钥 (旧版 ownCloud <= 8.0) 。 请在应用中启用 \\\"Default encryption module\\\" 并运行 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "您需要将加密密钥从旧版(ownCloud<=8.0)迁移到新版。", + "Start migration" : "开始迁移", + "Everything (fatal issues, errors, warnings, info, debug)" : "所有(灾难性问题,错误,警告,信息,调试)", + "Info, warnings, errors and fatal issues" : "信息,警告,错误和灾难性问题", + "Warnings, errors and fatal issues" : "警告,错误和灾难性问题", + "Errors and fatal issues" : "错误和灾难性问题", + "Fatal issues only" : "仅灾难性问题", + "Log" : "日志", + "What to log" : "记录日志", + "Download logfile" : "下载日志文件", + "More" : "更多", + "Less" : "更少", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "日志文件超过 100 MB。下载可能需要一些时间!", + "Security & setup warnings" : "安全及设置警告", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP 似乎没有设置好查询的系统环境变量。 用 getenv(\\\"PATH\\\") 测试只返回一个空值。", "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." : "只读配置已启用。这样可防止通过 WEB 接口设置一些配置。此外,每次更新后该文件需要手动设置为可写。", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP 被设置为移除行内 <doc> 块,这将导致数个核心应用无法访问。", @@ -132,7 +158,15 @@ OC.L10N.register( "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "如果你不是安装在网域根目录而且又使用系统定时计划任务,那么可以导致 URL 链接生成问题。为了避免这些问题,请在你的 Config.php 文件中设置 \\\"overwrite.cli.url\\\" 选项为 webroot 安装根目录 (建议: \\\"%s\\\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "由于下面的错误,无法通过 CLI 执行定时计划任务:", "All checks passed." : "所有检查已通过。", - "Open documentation" : "打开文档", + "Cron" : "计划任务", + "Last cron job execution: %s." : "上次定时任务执行于: %s.", + "Last cron job execution: %s. Something seems wrong." : "上次定时任务执行于: %s. 似乎有些问题。", + "Cron was not executed yet!" : "定时任务还未被执行!", + "Execute one task with each page loaded" : "每个页面加载后执行一个任务", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php 已注册于一个 webcron 服务来通过 http 每 15 分钟执行 cron.php。", + "Use system's cron service to call the cron.php file every 15 minutes." : "使用系统 CRON 服务每 15 分钟执行一次 cron.php 文件。", + "Version" : "版本", + "Sharing" : "共享", "Allow apps to use the Share API" : "允许应用软件使用共享API", "Allow users to share via link" : "允许用户通过链接分享文件", "Allow public uploads" : "允许公开上传", @@ -149,44 +183,7 @@ OC.L10N.register( "Exclude groups from sharing" : "在分享中排除组", "These groups will still be able to receive shares, but not to initiate them." : "这些组将仍可以获取分享,但无法向他人分享。", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "允许在共享对话框中的自动补全用户名。如果被禁用,需要输入用户全名。", - "Last cron job execution: %s." : "上次定时任务执行于: %s.", - "Last cron job execution: %s. Something seems wrong." : "上次定时任务执行于: %s. 似乎有些问题。", - "Cron was not executed yet!" : "定时任务还未被执行!", - "Execute one task with each page loaded" : "每个页面加载后执行一个任务", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php 已注册于一个 webcron 服务来通过 http 每 15 分钟执行 cron.php。", - "Use system's cron service to call the cron.php file every 15 minutes." : "使用系统 CRON 服务每 15 分钟执行一次 cron.php 文件。", - "Enable server-side encryption" : "启用服务器端加密", - "Please read carefully before activating server-side encryption: " : "在激活服务器端加密之前,请仔细阅读:", - "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "一旦加密被启用,之后上传到服务器的所有文件都将服务器上加密。只有当启用状态的加密模块支持解密并且所有的先决条件(例如,设定恢复键)得到满足时才能解除加密。", - "Be aware that encryption always increases the file size." : "请注意,加密会增加文件大小。", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "定期备份数据有利于保证数据完整,并且确保备份您的加密数据和加密密钥。", - "This is the final warning: Do you really want to enable encryption?" : "这是最后一次警告:你真的想启用加密?", - "Enable encryption" : "启用加密", - "No encryption module loaded, please enable an encryption module in the app menu." : "没有加载加密模块,请在 APP 应用菜单中启用加密模块。", - "Select default encryption module:" : "选择默认的加密模块:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "你需要升级你的加密密钥 (旧版 ownCloud <= 8.0) 。 请在应用中启用 \\\"Default encryption module\\\" 并运行 'occ encryption:migrate'", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "您需要将加密密钥从旧版(ownCloud<=8.0)迁移到新版。", - "Start migration" : "开始迁移", - "This is used for sending out notifications." : "这被用于发送通知。", - "Send mode" : "发送模式", - "Encryption" : "加密", - "From address" : "来自地址", - "mail" : "邮件", - "Authentication method" : "认证方法", - "Authentication required" : "需要认证", - "Server address" : "服务器地址", - "Port" : "端口", - "Credentials" : "凭证", - "SMTP Username" : "SMTP 用户名", - "SMTP Password" : "SMTP 密码", - "Store credentials" : "存储凭据", - "Test email settings" : "测试电子邮件设置", - "Send email" : "发送邮件", - "What to log" : "记录日志", - "Download logfile" : "下载日志文件", - "More" : "更多", - "Less" : "更少", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "日志文件超过 100 MB。下载可能需要一些时间!", + "Tips & tricks" : "技巧提示", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite 被用作数据库。对于较大数据量的安装和使用,我们建议您切换到不同的数据库后端。", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "特别当使用桌面客户端来同步文件时,不鼓励使用 SQLite 。", "How to do backups" : "如何做备份", @@ -195,7 +192,6 @@ OC.L10N.register( "Improving the config.php" : "正在优化 config.php", "Theming" : "主题", "Hardening and security guidance" : "强化和安全指南", - "Version" : "版本", "Developer documentation" : "开发者文档", "Experimental applications ahead" : "未来的实验应用", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "实验应用程序没有在安全性的问题上作过多检查,新的或已知的不稳定 BUG 都在开发中。安装它们可能会导致数据丢失或安全漏洞。", @@ -245,13 +241,13 @@ OC.L10N.register( "Change password" : "修改密码", "Language" : "语言", "Help translate" : "帮助翻译", - "Name" : "名称", - "Username" : "用户名", "Get the apps to sync your files" : "安装应用进行文件同步", "Desktop client" : "桌面客户端", "Android app" : "Android 应用", "iOS app" : "iOS 应用", "Show First Run Wizard again" : "再次显示首次运行向导", + "Name" : "名称", + "Username" : "用户名", "Show storage location" : "显示存储位置", "Show last log in" : "显示最后登录", "Show user backend" : "显示用户后端", @@ -270,6 +266,10 @@ OC.L10N.register( "change full name" : "更改全名", "set new password" : "设置新密码", "change email address" : "修改电子邮箱地址", - "Default" : "默认" + "Default" : "默认", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "外部存储", + "Updates" : "更新" }, "nplurals=1; plural=0;"); diff --git a/settings/l10n/zh_CN.json b/settings/l10n/zh_CN.json index c5af97dd214..c20d403ecd6 100644 --- a/settings/l10n/zh_CN.json +++ b/settings/l10n/zh_CN.json @@ -1,14 +1,14 @@ { "translations": { + "Enabled" : "开启", + "Not enabled" : "未启用", "Wrong password" : "错误密码", "Saved" : "已保存", "No user supplied" : "没有满足的用户", + "Unable to change password" : "不能更改密码", "Authentication error" : "认证错误", "Please provide an admin recovery password, otherwise all user data will be lost" : "请提供管理员恢复密码,否则所有用户的数据都将遗失。", "Wrong admin recovery password. Please check the password and try again." : "错误的管理员恢复密码。请检查密码并重试。", "Backend doesn't support password change, but the user's encryption key was successfully updated." : "后端不支持密码更改,但用户的加密密钥已成功更新。", - "Unable to change password" : "不能更改密码", - "Enabled" : "开启", - "Not enabled" : "未启用", "installing and updating apps via the app store or 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使用了过时 %s 版本 (%s)。请更新你的操作系统或功能比如 %s 将无法可靠地工作。", @@ -33,17 +33,6 @@ "Email saved" : "电子邮件已保存", "Your full name has been changed." : "您的全名已修改。", "Unable to change full name" : "无法修改全名", - "APCu" : "APCu", - "Redis" : "Redis", - "Security & setup warnings" : "安全及设置警告", - "Sharing" : "共享", - "Server-side encryption" : "服务器端加密", - "External Storage" : "外部存储", - "Cron" : "计划任务", - "Email server" : "电子邮件服务器", - "Log" : "日志", - "Tips & tricks" : "技巧提示", - "Updates" : "更新", "Couldn't remove app." : "无法删除应用。", "Language changed" : "语言已修改", "Invalid request" : "无效请求", @@ -108,17 +97,54 @@ "Unlimited" : "无限", "Personal info" : "个人信息", "Sync clients" : "客户端", - "Everything (fatal issues, errors, warnings, info, debug)" : "所有(灾难性问题,错误,警告,信息,调试)", - "Info, warnings, errors and fatal issues" : "信息,警告,错误和灾难性问题", - "Warnings, errors and fatal issues" : "警告,错误和灾难性问题", - "Errors and fatal issues" : "错误和灾难性问题", - "Fatal issues only" : "仅灾难性问题", "None" : "无", "Login" : "登录", "Plain" : "Plain", "NT LAN Manager" : "NT LAN 管理器", "SSL" : "SSL", "TLS" : "TLS", + "Email server" : "电子邮件服务器", + "Open documentation" : "打开文档", + "This is used for sending out notifications." : "这被用于发送通知。", + "Send mode" : "发送模式", + "Encryption" : "加密", + "From address" : "来自地址", + "mail" : "邮件", + "Authentication method" : "认证方法", + "Authentication required" : "需要认证", + "Server address" : "服务器地址", + "Port" : "端口", + "Credentials" : "凭证", + "SMTP Username" : "SMTP 用户名", + "SMTP Password" : "SMTP 密码", + "Store credentials" : "存储凭据", + "Test email settings" : "测试电子邮件设置", + "Send email" : "发送邮件", + "Server-side encryption" : "服务器端加密", + "Enable server-side encryption" : "启用服务器端加密", + "Please read carefully before activating server-side encryption: " : "在激活服务器端加密之前,请仔细阅读:", + "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "一旦加密被启用,之后上传到服务器的所有文件都将服务器上加密。只有当启用状态的加密模块支持解密并且所有的先决条件(例如,设定恢复键)得到满足时才能解除加密。", + "Be aware that encryption always increases the file size." : "请注意,加密会增加文件大小。", + "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "定期备份数据有利于保证数据完整,并且确保备份您的加密数据和加密密钥。", + "This is the final warning: Do you really want to enable encryption?" : "这是最后一次警告:你真的想启用加密?", + "Enable encryption" : "启用加密", + "No encryption module loaded, please enable an encryption module in the app menu." : "没有加载加密模块,请在 APP 应用菜单中启用加密模块。", + "Select default encryption module:" : "选择默认的加密模块:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "你需要升级你的加密密钥 (旧版 ownCloud <= 8.0) 。 请在应用中启用 \\\"Default encryption module\\\" 并运行 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "您需要将加密密钥从旧版(ownCloud<=8.0)迁移到新版。", + "Start migration" : "开始迁移", + "Everything (fatal issues, errors, warnings, info, debug)" : "所有(灾难性问题,错误,警告,信息,调试)", + "Info, warnings, errors and fatal issues" : "信息,警告,错误和灾难性问题", + "Warnings, errors and fatal issues" : "警告,错误和灾难性问题", + "Errors and fatal issues" : "错误和灾难性问题", + "Fatal issues only" : "仅灾难性问题", + "Log" : "日志", + "What to log" : "记录日志", + "Download logfile" : "下载日志文件", + "More" : "更多", + "Less" : "更少", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "日志文件超过 100 MB。下载可能需要一些时间!", + "Security & setup warnings" : "安全及设置警告", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP 似乎没有设置好查询的系统环境变量。 用 getenv(\\\"PATH\\\") 测试只返回一个空值。", "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." : "只读配置已启用。这样可防止通过 WEB 接口设置一些配置。此外,每次更新后该文件需要手动设置为可写。", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP 被设置为移除行内 <doc> 块,这将导致数个核心应用无法访问。", @@ -130,7 +156,15 @@ "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "如果你不是安装在网域根目录而且又使用系统定时计划任务,那么可以导致 URL 链接生成问题。为了避免这些问题,请在你的 Config.php 文件中设置 \\\"overwrite.cli.url\\\" 选项为 webroot 安装根目录 (建议: \\\"%s\\\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "由于下面的错误,无法通过 CLI 执行定时计划任务:", "All checks passed." : "所有检查已通过。", - "Open documentation" : "打开文档", + "Cron" : "计划任务", + "Last cron job execution: %s." : "上次定时任务执行于: %s.", + "Last cron job execution: %s. Something seems wrong." : "上次定时任务执行于: %s. 似乎有些问题。", + "Cron was not executed yet!" : "定时任务还未被执行!", + "Execute one task with each page loaded" : "每个页面加载后执行一个任务", + "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php 已注册于一个 webcron 服务来通过 http 每 15 分钟执行 cron.php。", + "Use system's cron service to call the cron.php file every 15 minutes." : "使用系统 CRON 服务每 15 分钟执行一次 cron.php 文件。", + "Version" : "版本", + "Sharing" : "共享", "Allow apps to use the Share API" : "允许应用软件使用共享API", "Allow users to share via link" : "允许用户通过链接分享文件", "Allow public uploads" : "允许公开上传", @@ -147,44 +181,7 @@ "Exclude groups from sharing" : "在分享中排除组", "These groups will still be able to receive shares, but not to initiate them." : "这些组将仍可以获取分享,但无法向他人分享。", "Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "允许在共享对话框中的自动补全用户名。如果被禁用,需要输入用户全名。", - "Last cron job execution: %s." : "上次定时任务执行于: %s.", - "Last cron job execution: %s. Something seems wrong." : "上次定时任务执行于: %s. 似乎有些问题。", - "Cron was not executed yet!" : "定时任务还未被执行!", - "Execute one task with each page loaded" : "每个页面加载后执行一个任务", - "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php 已注册于一个 webcron 服务来通过 http 每 15 分钟执行 cron.php。", - "Use system's cron service to call the cron.php file every 15 minutes." : "使用系统 CRON 服务每 15 分钟执行一次 cron.php 文件。", - "Enable server-side encryption" : "启用服务器端加密", - "Please read carefully before activating server-side encryption: " : "在激活服务器端加密之前,请仔细阅读:", - "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "一旦加密被启用,之后上传到服务器的所有文件都将服务器上加密。只有当启用状态的加密模块支持解密并且所有的先决条件(例如,设定恢复键)得到满足时才能解除加密。", - "Be aware that encryption always increases the file size." : "请注意,加密会增加文件大小。", - "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "定期备份数据有利于保证数据完整,并且确保备份您的加密数据和加密密钥。", - "This is the final warning: Do you really want to enable encryption?" : "这是最后一次警告:你真的想启用加密?", - "Enable encryption" : "启用加密", - "No encryption module loaded, please enable an encryption module in the app menu." : "没有加载加密模块,请在 APP 应用菜单中启用加密模块。", - "Select default encryption module:" : "选择默认的加密模块:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "你需要升级你的加密密钥 (旧版 ownCloud <= 8.0) 。 请在应用中启用 \\\"Default encryption module\\\" 并运行 'occ encryption:migrate'", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "您需要将加密密钥从旧版(ownCloud<=8.0)迁移到新版。", - "Start migration" : "开始迁移", - "This is used for sending out notifications." : "这被用于发送通知。", - "Send mode" : "发送模式", - "Encryption" : "加密", - "From address" : "来自地址", - "mail" : "邮件", - "Authentication method" : "认证方法", - "Authentication required" : "需要认证", - "Server address" : "服务器地址", - "Port" : "端口", - "Credentials" : "凭证", - "SMTP Username" : "SMTP 用户名", - "SMTP Password" : "SMTP 密码", - "Store credentials" : "存储凭据", - "Test email settings" : "测试电子邮件设置", - "Send email" : "发送邮件", - "What to log" : "记录日志", - "Download logfile" : "下载日志文件", - "More" : "更多", - "Less" : "更少", - "The logfile is bigger than 100 MB. Downloading it may take some time!" : "日志文件超过 100 MB。下载可能需要一些时间!", + "Tips & tricks" : "技巧提示", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite 被用作数据库。对于较大数据量的安装和使用,我们建议您切换到不同的数据库后端。", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "特别当使用桌面客户端来同步文件时,不鼓励使用 SQLite 。", "How to do backups" : "如何做备份", @@ -193,7 +190,6 @@ "Improving the config.php" : "正在优化 config.php", "Theming" : "主题", "Hardening and security guidance" : "强化和安全指南", - "Version" : "版本", "Developer documentation" : "开发者文档", "Experimental applications ahead" : "未来的实验应用", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "实验应用程序没有在安全性的问题上作过多检查,新的或已知的不稳定 BUG 都在开发中。安装它们可能会导致数据丢失或安全漏洞。", @@ -243,13 +239,13 @@ "Change password" : "修改密码", "Language" : "语言", "Help translate" : "帮助翻译", - "Name" : "名称", - "Username" : "用户名", "Get the apps to sync your files" : "安装应用进行文件同步", "Desktop client" : "桌面客户端", "Android app" : "Android 应用", "iOS app" : "iOS 应用", "Show First Run Wizard again" : "再次显示首次运行向导", + "Name" : "名称", + "Username" : "用户名", "Show storage location" : "显示存储位置", "Show last log in" : "显示最后登录", "Show user backend" : "显示用户后端", @@ -268,6 +264,10 @@ "change full name" : "更改全名", "set new password" : "设置新密码", "change email address" : "修改电子邮箱地址", - "Default" : "默认" + "Default" : "默认", + "APCu" : "APCu", + "Redis" : "Redis", + "External Storage" : "外部存储", + "Updates" : "更新" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/settings/routes.php b/settings/routes.php index 94732b3192a..64c4e549681 100644 --- a/settings/routes.php +++ b/settings/routes.php @@ -64,6 +64,10 @@ $application->registerRoutes($this, [ ['name' => 'Certificate#removePersonalRootCertificate', 'url' => '/settings/personal/certificate/{certificateIdentifier}', 'verb' => 'DELETE'], ['name' => 'Certificate#addSystemRootCertificate', 'url' => '/settings/admin/certificate', 'verb' => 'POST'], ['name' => 'Certificate#removeSystemRootCertificate', 'url' => '/settings/admin/certificate/{certificateIdentifier}', 'verb' => 'DELETE'], + ['name' => 'AdminSettings#index', 'url' => '/settings/admin/{section}', 'verb' => 'GET', 'defaults' => ['section' => 'server']], + ['name' => 'AdminSettings#form', 'url' => '/settings/admin/{section}', 'verb' => 'GET'], + ['name' => 'ChangePassword#changePersonalPassword', 'url' => '/settings/personal/changepassword', 'verb' => 'POST'], + ['name' => 'ChangePassword#changeUserPassword', 'url' => '/settings/users/changepassword', 'verb' => 'POST'], ] ]); @@ -76,8 +80,6 @@ $this->create('settings_personal', '/settings/personal') ->actionInclude('settings/personal.php'); $this->create('settings_users', '/settings/users') ->actionInclude('settings/users.php'); -$this->create('settings_admin', '/settings/admin') - ->actionInclude('settings/admin.php'); // Settings ajax actions // users $this->create('settings_ajax_setquota', '/settings/ajax/setquota.php') @@ -86,15 +88,9 @@ $this->create('settings_ajax_togglegroups', '/settings/ajax/togglegroups.php') ->actionInclude('settings/ajax/togglegroups.php'); $this->create('settings_ajax_togglesubadmins', '/settings/ajax/togglesubadmins.php') ->actionInclude('settings/ajax/togglesubadmins.php'); -$this->create('settings_users_changepassword', '/settings/users/changepassword') - ->post() - ->action('OC\Settings\ChangePassword\Controller', 'changeUserPassword'); $this->create('settings_ajax_changegorupname', '/settings/ajax/changegroupname.php') ->actionInclude('settings/ajax/changegroupname.php'); // personal -$this->create('settings_personal_changepassword', '/settings/personal/changepassword') - ->post() - ->action('OC\Settings\ChangePassword\Controller', 'changePersonalPassword'); $this->create('settings_ajax_setlanguage', '/settings/ajax/setlanguage.php') ->actionInclude('settings/ajax/setlanguage.php'); // apps diff --git a/settings/templates/admin.php b/settings/templates/admin.php deleted file mode 100644 index 74fe585962d..00000000000 --- a/settings/templates/admin.php +++ /dev/null @@ -1,578 +0,0 @@ -<?php -/** - * Copyright (c) 2011, Robin Appelman <icewind1991@gmail.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. - */ -/** - * @var array $_ - * @var \OCP\IL10N $l - * @var OC_Defaults $theme - */ - -style('settings', 'settings'); -script('settings', [ 'settings', 'admin', 'log'] ); -script('core', ['multiselect', 'setupchecks']); -vendor_script('select2/select2'); -vendor_style('select2/select2'); - -$levels = ['Debug', 'Info', 'Warning', 'Error', 'Fatal']; -$levelLabels = [ - $l->t( 'Everything (fatal issues, errors, warnings, info, debug)' ), - $l->t( 'Info, warnings, errors and fatal issues' ), - $l->t( 'Warnings, errors and fatal issues' ), - $l->t( 'Errors and fatal issues' ), - $l->t( 'Fatal issues only' ), -]; - -$mail_smtpauthtype = [ - '' => $l->t('None'), - 'LOGIN' => $l->t('Login'), - 'PLAIN' => $l->t('Plain'), - 'NTLM' => $l->t('NT LAN Manager'), -]; - -$mail_smtpsecure = [ - '' => $l->t('None'), - 'ssl' => $l->t('SSL'), - 'tls' => $l->t('TLS'), -]; - -$mail_smtpmode = [ - 'php', - 'smtp', -]; -if ($_['sendmail_is_available']) { - $mail_smtpmode[] = 'sendmail'; -} -if ($_['mail_smtpmode'] == 'qmail') { - $mail_smtpmode[] = 'qmail'; -} -?> - -<div id="app-navigation"> - <ul> - <?php foreach($_['forms'] as $form) { - if (isset($form['anchor'])) { - $anchor = '#' . $form['anchor']; - $sectionName = $form['section-name']; - print_unescaped(sprintf("<li><a href='%s'>%s</a></li>", \OCP\Util::sanitizeHTML($anchor), \OCP\Util::sanitizeHTML($sectionName))); - } - }?> - </ul> -</div> - -<div id="app-content"> - -<div id="security-warning" class="section"> - <h2><?php p($l->t('Security & setup warnings'));?></h2> - <ul> -<?php -// is php setup properly to query system environment variables like getenv('PATH') -if ($_['getenvServerNotWorking']) { -?> - <li> - <?php p($l->t('php does not seem to be setup properly to query system environment variables. The test with getenv("PATH") only returns an empty response.')); ?><br> - <?php print_unescaped($l->t('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.', link_to_docs('admin-php-fpm'))); ?> - </li> -<?php -} - -// is read only config enabled -if ($_['readOnlyConfigEnabled']) { -?> - <li> - <?php p($l->t('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.')); ?> - </li> -<?php -} - -// Are doc blocks accessible? -if (!$_['isAnnotationsWorking']) { - ?> - <li> - <?php p($l->t('PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible.')); ?><br> - <?php p($l->t('This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator.')); ?> - </li> -<?php -} - -// Is the Transaction isolation level READ_COMMITTED? -if ($_['invalidTransactionIsolationLevel']) { - ?> - <li> - <?php p($l->t('Your database does not run with "READ COMMITTED" transaction isolation level. This can cause problems when multiple actions are executed in parallel.')); ?> - </li> -<?php -} - -// Warning if memcache is outdated -foreach ($_['OutdatedCacheWarning'] as $php_module => $data) { - ?> - <li> - <?php p($l->t('%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version.', $data)); ?> - </li> -<?php -} - -// if module fileinfo available? -if (!$_['has_fileinfo']) { - ?> - <li> - <?php p($l->t('The PHP module \'fileinfo\' is missing. We strongly recommend to enable this module to get best results with mime-type detection.')); ?> - </li> -<?php -} - -// locking configured optimally? -if ($_['fileLockingType'] === 'none') { - ?> - <li> - <?php print_unescaped($l->t('Transactional file locking is disabled, this might lead to issues with race conditions. Enable \'filelocking.enabled\' in config.php to avoid these problems. See the <a target="_blank" rel="noreferrer" href="%s">documentation ↗</a> for more information.', link_to_docs('admin-transactional-locking'))); ?> - </li> - <?php -} - -// is locale working ? -if (!$_['isLocaleWorking']) { - ?> - <li> - <?php - $locales = 'en_US.UTF-8/fr_FR.UTF-8/es_ES.UTF-8/de_DE.UTF-8/ru_RU.UTF-8/pt_BR.UTF-8/it_IT.UTF-8/ja_JP.UTF-8/zh_CN.UTF-8'; - p($l->t('System locale can not be set to a one which supports UTF-8.')); - ?> - <br> - <?php - p($l->t('This means that there might be problems with certain characters in file names.')); - ?> - <br> - <?php - p($l->t('We strongly suggest installing the required packages on your system to support one of the following locales: %s.', [$locales])); - ?> - </li> -<?php -} - -if ($_['suggestedOverwriteCliUrl']) { - ?> - <li> - <?php p($l->t('If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the "overwrite.cli.url" option in your config.php file to the webroot path of your installation (Suggested: "%s")', $_['suggestedOverwriteCliUrl'])); ?> - </li> -<?php -} - -if ($_['cronErrors']) { - ?> - <li> - <?php p($l->t('It was not possible to execute the cronjob via CLI. The following technical errors have appeared:')); ?> - <br> - <ol> - <?php foreach(json_decode($_['cronErrors']) as $error) { if(isset($error->error)) {?> - <li><?php p($error->error) ?> <?php p($error->hint) ?></li> - <?php }};?> - </ol> - </li> -<?php -} -?> -</ul> - -<div id="postsetupchecks" data-check-wellknown="<?php if($_['checkForWorkingWellKnownSetup']) { p('true'); } else { p('false'); } ?>"> - <div class="loading"></div> - <ul class="errors hidden"></ul> - <ul class="warnings hidden"></ul> - <ul class="info hidden"></ul> - <p class="hint hidden"> - <?php print_unescaped($l->t('Please double check the <a target="_blank" rel="noreferrer" href="%s">installation guides ↗</a>, and check for any errors or warnings in the <a href="#log-section">log</a>.', link_to_docs('admin-install'))); ?> - </p> -</div> -<div id="security-warning-state"> - <span class="hidden icon-checkmark"><?php p($l->t('All checks passed.'));?></span> -</div> -</div> - - <div class="section" id="shareAPI"> - <h2><?php p($l->t('Sharing'));?></h2> - <a target="_blank" el="noreferrer" class="icon-info" - title="<?php p($l->t('Open documentation'));?>" - href="<?php p(link_to_docs('admin-sharing')); ?>"></a> - <p id="enable"> - <input type="checkbox" name="shareapi_enabled" id="shareAPIEnabled" class="checkbox" - value="1" <?php if ($_['shareAPIEnabled'] === 'yes') print_unescaped('checked="checked"'); ?> /> - <label for="shareAPIEnabled"><?php p($l->t('Allow apps to use the Share API'));?></label><br/> - </p> - <p class="<?php if ($_['shareAPIEnabled'] === 'no') p('hidden');?>"> - <input type="checkbox" name="shareapi_allow_links" id="allowLinks" class="checkbox" - value="1" <?php if ($_['allowLinks'] === 'yes') print_unescaped('checked="checked"'); ?> /> - <label for="allowLinks"><?php p($l->t('Allow users to share via link'));?></label><br/> - </p> - - <p id="publicLinkSettings" class="indent <?php if ($_['allowLinks'] !== 'yes' || $_['shareAPIEnabled'] === 'no') p('hidden'); ?>"> - <input type="checkbox" name="shareapi_allow_public_upload" id="allowPublicUpload" class="checkbox" - value="1" <?php if ($_['allowPublicUpload'] == 'yes') print_unescaped('checked="checked"'); ?> /> - <label for="allowPublicUpload"><?php p($l->t('Allow public uploads'));?></label><br/> - - <input type="checkbox" name="shareapi_enforce_links_password" id="enforceLinkPassword" class="checkbox" - value="1" <?php if ($_['enforceLinkPassword']) print_unescaped('checked="checked"'); ?> /> - <label for="enforceLinkPassword"><?php p($l->t('Enforce password protection'));?></label><br/> - - <input type="checkbox" name="shareapi_default_expire_date" id="shareapiDefaultExpireDate" class="checkbox" - value="1" <?php if ($_['shareDefaultExpireDateSet'] === 'yes') print_unescaped('checked="checked"'); ?> /> - <label for="shareapiDefaultExpireDate"><?php p($l->t('Set default expiration date'));?></label><br/> - - <input type="checkbox" name="shareapi_allow_public_notification" id="allowPublicMailNotification" class="checkbox" - value="1" <?php if ($_['allowPublicMailNotification'] == 'yes') print_unescaped('checked="checked"'); ?> /> - <label for="allowPublicMailNotification"><?php p($l->t('Allow users to send mail notification for shared files'));?></label><br/> - - </p> - <p id="setDefaultExpireDate" class="double-indent <?php if ($_['allowLinks'] !== 'yes' || $_['shareDefaultExpireDateSet'] === 'no' || $_['shareAPIEnabled'] === 'no') p('hidden');?>"> - <?php p($l->t( 'Expire after ' )); ?> - <input type="text" name='shareapi_expire_after_n_days' id="shareapiExpireAfterNDays" placeholder="<?php p('7')?>" - value='<?php p($_['shareExpireAfterNDays']) ?>' /> - <?php p($l->t( 'days' )); ?> - <input type="checkbox" name="shareapi_enforce_expire_date" id="shareapiEnforceExpireDate" class="checkbox" - value="1" <?php if ($_['shareEnforceExpireDate'] === 'yes') print_unescaped('checked="checked"'); ?> /> - <label for="shareapiEnforceExpireDate"><?php p($l->t('Enforce expiration date'));?></label><br/> - </p> - <p class="<?php if ($_['shareAPIEnabled'] === 'no') p('hidden');?>"> - <input type="checkbox" name="shareapi_allow_resharing" id="allowResharing" class="checkbox" - value="1" <?php if ($_['allowResharing'] === 'yes') print_unescaped('checked="checked"'); ?> /> - <label for="allowResharing"><?php p($l->t('Allow resharing'));?></label><br/> - </p> - <p class="<?php if ($_['shareAPIEnabled'] === 'no') p('hidden');?>"> - <input type="checkbox" name="shareapi_allow_group_sharing" id="allowGroupSharing" class="checkbox" - value="1" <?php if ($_['allowGroupSharing'] === 'yes') print_unescaped('checked="checked"'); ?> /> - <label for="allowGroupSharing"><?php p($l->t('Allow sharing with groups'));?></label><br /> - </p> - <p class="<?php if ($_['shareAPIEnabled'] === 'no') p('hidden');?>"> - <input type="checkbox" name="shareapi_only_share_with_group_members" id="onlyShareWithGroupMembers" class="checkbox" - value="1" <?php if ($_['onlyShareWithGroupMembers']) print_unescaped('checked="checked"'); ?> /> - <label for="onlyShareWithGroupMembers"><?php p($l->t('Restrict users to only share with users in their groups'));?></label><br/> - </p> - <p class="<?php if ($_['shareAPIEnabled'] === 'no') p('hidden');?>"> - <input type="checkbox" name="shareapi_allow_mail_notification" id="allowMailNotification" class="checkbox" - value="1" <?php if ($_['allowMailNotification'] === 'yes') print_unescaped('checked="checked"'); ?> /> - <label for="allowMailNotification"><?php p($l->t('Allow users to send mail notification for shared files to other users'));?></label><br/> - </p> - <p class="<?php if ($_['shareAPIEnabled'] === 'no') p('hidden');?>"> - <input type="checkbox" name="shareapi_exclude_groups" id="shareapiExcludeGroups" class="checkbox" - value="1" <?php if ($_['shareExcludeGroups']) print_unescaped('checked="checked"'); ?> /> - <label for="shareapiExcludeGroups"><?php p($l->t('Exclude groups from sharing'));?></label><br/> - </p> - <p id="selectExcludedGroups" class="indent <?php if (!$_['shareExcludeGroups'] || $_['shareAPIEnabled'] === 'no') p('hidden'); ?>"> - <input name="shareapi_exclude_groups_list" type="hidden" id="excludedGroups" value="<?php p($_['shareExcludedGroupsList']) ?>" style="width: 400px"/> - <br /> - <em><?php p($l->t('These groups will still be able to receive shares, but not to initiate them.')); ?></em> - </p> - <p class="<?php if ($_['shareAPIEnabled'] === 'no') p('hidden');?>"> - <input type="checkbox" name="shareapi_allow_share_dialog_user_enumeration" value="1" id="shareapi_allow_share_dialog_user_enumeration" class="checkbox" - <?php if ($_['allowShareDialogUserEnumeration'] === 'yes') print_unescaped('checked="checked"'); ?> /> - <label for="shareapi_allow_share_dialog_user_enumeration"><?php p($l->t('Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered.'));?></label><br /> - </p> - - <?php print_unescaped($_['fileSharingSettings']); ?> - </div> - -<?php print_unescaped($_['filesExternal']); ?> - -<?php foreach($_['forms'] as $form) { - if (isset($form['form'])) {?> - <div id="<?php isset($form['anchor']) ? p($form['anchor']) : p('');?>"><?php print_unescaped($form['form']);?></div> - <?php } -};?> - -<div class="section" id="backgroundjobs"> - <h2 class="inlineblock"><?php p($l->t('Cron'));?></h2> - <?php if ($_['cron_log']): ?> - <p class="cronlog inlineblock"> - <?php if ($_['lastcron'] !== false): - $relative_time = relative_modified_date($_['lastcron']); - $absolute_time = OC_Util::formatDate($_['lastcron']); - if (time() - $_['lastcron'] <= 3600): ?> - <span class="status success"></span> - <span class="crondate" title="<?php p($absolute_time);?>"> - <?php p($l->t("Last cron job execution: %s.", [$relative_time]));?> - </span> - <?php else: ?> - <span class="status error"></span> - <span class="crondate" title="<?php p($absolute_time);?>"> - <?php p($l->t("Last cron job execution: %s. Something seems wrong.", [$relative_time]));?> - </span> - <?php endif; - else: ?> - <span class="status error"></span> - <?php p($l->t("Cron was not executed yet!")); - endif; ?> - </p> - <?php endif; ?> - <a target="_blank" rel="noreferrer" class="icon-info" - title="<?php p($l->t('Open documentation'));?>" - href="<?php p(link_to_docs('admin-background-jobs')); ?>"></a> - - <p> - <input type="radio" name="mode" value="ajax" class="radio" - id="backgroundjobs_ajax" <?php if ($_['backgroundjobs_mode'] === "ajax") { - print_unescaped('checked="checked"'); - } ?>> - <label for="backgroundjobs_ajax">AJAX</label><br/> - <em><?php p($l->t("Execute one task with each page loaded")); ?></em> - </p> - <p> - <input type="radio" name="mode" value="webcron" class="radio" - id="backgroundjobs_webcron" <?php if ($_['backgroundjobs_mode'] === "webcron") { - print_unescaped('checked="checked"'); - } ?>> - <label for="backgroundjobs_webcron">Webcron</label><br/> - <em><?php p($l->t("cron.php is registered at a webcron service to call cron.php every 15 minutes over http.")); ?></em> - </p> - <p> - <input type="radio" name="mode" value="cron" class="radio" - id="backgroundjobs_cron" <?php if ($_['backgroundjobs_mode'] === "cron") { - print_unescaped('checked="checked"'); - } ?>> - <label for="backgroundjobs_cron">Cron</label><br/> - <em><?php p($l->t("Use system's cron service to call the cron.php file every 15 minutes.")); ?></em> - </p> -</div> - -<div class="section" id='encryptionAPI'> - <h2><?php p($l->t('Server-side encryption')); ?></h2> - <a target="_blank" rel="noreferrer" class="icon-info" - title="<?php p($l->t('Open documentation'));?>" - href="<?php p(link_to_docs('admin-encryption')); ?>"></a> - - <p id="enable"> - <input type="checkbox" - id="enableEncryption" class="checkbox" - value="1" <?php if ($_['encryptionEnabled']) print_unescaped('checked="checked" disabled="disabled"'); ?> /> - <label - for="enableEncryption"><?php p($l->t('Enable server-side encryption')); ?> <span id="startmigration_msg" class="msg"></span> </label><br/> - </p> - - <div id="EncryptionWarning" class="warning hidden"> - <p><?php p($l->t('Please read carefully before activating server-side encryption: ')); ?></p> - <ul> - <li><?php p($l->t('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.')); ?></li> - <li><?php p($l->t('Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases.')); ?></li> - <li><?php p($l->t('Be aware that encryption always increases the file size.')); ?></li> - <li><?php p($l->t('It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data.')); ?></li> - </ul> - - <p><?php p($l->t('This is the final warning: Do you really want to enable encryption?')) ?> <input type="button" - id="reallyEnableEncryption" - value="<?php p($l->t("Enable encryption")); ?>" /></p> - </div> - - <div id="EncryptionSettingsArea" class="<?php if (!$_['encryptionEnabled']) p('hidden'); ?>"> - <div id='selectEncryptionModules' class="<?php if (!$_['encryptionReady']) p('hidden'); ?>"> - <?php - if (empty($_['encryptionModules'])) { - p($l->t('No encryption module loaded, please enable an encryption module in the app menu.')); - } else { ?> - <h3><?php p($l->t('Select default encryption module:')) ?></h3> - <fieldset id='encryptionModules'> - <?php foreach ($_['encryptionModules'] as $id => $module): ?> - <input type="radio" id="<?php p($id) ?>" - name="default_encryption_module" - value="<?php p($id) ?>" - <?php if ($module['default']) { - p('checked'); - } ?>> - <label - for="<?php p($id) ?>"><?php p($module['displayName']) ?></label> - <br/> - - <?php if ($id === 'OC_DEFAULT_MODULE') print_unescaped($_['ocDefaultEncryptionModulePanel']); ?> - <?php endforeach; ?> - </fieldset> - <?php } ?> - </div> - <div id="migrationWarning" class="<?php if ($_['encryptionReady']) p('hidden'); ?>"> - <?php - if ($_['encryptionReady'] === false && $_['externalBackendsEnabled'] === true) { - p($l->t('You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the "Default encryption module" and run \'occ encryption:migrate\'')); - } elseif ($_['encryptionReady'] === false && $_['externalBackendsEnabled'] === false) { - p($l->t('You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one.')); ?> - <input type="submit" name="startmigration" id="startmigration" - value="<?php p($l->t('Start migration')); ?>"/> - <?php } ?> - </div> - </div> -</div> - -<div class="section" id="mail_general_settings"> - <form id="mail_general_settings_form" class="mail_settings"> - <h2><?php p($l->t('Email server'));?></h2> - <a target="_blank" rel="noreferrer" class="icon-info" - title="<?php p($l->t('Open documentation'));?>" - href="<?php p(link_to_docs('admin-email')); ?>"></a> - - <p><?php p($l->t('This is used for sending out notifications.')); ?> <span id="mail_settings_msg" class="msg"></span></p> - - <p> - <label for="mail_smtpmode"><?php p($l->t( 'Send mode' )); ?></label> - <select name='mail_smtpmode' id='mail_smtpmode'> - <?php foreach ($mail_smtpmode as $smtpmode): - $selected = ''; - if ($smtpmode == $_['mail_smtpmode']): - $selected = 'selected="selected"'; - endif; ?> - <option value='<?php p($smtpmode)?>' <?php p($selected) ?>><?php p($smtpmode) ?></option> - <?php endforeach;?> - </select> - - <label id="mail_smtpsecure_label" for="mail_smtpsecure" - <?php if ($_['mail_smtpmode'] != 'smtp') print_unescaped(' class="hidden"'); ?>> - <?php p($l->t( 'Encryption' )); ?> - </label> - <select name="mail_smtpsecure" id="mail_smtpsecure" - <?php if ($_['mail_smtpmode'] != 'smtp') print_unescaped(' class="hidden"'); ?>> - <?php foreach ($mail_smtpsecure as $secure => $name): - $selected = ''; - if ($secure == $_['mail_smtpsecure']): - $selected = 'selected="selected"'; - endif; ?> - <option value='<?php p($secure)?>' <?php p($selected) ?>><?php p($name) ?></option> - <?php endforeach;?> - </select> - </p> - - <p> - <label for="mail_from_address"><?php p($l->t( 'From address' )); ?></label> - <input type="text" name='mail_from_address' id="mail_from_address" placeholder="<?php p($l->t('mail'))?>" - value='<?php p($_['mail_from_address']) ?>' />@ - <input type="text" name='mail_domain' id="mail_domain" placeholder="example.com" - value='<?php p($_['mail_domain']) ?>' /> - </p> - - <p id="setting_smtpauth" <?php if ($_['mail_smtpmode'] != 'smtp') print_unescaped(' class="hidden"'); ?>> - <label for="mail_smtpauthtype"><?php p($l->t( 'Authentication method' )); ?></label> - <select name='mail_smtpauthtype' id='mail_smtpauthtype'> - <?php foreach ($mail_smtpauthtype as $authtype => $name): - $selected = ''; - if ($authtype == $_['mail_smtpauthtype']): - $selected = 'selected="selected"'; - endif; ?> - <option value='<?php p($authtype)?>' <?php p($selected) ?>><?php p($name) ?></option> - <?php endforeach;?> - </select> - - <input type="checkbox" name="mail_smtpauth" id="mail_smtpauth" class="checkbox" value="1" - <?php if ($_['mail_smtpauth']) print_unescaped('checked="checked"'); ?> /> - <label for="mail_smtpauth"><?php p($l->t( 'Authentication required' )); ?></label> - </p> - - <p id="setting_smtphost" <?php if ($_['mail_smtpmode'] != 'smtp') print_unescaped(' class="hidden"'); ?>> - <label for="mail_smtphost"><?php p($l->t( 'Server address' )); ?></label> - <input type="text" name='mail_smtphost' id="mail_smtphost" placeholder="smtp.example.com" - value='<?php p($_['mail_smtphost']) ?>' /> - : - <input type="text" name='mail_smtpport' id="mail_smtpport" placeholder="<?php p($l->t('Port'))?>" - value='<?php p($_['mail_smtpport']) ?>' /> - </p> - </form> - <form class="mail_settings" id="mail_credentials_settings"> - <p id="mail_credentials" <?php if (!$_['mail_smtpauth'] || $_['mail_smtpmode'] != 'smtp') print_unescaped(' class="hidden"'); ?>> - <label for="mail_smtpname"><?php p($l->t( 'Credentials' )); ?></label> - <input type="text" name='mail_smtpname' id="mail_smtpname" placeholder="<?php p($l->t('SMTP Username'))?>" - value='<?php p($_['mail_smtpname']) ?>' /> - <input type="password" name='mail_smtppassword' id="mail_smtppassword" autocomplete="off" - placeholder="<?php p($l->t('SMTP Password'))?>" value='<?php p($_['mail_smtppassword']) ?>' /> - <input id="mail_credentials_settings_submit" type="button" value="<?php p($l->t('Store credentials')) ?>"> - </p> - </form> - - <br /> - <em><?php p($l->t( 'Test email settings' )); ?></em> - <input type="submit" name="sendtestemail" id="sendtestemail" value="<?php p($l->t( 'Send email' )); ?>"/> - <span id="sendtestmail_msg" class="msg"></span> -</div> - -<div class="section" id="log-section"> - <h2><?php p($l->t('Log'));?></h2> -<?php if ($_['showLog'] && $_['doesLogFileExist']): ?> - <table id="log" class="grid"> - <?php foreach ($_['entries'] as $entry): ?> - <tr> - <td> - <?php p($levels[$entry->level]);?> - </td> - <td> - <?php p($entry->app);?> - </td> - <td class="log-message"> - <?php p($entry->message);?> - </td> - <td class="date"> - <?php if(is_int($entry->time)){ - p(OC_Util::formatDate($entry->time)); - } else { - p($entry->time); - }?> - </td> - <td><?php isset($entry->user) ? p($entry->user) : p('--') ?></td> - </tr> - <?php endforeach;?> - </table> - <p><?php p($l->t('What to log'));?> <select name='loglevel' id='loglevel'> - <?php for ($i = 0; $i < 5; $i++): - $selected = ''; - if ($i == $_['loglevel']): - $selected = 'selected="selected"'; - endif; ?> - <option value='<?php p($i)?>' <?php p($selected) ?>><?php p($levelLabels[$i])?></option> - <?php endfor;?> - </select></p> - - <?php if ($_['logFileSize'] > 0): ?> - <a href="<?php print_unescaped(OC::$server->getURLGenerator()->linkToRoute('settings.LogSettings.download')); ?>" class="button" id="downloadLog"><?php p($l->t('Download logfile'));?></a> - <?php endif; ?> - <?php if ($_['entriesremain']): ?> - <input id="moreLog" type="button" value="<?php p($l->t('More'));?>..."> - <input id="lessLog" type="button" value="<?php p($l->t('Less'));?>..."> - <?php endif; ?> - <?php if ($_['logFileSize'] > (100 * 1024 * 1024)): ?> - <br> - <em> - <?php p($l->t('The logfile is bigger than 100 MB. Downloading it may take some time!')); ?> - </em> - <?php endif; ?> - <?php endif; ?> -</div> - -<div class="section" id="admin-tips"> - <h2><?php p($l->t('Tips & tricks'));?></h2> - <ul> - <?php - // SQLite database performance issue - if ($_['databaseOverload']) { - ?> - <li> - <?php p($l->t('SQLite is used as database. For larger installations we recommend to switch to a different database backend.')); ?><br> - <?php p($l->t('Especially when using the desktop client for file syncing the use of SQLite is discouraged.')); ?><br> - <?php print_unescaped($l->t('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>.', link_to_docs('admin-db-conversion') )); ?> - </li> - <?php } ?> - <li><a target="_blank" rel="noreferrer" href="<?php p(link_to_docs('admin-backup')); ?>"><?php p($l->t('How to do backups'));?> ↗</a></li> - <li><a target="_blank" rel="noreferrer" href="<?php p(link_to_docs('admin-monitoring')); ?>"><?php p($l->t('Advanced monitoring'));?> ↗</a></li> - <li><a target="_blank" rel="noreferrer" href="<?php p(link_to_docs('admin-performance')); ?>"><?php p($l->t('Performance tuning'));?> ↗</a></li> - <li><a target="_blank" rel="noreferrer" href="<?php p(link_to_docs('admin-config')); ?>"><?php p($l->t('Improving the config.php'));?> ↗</a></li> - <li><a target="_blank" rel="noreferrer" href="<?php p(link_to_docs('developer-theming')); ?>"><?php p($l->t('Theming'));?> ↗</a></li> - <li><a target="_blank" rel="noreferrer" href="<?php p(link_to_docs('admin-security')); ?>"><?php p($l->t('Hardening and security guidance'));?> ↗</a></li> - </ul> -</div> - -<?php if (!empty($_['updaterAppPanel'])): ?> - <div id="updater"><?php print_unescaped($_['updaterAppPanel']); ?></div> -<?php endif; ?> - -<div class="section"> - <h2><?php p($l->t('Version'));?></h2> - <p><a href="<?php print_unescaped($theme->getBaseUrl()); ?>" rel="noreferrer" target="_blank"><?php p($theme->getTitle()); ?></a> <?php p(OC_Util::getHumanVersion()) ?></p> - <p><?php include('settings.development.notice.php'); ?></p> -</div> - - - - -</div> diff --git a/settings/templates/admin/additional-mail.php b/settings/templates/admin/additional-mail.php new file mode 100644 index 00000000000..88eec421ec5 --- /dev/null +++ b/settings/templates/admin/additional-mail.php @@ -0,0 +1,140 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +/** @var \OCP\IL10N $l */ +/** @var array $_ */ + +$mail_smtpauthtype = [ + '' => $l->t('None'), + 'LOGIN' => $l->t('Login'), + 'PLAIN' => $l->t('Plain'), + 'NTLM' => $l->t('NT LAN Manager'), +]; + +$mail_smtpsecure = [ + '' => $l->t('None'), + 'ssl' => $l->t('SSL'), + 'tls' => $l->t('TLS'), +]; + +$mail_smtpmode = [ + ['php', 'PHP'], + ['smtp', 'SMTP'], +]; +if ($_['sendmail_is_available']) { + $mail_smtpmode[] = ['sendmail', 'Sendmail']; +} +if ($_['mail_smtpmode'] == 'qmail') { + $mail_smtpmode[] = ['qmail', 'qmail']; +} + +?> + +<div class="section" id="mail_general_settings"> + <form id="mail_general_settings_form" class="mail_settings"> + <h2><?php p($l->t('Email server'));?></h2> + <a target="_blank" rel="noreferrer" class="icon-info" + title="<?php p($l->t('Open documentation'));?>" + href="<?php p(link_to_docs('admin-email')); ?>"></a> + + <p><?php p($l->t('This is used for sending out notifications.')); ?> <span id="mail_settings_msg" class="msg"></span></p> + + <p> + <label for="mail_smtpmode"><?php p($l->t( 'Send mode' )); ?></label> + <select name='mail_smtpmode' id='mail_smtpmode'> + <?php foreach ($mail_smtpmode as $smtpmode): + $selected = ''; + if ($smtpmode[0] == $_['mail_smtpmode']): + $selected = 'selected="selected"'; + endif; ?> + <option value='<?php p($smtpmode[0])?>' <?php p($selected) ?>><?php p($smtpmode[1]) ?></option> + <?php endforeach;?> + </select> + + <label id="mail_smtpsecure_label" for="mail_smtpsecure" + <?php if ($_['mail_smtpmode'] != 'smtp') print_unescaped(' class="hidden"'); ?>> + <?php p($l->t( 'Encryption' )); ?> + </label> + <select name="mail_smtpsecure" id="mail_smtpsecure" + <?php if ($_['mail_smtpmode'] != 'smtp') print_unescaped(' class="hidden"'); ?>> + <?php foreach ($mail_smtpsecure as $secure => $name): + $selected = ''; + if ($secure == $_['mail_smtpsecure']): + $selected = 'selected="selected"'; + endif; ?> + <option value='<?php p($secure)?>' <?php p($selected) ?>><?php p($name) ?></option> + <?php endforeach;?> + </select> + </p> + + <p> + <label for="mail_from_address"><?php p($l->t( 'From address' )); ?></label> + <input type="text" name='mail_from_address' id="mail_from_address" placeholder="<?php p($l->t('mail'))?>" + value='<?php p($_['mail_from_address']) ?>' />@ + <input type="text" name='mail_domain' id="mail_domain" placeholder="example.com" + value='<?php p($_['mail_domain']) ?>' /> + </p> + + <p id="setting_smtpauth" <?php if ($_['mail_smtpmode'] != 'smtp') print_unescaped(' class="hidden"'); ?>> + <label for="mail_smtpauthtype"><?php p($l->t( 'Authentication method' )); ?></label> + <select name='mail_smtpauthtype' id='mail_smtpauthtype'> + <?php foreach ($mail_smtpauthtype as $authtype => $name): + $selected = ''; + if ($authtype == $_['mail_smtpauthtype']): + $selected = 'selected="selected"'; + endif; ?> + <option value='<?php p($authtype)?>' <?php p($selected) ?>><?php p($name) ?></option> + <?php endforeach;?> + </select> + + <input type="checkbox" name="mail_smtpauth" id="mail_smtpauth" class="checkbox" value="1" + <?php if ($_['mail_smtpauth']) print_unescaped('checked="checked"'); ?> /> + <label for="mail_smtpauth"><?php p($l->t( 'Authentication required' )); ?></label> + </p> + + <p id="setting_smtphost" <?php if ($_['mail_smtpmode'] != 'smtp') print_unescaped(' class="hidden"'); ?>> + <label for="mail_smtphost"><?php p($l->t( 'Server address' )); ?></label> + <input type="text" name='mail_smtphost' id="mail_smtphost" placeholder="smtp.example.com" + value='<?php p($_['mail_smtphost']) ?>' /> + : + <input type="text" name='mail_smtpport' id="mail_smtpport" placeholder="<?php p($l->t('Port'))?>" + value='<?php p($_['mail_smtpport']) ?>' /> + </p> + </form> + <form class="mail_settings" id="mail_credentials_settings"> + <p id="mail_credentials" <?php if (!$_['mail_smtpauth'] || $_['mail_smtpmode'] != 'smtp') print_unescaped(' class="hidden"'); ?>> + <label for="mail_smtpname"><?php p($l->t( 'Credentials' )); ?></label> + <input type="text" name='mail_smtpname' id="mail_smtpname" placeholder="<?php p($l->t('SMTP Username'))?>" + value='<?php p($_['mail_smtpname']) ?>' /> + <input type="password" name='mail_smtppassword' id="mail_smtppassword" autocomplete="off" + placeholder="<?php p($l->t('SMTP Password'))?>" value='<?php p($_['mail_smtppassword']) ?>' /> + <input id="mail_credentials_settings_submit" type="button" value="<?php p($l->t('Store credentials')) ?>"> + </p> + </form> + + <br /> + <em><?php p($l->t( 'Test email settings' )); ?></em> + <input type="submit" name="sendtestemail" id="sendtestemail" value="<?php p($l->t( 'Send email' )); ?>"/> + <span id="sendtestmail_msg" class="msg"></span> +</div> + diff --git a/apps/systemtags/admin.php b/settings/templates/admin/additional.php index 45ea577e8ab..2ad2c5af4e5 100644 --- a/apps/systemtags/admin.php +++ b/settings/templates/admin/additional.php @@ -1,6 +1,8 @@ <?php /** - * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> * * @license GNU AGPL version 3 or any later version * @@ -19,5 +21,13 @@ * */ -$template = new \OCP\Template('systemtags', 'admin'); -return $template->fetchPage(); +/** @var \OCP\IL10N $l */ +/** @var array $_ */ + +?> + +<?php foreach($_['forms'] as $form) { + if (isset($form['form'])) {?> + <div id="<?php isset($form['anchor']) ? p($form['anchor']) : p('');?>"><?php print_unescaped($form['form']);?></div> + <?php } +};?> diff --git a/settings/templates/admin/encryption.php b/settings/templates/admin/encryption.php new file mode 100644 index 00000000000..4b6d9045689 --- /dev/null +++ b/settings/templates/admin/encryption.php @@ -0,0 +1,90 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +/** @var \OCP\IL10N $l */ +/** @var array $_ */ + +?> + +<div class="section" id='encryptionAPI'> + <h2><?php p($l->t('Server-side encryption')); ?></h2> + <a target="_blank" rel="noreferrer" class="icon-info" + title="<?php p($l->t('Open documentation'));?>" + href="<?php p(link_to_docs('admin-encryption')); ?>"></a> + + <p id="enable"> + <input type="checkbox" + id="enableEncryption" class="checkbox" + value="1" <?php if ($_['encryptionEnabled']) print_unescaped('checked="checked" disabled="disabled"'); ?> /> + <label + for="enableEncryption"><?php p($l->t('Enable server-side encryption')); ?> <span id="startmigration_msg" class="msg"></span> </label><br/> + </p> + + <div id="EncryptionWarning" class="warning hidden"> + <p><?php p($l->t('Please read carefully before activating server-side encryption: ')); ?></p> + <ul> + <li><?php p($l->t('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.')); ?></li> + <li><?php p($l->t('Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases.')); ?></li> + <li><?php p($l->t('Be aware that encryption always increases the file size.')); ?></li> + <li><?php p($l->t('It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data.')); ?></li> + </ul> + + <p><?php p($l->t('This is the final warning: Do you really want to enable encryption?')) ?> <input type="button" + id="reallyEnableEncryption" + value="<?php p($l->t("Enable encryption")); ?>" /></p> + </div> + + <div id="EncryptionSettingsArea" class="<?php if (!$_['encryptionEnabled']) p('hidden'); ?>"> + <div id='selectEncryptionModules' class="<?php if (!$_['encryptionReady']) p('hidden'); ?>"> + <?php + if (empty($_['encryptionModules'])) { + p($l->t('No encryption module loaded, please enable an encryption module in the app menu.')); + } else { ?> + <h3><?php p($l->t('Select default encryption module:')) ?></h3> + <fieldset id='encryptionModules'> + <?php foreach ($_['encryptionModules'] as $id => $module): ?> + <input type="radio" id="<?php p($id) ?>" + name="default_encryption_module" + value="<?php p($id) ?>" + <?php if ($module['default']) { + p('checked'); + } ?>> + <label + for="<?php p($id) ?>"><?php p($module['displayName']) ?></label> + <br/> + <?php endforeach; ?> + </fieldset> + <?php } ?> + </div> + <div id="migrationWarning" class="<?php if ($_['encryptionReady']) p('hidden'); ?>"> + <?php + if ($_['encryptionReady'] === false && $_['externalBackendsEnabled'] === true) { + p($l->t('You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the "Default encryption module" and run \'occ encryption:migrate\'')); + } elseif ($_['encryptionReady'] === false && $_['externalBackendsEnabled'] === false) { + p($l->t('You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one.')); ?> + <input type="submit" name="startmigration" id="startmigration" + value="<?php p($l->t('Start migration')); ?>"/> + <?php } ?> + </div> + </div> +</div> diff --git a/settings/templates/admin/frame.php b/settings/templates/admin/frame.php new file mode 100644 index 00000000000..1d9f6dc7a78 --- /dev/null +++ b/settings/templates/admin/frame.php @@ -0,0 +1,48 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +style('settings', 'settings'); +script('settings', [ 'settings', 'admin', 'log', 'certificates'] ); +script('core', ['multiselect', 'setupchecks']); +script('files', 'jquery.fileupload'); +vendor_script('select2/select2'); +vendor_style('select2/select2'); + +?> + +<div id="app-navigation"> + <ul> + <?php foreach($_['forms'] as $form) { + if (isset($form['anchor'])) { + $anchor = \OC::$server->getURLGenerator()->linkToRoute('settings.AdminSettings.index', ['section' => $form['anchor']]); + $sectionName = $form['section-name']; + $active = $form['active'] ? ' class="active"' : ''; + print_unescaped(sprintf("<li%s><a href='%s'>%s</a></li>", $active, \OCP\Util::sanitizeHTML($anchor), \OCP\Util::sanitizeHTML($sectionName))); + } + }?> + </ul> +</div> + +<div id="app-content"> + <?php print_unescaped($_['content']); ?> +</div> diff --git a/settings/templates/admin/logging.php b/settings/templates/admin/logging.php new file mode 100644 index 00000000000..2f60629c42a --- /dev/null +++ b/settings/templates/admin/logging.php @@ -0,0 +1,88 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +/** @var \OCP\IL10N $l */ +/** @var array $_ */ + +$levels = ['Debug', 'Info', 'Warning', 'Error', 'Fatal']; +$levelLabels = [ + $l->t( 'Everything (fatal issues, errors, warnings, info, debug)' ), + $l->t( 'Info, warnings, errors and fatal issues' ), + $l->t( 'Warnings, errors and fatal issues' ), + $l->t( 'Errors and fatal issues' ), + $l->t( 'Fatal issues only' ), +]; + +?> + +<div class="section" id="log-section"> + <h2><?php p($l->t('Log'));?></h2> + <?php if ($_['showLog'] && $_['doesLogFileExist']): ?> + <table id="log" class="grid"> + <?php foreach ($_['entries'] as $entry): ?> + <tr> + <td> + <?php p($levels[$entry->level]);?> + </td> + <td> + <?php p($entry->app);?> + </td> + <td class="log-message"> + <?php p($entry->message);?> + </td> + <td class="date"> + <?php if(is_int($entry->time)){ + p(OC_Util::formatDate($entry->time)); + } else { + p($entry->time); + }?> + </td> + <td><?php isset($entry->user) ? p($entry->user) : p('--') ?></td> + </tr> + <?php endforeach;?> + </table> + <p><?php p($l->t('What to log'));?> <select name='loglevel' id='loglevel'> + <?php for ($i = 0; $i < 5; $i++): + $selected = ''; + if ($i == $_['loglevel']): + $selected = 'selected="selected"'; + endif; ?> + <option value='<?php p($i)?>' <?php p($selected) ?>><?php p($levelLabels[$i])?></option> + <?php endfor;?> + </select></p> + + <?php if ($_['logFileSize'] > 0): ?> + <a href="<?php print_unescaped(OC::$server->getURLGenerator()->linkToRoute('settings.LogSettings.download')); ?>" class="button" id="downloadLog"><?php p($l->t('Download logfile'));?></a> + <?php endif; ?> + <?php if ($_['entriesremain']): ?> + <input id="moreLog" type="button" value="<?php p($l->t('More'));?>..."> + <input id="lessLog" type="button" value="<?php p($l->t('Less'));?>..."> + <?php endif; ?> + <?php if ($_['logFileSize'] > (100 * 1024 * 1024)): ?> + <br> + <em> + <?php p($l->t('The logfile is bigger than 100 MB. Downloading it may take some time!')); ?> + </em> + <?php endif; ?> + <?php endif; ?> +</div> diff --git a/settings/templates/admin/server.php b/settings/templates/admin/server.php new file mode 100644 index 00000000000..02d247e1b18 --- /dev/null +++ b/settings/templates/admin/server.php @@ -0,0 +1,215 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +/** @var \OCP\IL10N $l */ +/** @var array $_ */ + +?> + +<div id="security-warning" class="section"> + <h2><?php p($l->t('Security & setup warnings'));?></h2> + <ul> + <?php + // is php setup properly to query system environment variables like getenv('PATH') + if ($_['getenvServerNotWorking']) { + ?> + <li> + <?php p($l->t('php does not seem to be setup properly to query system environment variables. The test with getenv("PATH") only returns an empty response.')); ?><br> + <?php print_unescaped($l->t('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.', link_to_docs('admin-php-fpm'))); ?> + </li> + <?php + } + + // is read only config enabled + if ($_['readOnlyConfigEnabled']) { + ?> + <li> + <?php p($l->t('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.')); ?> + </li> + <?php + } + + // Are doc blocks accessible? + if (!$_['isAnnotationsWorking']) { + ?> + <li> + <?php p($l->t('PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible.')); ?><br> + <?php p($l->t('This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator.')); ?> + </li> + <?php + } + + // Is the Transaction isolation level READ_COMMITTED? + if ($_['invalidTransactionIsolationLevel']) { + ?> + <li> + <?php p($l->t('Your database does not run with "READ COMMITTED" transaction isolation level. This can cause problems when multiple actions are executed in parallel.')); ?> + </li> + <?php + } + + // Warning if memcache is outdated + foreach ($_['OutdatedCacheWarning'] as $php_module => $data) { + ?> + <li> + <?php p($l->t('%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version.', $data)); ?> + </li> + <?php + } + + // if module fileinfo available? + if (!$_['has_fileinfo']) { + ?> + <li> + <?php p($l->t('The PHP module \'fileinfo\' is missing. We strongly recommend to enable this module to get best results with mime-type detection.')); ?> + </li> + <?php + } + + // locking configured optimally? + if ($_['fileLockingType'] === 'none') { + ?> + <li> + <?php print_unescaped($l->t('Transactional file locking is disabled, this might lead to issues with race conditions. Enable \'filelocking.enabled\' in config.php to avoid these problems. See the <a target="_blank" rel="noreferrer" href="%s">documentation ↗</a> for more information.', link_to_docs('admin-transactional-locking'))); ?> + </li> + <?php + } + + // is locale working ? + if (!$_['isLocaleWorking']) { + ?> + <li> + <?php + $locales = 'en_US.UTF-8/fr_FR.UTF-8/es_ES.UTF-8/de_DE.UTF-8/ru_RU.UTF-8/pt_BR.UTF-8/it_IT.UTF-8/ja_JP.UTF-8/zh_CN.UTF-8'; + p($l->t('System locale can not be set to a one which supports UTF-8.')); + ?> + <br> + <?php + p($l->t('This means that there might be problems with certain characters in file names.')); + ?> + <br> + <?php + p($l->t('We strongly suggest installing the required packages on your system to support one of the following locales: %s.', [$locales])); + ?> + </li> + <?php + } + + if ($_['suggestedOverwriteCliUrl']) { + ?> + <li> + <?php p($l->t('If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the "overwrite.cli.url" option in your config.php file to the webroot path of your installation (Suggested: "%s")', $_['suggestedOverwriteCliUrl'])); ?> + </li> + <?php + } + + if ($_['cronErrors']) { + ?> + <li> + <?php p($l->t('It was not possible to execute the cronjob via CLI. The following technical errors have appeared:')); ?> + <br> + <ol> + <?php foreach(json_decode($_['cronErrors']) as $error) { if(isset($error->error)) {?> + <li><?php p($error->error) ?> <?php p($error->hint) ?></li> + <?php }};?> + </ol> + </li> + <?php + } + ?> + </ul> + + <div id="postsetupchecks" data-check-wellknown="<?php if($_['checkForWorkingWellKnownSetup']) { p('true'); } else { p('false'); } ?>"> + <div class="loading"></div> + <ul class="errors hidden"></ul> + <ul class="warnings hidden"></ul> + <ul class="info hidden"></ul> + <p class="hint hidden"> + <?php print_unescaped($l->t('Please double check the <a target="_blank" rel="noreferrer" href="%s">installation guides ↗</a>, and check for any errors or warnings in the <a href="%s">log</a>.', [link_to_docs('admin-install'), \OC::$server->getURLGenerator()->linkToRoute('settings.AdminSettings.index', ['section' => 'logging'])] )); ?> + </p> + </div> + <div id="security-warning-state"> + <span class="hidden icon-checkmark"><?php p($l->t('All checks passed.'));?></span> + </div> +</div> + +<div class="section" id="backgroundjobs"> + <h2 class="inlineblock"><?php p($l->t('Cron'));?></h2> + <?php if ($_['cron_log']): ?> + <p class="cronlog inlineblock"> + <?php if ($_['lastcron'] !== false): + $relative_time = relative_modified_date($_['lastcron']); + $absolute_time = OC_Util::formatDate($_['lastcron']); + if (time() - $_['lastcron'] <= 3600): ?> + <span class="status success"></span> + <span class="crondate" title="<?php p($absolute_time);?>"> + <?php p($l->t("Last cron job execution: %s.", [$relative_time]));?> + </span> + <?php else: ?> + <span class="status error"></span> + <span class="crondate" title="<?php p($absolute_time);?>"> + <?php p($l->t("Last cron job execution: %s. Something seems wrong.", [$relative_time]));?> + </span> + <?php endif; + else: ?> + <span class="status error"></span> + <?php p($l->t("Cron was not executed yet!")); + endif; ?> + </p> + <?php endif; ?> + <a target="_blank" rel="noreferrer" class="icon-info" + title="<?php p($l->t('Open documentation'));?>" + href="<?php p(link_to_docs('admin-background-jobs')); ?>"></a> + + <p> + <input type="radio" name="mode" value="ajax" class="radio" + id="backgroundjobs_ajax" <?php if ($_['backgroundjobs_mode'] === "ajax") { + print_unescaped('checked="checked"'); + } ?>> + <label for="backgroundjobs_ajax">AJAX</label><br/> + <em><?php p($l->t("Execute one task with each page loaded")); ?></em> + </p> + <p> + <input type="radio" name="mode" value="webcron" class="radio" + id="backgroundjobs_webcron" <?php if ($_['backgroundjobs_mode'] === "webcron") { + print_unescaped('checked="checked"'); + } ?>> + <label for="backgroundjobs_webcron">Webcron</label><br/> + <em><?php p($l->t("cron.php is registered at a webcron service to call cron.php every 15 minutes over http.")); ?></em> + </p> + <p> + <input type="radio" name="mode" value="cron" class="radio" + id="backgroundjobs_cron" <?php if ($_['backgroundjobs_mode'] === "cron") { + print_unescaped('checked="checked"'); + } ?>> + <label for="backgroundjobs_cron">Cron</label><br/> + <em><?php p($l->t("Use system's cron service to call the cron.php file every 15 minutes.")); ?></em> + </p> +</div> + +<div class="section"> + <!-- should be the last part, so Updater can follow if enabled (it has no heading therefore). --> + <h2><?php p($l->t('Version'));?></h2> + <p><a href="<?php print_unescaped($theme->getBaseUrl()); ?>" rel="noreferrer" target="_blank"><?php p($theme->getTitle()); ?></a> <?php p(OC_Util::getHumanVersion()) ?></p> + <p><?php include(__DIR__ . '/../settings.development.notice.php'); ?></p> +</div> diff --git a/settings/templates/admin/sharing.php b/settings/templates/admin/sharing.php new file mode 100644 index 00000000000..b8f8e920246 --- /dev/null +++ b/settings/templates/admin/sharing.php @@ -0,0 +1,107 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +/** @var \OCP\IL10N $l */ +/** @var array $_ */ + +?> + +<div class="section" id="shareAPI"> + <h2><?php p($l->t('Sharing'));?></h2> + <a target="_blank" rel="noreferrer" class="icon-info" + title="<?php p($l->t('Open documentation'));?>" + href="<?php p(link_to_docs('admin-sharing')); ?>"></a> + <p id="enable"> + <input type="checkbox" name="shareapi_enabled" id="shareAPIEnabled" class="checkbox" + value="1" <?php if ($_['shareAPIEnabled'] === 'yes') print_unescaped('checked="checked"'); ?> /> + <label for="shareAPIEnabled"><?php p($l->t('Allow apps to use the Share API'));?></label><br/> + </p> + <p class="<?php if ($_['shareAPIEnabled'] === 'no') p('hidden');?>"> + <input type="checkbox" name="shareapi_allow_links" id="allowLinks" class="checkbox" + value="1" <?php if ($_['allowLinks'] === 'yes') print_unescaped('checked="checked"'); ?> /> + <label for="allowLinks"><?php p($l->t('Allow users to share via link'));?></label><br/> + </p> + + <p id="publicLinkSettings" class="indent <?php if ($_['allowLinks'] !== 'yes' || $_['shareAPIEnabled'] === 'no') p('hidden'); ?>"> + <input type="checkbox" name="shareapi_allow_public_upload" id="allowPublicUpload" class="checkbox" + value="1" <?php if ($_['allowPublicUpload'] == 'yes') print_unescaped('checked="checked"'); ?> /> + <label for="allowPublicUpload"><?php p($l->t('Allow public uploads'));?></label><br/> + + <input type="checkbox" name="shareapi_enforce_links_password" id="enforceLinkPassword" class="checkbox" + value="1" <?php if ($_['enforceLinkPassword']) print_unescaped('checked="checked"'); ?> /> + <label for="enforceLinkPassword"><?php p($l->t('Enforce password protection'));?></label><br/> + + <input type="checkbox" name="shareapi_default_expire_date" id="shareapiDefaultExpireDate" class="checkbox" + value="1" <?php if ($_['shareDefaultExpireDateSet'] === 'yes') print_unescaped('checked="checked"'); ?> /> + <label for="shareapiDefaultExpireDate"><?php p($l->t('Set default expiration date'));?></label><br/> + + <input type="checkbox" name="shareapi_allow_public_notification" id="allowPublicMailNotification" class="checkbox" + value="1" <?php if ($_['allowPublicMailNotification'] == 'yes') print_unescaped('checked="checked"'); ?> /> + <label for="allowPublicMailNotification"><?php p($l->t('Allow users to send mail notification for shared files'));?></label><br/> + + </p> + <p id="setDefaultExpireDate" class="double-indent <?php if ($_['allowLinks'] !== 'yes' || $_['shareDefaultExpireDateSet'] === 'no' || $_['shareAPIEnabled'] === 'no') p('hidden');?>"> + <?php p($l->t( 'Expire after ' )); ?> + <input type="text" name='shareapi_expire_after_n_days' id="shareapiExpireAfterNDays" placeholder="<?php p('7')?>" + value='<?php p($_['shareExpireAfterNDays']) ?>' /> + <?php p($l->t( 'days' )); ?> + <input type="checkbox" name="shareapi_enforce_expire_date" id="shareapiEnforceExpireDate" class="checkbox" + value="1" <?php if ($_['shareEnforceExpireDate'] === 'yes') print_unescaped('checked="checked"'); ?> /> + <label for="shareapiEnforceExpireDate"><?php p($l->t('Enforce expiration date'));?></label><br/> + </p> + <p class="<?php if ($_['shareAPIEnabled'] === 'no') p('hidden');?>"> + <input type="checkbox" name="shareapi_allow_resharing" id="allowResharing" class="checkbox" + value="1" <?php if ($_['allowResharing'] === 'yes') print_unescaped('checked="checked"'); ?> /> + <label for="allowResharing"><?php p($l->t('Allow resharing'));?></label><br/> + </p> + <p class="<?php if ($_['shareAPIEnabled'] === 'no') p('hidden');?>"> + <input type="checkbox" name="shareapi_allow_group_sharing" id="allowGroupSharing" class="checkbox" + value="1" <?php if ($_['allowGroupSharing'] === 'yes') print_unescaped('checked="checked"'); ?> /> + <label for="allowGroupSharing"><?php p($l->t('Allow sharing with groups'));?></label><br /> + </p> + <p class="<?php if ($_['shareAPIEnabled'] === 'no') p('hidden');?>"> + <input type="checkbox" name="shareapi_only_share_with_group_members" id="onlyShareWithGroupMembers" class="checkbox" + value="1" <?php if ($_['onlyShareWithGroupMembers']) print_unescaped('checked="checked"'); ?> /> + <label for="onlyShareWithGroupMembers"><?php p($l->t('Restrict users to only share with users in their groups'));?></label><br/> + </p> + <p class="<?php if ($_['shareAPIEnabled'] === 'no') p('hidden');?>"> + <input type="checkbox" name="shareapi_allow_mail_notification" id="allowMailNotification" class="checkbox" + value="1" <?php if ($_['allowMailNotification'] === 'yes') print_unescaped('checked="checked"'); ?> /> + <label for="allowMailNotification"><?php p($l->t('Allow users to send mail notification for shared files to other users'));?></label><br/> + </p> + <p class="<?php if ($_['shareAPIEnabled'] === 'no') p('hidden');?>"> + <input type="checkbox" name="shareapi_exclude_groups" id="shareapiExcludeGroups" class="checkbox" + value="1" <?php if ($_['shareExcludeGroups']) print_unescaped('checked="checked"'); ?> /> + <label for="shareapiExcludeGroups"><?php p($l->t('Exclude groups from sharing'));?></label><br/> + </p> + <p id="selectExcludedGroups" class="indent <?php if (!$_['shareExcludeGroups'] || $_['shareAPIEnabled'] === 'no') p('hidden'); ?>"> + <input name="shareapi_exclude_groups_list" type="hidden" id="excludedGroups" value="<?php p($_['shareExcludedGroupsList']) ?>" style="width: 400px"/> + <br /> + <em><?php p($l->t('These groups will still be able to receive shares, but not to initiate them.')); ?></em> + </p> + <p class="<?php if ($_['shareAPIEnabled'] === 'no') p('hidden');?>"> + <input type="checkbox" name="shareapi_allow_share_dialog_user_enumeration" value="1" id="shareapi_allow_share_dialog_user_enumeration" class="checkbox" + <?php if ($_['allowShareDialogUserEnumeration'] === 'yes') print_unescaped('checked="checked"'); ?> /> + <label for="shareapi_allow_share_dialog_user_enumeration"><?php p($l->t('Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered.'));?></label><br /> + </p> +</div> diff --git a/settings/templates/admin/tipstricks.php b/settings/templates/admin/tipstricks.php new file mode 100644 index 00000000000..e924a96dead --- /dev/null +++ b/settings/templates/admin/tipstricks.php @@ -0,0 +1,49 @@ +<?php +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +/** @var \OCP\IL10N $l */ +/** @var array $_ */ + +?> + +<div class="section" id="admin-tips"> + <h2><?php p($l->t('Tips & tricks'));?></h2> + <ul> + <?php + // SQLite database performance issue + if ($_['databaseOverload']) { + ?> + <li> + <?php p($l->t('SQLite is used as database. For larger installations we recommend to switch to a different database backend.')); ?><br> + <?php p($l->t('Especially when using the desktop client for file syncing the use of SQLite is discouraged.')); ?><br> + <?php print_unescaped($l->t('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>.', link_to_docs('admin-db-conversion') )); ?> + </li> + <?php } ?> + <li><a target="_blank" rel="noreferrer" href="<?php p(link_to_docs('admin-backup')); ?>"><?php p($l->t('How to do backups'));?> ↗</a></li> + <li><a target="_blank" rel="noreferrer" href="<?php p(link_to_docs('admin-monitoring')); ?>"><?php p($l->t('Advanced monitoring'));?> ↗</a></li> + <li><a target="_blank" rel="noreferrer" href="<?php p(link_to_docs('admin-performance')); ?>"><?php p($l->t('Performance tuning'));?> ↗</a></li> + <li><a target="_blank" rel="noreferrer" href="<?php p(link_to_docs('admin-config')); ?>"><?php p($l->t('Improving the config.php'));?> ↗</a></li> + <li><a target="_blank" rel="noreferrer" href="<?php p(link_to_docs('developer-theming')); ?>"><?php p($l->t('Theming'));?> ↗</a></li> + <li><a target="_blank" rel="noreferrer" href="<?php p(link_to_docs('admin-security')); ?>"><?php p($l->t('Hardening and security guidance'));?> ↗</a></li> + </ul> +</div> diff --git a/settings/templates/apps.php b/settings/templates/apps.php index be8a911c1aa..ea62acd9945 100644 --- a/settings/templates/apps.php +++ b/settings/templates/apps.php @@ -180,6 +180,9 @@ script( </div> </div> <div id="app-content"> + <svg height="0"> + <defs><filter id="invertIcon"><feColorMatrix in="SourceGraphic" type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0"></feColorMatrix></filter></defs> + </svg> <div id="apps-list" class="icon-loading"></div> <div id="apps-list-empty" class="hidden emptycontent emptycontent-search"> <div class="icon-search"></div> diff --git a/settings/templates/personal.php b/settings/templates/personal.php index 890bfd1bbeb..a3ea87a89c6 100644 --- a/settings/templates/personal.php +++ b/settings/templates/personal.php @@ -125,7 +125,7 @@ if($_['passwordChangeSupported']) { placeholder="<?php echo $l->t('Current password');?>" autocomplete="off" autocapitalize="off" autocorrect="off" /> <label for="pass2" class="hidden-visually"><?php echo $l->t('New password');?>: </label> - <input type="password" id="pass2" name="personal-password" + <input type="password" id="pass2" name="newpassword" placeholder="<?php echo $l->t('New password');?>" data-typetoggle="#personal-show" autocomplete="off" autocapitalize="off" autocorrect="off" /> @@ -165,6 +165,38 @@ if($_['passwordChangeSupported']) { <?php endif; ?> </form> + +<div id="clientsbox" class="section clientsbox"> + <h2><?php p($l->t('Get the apps to sync your files'));?></h2> + <a href="<?php p($_['clients']['desktop']); ?>" rel="noreferrer" target="_blank"> + <img src="<?php print_unescaped(image_path('core', 'desktopapp.svg')); ?>" + alt="<?php p($l->t('Desktop client'));?>" /> + </a> + <a href="<?php p($_['clients']['android']); ?>" rel="noreferrer" target="_blank"> + <img src="<?php print_unescaped(image_path('core', 'googleplay.png')); ?>" + alt="<?php p($l->t('Android app'));?>" /> + </a> + <a href="<?php p($_['clients']['ios']); ?>" rel="noreferrer" target="_blank"> + <img src="<?php print_unescaped(image_path('core', 'appstore.svg')); ?>" + alt="<?php p($l->t('iOS app'));?>" /> + </a> + + <?php if (OC_Util::getEditionString() === ''): ?> + <p> + <?php print_unescaped($l->t('If you want to support the project + <a href="https://nextcloud.com/contribute" + target="_blank" rel="noreferrer">join development</a> + or + <a href="https://nextcloud.com/contribute" + target="_blank" rel="noreferrer">spread the word</a>!'));?> + </p> + <?php endif; ?> + + <?php if(OC_APP::isEnabled('firstrunwizard')) {?> + <p><a class="button" href="#" id="showWizard"><?php p($l->t('Show First Run Wizard again'));?></a></p> + <?php }?> +</div> + <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> @@ -200,7 +232,10 @@ if($_['passwordChangeSupported']) { <button id="add-app-password" class="button"><?php p($l->t('Create new app password')); ?></button> </div> <div id="app-password-result" class="hidden"> - <span><?php p($l->t('Use the credentials below to configure your app or device.')); ?></span> + <span> + <?php p($l->t('Use the credentials below to configure your app or device.')); ?> + <?php p($l->t('For security reasons this password will only be shown once.')); ?> + </span> <div class="app-password-row"> <span class="app-password-label"><?php p($l->t('Username')); ?></span> <input id="new-app-login-name" type="text" readonly="readonly"/> @@ -208,42 +243,12 @@ if($_['passwordChangeSupported']) { <div class="app-password-row"> <span class="app-password-label"><?php p($l->t('Password')); ?></span> <input id="new-app-password" type="text" readonly="readonly"/> + <a class="clipboardButton icon icon-clippy" data-clipboard-target="#new-app-password"></a> <button id="app-password-hide" class="button"><?php p($l->t('Done')); ?></button> </div> </div> </div> -<div id="clientsbox" class="section clientsbox"> - <h2><?php p($l->t('Get the apps to sync your files'));?></h2> - <a href="<?php p($_['clients']['desktop']); ?>" rel="noreferrer" target="_blank"> - <img src="<?php print_unescaped(image_path('core', 'desktopapp.svg')); ?>" - alt="<?php p($l->t('Desktop client'));?>" /> - </a> - <a href="<?php p($_['clients']['android']); ?>" rel="noreferrer" target="_blank"> - <img src="<?php print_unescaped(image_path('core', 'googleplay.png')); ?>" - alt="<?php p($l->t('Android app'));?>" /> - </a> - <a href="<?php p($_['clients']['ios']); ?>" rel="noreferrer" target="_blank"> - <img src="<?php print_unescaped(image_path('core', 'appstore.svg')); ?>" - alt="<?php p($l->t('iOS app'));?>" /> - </a> - - <?php if (OC_Util::getEditionString() === ''): ?> - <p> - <?php print_unescaped($l->t('If you want to support the project - <a href="https://nextcloud.com/contribute" - target="_blank" rel="noreferrer">join development</a> - or - <a href="https://nextcloud.com/contribute" - target="_blank" rel="noreferrer">spread the word</a>!'));?> - </p> - <?php endif; ?> - - <?php if(OC_APP::isEnabled('firstrunwizard')) {?> - <p><a class="button" href="#" id="showWizard"><?php p($l->t('Show First Run Wizard again'));?></a></p> - <?php }?> -</div> - <?php foreach($_['forms'] as $form) { if (isset($form['form'])) {?> <div id="<?php isset($form['anchor']) ? p($form['anchor']) : p('');?>"><?php print_unescaped($form['form']);?></div> diff --git a/settings/templates/settings.development.notice.php b/settings/templates/settings.development.notice.php index a96661e5de1..ccbd0b7df80 100644 --- a/settings/templates/settings.development.notice.php +++ b/settings/templates/settings.development.notice.php @@ -1,6 +1,4 @@ -<?php -/** @var \OCP\IL10N $l */ -if (OC_Util::getEditionString() === ''): ?> +<?php if (OC_Util::getEditionString() === ''): ?> <p> <?php print_unescaped(str_replace( [ @@ -18,4 +16,52 @@ if (OC_Util::getEditionString() === ''): ?> $l->t('Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}.') )); ?> </p> + + <p class="social-button"> + <?php print_unescaped(str_replace( + [ + '{googleimage}', + '{facebookimage}', + '{twitterimage}', + '{rssimage}', + '{mailimage}', + '{googleopen}', + '{facebookopen}', + '{twitteropen}', + '{rssopen}', + '{newsletteropen}', + '{linkclose}', + '{googletext}', + '{facebooktext}', + '{twittertext}', + '{rsstext}', + '{mailtext}', + ], + [ + image_path('core', 'googleplus.svg'), + image_path('core', 'facebook.svg'), + image_path('core', 'twitter.svg'), + image_path('core', 'rss.svg'), + image_path('core', 'mail.svg'), + '<a target="_blank" rel="noreferrer noopener" href="https://plus.google.com/b/104036748063781940910/104036748063781940910/about">', + '<a target="_blank" rel="noreferrer noopener" href="https://www.facebook.com/Nextcloud-1032807203462807/">', + '<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://newsletter.nextcloud.com/?p=subscribe&id=1">', + '</a>', + $l->t('Follow us on Google Plus!'), + $l->t('Like our facebook page!'), + $l->t('Subscribe to our twitter channel!'), + $l->t('Subscribe to our news feed!'), + $l->t('Subscribe to our newsletter!'), + + ], +'{googleopen}<img width="50" src="{googleimage}" title="{googletext}" alt="{googletext}">{linkclose} +{facebookopen}<img width="50" src="{facebookimage}" title="{facebooktext}" alt="{facebooktext}">{linkclose} +{twitteropen}<img width="50" src="{twitterimage}" title="{twittertext}" alt="{twittertext}">{linkclose} +{rssopen}<img class="img-circle" width="50" src="{rssimage}" title="{rsstext}" alt="{rsstext}">{linkclose} +{newsletteropen}<img width="50" src="{mailimage}" title="{mailtext}" alt="{mailtext}">{linkclose}' + )); ?> + </p> + <?php endif; ?> diff --git a/settings/templates/users/main.php b/settings/templates/users/main.php index f50f83b38b3..b363a4c4da8 100644 --- a/settings/templates/users/main.php +++ b/settings/templates/users/main.php @@ -19,10 +19,10 @@ style('settings', 'settings'); $userlistParams = array(); $allGroups=array(); -foreach($_["groups"] as $group) { +foreach($_["adminGroup"] as $group) { $allGroups[] = $group['name']; } -foreach($_["adminGroup"] as $group) { +foreach($_["groups"] as $group) { $allGroups[] = $group['name']; } $userlistParams['subadmingroups'] = $allGroups; diff --git a/settings/templates/users/part.createuser.php b/settings/templates/users/part.createuser.php index 0fc5a2bdeaa..6f23d06cfa3 100644 --- a/settings/templates/users/part.createuser.php +++ b/settings/templates/users/part.createuser.php @@ -10,16 +10,7 @@ <input id="newemail" type="text" style="display:none" placeholder="<?php p($l->t('E-Mail'))?>" autocomplete="off" autocapitalize="off" autocorrect="off" /> - <select - class="groupsselect" id="newusergroups" data-placeholder="groups" - title="<?php p($l->t('Groups'))?>" multiple="multiple"> - <?php foreach($_["adminGroup"] as $adminGroup): ?> - <option value="<?php p($adminGroup['name']);?>"><?php p($adminGroup['name']); ?></option> - <?php endforeach; ?> - <?php foreach($_["groups"] as $group): ?> - <option value="<?php p($group['name']);?>"><?php p($group['name']);?></option> - <?php endforeach;?> - </select> + <div class="groups"><div class="groupsListContainer multiselect button" data-placeholder="<?php p($l->t('Groups'))?>"><span class="title groupsList"></span><span class="icon-triangle-s"></span></div></div> <input type="submit" class="button" value="<?php p($l->t('Create'))?>" /> </form> <?php if((bool)$_['recoveryAdminEnabled']): ?> diff --git a/settings/templates/users/part.userlist.php b/settings/templates/users/part.userlist.php index 2bdd0714a3c..bab68e5a765 100644 --- a/settings/templates/users/part.userlist.php +++ b/settings/templates/users/part.userlist.php @@ -38,9 +38,13 @@ src="<?php p(image_path('core', 'actions/rename.svg'))?>" alt="<?php p($l->t('change email address'))?>" title="<?php p($l->t('change email address'))?>"/> </td> - <td class="groups"></td> + <td class="groups"><div class="groupsListContainer multiselect button" + ><span class="title groupsList"></span><span class="icon-triangle-s"></span></div> + </td> <?php if(is_array($_['subadmins']) || $_['subadmins']): ?> - <td class="subadmins"></td> + <td class="subadmins"><div class="groupsListContainer multiselect button" + ><span class="title groupsList"></span><span class="icon-triangle-s"></span></div> + </td> <?php endif;?> <td class="quota"> <select class="quota-user" data-inputtitle="<?php p($l->t('Please enter storage quota (ex: "512 MB" or "12 GB")')) ?>"> diff --git a/status.php b/status.php index 0d7c2285679..5b4b950139b 100644 --- a/status.php +++ b/status.php @@ -35,12 +35,16 @@ try { $installed = (bool) $systemConfig->getValue('installed', false); $maintenance = (bool) $systemConfig->getValue('maintenance', false); + # see core/lib/private/legacy/defaults.php and core/themes/example/defaults.php + # for description and defaults + $defaults = new \OCP\Defaults(); $values=array( 'installed'=>$installed, 'maintenance' => $maintenance, 'version'=>implode('.', \OCP\Util::getVersion()), 'versionstring'=>OC_Util::getVersionString(), - 'edition'=>OC_Util::getEditionString()); + 'edition'=>OC_Util::getEditionString(), + 'productname'=>$defaults->getName()); if (OC::$CLI) { print_r($values); } else { diff --git a/tests/Core/Controller/AvatarControllerTest.php b/tests/Core/Controller/AvatarControllerTest.php index 937d8aaf17b..fe1a44b28ab 100644 --- a/tests/Core/Controller/AvatarControllerTest.php +++ b/tests/Core/Controller/AvatarControllerTest.php @@ -19,86 +19,103 @@ * */ -namespace Tests\Core\Controller; - -use OC\Core\Application; -use OCP\AppFramework\IAppContainer; -use OCP\AppFramework\Http; -use OCP\Files\File; -use OCP\Files\NotFoundException; -use OCP\IUser; -use OCP\IAvatar; -use Punic\Exception; -use Test\Traits\UserTrait; +namespace OC\Core\Controller; /** - * Overwrite is_uploaded_file in this namespace to allow proper unit testing of - * the postAvatar call. + * Overwrite is_uploaded_file in the OC\Core\Controller namespace to allow + * proper unit testing of the postAvatar call. */ function is_uploaded_file($filename) { return file_exists($filename); } +namespace Tests\Core\Controller; + +use OC\Core\Controller\AvatarController; +use OCP\AppFramework\Http; +use OCP\Files\Cache\ICache; +use OCP\Files\File; +use OCP\Files\IRootFolder; +use OCP\Files\NotFoundException; +use OCP\IAvatar; +use OCP\IAvatarManager; +use OCP\IL10N; +use OCP\ILogger; +use OCP\IRequest; +use OCP\IUser; +use OCP\IUserManager; + /** * Class AvatarControllerTest * - * @group DB - * * @package OC\Core\Controller */ class AvatarControllerTest extends \Test\TestCase { - use UserTrait; - - /** @var IAppContainer */ - private $container; /** @var \OC\Core\Controller\AvatarController */ private $avatarController; - /** @var IAvatar */ + /** @var IAvatar|\PHPUnit_Framework_MockObject_MockObject */ private $avatarMock; - /** @var IUser */ + /** @var IUser|\PHPUnit_Framework_MockObject_MockObject */ private $userMock; - /** @var File */ + /** @var File|\PHPUnit_Framework_MockObject_MockObject */ private $avatarFile; + + /** @var IAvatarManager|\PHPUnit_Framework_MockObject_MockObject */ + private $avatarManager; + /** @var ICache|\PHPUnit_Framework_MockObject_MockObject */ + private $cache; + /** @var IL10N|\PHPUnit_Framework_MockObject_MockObject */ + private $l; + /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */ + private $userManager; + /** @var IRootFolder|\PHPUnit_Framework_MockObject_MockObject */ + private $rootFolder; + /** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */ + private $logger; + /** @var IRequest|\PHPUnit_Framework_MockObject_MockObject */ + private $request; protected function setUp() { parent::setUp(); - $this->createUser('userid', 'pass'); - $this->loginAsUser('userid'); - - $app = new Application; - $this->container = $app->getContainer(); - $this->container['AppName'] = 'core'; - $this->container['AvatarManager'] = $this->getMock('OCP\IAvatarManager'); - $this->container['Cache'] = $this->getMockBuilder('OC\Cache\File') - ->disableOriginalConstructor()->getMock(); - $this->container['L10N'] = $this->getMock('OCP\IL10N'); - $this->container['L10N']->method('t')->will($this->returnArgument(0)); - $this->container['UserManager'] = $this->getMock('OCP\IUserManager'); - $this->container['UserSession'] = $this->getMock('OCP\IUserSession'); - $this->container['Request'] = $this->getMock('OCP\IRequest'); - $this->container['UserFolder'] = $this->getMock('OCP\Files\Folder'); - $this->container['Logger'] = $this->getMock('OCP\ILogger'); - $this->avatarMock = $this->getMock('OCP\IAvatar'); - $this->userMock = $this->getMock('OCP\IUser'); - - $this->avatarController = $this->container['AvatarController']; + $this->avatarManager = $this->getMockBuilder('OCP\IAvatarManager')->getMock(); + $this->cache = $this->getMockBuilder('OCP\ICache') + ->disableOriginalConstructor()->getMock(); + $this->l = $this->getMockBuilder('OCP\IL10N')->getMock(); + $this->l->method('t')->will($this->returnArgument(0)); + $this->userManager = $this->getMockBuilder('OCP\IUserManager')->getMock(); + $this->request = $this->getMockBuilder('OCP\IRequest')->getMock(); + $this->rootFolder = $this->getMockBuilder('OCP\Files\IRootFolder')->getMock(); + $this->logger = $this->getMockBuilder('OCP\ILogger')->getMock(); + + $this->avatarMock = $this->getMockBuilder('OCP\IAvatar')->getMock(); + $this->userMock = $this->getMockBuilder('OCP\IUser')->getMock(); + + $this->avatarController = new AvatarController( + 'core', + $this->request, + $this->avatarManager, + $this->cache, + $this->l, + $this->userManager, + $this->rootFolder, + $this->logger, + 'userid' + ); // Configure userMock $this->userMock->method('getDisplayName')->willReturn('displayName'); $this->userMock->method('getUID')->willReturn('userId'); - $this->container['UserManager']->method('get') + $this->userManager->method('get') ->willReturnMap([['userId', $this->userMock]]); - $this->container['UserSession']->method('getUser')->willReturn($this->userMock); - $this->avatarFile = $this->getMock('OCP\Files\File'); + $this->avatarFile = $this->getMockBuilder('OCP\Files\File')->getMock(); $this->avatarFile->method('getContent')->willReturn('image data'); $this->avatarFile->method('getMimeType')->willReturn('image type'); $this->avatarFile->method('getEtag')->willReturn('my etag'); } public function tearDown() { - $this->logout(); parent::tearDown(); } @@ -106,7 +123,7 @@ class AvatarControllerTest extends \Test\TestCase { * Fetch an avatar if a user has no avatar */ public function testGetAvatarNoAvatar() { - $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock); + $this->avatarManager->method('getAvatar')->willReturn($this->avatarMock); $this->avatarMock->method('getFile')->will($this->throwException(new NotFoundException())); $response = $this->avatarController->getAvatar('userId', 32); @@ -121,7 +138,7 @@ class AvatarControllerTest extends \Test\TestCase { */ public function testGetAvatar() { $this->avatarMock->method('getFile')->willReturn($this->avatarFile); - $this->container['AvatarManager']->method('getAvatar')->with('userId')->willReturn($this->avatarMock); + $this->avatarManager->method('getAvatar')->with('userId')->willReturn($this->avatarMock); $response = $this->avatarController->getAvatar('userId', 32); @@ -129,14 +146,14 @@ class AvatarControllerTest extends \Test\TestCase { $this->assertArrayHasKey('Content-Type', $response->getHeaders()); $this->assertEquals('image type', $response->getHeaders()['Content-Type']); - $this->assertEquals('my etag', $response->getEtag()); + $this->assertEquals('my etag', $response->getETag()); } /** * Fetch the avatar of a non-existing user */ public function testGetAvatarNoUser() { - $this->container['AvatarManager'] + $this->avatarManager ->method('getAvatar') ->with('userDoesNotExist') ->will($this->throwException(new \Exception('user does not exist'))); @@ -158,7 +175,7 @@ class AvatarControllerTest extends \Test\TestCase { ->with($this->equalTo(32)) ->willReturn($this->avatarFile); - $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock); + $this->avatarManager->method('getAvatar')->willReturn($this->avatarMock); $this->avatarController->getAvatar('userId', 32); } @@ -172,7 +189,7 @@ class AvatarControllerTest extends \Test\TestCase { ->with($this->equalTo(64)) ->willReturn($this->avatarFile); - $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock); + $this->avatarManager->method('getAvatar')->willReturn($this->avatarMock); $this->avatarController->getAvatar('userId', 0); } @@ -186,7 +203,7 @@ class AvatarControllerTest extends \Test\TestCase { ->with($this->equalTo(2048)) ->willReturn($this->avatarFile); - $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock); + $this->avatarManager->method('getAvatar')->willReturn($this->avatarMock); $this->avatarController->getAvatar('userId', 2049); } @@ -195,7 +212,7 @@ class AvatarControllerTest extends \Test\TestCase { * Remove an avatar */ public function testDeleteAvatar() { - $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock); + $this->avatarManager->method('getAvatar')->willReturn($this->avatarMock); $response = $this->avatarController->deleteAvatar(); $this->assertEquals(Http::STATUS_OK, $response->getStatus()); @@ -206,12 +223,12 @@ class AvatarControllerTest extends \Test\TestCase { */ public function testDeleteAvatarException() { $this->avatarMock->method('remove')->will($this->throwException(new \Exception("foo"))); - $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock); + $this->avatarManager->method('getAvatar')->willReturn($this->avatarMock); - $this->container['Logger']->expects($this->once()) + $this->logger->expects($this->once()) ->method('logException') ->with(new \Exception("foo")); - $expectedResponse = new Http\DataResponse(['data' => ['message' => 'An error occurred. Please contact your admin.']], Http::STATUS_BAD_REQUEST); + $expectedResponse = new Http\JSONResponse(['data' => ['message' => 'An error occurred. Please contact your admin.']], Http::STATUS_BAD_REQUEST); $this->assertEquals($expectedResponse, $this->avatarController->deleteAvatar()); } @@ -227,7 +244,7 @@ class AvatarControllerTest extends \Test\TestCase { * Fetch tmp avatar */ public function testTmpAvatarValid() { - $this->container['Cache']->method('get')->willReturn(file_get_contents(\OC::$SERVERROOT.'/tests/data/testimage.jpg')); + $this->cache->method('get')->willReturn(file_get_contents(\OC::$SERVERROOT.'/tests/data/testimage.jpg')); $response = $this->avatarController->getTmpAvatar(); $this->assertEquals(Http::STATUS_OK, $response->getStatus()); @@ -253,11 +270,11 @@ class AvatarControllerTest extends \Test\TestCase { $this->assertTrue($copyRes); //Create file in cache - $this->container['Cache']->method('get')->willReturn(file_get_contents(\OC::$SERVERROOT.'/tests/data/testimage.jpg')); + $this->cache->method('get')->willReturn(file_get_contents(\OC::$SERVERROOT.'/tests/data/testimage.jpg')); //Create request return $reqRet = ['error' => [0], 'tmp_name' => [$fileName], 'size' => [filesize(\OC::$SERVERROOT.'/tests/data/testimage.jpg')]]; - $this->container['Request']->method('getUploadedFile')->willReturn($reqRet); + $this->request->method('getUploadedFile')->willReturn($reqRet); $response = $this->avatarController->postAvatar(null); @@ -274,7 +291,7 @@ class AvatarControllerTest extends \Test\TestCase { public function testPostAvatarInvalidFile() { //Create request return $reqRet = ['error' => [1], 'tmp_name' => ['foo']]; - $this->container['Request']->method('getUploadedFile')->willReturn($reqRet); + $this->request->method('getUploadedFile')->willReturn($reqRet); $response = $this->avatarController->postAvatar(null); @@ -291,11 +308,11 @@ class AvatarControllerTest extends \Test\TestCase { $this->assertTrue($copyRes); //Create file in cache - $this->container['Cache']->method('get')->willReturn(file_get_contents(\OC::$SERVERROOT.'/tests/data/testimage.gif')); + $this->cache->method('get')->willReturn(file_get_contents(\OC::$SERVERROOT.'/tests/data/testimage.gif')); //Create request return $reqRet = ['error' => [0], 'tmp_name' => [$fileName], 'size' => filesize(\OC::$SERVERROOT.'/tests/data/testimage.gif')]; - $this->container['Request']->method('getUploadedFile')->willReturn($reqRet); + $this->request->method('getUploadedFile')->willReturn($reqRet); $response = $this->avatarController->postAvatar(null); @@ -313,7 +330,9 @@ class AvatarControllerTest extends \Test\TestCase { $file = $this->getMockBuilder('OCP\Files\File') ->disableOriginalConstructor()->getMock(); $file->method('getContent')->willReturn(file_get_contents(\OC::$SERVERROOT.'/tests/data/testimage.jpg')); - $this->container['UserFolder']->method('get')->willReturn($file); + $userFolder = $this->getMockBuilder('OCP\Files\Folder')->getMock(); + $this->rootFolder->method('getUserFolder')->with('userid')->willReturn($userFolder); + $userFolder->method('get')->willReturn($file); //Create request return $response = $this->avatarController->postAvatar('avatar.jpg'); @@ -326,8 +345,10 @@ class AvatarControllerTest extends \Test\TestCase { * Test posting avatar from existing folder */ public function testPostAvatarFromNoFile() { - $file = $this->getMock('OCP\Files\Node'); - $this->container['UserFolder'] + $file = $this->getMockBuilder('OCP\Files\Node')->getMock(); + $userFolder = $this->getMockBuilder('OCP\Files\Folder')->getMock(); + $this->rootFolder->method('getUserFolder')->with('userid')->willReturn($userFolder); + $userFolder ->method('get') ->with('folder') ->willReturn($file); @@ -343,18 +364,20 @@ class AvatarControllerTest extends \Test\TestCase { * Test what happens if the upload of the avatar fails */ public function testPostAvatarException() { - $this->container['Cache']->expects($this->once()) + $this->cache->expects($this->once()) ->method('set') ->will($this->throwException(new \Exception("foo"))); $file = $this->getMockBuilder('OCP\Files\File') ->disableOriginalConstructor()->getMock(); $file->method('getContent')->willReturn(file_get_contents(\OC::$SERVERROOT.'/tests/data/testimage.jpg')); - $this->container['UserFolder']->method('get')->willReturn($file); + $userFolder = $this->getMockBuilder('OCP\Files\Folder')->getMock(); + $this->rootFolder->method('getUserFolder')->with('userid')->willReturn($userFolder); + $userFolder->method('get')->willReturn($file); - $this->container['Logger']->expects($this->once()) + $this->logger->expects($this->once()) ->method('logException') ->with(new \Exception("foo")); - $expectedResponse = new Http\DataResponse(['data' => ['message' => 'An error occurred. Please contact your admin.']], Http::STATUS_OK); + $expectedResponse = new Http\JSONResponse(['data' => ['message' => 'An error occurred. Please contact your admin.']], Http::STATUS_OK); $this->assertEquals($expectedResponse, $this->avatarController->postAvatar('avatar.jpg')); } @@ -381,10 +404,10 @@ class AvatarControllerTest extends \Test\TestCase { * Test with non square crop */ public function testPostCroppedAvatarNoSquareCrop() { - $this->container['Cache']->method('get')->willReturn(file_get_contents(\OC::$SERVERROOT.'/tests/data/testimage.jpg')); + $this->cache->method('get')->willReturn(file_get_contents(\OC::$SERVERROOT.'/tests/data/testimage.jpg')); $this->avatarMock->method('set')->will($this->throwException(new \OC\NotSquareException)); - $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock); + $this->avatarManager->method('getAvatar')->willReturn($this->avatarMock); $response = $this->avatarController->postCroppedAvatar(['x' => 0, 'y' => 0, 'w' => 10, 'h' => 11]); $this->assertEquals(Http::STATUS_BAD_REQUEST, $response->getStatus()); @@ -394,8 +417,8 @@ class AvatarControllerTest extends \Test\TestCase { * Check for proper reply on proper crop argument */ public function testPostCroppedAvatarValidCrop() { - $this->container['Cache']->method('get')->willReturn(file_get_contents(\OC::$SERVERROOT.'/tests/data/testimage.jpg')); - $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock); + $this->cache->method('get')->willReturn(file_get_contents(\OC::$SERVERROOT.'/tests/data/testimage.jpg')); + $this->avatarManager->method('getAvatar')->willReturn($this->avatarMock); $response = $this->avatarController->postCroppedAvatar(['x' => 0, 'y' => 0, 'w' => 10, 'h' => 10]); $this->assertEquals(Http::STATUS_OK, $response->getStatus()); @@ -406,15 +429,15 @@ class AvatarControllerTest extends \Test\TestCase { * Test what happens if the cropping of the avatar fails */ public function testPostCroppedAvatarException() { - $this->container['Cache']->method('get')->willReturn(file_get_contents(\OC::$SERVERROOT.'/tests/data/testimage.jpg')); + $this->cache->method('get')->willReturn(file_get_contents(\OC::$SERVERROOT.'/tests/data/testimage.jpg')); $this->avatarMock->method('set')->will($this->throwException(new \Exception('foo'))); - $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock); + $this->avatarManager->method('getAvatar')->willReturn($this->avatarMock); - $this->container['Logger']->expects($this->once()) + $this->logger->expects($this->once()) ->method('logException') ->with(new \Exception('foo')); - $expectedResponse = new Http\DataResponse(['data' => ['message' => 'An error occurred. Please contact your admin.']], Http::STATUS_BAD_REQUEST); + $expectedResponse = new Http\JSONResponse(['data' => ['message' => 'An error occurred. Please contact your admin.']], Http::STATUS_BAD_REQUEST); $this->assertEquals($expectedResponse, $this->avatarController->postCroppedAvatar(['x' => 0, 'y' => 0, 'w' => 10, 'h' => 11])); } @@ -426,7 +449,7 @@ class AvatarControllerTest extends \Test\TestCase { $fileName = \OC::$SERVERROOT.'/tests/data/testimage.jpg'; //Create request return $reqRet = ['error' => [0], 'tmp_name' => [$fileName], 'size' => [21*1024*1024]]; - $this->container['Request']->method('getUploadedFile')->willReturn($reqRet); + $this->request->method('getUploadedFile')->willReturn($reqRet); $response = $this->avatarController->postAvatar(null); diff --git a/tests/Core/Controller/ChangePasswordControllerTest.php b/tests/Core/Controller/ChangePasswordControllerTest.php new file mode 100644 index 00000000000..8dd4ca8db95 --- /dev/null +++ b/tests/Core/Controller/ChangePasswordControllerTest.php @@ -0,0 +1,161 @@ +<?php +/** + * + * @author Roeland Jago Douma <roeland@famdouma.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 Tests\Core\Controller; + +use OC\Settings\Controller\ChangePasswordController; +use OC\User\Session; +use OCP\App\IAppManager; +use OCP\IGroupManager; +use OCP\IL10N; +use OCP\IUserManager; + +class ChangePasswordControllerTest extends \Test\TestCase { + + /** @var string */ + private $userId = 'currentUser'; + + /** @var IUserManager */ + private $userManager; + + /** @var Session */ + private $userSession; + + /** @var IGroupManager */ + private $groupManager; + + /** @var IAppManager */ + private $appManager; + + /** @var IL10N */ + private $l; + + /** @var ChangePasswordController */ + private $controller; + + public function setUp() { + parent::setUp(); + + $this->userManager = $this->getMockBuilder('OCP\IUserManager')->getMock(); + $this->userSession = $this->getMockBuilder('OC\User\Session')->disableOriginalConstructor()->getMock(); + $this->groupManager = $this->getMockBuilder('OCP\IGroupManager')->getMock(); + $this->appManager = $this->getMockBuilder('OCP\App\IAppManager')->getMock(); + $this->l = $this->getMockBuilder('OCP\IL10N')->getMock(); + + $this->l->method('t')->will($this->returnArgument(0)); + + $request = $this->getMockBuilder('OCP\IRequest')->getMock(); + + $this->controller = new ChangePasswordController( + 'core', + $request, + $this->userId, + $this->userManager, + $this->userSession, + $this->groupManager, + $this->appManager, + $this->l + ); + } + + public function testChangePersonalPasswordWrongPassword() { + $this->userManager->expects($this->once()) + ->method('checkPassword') + ->with($this->userId, 'old') + ->willReturn(false); + + $expects = [ + 'status' => 'error', + 'data' => [ + 'message' => 'Wrong password', + ], + ]; + + $res = $this->controller->changePersonalPassword('old', 'new'); + + $this->assertEquals($expects, $res->getData()); + } + + public function testChangePersonalPasswordNoNewPassword() { + $user = $this->getMockBuilder('OCP\IUser')->getMock(); + $this->userManager->expects($this->once()) + ->method('checkPassword') + ->with($this->userId, 'old') + ->willReturn($user); + + $expects = [ + 'status' => 'error', + ]; + + $res = $this->controller->changePersonalPassword('old'); + + $this->assertEquals($expects, $res->getData()); + } + + public function testChangePersonalPasswordCantSetPassword() { + $user = $this->getMockBuilder('OCP\IUser')->getMock(); + $this->userManager->expects($this->once()) + ->method('checkPassword') + ->with($this->userId, 'old') + ->willReturn($user); + + $user->expects($this->once()) + ->method('setPassword') + ->with('new') + ->willReturn(false); + + $expects = [ + 'status' => 'error', + ]; + + $res = $this->controller->changePersonalPassword('old', 'new'); + + $this->assertEquals($expects, $res->getData()); + } + + public function testChangePersonalPassword() { + $user = $this->getMockBuilder('OCP\IUser')->getMock(); + $this->userManager->expects($this->once()) + ->method('checkPassword') + ->with($this->userId, 'old') + ->willReturn($user); + + $user->expects($this->once()) + ->method('setPassword') + ->with('new') + ->willReturn(true); + + $this->userSession->expects($this->once()) + ->method('updateSessionTokenPassword') + ->with('new'); + + $expects = [ + 'status' => 'success', + 'data' => [ + 'message' => 'Saved', + ], + ]; + + $res = $this->controller->changePersonalPassword('old', 'new'); + + $this->assertEquals($expects, $res->getData()); + } +} diff --git a/tests/Core/Controller/LoginControllerTest.php b/tests/Core/Controller/LoginControllerTest.php index f09f3c98118..ff50ac98fbd 100644 --- a/tests/Core/Controller/LoginControllerTest.php +++ b/tests/Core/Controller/LoginControllerTest.php @@ -57,14 +57,14 @@ class LoginControllerTest extends TestCase { public function setUp() { parent::setUp(); - $this->request = $this->getMock('\\OCP\\IRequest'); - $this->userManager = $this->getMock('\\OCP\\IUserManager'); - $this->config = $this->getMock('\\OCP\\IConfig'); - $this->session = $this->getMock('\\OCP\\ISession'); + $this->request = $this->getMockBuilder('\\OCP\\IRequest')->getMock(); + $this->userManager = $this->getMockBuilder('\\OCP\\IUserManager')->getMock(); + $this->config = $this->getMockBuilder('\\OCP\\IConfig')->getMock(); + $this->session = $this->getMockBuilder('\\OCP\\ISession')->getMock(); $this->userSession = $this->getMockBuilder('\\OC\\User\\Session') ->disableOriginalConstructor() ->getMock(); - $this->urlGenerator = $this->getMock('\\OCP\\IURLGenerator'); + $this->urlGenerator = $this->getMockBuilder('\\OCP\\IURLGenerator')->getMock(); $this->twoFactorManager = $this->getMockBuilder('\OC\Authentication\TwoFactorAuth\Manager') ->disableOriginalConstructor() ->getMock(); @@ -110,7 +110,7 @@ class LoginControllerTest extends TestCase { ->method('getCookie') ->with('oc_token') ->willReturn('MyLoginToken'); - $user = $this->getMock('\\OCP\\IUser'); + $user = $this->getMockBuilder('\\OCP\\IUser')->getMock(); $user ->expects($this->once()) ->method('getUID') @@ -181,6 +181,7 @@ class LoginControllerTest extends TestCase { 'alt_login' => [], 'rememberLoginAllowed' => \OC_Util::rememberLoginAllowed(), 'rememberLoginState' => 0, + 'resetPasswordLink' => null, ], 'guest' ); @@ -217,7 +218,7 @@ class LoginControllerTest extends TestCase { ->method('getSystemValue') ->with('lost_password_link') ->willReturn(false); - $user = $this->getMock('\\OCP\\IUser'); + $user = $this->getMockBuilder('\\OCP\\IUser')->getMock(); $user ->expects($this->once()) ->method('canChangePassword') @@ -239,6 +240,7 @@ class LoginControllerTest extends TestCase { 'alt_login' => [], 'rememberLoginAllowed' => \OC_Util::rememberLoginAllowed(), 'rememberLoginState' => 0, + 'resetPasswordLink' => false, ], 'guest' ); @@ -255,7 +257,7 @@ class LoginControllerTest extends TestCase { ->method('getSystemValue') ->with('lost_password_link') ->willReturn(false); - $user = $this->getMock('\\OCP\\IUser'); + $user = $this->getMockBuilder('\\OCP\\IUser')->getMock(); $user ->expects($this->once()) ->method('canChangePassword') @@ -277,6 +279,7 @@ class LoginControllerTest extends TestCase { 'alt_login' => [], 'rememberLoginAllowed' => \OC_Util::rememberLoginAllowed(), 'rememberLoginState' => 0, + 'resetPasswordLink' => false, ], 'guest' ); @@ -292,6 +295,10 @@ class LoginControllerTest extends TestCase { ->expects($this->exactly(4)) ->method('getRemoteAddress') ->willReturn('192.168.0.1'); + $this->request + ->expects($this->once()) + ->method('passesCSRFCheck') + ->willReturn(true); $this->throttler ->expects($this->exactly(2)) ->method('sleepDelay') @@ -315,6 +322,8 @@ class LoginControllerTest extends TestCase { $this->userSession->expects($this->never()) ->method('createSessionToken'); + $this->config->expects($this->never()) + ->method('deleteUserValue'); $expected = new \OCP\AppFramework\Http\RedirectResponse($loginPageUrl); $this->assertEquals($expected, $this->loginController->tryLogin($user, $password, '')); @@ -322,14 +331,21 @@ class LoginControllerTest extends TestCase { public function testLoginWithValidCredentials() { /** @var IUser | \PHPUnit_Framework_MockObject_MockObject $user */ - $user = $this->getMock('\OCP\IUser'); + $user = $this->getMockBuilder('\OCP\IUser')->getMock(); + $user->expects($this->any()) + ->method('getUID') + ->will($this->returnValue('uid')); $password = 'secret'; - $indexPageUrl = 'some url'; + $indexPageUrl = \OC_Util::getDefaultPageUrl(); $this->request ->expects($this->exactly(2)) ->method('getRemoteAddress') ->willReturn('192.168.0.1'); + $this->request + ->expects($this->once()) + ->method('passesCSRFCheck') + ->willReturn(true); $this->throttler ->expects($this->once()) ->method('sleepDelay') @@ -352,18 +368,96 @@ class LoginControllerTest extends TestCase { ->method('isTwoFactorAuthenticated') ->with($user) ->will($this->returnValue(false)); - $this->urlGenerator->expects($this->once()) - ->method('linkToRoute') - ->with('files.view.index') - ->will($this->returnValue($indexPageUrl)); + $this->config->expects($this->once()) + ->method('deleteUserValue') + ->with('uid', 'core', 'lostpassword'); $expected = new \OCP\AppFramework\Http\RedirectResponse($indexPageUrl); $this->assertEquals($expected, $this->loginController->tryLogin($user, $password, null)); } + public function testLoginWithoutPassedCsrfCheckAndNotLoggedIn() { + /** @var IUser | \PHPUnit_Framework_MockObject_MockObject $user */ + $user = $this->getMockBuilder('\OCP\IUser')->getMock(); + $user->expects($this->any()) + ->method('getUID') + ->will($this->returnValue('jane')); + $password = 'secret'; + $originalUrl = 'another%20url'; + + $this->request + ->expects($this->exactly(2)) + ->method('getRemoteAddress') + ->willReturn('192.168.0.1'); + $this->request + ->expects($this->once()) + ->method('passesCSRFCheck') + ->willReturn(false); + $this->throttler + ->expects($this->once()) + ->method('sleepDelay') + ->with('192.168.0.1'); + $this->throttler + ->expects($this->once()) + ->method('getDelay') + ->with('192.168.0.1') + ->willReturn(200); + $this->userSession->expects($this->once()) + ->method('isLoggedIn') + ->with() + ->will($this->returnValue(false)); + $this->config->expects($this->never()) + ->method('deleteUserValue'); + + $expected = new \OCP\AppFramework\Http\RedirectResponse(\OC_Util::getDefaultPageUrl()); + $this->assertEquals($expected, $this->loginController->tryLogin('Jane', $password, $originalUrl)); + } + + public function testLoginWithoutPassedCsrfCheckAndLoggedIn() { + /** @var IUser | \PHPUnit_Framework_MockObject_MockObject $user */ + $user = $this->getMockBuilder('\OCP\IUser')->getMock(); + $user->expects($this->any()) + ->method('getUID') + ->will($this->returnValue('jane')); + $password = 'secret'; + $originalUrl = 'another%20url'; + $redirectUrl = 'http://localhost/another url'; + + $this->request + ->expects($this->exactly(2)) + ->method('getRemoteAddress') + ->willReturn('192.168.0.1'); + $this->request + ->expects($this->once()) + ->method('passesCSRFCheck') + ->willReturn(false); + $this->throttler + ->expects($this->once()) + ->method('sleepDelay') + ->with('192.168.0.1'); + $this->throttler + ->expects($this->once()) + ->method('getDelay') + ->with('192.168.0.1') + ->willReturn(200); + $this->userSession->expects($this->once()) + ->method('isLoggedIn') + ->with() + ->will($this->returnValue(true)); + $this->urlGenerator->expects($this->once()) + ->method('getAbsoluteURL') + ->with(urldecode($originalUrl)) + ->will($this->returnValue($redirectUrl)); + $this->config->expects($this->never()) + ->method('deleteUserValue'); + + $expected = new \OCP\AppFramework\Http\RedirectResponse($redirectUrl); + $this->assertEquals($expected, $this->loginController->tryLogin('Jane', $password, $originalUrl)); + } + public function testLoginWithValidCredentialsAndRedirectUrl() { /** @var IUser | \PHPUnit_Framework_MockObject_MockObject $user */ - $user = $this->getMock('\OCP\IUser'); + $user = $this->getMockBuilder('\OCP\IUser')->getMock(); $user->expects($this->any()) ->method('getUID') ->will($this->returnValue('jane')); @@ -375,6 +469,10 @@ class LoginControllerTest extends TestCase { ->expects($this->exactly(2)) ->method('getRemoteAddress') ->willReturn('192.168.0.1'); + $this->request + ->expects($this->once()) + ->method('passesCSRFCheck') + ->willReturn(true); $this->throttler ->expects($this->once()) ->method('sleepDelay') @@ -399,24 +497,97 @@ class LoginControllerTest extends TestCase { ->method('getAbsoluteURL') ->with(urldecode($originalUrl)) ->will($this->returnValue($redirectUrl)); + $this->config->expects($this->once()) + ->method('deleteUserValue') + ->with('jane', 'core', 'lostpassword'); $expected = new \OCP\AppFramework\Http\RedirectResponse(urldecode($redirectUrl)); $this->assertEquals($expected, $this->loginController->tryLogin('Jane', $password, $originalUrl)); } - public function testLoginWithTwoFactorEnforced() { + public function testLoginWithOneTwoFactorProvider() { + /** @var IUser | \PHPUnit_Framework_MockObject_MockObject $user */ + $user = $this->getMockBuilder('\OCP\IUser')->getMock(); + $user->expects($this->any()) + ->method('getUID') + ->will($this->returnValue('john')); + $password = 'secret'; + $challengeUrl = 'challenge/url'; + $provider = $this->getMockBuilder('\OCP\Authentication\TwoFactorAuth\IProvider')->getMock(); + + $this->request + ->expects($this->exactly(2)) + ->method('getRemoteAddress') + ->willReturn('192.168.0.1'); + $this->request + ->expects($this->once()) + ->method('passesCSRFCheck') + ->willReturn(true); + $this->throttler + ->expects($this->once()) + ->method('sleepDelay') + ->with('192.168.0.1'); + $this->throttler + ->expects($this->once()) + ->method('getDelay') + ->with('192.168.0.1') + ->willReturn(200); + $this->userManager->expects($this->once()) + ->method('checkPassword') + ->will($this->returnValue($user)); + $this->userSession->expects($this->once()) + ->method('login') + ->with('john@doe.com', $password); + $this->userSession->expects($this->once()) + ->method('createSessionToken') + ->with($this->request, $user->getUID(), 'john@doe.com', $password); + $this->twoFactorManager->expects($this->once()) + ->method('isTwoFactorAuthenticated') + ->with($user) + ->will($this->returnValue(true)); + $this->twoFactorManager->expects($this->once()) + ->method('prepareTwoFactorLogin') + ->with($user); + $this->twoFactorManager->expects($this->once()) + ->method('getProviders') + ->with($user) + ->will($this->returnValue([$provider])); + $provider->expects($this->once()) + ->method('getId') + ->will($this->returnValue('u2f')); + $this->urlGenerator->expects($this->once()) + ->method('linkToRoute') + ->with('core.TwoFactorChallenge.showChallenge', [ + 'challengeProviderId' => 'u2f', + ]) + ->will($this->returnValue($challengeUrl)); + $this->config->expects($this->once()) + ->method('deleteUserValue') + ->with('john', 'core', 'lostpassword'); + + $expected = new RedirectResponse($challengeUrl); + $this->assertEquals($expected, $this->loginController->tryLogin('john@doe.com', $password, null)); + } + + public function testLoginWithMultpleTwoFactorProviders() { /** @var IUser | \PHPUnit_Framework_MockObject_MockObject $user */ - $user = $this->getMock('\OCP\IUser'); + $user = $this->getMockBuilder('\OCP\IUser')->getMock(); $user->expects($this->any()) ->method('getUID') ->will($this->returnValue('john')); $password = 'secret'; $challengeUrl = 'challenge/url'; + $provider1 = $this->getMockBuilder('\OCP\Authentication\TwoFactorAuth\IProvider')->getMock(); + $provider2 = $this->getMockBuilder('\OCP\Authentication\TwoFactorAuth\IProvider')->getMock(); $this->request ->expects($this->exactly(2)) ->method('getRemoteAddress') ->willReturn('192.168.0.1'); + $this->request + ->expects($this->once()) + ->method('passesCSRFCheck') + ->willReturn(true); $this->throttler ->expects($this->once()) ->method('sleepDelay') @@ -442,10 +613,21 @@ class LoginControllerTest extends TestCase { $this->twoFactorManager->expects($this->once()) ->method('prepareTwoFactorLogin') ->with($user); + $this->twoFactorManager->expects($this->once()) + ->method('getProviders') + ->with($user) + ->will($this->returnValue([$provider1, $provider2])); + $provider1->expects($this->never()) + ->method('getId'); + $provider2->expects($this->never()) + ->method('getId'); $this->urlGenerator->expects($this->once()) ->method('linkToRoute') ->with('core.TwoFactorChallenge.selectChallenge') ->will($this->returnValue($challengeUrl)); + $this->config->expects($this->once()) + ->method('deleteUserValue') + ->with('john', 'core', 'lostpassword'); $expected = new RedirectResponse($challengeUrl); $this->assertEquals($expected, $this->loginController->tryLogin('john@doe.com', $password, null)); @@ -453,7 +635,7 @@ class LoginControllerTest extends TestCase { public function testToNotLeakLoginName() { /** @var IUser | \PHPUnit_Framework_MockObject_MockObject $user */ - $user = $this->getMock('\OCP\IUser'); + $user = $this->getMockBuilder('\OCP\IUser')->getMock(); $user->expects($this->any()) ->method('getUID') ->will($this->returnValue('john')); @@ -479,6 +661,10 @@ class LoginControllerTest extends TestCase { ->expects($this->exactly(3)) ->method('getRemoteAddress') ->willReturn('192.168.0.1'); + $this->request + ->expects($this->once()) + ->method('passesCSRFCheck') + ->willReturn(true); $this->throttler ->expects($this->once()) ->method('getDelay') @@ -492,6 +678,8 @@ class LoginControllerTest extends TestCase { ->expects($this->once()) ->method('registerAttempt') ->with('login', '192.168.0.1', ['user' => 'john@doe.com']); + $this->config->expects($this->never()) + ->method('deleteUserValue'); $expected = new RedirectResponse(''); $this->assertEquals($expected, $this->loginController->tryLogin('john@doe.com', 'just wrong', null)); diff --git a/tests/Core/Controller/LostControllerTest.php b/tests/Core/Controller/LostControllerTest.php index 492a04bcfde..2e7d6721d56 100644 --- a/tests/Core/Controller/LostControllerTest.php +++ b/tests/Core/Controller/LostControllerTest.php @@ -133,7 +133,7 @@ class LostControllerTest extends \PHPUnit_Framework_TestCase { $this->config ->expects($this->once()) ->method('getUserValue') - ->with('ValidTokenUser', 'owncloud', 'lostpassword', null) + ->with('ValidTokenUser', 'core', 'lostpassword', null) ->will($this->returnValue('12345:TheOnlyAndOnlyOneTokenToResetThePassword')); $user = $this->getMockBuilder('\OCP\IUser') ->disableOriginalConstructor()->getMock(); @@ -180,7 +180,7 @@ class LostControllerTest extends \PHPUnit_Framework_TestCase { $this->config ->expects($this->once()) ->method('getUserValue') - ->with('ValidTokenUser', 'owncloud', 'lostpassword', null) + ->with('ValidTokenUser', 'core', 'lostpassword', null) ->will($this->returnValue('12345:TheOnlyAndOnlyOneTokenToResetThePassword')); $response = $this->lostController->resetform($token, $userId); $expectedResponse = new TemplateResponse('core', @@ -217,19 +217,19 @@ class LostControllerTest extends \PHPUnit_Framework_TestCase { $this->config ->expects($this->once()) ->method('getUserValue') - ->with('ValidTokenUser', 'owncloud', 'lostpassword', null) + ->with('ValidTokenUser', 'core', 'lostpassword', null) ->will($this->returnValue('12345:TheOnlyAndOnlyOneTokenToResetThePassword')); $this->urlGenerator ->expects($this->once()) ->method('linkToRouteAbsolute') ->with('core.lost.setPassword', array('userId' => 'ValidTokenUser', 'token' => 'TheOnlyAndOnlyOneTokenToResetThePassword')) - ->will($this->returnValue('https://ownCloud.com/index.php/lostpassword/')); + ->will($this->returnValue('https://example.tld/index.php/lostpassword/')); $response = $this->lostController->resetform($token, $userId); $expectedResponse = new TemplateResponse('core', 'lostpassword/resetpassword', array( - 'link' => 'https://ownCloud.com/index.php/lostpassword/', + 'link' => 'https://example.tld/index.php/lostpassword/', ), 'guest'); $this->assertEquals($expectedResponse, $response); @@ -291,12 +291,12 @@ class LostControllerTest extends \PHPUnit_Framework_TestCase { $this->config ->expects($this->once()) ->method('setUserValue') - ->with('ExistingUser', 'owncloud', 'lostpassword', '12348:ThisIsMaybeANotSoSecretToken!'); + ->with('ExistingUser', 'core', 'lostpassword', '12348:ThisIsMaybeANotSoSecretToken!'); $this->urlGenerator ->expects($this->once()) ->method('linkToRouteAbsolute') ->with('core.lost.resetform', array('userId' => 'ExistingUser', 'token' => 'ThisIsMaybeANotSoSecretToken!')) - ->will($this->returnValue('https://ownCloud.com/index.php/lostpassword/')); + ->will($this->returnValue('https://example.tld/index.php/lostpassword/')); $message = $this->getMockBuilder('\OC\Mail\Message') ->disableOriginalConstructor()->getMock(); $message @@ -310,7 +310,7 @@ class LostControllerTest extends \PHPUnit_Framework_TestCase { $message ->expects($this->at(2)) ->method('setPlainBody') - ->with('Use the following link to reset your password: https://ownCloud.com/index.php/lostpassword/'); + ->with('Use the following link to reset your password: https://example.tld/index.php/lostpassword/'); $message ->expects($this->at(3)) ->method('setFrom') @@ -348,7 +348,7 @@ class LostControllerTest extends \PHPUnit_Framework_TestCase { $this->config ->expects($this->once()) ->method('setUserValue') - ->with('ExistingUser', 'owncloud', 'lostpassword', '12348:ThisIsMaybeANotSoSecretToken!'); + ->with('ExistingUser', 'core', 'lostpassword', '12348:ThisIsMaybeANotSoSecretToken!'); $this->timeFactory ->expects($this->once()) ->method('getTime') @@ -357,7 +357,7 @@ class LostControllerTest extends \PHPUnit_Framework_TestCase { ->expects($this->once()) ->method('linkToRouteAbsolute') ->with('core.lost.resetform', array('userId' => 'ExistingUser', 'token' => 'ThisIsMaybeANotSoSecretToken!')) - ->will($this->returnValue('https://ownCloud.com/index.php/lostpassword/')); + ->will($this->returnValue('https://example.tld/index.php/lostpassword/')); $message = $this->getMockBuilder('\OC\Mail\Message') ->disableOriginalConstructor()->getMock(); $message @@ -371,7 +371,7 @@ class LostControllerTest extends \PHPUnit_Framework_TestCase { $message ->expects($this->at(2)) ->method('setPlainBody') - ->with('Use the following link to reset your password: https://ownCloud.com/index.php/lostpassword/'); + ->with('Use the following link to reset your password: https://example.tld/index.php/lostpassword/'); $message ->expects($this->at(3)) ->method('setFrom') @@ -395,7 +395,7 @@ class LostControllerTest extends \PHPUnit_Framework_TestCase { $this->config ->expects($this->once()) ->method('getUserValue') - ->with('InvalidTokenUser', 'owncloud', 'lostpassword', null) + ->with('InvalidTokenUser', 'core', 'lostpassword', null) ->will($this->returnValue('TheOnlyAndOnlyOneTokenToResetThePassword')); // With an invalid token @@ -417,7 +417,7 @@ class LostControllerTest extends \PHPUnit_Framework_TestCase { $this->config ->expects($this->once()) ->method('getUserValue') - ->with('ValidTokenUser', 'owncloud', 'lostpassword', null) + ->with('ValidTokenUser', 'core', 'lostpassword', null) ->will($this->returnValue('12345:TheOnlyAndOnlyOneTokenToResetThePassword')); $user = $this->getMockBuilder('\OCP\IUser') ->disableOriginalConstructor()->getMock(); @@ -437,7 +437,7 @@ class LostControllerTest extends \PHPUnit_Framework_TestCase { $this->config ->expects($this->once()) ->method('deleteUserValue') - ->with('ValidTokenUser', 'owncloud', 'lostpassword'); + ->with('ValidTokenUser', 'core', 'lostpassword'); $this->timeFactory ->expects($this->once()) ->method('getTime') @@ -452,7 +452,7 @@ class LostControllerTest extends \PHPUnit_Framework_TestCase { $this->config ->expects($this->once()) ->method('getUserValue') - ->with('ValidTokenUser', 'owncloud', 'lostpassword', null) + ->with('ValidTokenUser', 'core', 'lostpassword', null) ->will($this->returnValue('12345:TheOnlyAndOnlyOneTokenToResetThePassword')); $user = $this->getMockBuilder('\OCP\IUser') ->disableOriginalConstructor()->getMock(); @@ -478,7 +478,7 @@ class LostControllerTest extends \PHPUnit_Framework_TestCase { $this->config ->expects($this->once()) ->method('getUserValue') - ->with('ValidTokenUser', 'owncloud', 'lostpassword', null) + ->with('ValidTokenUser', 'core', 'lostpassword', null) ->will($this->returnValue('TheOnlyAndOnlyOneTokenToResetThePassword')); $user = $this->getMockBuilder('\OCP\IUser') ->disableOriginalConstructor()->getMock(); @@ -500,7 +500,7 @@ class LostControllerTest extends \PHPUnit_Framework_TestCase { $this->config ->expects($this->once()) ->method('getUserValue') - ->with('ValidTokenUser', 'owncloud', 'lostpassword', null) + ->with('ValidTokenUser', 'core', 'lostpassword', null) ->will($this->returnValue('12345:TheOnlyAndOnlyOneTokenToResetThePassword')); $user = $this->getMockBuilder('\OCP\IUser') ->disableOriginalConstructor()->getMock(); @@ -530,7 +530,7 @@ class LostControllerTest extends \PHPUnit_Framework_TestCase { $this->config ->expects($this->once()) ->method('getUserValue') - ->with('ValidTokenUser', 'owncloud', 'lostpassword', null) + ->with('ValidTokenUser', 'core', 'lostpassword', null) ->will($this->returnValue(null)); $response = $this->lostController->setPassword('', 'ValidTokenUser', 'NewPassword', true); diff --git a/tests/Core/Controller/TokenControllerTest.php b/tests/Core/Controller/TokenControllerTest.php index b6b54b14fad..0e965aac2e5 100644 --- a/tests/Core/Controller/TokenControllerTest.php +++ b/tests/Core/Controller/TokenControllerTest.php @@ -41,15 +41,17 @@ class TokenControllerTest extends TestCase { protected function setUp() { parent::setUp(); - $this->request = $this->getMock('\OCP\IRequest'); + $this->request = $this->getMockBuilder('\OCP\IRequest')->getMock(); $this->userManager = $this->getMockBuilder('\OC\User\Manager') ->disableOriginalConstructor() ->getMock(); - $this->tokenProvider = $this->getMock('\OC\Authentication\Token\IProvider'); + $this->tokenProvider = $this->getMockBuilder('\OC\Authentication\Token\IProvider') + ->getMock(); $this->twoFactorAuthManager = $this->getMockBuilder('\OC\Authentication\TwoFactorAuth\Manager') ->disableOriginalConstructor() ->getMock(); - $this->secureRandom = $this->getMock('\OCP\Security\ISecureRandom'); + $this->secureRandom = $this->getMockBuilder('\OCP\Security\ISecureRandom') + ->getMock(); $this->tokenController = new TokenController('core', $this->request, $this->userManager, $this->tokenProvider, $this->twoFactorAuthManager, $this->secureRandom); } @@ -77,7 +79,7 @@ class TokenControllerTest extends TestCase { } public function testWithValidCredentials() { - $user = $this->getMock('\OCP\IUser'); + $user = $this->getMockBuilder('\OCP\IUser')->getMock(); $this->userManager->expects($this->once()) ->method('checkPassword') ->with('john', '123456') @@ -96,9 +98,9 @@ class TokenControllerTest extends TestCase { $this->tokenProvider->expects($this->once()) ->method('generateToken') ->with('verysecurerandomtoken', 'john', 'john', '123456', 'unknown client', IToken::PERMANENT_TOKEN); - $expected = [ + $expected = new JSONResponse([ 'token' => 'verysecurerandomtoken' - ]; + ]); $actual = $this->tokenController->generateToken('john', '123456'); @@ -106,7 +108,7 @@ class TokenControllerTest extends TestCase { } public function testWithValidCredentialsBut2faEnabled() { - $user = $this->getMock('\OCP\IUser'); + $user = $this->getMockBuilder('\OCP\IUser')->getMock(); $this->userManager->expects($this->once()) ->method('checkPassword') ->with('john', '123456') diff --git a/tests/Core/Middleware/TwoFactorMiddlewareTest.php b/tests/Core/Middleware/TwoFactorMiddlewareTest.php index 6b8f4928928..8247efa1b82 100644 --- a/tests/Core/Middleware/TwoFactorMiddlewareTest.php +++ b/tests/Core/Middleware/TwoFactorMiddlewareTest.php @@ -132,6 +132,7 @@ class TwoFactorMiddlewareTest extends TestCase { ->will($this->returnValue(true)); $this->twoFactorManager->expects($this->once()) ->method('needsSecondFactor') + ->with($user) ->will($this->returnValue(true)); $this->middleware->beforeController(null, 'index'); @@ -159,6 +160,7 @@ class TwoFactorMiddlewareTest extends TestCase { ->will($this->returnValue(true)); $this->twoFactorManager->expects($this->once()) ->method('needsSecondFactor') + ->with($user) ->will($this->returnValue(false)); $twoFactorChallengeController = $this->getMockBuilder('\OC\Core\Controller\TwoFactorChallengeController') diff --git a/tests/Core/Templates/TemplatesTest.php b/tests/Core/Templates/TemplatesTest.php index 03565411a13..cd1502fd22c 100644 --- a/tests/Core/Templates/TemplatesTest.php +++ b/tests/Core/Templates/TemplatesTest.php @@ -13,7 +13,7 @@ class TemplatesTest extends \Test\TestCase { public function test404() { $template = \OC::$SERVERROOT . '/core/templates/404.php'; $href = \OC::$server->getURLGenerator()->linkTo('', 'index.php'); - $expectedHtml = "<ul><li class='error'>\n\t\t\tFile not found<br><p class='hint'>The specified document has not been found on the server.</p>\n<p class='hint'><a href='$href'>You can click here to return to ownCloud.</a></p>\n\t\t</li></ul>"; + $expectedHtml = "<ul><li class='error'>\n\t\t\tFile not found<br><p class='hint'>The specified document has not been found on the server.</p>\n<p class='hint'><a href='$href'>You can click here to return to Nextcloud.</a></p>\n\t\t</li></ul>"; $this->assertTemplate($expectedHtml, $template); } diff --git a/tests/Settings/Controller/AdminSettingsControllerTest.php b/tests/Settings/Controller/AdminSettingsControllerTest.php new file mode 100644 index 00000000000..6c93bca0d68 --- /dev/null +++ b/tests/Settings/Controller/AdminSettingsControllerTest.php @@ -0,0 +1,72 @@ +<?php +/** + * @copyright Copyright (c) 2016 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 Tests\Settings\Controller; + + +use OC\Settings\Admin\TipsTricks; +use OC\Settings\Controller\AdminSettingsController; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\INavigationManager; +use OCP\IRequest; +use OCP\Settings\IManager; +use Test\TestCase; + +class AdminSettingsControllerTest extends TestCase { + /** @var AdminSettingsController */ + private $adminSettingsController; + /** @var IRequest */ + private $request; + /** @var INavigationManager */ + private $navigationManager; + /** @var IManager */ + private $settingsManager; + + public function setUp() { + parent::setUp(); + + $this->request = $this->getMockBuilder('\OCP\IRequest')->getMock(); + $this->navigationManager = $this->getMockBuilder('\OCP\INavigationManager')->getMock(); + $this->settingsManager = $this->getMockBuilder('\OCP\Settings\IManager')->getMock(); + + $this->adminSettingsController = new AdminSettingsController( + 'settings', + $this->request, + $this->navigationManager, + $this->settingsManager + ); + } + + public function testIndex() { + $this->settingsManager + ->expects($this->once()) + ->method('getAdminSections') + ->willReturn([]); + $this->settingsManager + ->expects($this->once()) + ->method('getAdminSettings') + ->with('test') + ->willReturn([5 => new TipsTricks($this->getMockBuilder('\OCP\IConfig')->getMock())]); + $expected = new TemplateResponse('settings', 'admin/frame', ['forms' => [], 'content' => '']); + $this->assertEquals($expected, $this->adminSettingsController->index('test')); + } +} diff --git a/tests/Settings/Controller/AuthSettingsControllerTest.php b/tests/Settings/Controller/AuthSettingsControllerTest.php index 1705cb5ddf1..b57aea0930c 100644 --- a/tests/Settings/Controller/AuthSettingsControllerTest.php +++ b/tests/Settings/Controller/AuthSettingsControllerTest.php @@ -91,6 +91,7 @@ class AuthSettingsControllerTest extends TestCase { 'lastActivity' => null, 'type' => null, 'canDelete' => false, + 'current' => true, ], [ 'id' => 200, diff --git a/tests/Settings/Controller/CertificateControllerTest.php b/tests/Settings/Controller/CertificateControllerTest.php index c9ea2a4024f..36b5715e734 100644 --- a/tests/Settings/Controller/CertificateControllerTest.php +++ b/tests/Settings/Controller/CertificateControllerTest.php @@ -51,11 +51,11 @@ class CertificateControllerTest extends \Test\TestCase { public function setUp() { parent::setUp(); - $this->request = $this->getMock('\OCP\IRequest'); - $this->certificateManager = $this->getMock('\OCP\ICertificateManager'); - $this->systemCertificateManager = $this->getMock('\OCP\ICertificateManager'); - $this->l10n = $this->getMock('\OCP\IL10N'); - $this->appManager = $this->getMock('OCP\App\IAppManager'); + $this->request = $this->getMockBuilder('\OCP\IRequest')->getMock(); + $this->certificateManager = $this->getMockBuilder('\OCP\ICertificateManager')->getMock(); + $this->systemCertificateManager = $this->getMockBuilder('\OCP\ICertificateManager')->getMock(); + $this->l10n = $this->getMockBuilder('\OCP\IL10N')->getMock(); + $this->appManager = $this->getMockBuilder('OCP\App\IAppManager')->getMock(); $this->certificateController = $this->getMockBuilder('OC\Settings\Controller\CertificateController') ->setConstructorArgs( @@ -90,7 +90,7 @@ class CertificateControllerTest extends \Test\TestCase { 'name' => 'goodCertificate.crt', ]; - $certificate = $this->getMock('\OCP\ICertificate'); + $certificate = $this->getMockBuilder('\OCP\ICertificate')->getMock(); $certificate ->expects($this->once()) ->method('getName') diff --git a/tests/Settings/Controller/CheckSetupControllerTest.php b/tests/Settings/Controller/CheckSetupControllerTest.php index f48e9c04f3d..e4f66b5d879 100644 --- a/tests/Settings/Controller/CheckSetupControllerTest.php +++ b/tests/Settings/Controller/CheckSetupControllerTest.php @@ -29,6 +29,7 @@ use OCP\AppFramework\Http\RedirectResponse; use OCP\Http\Client\IClientService; use OCP\IConfig; use OCP\IL10N; +use OCP\ILogger; use OCP\IRequest; use OCP\IURLGenerator; use OC_Util; @@ -36,24 +37,11 @@ use Test\TestCase; use OC\IntegrityCheck\Checker; /** - * Mock version_compare - * @param string $version1 - * @param string $version2 - * @return int - */ -function version_compare($version1, $version2) { - return CheckSetupControllerTest::$version_compare; -} - -/** * Class CheckSetupControllerTest * * @package Tests\Settings\Controller */ class CheckSetupControllerTest extends TestCase { - /** @var int */ - public static $version_compare; - /** @var CheckSetupController */ private $checkSetupController; /** @var IRequest */ @@ -68,6 +56,8 @@ class CheckSetupControllerTest extends TestCase { private $util; /** @var IL10N */ private $l10n; + /** @var ILogger */ + private $logger; /** @var Checker */ private $checker; @@ -95,6 +85,7 @@ class CheckSetupControllerTest extends TestCase { })); $this->checker = $this->getMockBuilder('\OC\IntegrityCheck\Checker') ->disableOriginalConstructor()->getMock(); + $this->logger = $this->getMockBuilder('\OCP\ILogger')->getMock(); $this->checkSetupController = $this->getMockBuilder('\OC\Settings\Controller\CheckSetupController') ->setConstructorArgs([ 'settings', @@ -105,8 +96,9 @@ class CheckSetupControllerTest extends TestCase { $this->util, $this->l10n, $this->checker, + $this->logger ]) - ->setMethods(['getCurlVersion'])->getMock(); + ->setMethods(['getCurlVersion', 'isPhpOutdated'])->getMock(); } public function testIsInternetConnectionWorkingDisabledViaConfig() { @@ -131,12 +123,8 @@ class CheckSetupControllerTest extends TestCase { $client = $this->getMockBuilder('\OCP\Http\Client\IClient') ->disableOriginalConstructor()->getMock(); - $client->expects($this->at(0)) - ->method('get') - ->with('https://www.owncloud.org/', []); - $client->expects($this->at(1)) - ->method('get') - ->with('http://www.owncloud.org/', []); + $client->expects($this->any()) + ->method('get'); $this->clientService->expects($this->once()) ->method('newClient') @@ -151,7 +139,7 @@ class CheckSetupControllerTest extends TestCase { ); } - public function testIsInternetConnectionHttpsFail() { + public function testIsInternetConnectionFail() { $this->config->expects($this->once()) ->method('getSystemValue') ->with('has_internet_connection', true) @@ -159,12 +147,11 @@ class CheckSetupControllerTest extends TestCase { $client = $this->getMockBuilder('\OCP\Http\Client\IClient') ->disableOriginalConstructor()->getMock(); - $client->expects($this->at(0)) + $client->expects($this->any()) ->method('get') - ->with('https://www.owncloud.org/', []) ->will($this->throwException(new \Exception())); - $this->clientService->expects($this->once()) + $this->clientService->expects($this->exactly(3)) ->method('newClient') ->will($this->returnValue($client)); @@ -176,33 +163,6 @@ class CheckSetupControllerTest extends TestCase { ); } - public function testIsInternetConnectionHttpFail() { - $this->config->expects($this->once()) - ->method('getSystemValue') - ->with('has_internet_connection', true) - ->will($this->returnValue(true)); - - $client = $this->getMockBuilder('\OCP\Http\Client\IClient') - ->disableOriginalConstructor()->getMock(); - $client->expects($this->at(0)) - ->method('get') - ->with('https://www.owncloud.org/', []); - $client->expects($this->at(1)) - ->method('get') - ->with('http://www.owncloud.org/', []) - ->will($this->throwException(new \Exception())); - - $this->clientService->expects($this->once()) - ->method('newClient') - ->will($this->returnValue($client)); - - $this->assertFalse( - self::invokePrivate( - $this->checkSetupController, - 'isInternetConnectionWorking' - ) - ); - } public function testIsMemcacheConfiguredFalse() { $this->config->expects($this->once()) @@ -233,7 +193,10 @@ class CheckSetupControllerTest extends TestCase { } public function testIsPhpSupportedFalse() { - self::$version_compare = -1; + $this->checkSetupController + ->expects($this->once()) + ->method('isPhpOutdated') + ->willReturn(true); $this->assertEquals( ['eol' => true, 'version' => PHP_VERSION], @@ -242,7 +205,10 @@ class CheckSetupControllerTest extends TestCase { } public function testIsPhpSupportedTrue() { - self::$version_compare = 0; + $this->checkSetupController + ->expects($this->exactly(2)) + ->method('isPhpOutdated') + ->willReturn(false); $this->assertEquals( ['eol' => false, 'version' => PHP_VERSION], @@ -250,8 +216,6 @@ class CheckSetupControllerTest extends TestCase { ); - self::$version_compare = 1; - $this->assertEquals( ['eol' => false, 'version' => PHP_VERSION], self::invokePrivate($this->checkSetupController, 'isPhpSupported') @@ -318,13 +282,17 @@ class CheckSetupControllerTest extends TestCase { ->disableOriginalConstructor()->getMock(); $client->expects($this->at(0)) ->method('get') - ->with('https://www.owncloud.org/', []); + ->with('http://www.nextcloud.com/', []) + ->will($this->throwException(new \Exception())); $client->expects($this->at(1)) ->method('get') - ->with('http://www.owncloud.org/', []) + ->with('http://www.google.com/', []) ->will($this->throwException(new \Exception())); - - $this->clientService->expects($this->once()) + $client->expects($this->at(2)) + ->method('get') + ->with('http://www.github.com/', []) + ->will($this->throwException(new \Exception())); + $this->clientService->expects($this->exactly(3)) ->method('newClient') ->will($this->returnValue($client)); $this->urlGenerator->expects($this->at(0)) @@ -335,7 +303,10 @@ class CheckSetupControllerTest extends TestCase { ->method('linkToDocs') ->with('admin-security') ->willReturn('https://doc.owncloud.org/server/8.1/admin_manual/configuration_server/hardening.html'); - self::$version_compare = -1; + $this->checkSetupController + ->expects($this->once()) + ->method('isPhpOutdated') + ->willReturn(true); $this->urlGenerator->expects($this->at(2)) ->method('linkToDocs') ->with('admin-reverse-proxy') @@ -373,7 +344,8 @@ class CheckSetupControllerTest extends TestCase { $this->urlGenerator, $this->util, $this->l10n, - $this->checker + $this->checker, + $this->logger ]) ->setMethods(null)->getMock(); @@ -612,7 +584,7 @@ class CheckSetupControllerTest extends TestCase { $this->urlGenerator ->expects($this->once()) ->method('linkToRoute') - ->with('settings_admin') + ->with('settings.AdminSettings.index') ->will($this->returnValue('/admin')); $expected = new RedirectResponse('/admin'); diff --git a/tests/lib/AppFramework/Controller/OCSControllerTest.php b/tests/lib/AppFramework/Controller/OCSControllerTest.php index 7dcbd189cd5..9c9214181a4 100644 --- a/tests/lib/AppFramework/Controller/OCSControllerTest.php +++ b/tests/lib/AppFramework/Controller/OCSControllerTest.php @@ -75,8 +75,8 @@ class OCSControllerTest extends \Test\TestCase { $expected = "<?xml version=\"1.0\"?>\n" . "<ocs>\n" . " <meta>\n" . - " <status>failure</status>\n" . - " <statuscode>400</statuscode>\n" . + " <status>ok</status>\n" . + " <statuscode>100</statuscode>\n" . " <message>OK</message>\n" . " <totalitems></totalitems>\n" . " <itemsperpage></itemsperpage>\n" . @@ -86,54 +86,12 @@ class OCSControllerTest extends \Test\TestCase { " </data>\n" . "</ocs>\n"; - $params = [ - 'data' => [ - 'test' => 'hi' - ], - 'statuscode' => 400 - ]; + $params = new DataResponse(['test' => 'hi']); $out = $controller->buildResponse($params, 'xml')->render(); $this->assertEquals($expected, $out); } - - public function testXMLDataResponse() { - $controller = new ChildOCSController('app', new Request( - [], - $this->getMockBuilder('\OCP\Security\ISecureRandom') - ->disableOriginalConstructor() - ->getMock(), - $this->getMockBuilder('\OCP\IConfig') - ->disableOriginalConstructor() - ->getMock() - )); - $expected = "<?xml version=\"1.0\"?>\n" . - "<ocs>\n" . - " <meta>\n" . - " <status>failure</status>\n" . - " <statuscode>400</statuscode>\n" . - " <message>OK</message>\n" . - " <totalitems></totalitems>\n" . - " <itemsperpage></itemsperpage>\n" . - " </meta>\n" . - " <data>\n" . - " <test>hi</test>\n" . - " </data>\n" . - "</ocs>\n"; - - $params = new DataResponse([ - 'data' => [ - 'test' => 'hi' - ], - 'statuscode' => 400 - ]); - - $out = $controller->buildResponse($params, 'xml')->render(); - $this->assertEquals($expected, $out); - } - - public function testJSON() { $controller = new ChildOCSController('app', new Request( [], @@ -144,14 +102,9 @@ class OCSControllerTest extends \Test\TestCase { ->disableOriginalConstructor() ->getMock() )); - $expected = '{"ocs":{"meta":{"status":"failure","statuscode":400,"message":"OK",' . + $expected = '{"ocs":{"meta":{"status":"ok","statuscode":100,"message":"OK",' . '"totalitems":"","itemsperpage":""},"data":{"test":"hi"}}}'; - $params = [ - 'data' => [ - 'test' => 'hi' - ], - 'statuscode' => 400 - ]; + $params = new DataResponse(['test' => 'hi']); $out = $controller->buildResponse($params, 'json')->render(); $this->assertEquals($expected, $out); diff --git a/tests/lib/AppFramework/Http/RequestTest.php b/tests/lib/AppFramework/Http/RequestTest.php index c090892cf7b..420b73a22d9 100644 --- a/tests/lib/AppFramework/Http/RequestTest.php +++ b/tests/lib/AppFramework/Http/RequestTest.php @@ -1063,22 +1063,6 @@ class RequestTest extends \Test\TestCase { $this->assertSame('www.owncloud.org', self::invokePrivate($request, 'getOverwriteHost')); } - public function testGetPathInfoWithSetEnv() { - $request = new Request( - [ - 'server' => [ - 'PATH_INFO' => 'apps/files/', - ] - ], - $this->secureRandom, - $this->config, - $this->csrfTokenManager, - $this->stream - ); - - $this->assertSame('apps/files/', $request->getPathInfo()); - } - /** * @expectedException \Exception * @expectedExceptionMessage The requested uri(/foo.php) cannot be processed by the script '/var/www/index.php') diff --git a/tests/lib/AppFramework/Middleware/OCSMiddlewareTest.php b/tests/lib/AppFramework/Middleware/OCSMiddlewareTest.php index 7d8cadc677f..b2295fdc26d 100644 --- a/tests/lib/AppFramework/Middleware/OCSMiddlewareTest.php +++ b/tests/lib/AppFramework/Middleware/OCSMiddlewareTest.php @@ -27,14 +27,14 @@ use OCP\AppFramework\OCS\OCSBadRequestException; use OCP\AppFramework\OCS\OCSException; use OCP\AppFramework\OCS\OCSForbiddenException; use OCP\AppFramework\OCS\OCSNotFoundException; -use OC\AppFramework\Http\Request; +use OCP\IRequest; use OC\AppFramework\Middleware\OCSMiddleware; class OCSMiddlewareTest extends \Test\TestCase { /** - * @var Request + * @var IRequest */ private $request; @@ -101,8 +101,18 @@ class OCSMiddlewareTest extends \Test\TestCase { $this->assertInstanceOf('OCP\AppFramework\Http\OCSResponse', $result); $this->assertSame($message, $this->invokePrivate($result, 'message')); - $this->assertSame($code, $this->invokePrivate($result, 'statuscode')); - $this->assertSame(200, $result->getStatus()); + + if ($exception->getCode() === 0) { + $this->assertSame(\OCP\API::RESPOND_UNKNOWN_ERROR, $this->invokePrivate($result, 'statuscode')); + } else { + $this->assertSame($code, $this->invokePrivate($result, 'statuscode')); + } + + if ($exception instanceof OCSForbiddenException) { + $this->assertSame(Http::STATUS_UNAUTHORIZED, $result->getStatus()); + } else { + $this->assertSame(200, $result->getStatus()); + } } catch (\Exception $e) { $this->assertTrue($forward); $this->assertEquals($exception, $e); @@ -131,7 +141,11 @@ class OCSMiddlewareTest extends \Test\TestCase { $this->assertInstanceOf('OCP\AppFramework\Http\OCSResponse', $result); $this->assertSame($message, $this->invokePrivate($result, 'message')); - $this->assertSame($code, $this->invokePrivate($result, 'statuscode')); + if ($exception->getCode() === 0) { + $this->assertSame(\OCP\API::RESPOND_UNKNOWN_ERROR, $this->invokePrivate($result, 'statuscode')); + } else { + $this->assertSame($code, $this->invokePrivate($result, 'statuscode')); + } $this->assertSame($code, $result->getStatus()); } catch (\Exception $e) { $this->assertTrue($forward); @@ -161,7 +175,11 @@ class OCSMiddlewareTest extends \Test\TestCase { $this->assertInstanceOf('OCP\AppFramework\Http\OCSResponse', $result); $this->assertSame($message, $this->invokePrivate($result, 'message')); - $this->assertSame($code, $this->invokePrivate($result, 'statuscode')); + if ($exception->getCode() === 0) { + $this->assertSame(\OCP\API::RESPOND_UNKNOWN_ERROR, $this->invokePrivate($result, 'statuscode')); + } else { + $this->assertSame($code, $this->invokePrivate($result, 'statuscode')); + } $this->assertSame($code, $result->getStatus()); } catch (\Exception $e) { $this->assertTrue($forward); @@ -169,4 +187,50 @@ class OCSMiddlewareTest extends \Test\TestCase { } } + public function dataAfterController() { + $OCSController = $this->getMockBuilder('OCP\AppFramework\OCSController') + ->disableOriginalConstructor() + ->getMock(); + $controller = $this->getMockBuilder('OCP\AppFramework\Controller') + ->disableOriginalConstructor() + ->getMock(); + + return [ + [$OCSController, new Http\Response(), false], + [$OCSController, new Http\JSONResponse(), false], + [$OCSController, new Http\JSONResponse(['message' => 'foo']), false], + [$OCSController, new Http\JSONResponse(['message' => 'foo'], Http::STATUS_UNAUTHORIZED), true], + [$OCSController, new Http\JSONResponse(['message' => 'foo'], Http::STATUS_FORBIDDEN), true], + + [$controller, new Http\Response(), false], + [$controller, new Http\JSONResponse(), false], + [$controller, new Http\JSONResponse(['message' => 'foo']), false], + [$controller, new Http\JSONResponse(['message' => 'foo'], Http::STATUS_UNAUTHORIZED), false], + [$controller, new Http\JSONResponse(['message' => 'foo'], Http::STATUS_FORBIDDEN), false], + + ]; + } + + /** + * @dataProvider dataAfterController + * + * @param Controller $controller + * @param Http\Response $response + * @param bool $converted + */ + public function testAfterController($controller, $response, $converted) { + $OCSMiddleware = new OCSMiddleware($this->request); + $newResponse = $OCSMiddleware->afterController($controller, 'foo', $response); + + if ($converted === false) { + $this->assertSame($response, $newResponse); + } else { + $this->assertInstanceOf('\OCP\AppFramework\Http\OCSResponse', $newResponse); + /** @var Http\OCSResponse $newResponse */ + $this->assertSame($response->getData()['message'], $this->invokePrivate($newResponse, 'message')); + $this->assertSame(\OCP\API::RESPOND_UNAUTHORISED, $this->invokePrivate($newResponse, 'statuscode')); + $this->assertSame(Http::STATUS_UNAUTHORIZED, $newResponse->getStatus()); + } + } + } diff --git a/tests/lib/AppFramework/Routing/RoutingTest.php b/tests/lib/AppFramework/Routing/RoutingTest.php index 6c8b0f40133..d395584d011 100644 --- a/tests/lib/AppFramework/Routing/RoutingTest.php +++ b/tests/lib/AppFramework/Routing/RoutingTest.php @@ -24,7 +24,7 @@ class RoutingTest extends \Test\TestCase ] ]; - $this->assertSimpleOCSRoute($routes, 'folders.open', 'GET', '/folders/{folderId}/open', 'FoldersController', 'open'); + $this->assertSimpleOCSRoute($routes, 'folders.open', 'GET', '/apps/app1/folders/{folderId}/open', 'FoldersController', 'open'); } public function testSimpleRouteWithMissingVerb() @@ -42,7 +42,7 @@ class RoutingTest extends \Test\TestCase ] ]; - $this->assertSimpleOCSRoute($routes, 'folders.open', 'GET', '/folders/{folderId}/open', 'FoldersController', 'open'); + $this->assertSimpleOCSRoute($routes, 'folders.open', 'GET', '/apps/app1/folders/{folderId}/open', 'FoldersController', 'open'); } public function testSimpleRouteWithLowercaseVerb() @@ -60,7 +60,7 @@ class RoutingTest extends \Test\TestCase ] ]; - $this->assertSimpleOCSRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open'); + $this->assertSimpleOCSRoute($routes, 'folders.open', 'DELETE', '/apps/app1/folders/{folderId}/open', 'FoldersController', 'open'); } public function testSimpleRouteWithRequirements() @@ -78,7 +78,7 @@ class RoutingTest extends \Test\TestCase ] ]; - $this->assertSimpleOCSRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open', ['something']); + $this->assertSimpleOCSRoute($routes, 'folders.open', 'DELETE', '/apps/app1/folders/{folderId}/open', 'FoldersController', 'open', ['something']); } public function testSimpleRouteWithDefaults() @@ -97,7 +97,7 @@ class RoutingTest extends \Test\TestCase ] ]; - $this->assertSimpleOCSRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open', [], ['param' => 'foobar']); + $this->assertSimpleOCSRoute($routes, 'folders.open', 'DELETE', '/apps/app1/folders/{folderId}/open', 'FoldersController', 'open', [], ['param' => 'foobar']); } public function testSimpleRouteWithPostfix() @@ -115,7 +115,7 @@ class RoutingTest extends \Test\TestCase ] ]; - $this->assertSimpleOCSRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open', [], [], '_something'); + $this->assertSimpleOCSRoute($routes, 'folders.open', 'DELETE', '/apps/app1/folders/{folderId}/open', 'FoldersController', 'open', [], [], '_something'); } /** @@ -175,7 +175,7 @@ class RoutingTest extends \Test\TestCase ['name' => 'admin_folders#open_current', 'url' => '/folders/{folderId}/open', 'verb' => 'delete'] ]]; - $this->assertSimpleOCSRoute($routes, 'admin_folders.open_current', 'DELETE', '/folders/{folderId}/open', 'AdminFoldersController', 'openCurrent'); + $this->assertSimpleOCSRoute($routes, 'admin_folders.open_current', 'DELETE', '/apps/app1/folders/{folderId}/open', 'AdminFoldersController', 'openCurrent'); } public function testResource() diff --git a/tests/lib/Authentication/TwoFactorAuth/ManagerTest.php b/tests/lib/Authentication/TwoFactorAuth/ManagerTest.php index 586fd3aaa2e..f9489150e21 100644 --- a/tests/lib/Authentication/TwoFactorAuth/ManagerTest.php +++ b/tests/lib/Authentication/TwoFactorAuth/ManagerTest.php @@ -72,6 +72,19 @@ class ManagerTest extends TestCase { }); } + private function prepareNoProviders() { + $this->appManager->expects($this->any()) + ->method('getEnabledAppsForUser') + ->with($this->user) + ->will($this->returnValue([])); + + $this->appManager->expects($this->never()) + ->method('getAppInfo'); + + $this->manager->expects($this->never()) + ->method('loadTwoFactorApp'); + } + private function prepareProviders() { $this->appManager->expects($this->any()) ->method('getEnabledAppsForUser') @@ -164,7 +177,7 @@ class ManagerTest extends TestCase { ->method('remove') ->with('two_factor_auth_uid'); - $this->assertEquals(true, $this->manager->verifyChallenge('email', $this->user, $challenge)); + $this->assertTrue($this->manager->verifyChallenge('email', $this->user, $challenge)); } public function testVerifyChallengeInvalidProviderId() { @@ -177,7 +190,7 @@ class ManagerTest extends TestCase { $this->session->expects($this->never()) ->method('remove'); - $this->assertEquals(false, $this->manager->verifyChallenge('dontexist', $this->user, $challenge)); + $this->assertFalse($this->manager->verifyChallenge('dontexist', $this->user, $challenge)); } public function testVerifyInvalidChallenge() { @@ -191,16 +204,40 @@ class ManagerTest extends TestCase { $this->session->expects($this->never()) ->method('remove'); - $this->assertEquals(false, $this->manager->verifyChallenge('email', $this->user, $challenge)); + $this->assertFalse($this->manager->verifyChallenge('email', $this->user, $challenge)); } public function testNeedsSecondFactor() { + $user = $this->getMock('\OCP\IUser'); $this->session->expects($this->once()) ->method('exists') ->with('two_factor_auth_uid') ->will($this->returnValue(false)); - $this->assertEquals(false, $this->manager->needsSecondFactor()); + $this->assertFalse($this->manager->needsSecondFactor($user)); + } + + public function testNeedsSecondFactorUserIsNull() { + $user = null; + $this->session->expects($this->never()) + ->method('exists'); + + $this->assertFalse($this->manager->needsSecondFactor($user)); + } + + public function testNeedsSecondFactorWithNoProviderAvailableAnymore() { + $this->prepareNoProviders(); + + $user = null; + $this->session->expects($this->never()) + ->method('exists') + ->with('two_factor_auth_uid') + ->will($this->returnValue(true)); + $this->session->expects($this->never()) + ->method('remove') + ->with('two_factor_auth_uid'); + + $this->assertFalse($this->manager->needsSecondFactor($user)); } public function testPrepareTwoFactorLogin() { diff --git a/tests/lib/Cache/CappedMemoryCacheTest.php b/tests/lib/Cache/CappedMemoryCacheTest.php index 27e5df4e265..243a1ad74f1 100644 --- a/tests/lib/Cache/CappedMemoryCacheTest.php +++ b/tests/lib/Cache/CappedMemoryCacheTest.php @@ -25,8 +25,6 @@ namespace Test\Cache; /** * Class CappedMemoryCacheTest * - * @group DB - * * @package Test\Cache */ class CappedMemoryCacheTest extends TestCache { diff --git a/tests/lib/CapabilitiesManagerTest.php b/tests/lib/CapabilitiesManagerTest.php index d4dd52d07f1..75fbdb8d89f 100644 --- a/tests/lib/CapabilitiesManagerTest.php +++ b/tests/lib/CapabilitiesManagerTest.php @@ -21,14 +21,29 @@ namespace Test; +use OC\CapabilitiesManager; +use OCP\AppFramework\QueryException; +use OCP\Capabilities\ICapability; +use OCP\ILogger; + class CapabilitiesManagerTest extends TestCase { + /** @var CapabilitiesManager */ + private $manager; + + /** @var ILogger */ + private $logger; + + public function setUp() { + $this->logger = $this->getMockBuilder('OCP\ILogger')->getMock(); + $this->manager = new CapabilitiesManager($this->logger); + } + /** * Test no capabilities */ public function testNoCapabilities() { - $manager = new \OC\CapabilitiesManager(); - $res = $manager->getCapabilities(); + $res = $this->manager->getCapabilities(); $this->assertEmpty($res); } @@ -36,13 +51,11 @@ class CapabilitiesManagerTest extends TestCase { * Test a valid capabilitie */ public function testValidCapability() { - $manager = new \OC\CapabilitiesManager(); - - $manager->registerCapability(function() { + $this->manager->registerCapability(function() { return new SimpleCapability(); }); - $res = $manager->getCapabilities(); + $res = $this->manager->getCapabilities(); $this->assertEquals(['foo' => 1], $res); } @@ -52,13 +65,11 @@ class CapabilitiesManagerTest extends TestCase { * @expectedExceptionMessage The given Capability (Test\NoCapability) does not implement the ICapability interface */ public function testNoICapability() { - $manager = new \OC\CapabilitiesManager(); - - $manager->registerCapability(function() { + $this->manager->registerCapability(function() { return new NoCapability(); }); - $res = $manager->getCapabilities(); + $res = $this->manager->getCapabilities(); $this->assertEquals([], $res); } @@ -66,19 +77,17 @@ class CapabilitiesManagerTest extends TestCase { * Test a bunch of merged Capabilities */ public function testMergedCapabilities() { - $manager = new \OC\CapabilitiesManager(); - - $manager->registerCapability(function() { + $this->manager->registerCapability(function() { return new SimpleCapability(); }); - $manager->registerCapability(function() { + $this->manager->registerCapability(function() { return new SimpleCapability2(); }); - $manager->registerCapability(function() { + $this->manager->registerCapability(function() { return new SimpleCapability3(); }); - $res = $manager->getCapabilities(); + $res = $this->manager->getCapabilities(); $expected = [ 'foo' => 1, 'bar' => [ @@ -94,16 +103,14 @@ class CapabilitiesManagerTest extends TestCase { * Test deep identical capabilities */ public function testDeepIdenticalCapabilities() { - $manager = new \OC\CapabilitiesManager(); - - $manager->registerCapability(function() { + $this->manager->registerCapability(function() { return new DeepCapability(); }); - $manager->registerCapability(function() { + $this->manager->registerCapability(function() { return new DeepCapability(); }); - $res = $manager->getCapabilities(); + $res = $this->manager->getCapabilities(); $expected = [ 'foo' => [ 'bar' => [ @@ -114,9 +121,22 @@ class CapabilitiesManagerTest extends TestCase { $this->assertEquals($expected, $res); } + + public function testInvalidCapability() { + $this->manager->registerCapability(function () { + throw new QueryException(); + }); + + $this->logger->expects($this->once()) + ->method('error'); + + $res = $this->manager->getCapabilities(); + + $this->assertEquals([], $res); + } } -class SimpleCapability implements \OCP\Capabilities\ICapability { +class SimpleCapability implements ICapability { public function getCapabilities() { return [ 'foo' => 1 @@ -124,7 +144,7 @@ class SimpleCapability implements \OCP\Capabilities\ICapability { } } -class SimpleCapability2 implements \OCP\Capabilities\ICapability { +class SimpleCapability2 implements ICapability { public function getCapabilities() { return [ 'bar' => ['x' => 1] @@ -132,7 +152,7 @@ class SimpleCapability2 implements \OCP\Capabilities\ICapability { } } -class SimpleCapability3 implements \OCP\Capabilities\ICapability { +class SimpleCapability3 implements ICapability { public function getCapabilities() { return [ 'bar' => ['y' => 2] @@ -148,7 +168,7 @@ class NoCapability { } } -class DeepCapability implements \OCP\Capabilities\ICapability { +class DeepCapability implements ICapability { public function getCapabilities() { return [ 'foo' => [ @@ -159,4 +179,3 @@ class DeepCapability implements \OCP\Capabilities\ICapability { ]; } } - diff --git a/tests/lib/Encryption/DecryptAllTest.php b/tests/lib/Encryption/DecryptAllTest.php index d7cf2fb7baf..ed86b743c3b 100644 --- a/tests/lib/Encryption/DecryptAllTest.php +++ b/tests/lib/Encryption/DecryptAllTest.php @@ -251,18 +251,29 @@ class DecryptAllTest extends TestCase { ->setMethods(['decryptFile']) ->getMock(); + $storage = $this->getMockBuilder('OCP\Files\Storage') + ->disableOriginalConstructor()->getMock(); + + + $sharedStorage = $this->getMockBuilder('OCP\Files\Storage') + ->disableOriginalConstructor()->getMock(); + + $sharedStorage->expects($this->once())->method('instanceOfStorage') + ->with('OC\Files\Storage\Shared')->willReturn(true); + $this->view->expects($this->at(0))->method('getDirectoryContent') ->with('/user1/files')->willReturn( [ - new FileInfo('path', null, 'intPath', ['name' => 'foo', 'type'=>'dir'], null), - new FileInfo('path', null, 'intPath', ['name' => 'bar', 'type'=>'file', 'encrypted'=>true], null) + new FileInfo('path', $storage, 'intPath', ['name' => 'foo', 'type'=>'dir'], null), + new FileInfo('path', $storage, 'intPath', ['name' => 'bar', 'type'=>'file', 'encrypted'=>true], null), + new FileInfo('path', $sharedStorage, 'intPath', ['name' => 'shared', 'type'=>'file', 'encrypted'=>true], null), ] ); $this->view->expects($this->at(3))->method('getDirectoryContent') ->with('/user1/files/foo')->willReturn( [ - new FileInfo('path', null, 'intPath', ['name' => 'subfile', 'type'=>'file', 'encrypted'=>true], null) + new FileInfo('path', $storage, 'intPath', ['name' => 'subfile', 'type'=>'file', 'encrypted'=>true], null) ] ); diff --git a/tests/lib/Files/Mount/MountPointTest.php b/tests/lib/Files/Mount/MountPointTest.php index 392f10c7170..799f441a1ab 100644 --- a/tests/lib/Files/Mount/MountPointTest.php +++ b/tests/lib/Files/Mount/MountPointTest.php @@ -16,9 +16,9 @@ class MountPointTest extends \Test\TestCase { ->method('getId') ->will($this->returnValue(123)); - $loader = $this->getMock('\OCP\Files\Storage\IStorageFactory'); + $loader = $this->getMock('\OC\Files\Storage\StorageFactory'); $loader->expects($this->once()) - ->method('getInstance') + ->method('wrap') ->will($this->returnValue($storage)); $mountPoint = new \OC\Files\Mount\MountPoint( @@ -38,9 +38,9 @@ class MountPointTest extends \Test\TestCase { } public function testInvalidStorage() { - $loader = $this->getMock('\OCP\Files\Storage\IStorageFactory'); + $loader = $this->getMock('\OC\Files\Storage\StorageFactory'); $loader->expects($this->once()) - ->method('getInstance') + ->method('wrap') ->will($this->throwException(new \Exception('Test storage init exception'))); $called = false; diff --git a/tests/lib/L10N/FactoryTest.php b/tests/lib/L10N/FactoryTest.php index 98bb5ec13c9..bb72d84941c 100644 --- a/tests/lib/L10N/FactoryTest.php +++ b/tests/lib/L10N/FactoryTest.php @@ -15,7 +15,6 @@ use Test\TestCase; * Class FactoryTest * * @package Test\L10N - * @group DB */ class FactoryTest extends TestCase { @@ -44,7 +43,9 @@ class FactoryTest extends TestCase { ->disableOriginalConstructor() ->getMock(); - $this->userSession = $this->getMock('\OCP\IUserSession'); + $this->userSession = $this->getMockBuilder('\OCP\IUserSession') + ->disableOriginalConstructor() + ->getMock(); $this->serverRoot = \OC::$SERVERROOT; } @@ -110,7 +111,8 @@ class FactoryTest extends TestCase { ->method('getSystemValue') ->with('installed', false) ->willReturn(true); - $user = $this->getMock('\OCP\IUser'); + $user = $this->getMockBuilder('\OCP\IUser') + ->getMock(); $user->expects($this->once()) ->method('getUID') ->willReturn('MyUserUid'); @@ -143,7 +145,8 @@ class FactoryTest extends TestCase { ->method('getSystemValue') ->with('installed', false) ->willReturn(true); - $user = $this->getMock('\OCP\IUser'); + $user = $this->getMockBuilder('\OCP\IUser') + ->getMock(); $user->expects($this->once()) ->method('getUID') ->willReturn('MyUserUid'); @@ -185,7 +188,8 @@ class FactoryTest extends TestCase { ->method('getSystemValue') ->with('installed', false) ->willReturn(true); - $user = $this->getMock('\OCP\IUser'); + $user = $this->getMockBuilder('\OCP\IUser') + ->getMock(); $user->expects($this->once()) ->method('getUID') ->willReturn('MyUserUid'); @@ -230,7 +234,8 @@ class FactoryTest extends TestCase { ->method('getSystemValue') ->with('installed', false) ->willReturn(true); - $user = $this->getMock('\OCP\IUser'); + $user = $this->getMockBuilder('\OCP\IUser') + ->getMock(); $user->expects($this->once()) ->method('getUID') ->willReturn('MyUserUid'); diff --git a/tests/lib/L10N/L10nLegacyTest.php b/tests/lib/L10N/L10nLegacyTest.php index 1df22ba36bd..71b4e21f1a1 100644 --- a/tests/lib/L10N/L10nLegacyTest.php +++ b/tests/lib/L10N/L10nLegacyTest.php @@ -14,7 +14,6 @@ use DateTime; /** * Class Test_L10n - * @group DB */ class L10nLegacyTest extends \Test\TestCase { @@ -124,7 +123,11 @@ class L10nLegacyTest extends \Test\TestCase { } public function testFactoryGetLanguageCode() { - $factory = new \OC\L10N\Factory($this->getMock('OCP\IConfig'), $this->getMock('OCP\IRequest'), $this->getMock('OCP\IUserSession'), \OC::$SERVERROOT); + $factory = new \OC\L10N\Factory( + $this->getMockBuilder('OCP\IConfig')->getMock(), + $this->getMockBuilder('OCP\IRequest')->getMock(), + $this->getMockBuilder('OCP\IUserSession')->getMock(), + \OC::$SERVERROOT); $l = $factory->get('lib', 'de'); $this->assertEquals('de', $l->getLanguageCode()); } diff --git a/tests/lib/LoggerTest.php b/tests/lib/LoggerTest.php index 4b80c01f343..abb9deebd55 100644 --- a/tests/lib/LoggerTest.php +++ b/tests/lib/LoggerTest.php @@ -122,4 +122,20 @@ class LoggerTest extends TestCase { $this->assertContains('validateUserPass(*** sensitive parameters replaced ***)', $logLine); } } + + /** + * @dataProvider userAndPasswordData + */ + public function testDetecttryLogin($user, $password) { + $e = new \Exception('test'); + $this->logger->logException($e); + $logLines = $this->getLogs(); + + foreach($logLines as $logLine) { + $this->assertNotContains($user, $logLine); + $this->assertNotContains($password, $logLine); + $this->assertContains('tryLogin(*** sensitive parameters replaced ***)', $logLine); + } + } + } diff --git a/tests/lib/Notification/NotificationTest.php b/tests/lib/Notification/NotificationTest.php index c6ededf0142..93d48dfd604 100644 --- a/tests/lib/Notification/NotificationTest.php +++ b/tests/lib/Notification/NotificationTest.php @@ -495,6 +495,35 @@ class NotificationTest extends TestCase { $this->notification->addParsedAction($action); } + public function testAddActionParsedPrimaryEnd() { + /** @var \OCP\Notification\IAction|\PHPUnit_Framework_MockObject_MockObject $action */ + $action1 = $this->getMockBuilder('OCP\Notification\IAction') + ->disableOriginalConstructor() + ->getMock(); + $action1->expects($this->exactly(2)) + ->method('isValidParsed') + ->willReturn(true); + $action1->expects($this->exactly(2)) + ->method('isPrimary') + ->willReturn(false); + /** @var \OCP\Notification\IAction|\PHPUnit_Framework_MockObject_MockObject $action */ + $action2 = $this->getMockBuilder('OCP\Notification\IAction') + ->disableOriginalConstructor() + ->getMock(); + $action2->expects($this->once()) + ->method('isValidParsed') + ->willReturn(true); + $action2->expects($this->once()) + ->method('isPrimary') + ->willReturn(true); + + $this->assertSame($this->notification, $this->notification->addParsedAction($action1)); + $this->assertSame($this->notification, $this->notification->addParsedAction($action2)); + $this->assertSame($this->notification, $this->notification->addParsedAction($action1)); + + $this->assertEquals([$action2, $action1, $action1], $this->notification->getParsedActions()); + } + public function dataIsValid() { return [ [false, '', false], diff --git a/tests/lib/Repair/RepairLegacyStoragesTest.php b/tests/lib/Repair/RepairLegacyStoragesTest.php index aa51fe06a35..8d8366dde06 100644 --- a/tests/lib/Repair/RepairLegacyStoragesTest.php +++ b/tests/lib/Repair/RepairLegacyStoragesTest.php @@ -98,23 +98,9 @@ class RepairLegacyStoragesTest extends TestCase { $storageId = Storage::adjustStorageId($storageId); $numRows = $this->connection->executeUpdate($sql, array($storageId)); - $this->assertEquals(1, $numRows); + $this->assertSame(1, $numRows); - return \OC::$server->getDatabaseConnection()->lastInsertId('*PREFIX*storages'); - } - - /** - * Returns the storage id based on the numeric id - * - * @param int $storageId numeric id of the storage - * @return string storage id or null if not found - */ - private function getStorageId($storageId) { - $numericId = Storage::getNumericStorageId($storageId); - if (!is_null($numericId)) { - return (int)$numericId; - } - return null; + return (int)\OC::$server->getDatabaseConnection()->lastInsertId('*PREFIX*storages'); } /** @@ -144,8 +130,8 @@ class RepairLegacyStoragesTest extends TestCase { $this->repair->run($this->outputMock); - $this->assertNull($this->getStorageId($this->legacyStorageId)); - $this->assertEquals($newStorageNumId, $this->getStorageId($this->newStorageId)); + $this->assertNull(Storage::getNumericStorageId($this->legacyStorageId)); + $this->assertSame($newStorageNumId, Storage::getNumericStorageId($this->newStorageId)); } /** @@ -163,8 +149,8 @@ class RepairLegacyStoragesTest extends TestCase { $this->repair->run($this->outputMock); - $this->assertNull($this->getStorageId($this->legacyStorageId)); - $this->assertEquals($legacyStorageNumId, $this->getStorageId($this->newStorageId)); + $this->assertNull(Storage::getNumericStorageId($this->legacyStorageId)); + $this->assertSame($legacyStorageNumId, Storage::getNumericStorageId($this->newStorageId)); } /** @@ -185,8 +171,8 @@ class RepairLegacyStoragesTest extends TestCase { $this->repair->run($this->outputMock); - $this->assertNull($this->getStorageId($this->legacyStorageId)); - $this->assertEquals($legacyStorageNumId, $this->getStorageId($this->newStorageId)); + $this->assertNull(Storage::getNumericStorageId($this->legacyStorageId)); + $this->assertSame($legacyStorageNumId, Storage::getNumericStorageId($this->newStorageId)); } /** @@ -208,8 +194,8 @@ class RepairLegacyStoragesTest extends TestCase { $this->repair->run($this->outputMock); - $this->assertNull($this->getStorageId($this->legacyStorageId)); - $this->assertEquals($newStorageNumId, $this->getStorageId($this->newStorageId)); + $this->assertNull(Storage::getNumericStorageId($this->legacyStorageId)); + $this->assertSame($newStorageNumId, Storage::getNumericStorageId($this->newStorageId)); } /** @@ -233,8 +219,8 @@ class RepairLegacyStoragesTest extends TestCase { $this->repair->run($this->outputMock); // storages left alone - $this->assertEquals($legacyStorageNumId, $this->getStorageId($this->legacyStorageId)); - $this->assertEquals($newStorageNumId, $this->getStorageId($this->newStorageId)); + $this->assertSame($legacyStorageNumId, Storage::getNumericStorageId($this->legacyStorageId)); + $this->assertSame($newStorageNumId, Storage::getNumericStorageId($this->newStorageId)); // do not set the done flag $this->assertNotEquals('yes', $this->config->getAppValue('core', 'repairlegacystoragesdone')); @@ -255,7 +241,7 @@ class RepairLegacyStoragesTest extends TestCase { $this->repair->run($this->outputMock); - $this->assertEquals($numId, $this->getStorageId($storageId)); + $this->assertSame($numId, Storage::getNumericStorageId($storageId)); } /** @@ -273,7 +259,7 @@ class RepairLegacyStoragesTest extends TestCase { $this->repair->run($this->outputMock); - $this->assertEquals($numId, $this->getStorageId($storageId)); + $this->assertSame($numId, Storage::getNumericStorageId($storageId)); } /** @@ -291,7 +277,7 @@ class RepairLegacyStoragesTest extends TestCase { $this->repair->run($this->outputMock); - $this->assertEquals($numId, $this->getStorageId($storageId)); + $this->assertSame($numId, Storage::getNumericStorageId($storageId)); } /** diff --git a/tests/lib/Repair/RepairUnmergedSharesTest.php b/tests/lib/Repair/RepairUnmergedSharesTest.php index fe9b3e5b96f..7b9d2579389 100644 --- a/tests/lib/Repair/RepairUnmergedSharesTest.php +++ b/tests/lib/Repair/RepairUnmergedSharesTest.php @@ -28,6 +28,8 @@ use OCP\Migration\IOutput; use OCP\Migration\IRepairStep; use Test\TestCase; use OC\Share20\DefaultShareProvider; +use OCP\IUserManager; +use OCP\IGroupManager; /** * Tests for repairing invalid shares @@ -44,6 +46,15 @@ class RepairUnmergedSharesTest extends TestCase { /** @var \OCP\IDBConnection */ private $connection; + /** @var int */ + private $lastShareTime; + + /** @var IUserManager */ + private $userManager; + + /** @var IGroupManager */ + private $groupManager; + protected function setUp() { parent::setUp(); @@ -58,42 +69,14 @@ class RepairUnmergedSharesTest extends TestCase { $this->connection = \OC::$server->getDatabaseConnection(); $this->deleteAllShares(); - $user1 = $this->getMock('\OCP\IUser'); - $user1->expects($this->any()) - ->method('getUID') - ->will($this->returnValue('user1')); - - $user2 = $this->getMock('\OCP\IUser'); - $user2->expects($this->any()) - ->method('getUID') - ->will($this->returnValue('user2')); - - $users = [$user1, $user2]; - - $groupManager = $this->getMock('\OCP\IGroupManager'); - $groupManager->expects($this->any()) - ->method('getUserGroupIds') - ->will($this->returnValueMap([ - // owner - [$user1, ['samegroup1', 'samegroup2']], - // recipient - [$user2, ['recipientgroup1', 'recipientgroup2']], - ])); + $this->userManager = $this->getMock('\OCP\IUserManager'); + $this->groupManager = $this->getMock('\OCP\IGroupManager'); - $userManager = $this->getMock('\OCP\IUserManager'); - $userManager->expects($this->once()) - ->method('countUsers') - ->will($this->returnValue([2])); - $userManager->expects($this->once()) - ->method('callForAllUsers') - ->will($this->returnCallback(function(\Closure $closure) use ($users) { - foreach ($users as $user) { - $closure($user); - } - })); + // used to generate incremental stimes + $this->lastShareTime = time(); /** @var \OCP\IConfig $config */ - $this->repair = new RepairUnmergedShares($config, $this->connection, $userManager, $groupManager); + $this->repair = new RepairUnmergedShares($config, $this->connection, $this->userManager, $this->groupManager); } protected function tearDown() { @@ -108,6 +91,7 @@ class RepairUnmergedSharesTest extends TestCase { } private function createShare($type, $sourceId, $recipient, $targetName, $permissions, $parentId = null) { + $this->lastShareTime += 100; $qb = $this->connection->getQueryBuilder(); $values = [ 'share_type' => $qb->expr()->literal($type), @@ -119,7 +103,7 @@ class RepairUnmergedSharesTest extends TestCase { 'file_source' => $qb->expr()->literal($sourceId), 'file_target' => $qb->expr()->literal($targetName), 'permissions' => $qb->expr()->literal($permissions), - 'stime' => $qb->expr()->literal(time()), + 'stime' => $qb->expr()->literal($this->lastShareTime), ]; if ($parentId !== null) { $values['parent'] = $qb->expr()->literal($parentId); @@ -204,7 +188,7 @@ class RepairUnmergedSharesTest extends TestCase { [ // #2 bogus share // - outsider shares with group1, group2 - // - one subshare for each group share + // - one subshare for each group share, both with parenthesis // - but the targets do not match when grouped [ [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup1', '/test', 31], @@ -218,7 +202,7 @@ class RepairUnmergedSharesTest extends TestCase { [ ['/test', 31], ['/test', 31], - // reset to original name + // reset to original name as the sub-names have parenthesis ['/test', 31], ['/test', 31], // leave unrelated alone @@ -228,6 +212,54 @@ class RepairUnmergedSharesTest extends TestCase { [ // #3 bogus share // - outsider shares with group1, group2 + // - one subshare for each group share, both renamed manually + // - but the targets do not match when grouped + [ + [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup1', '/test', 31], + [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup2', '/test', 31], + // child of the previous ones + [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test_renamed (1 legit paren)', 31, 0], + [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test_renamed (2 legit paren)', 31, 1], + // different unrelated share + [Constants::SHARE_TYPE_GROUP, 456, 'recipientgroup1', '/test (4)', 31], + ], + [ + ['/test', 31], + ['/test', 31], + // reset to less recent subshare name + ['/test_renamed (2 legit paren)', 31], + ['/test_renamed (2 legit paren)', 31], + // leave unrelated alone + ['/test (4)', 31], + ] + ], + [ + // #4 bogus share + // - outsider shares with group1, group2 + // - one subshare for each group share, one with parenthesis + // - but the targets do not match when grouped + [ + [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup1', '/test', 31], + [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup2', '/test', 31], + // child of the previous ones + [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test (2)', 31, 0], + [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test_renamed', 31, 1], + // different unrelated share + [Constants::SHARE_TYPE_GROUP, 456, 'recipientgroup1', '/test (4)', 31], + ], + [ + ['/test', 31], + ['/test', 31], + // reset to less recent subshare name but without parenthesis + ['/test_renamed', 31], + ['/test_renamed', 31], + // leave unrelated alone + ['/test (4)', 31], + ] + ], + [ + // #5 bogus share + // - outsider shares with group1, group2 // - one subshare for each group share // - first subshare not renamed (as in real world scenario) // - but the targets do not match when grouped @@ -251,7 +283,7 @@ class RepairUnmergedSharesTest extends TestCase { ] ], [ - // #4 bogus share: + // #6 bogus share: // - outsider shares with group1, group2 // - one subshare for each group share // - non-matching targets @@ -276,7 +308,7 @@ class RepairUnmergedSharesTest extends TestCase { ] ], [ - // #5 bogus share: + // #7 bogus share: // - outsider shares with group1, group2 // - one subshare for each group share // - non-matching targets @@ -301,7 +333,7 @@ class RepairUnmergedSharesTest extends TestCase { ] ], [ - // #6 bogus share: + // #8 bogus share: // - outsider shares with group1, group2 and also user2 // - one subshare for each group share // - one extra share entry for direct share to user2 @@ -329,7 +361,7 @@ class RepairUnmergedSharesTest extends TestCase { ] ], [ - // #7 bogus share: + // #9 bogus share: // - outsider shares with group1 and also user2 // - no subshare at all // - one extra share entry for direct share to user2 @@ -350,7 +382,7 @@ class RepairUnmergedSharesTest extends TestCase { ] ], [ - // #8 legitimate share with own group: + // #10 legitimate share with own group: // - insider shares with both groups the user is already in // - no subshares in this case [ @@ -368,7 +400,7 @@ class RepairUnmergedSharesTest extends TestCase { ] ], [ - // #9 legitimate shares: + // #11 legitimate shares: // - group share with same group // - group share with other group // - user share where recipient renamed @@ -392,7 +424,7 @@ class RepairUnmergedSharesTest extends TestCase { ] ], [ - // #10 legitimate share: + // #12 legitimate share: // - outsider shares with group and user directly with different permissions // - no subshares // - same targets @@ -410,6 +442,42 @@ class RepairUnmergedSharesTest extends TestCase { ['/test (4)', 31], ] ], + [ + // #13 bogus share: + // - outsider shares with group1, user2 and then group2 + // - user renamed share as soon as it arrived before the next share (order) + // - one subshare for each group share + // - one extra share entry for direct share to user2 + // - non-matching targets + [ + // first share with group + [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup1', '/test', 31], + // recipient renames + [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/first', 31, 0], + // then direct share, user renames too + [Constants::SHARE_TYPE_USER, 123, 'user2', '/second', 31], + // another share with the second group + [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup2', '/test', 31], + // use renames it + [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/third', 31, 1], + // different unrelated share + [Constants::SHARE_TYPE_GROUP, 456, 'recipientgroup1', '/test (5)', 31], + ], + [ + // group share with group1 left alone + ['/test', 31], + // first subshare repaired + ['/third', 31], + // direct user share repaired + ['/third', 31], + // group share with group2 left alone + ['/test', 31], + // second subshare repaired + ['/third', 31], + // leave unrelated alone + ['/test (5)', 31], + ] + ], ]; } @@ -419,6 +487,38 @@ class RepairUnmergedSharesTest extends TestCase { * @dataProvider sharesDataProvider */ public function testMergeGroupShares($shares, $expectedShares) { + $user1 = $this->getMock('\OCP\IUser'); + $user1->expects($this->any()) + ->method('getUID') + ->will($this->returnValue('user1')); + + $user2 = $this->getMock('\OCP\IUser'); + $user2->expects($this->any()) + ->method('getUID') + ->will($this->returnValue('user2')); + + $users = [$user1, $user2]; + + $this->groupManager->expects($this->any()) + ->method('getUserGroupIds') + ->will($this->returnValueMap([ + // owner + [$user1, ['samegroup1', 'samegroup2']], + // recipient + [$user2, ['recipientgroup1', 'recipientgroup2']], + ])); + + $this->userManager->expects($this->once()) + ->method('countUsers') + ->will($this->returnValue([2])); + $this->userManager->expects($this->once()) + ->method('callForAllUsers') + ->will($this->returnCallback(function(\Closure $closure) use ($users) { + foreach ($users as $user) { + $closure($user); + } + })); + $shareIds = []; foreach ($shares as $share) { @@ -445,5 +545,30 @@ class RepairUnmergedSharesTest extends TestCase { $this->assertEquals($expectedShare[1], $share['permissions']); } } + + public function duplicateNamesProvider() { + return [ + // matching + ['filename (1).txt', true], + ['folder (2)', true], + ['filename (1)(2).txt', true], + // non-matching + ['filename ().txt', false], + ['folder ()', false], + ['folder (1x)', false], + ['folder (x1)', false], + ['filename (a)', false], + ['filename (1).', false], + ['filename (1).txt.txt', false], + ['filename (1)..txt', false], + ]; + } + + /** + * @dataProvider duplicateNamesProvider + */ + public function testIsPotentialDuplicateName($name, $expectedResult) { + $this->assertEquals($expectedResult, $this->invokePrivate($this->repair, 'isPotentialDuplicateName', [$name])); + } } diff --git a/tests/lib/ServerTest.php b/tests/lib/ServerTest.php index 534f3f8cfd5..2e5900c4ce5 100644 --- a/tests/lib/ServerTest.php +++ b/tests/lib/ServerTest.php @@ -158,6 +158,7 @@ class ServerTest extends \Test\TestCase { ['TagManager', '\OCP\ITagManager'], ['TempManager', '\OC\TempManager'], ['TempManager', '\OCP\ITempManager'], + ['ThemingDefaults', '\OCA\Theming\ThemingDefaults'], ['TrustedDomainHelper', '\OC\Security\TrustedDomainHelper'], ['SystemTagManager', '\OCP\SystemTag\ISystemTagManager'], diff --git a/tests/lib/Settings/Admin/AdditionalTest.php b/tests/lib/Settings/Admin/AdditionalTest.php new file mode 100644 index 00000000000..3a99893cf7c --- /dev/null +++ b/tests/lib/Settings/Admin/AdditionalTest.php @@ -0,0 +1,127 @@ +<?php +/** + * @copyright Copyright (c) 2016 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\Settings\Admin; + +use OC\Settings\Admin\Additional; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\IConfig; +use Test\TestCase; + +class AdditionalTest extends TestCase { + /** @var Additional */ + private $admin; + /** @var IConfig */ + private $config; + + public function setUp() { + parent::setUp(); + $this->config = $this->getMockBuilder('\OCP\IConfig')->getMock(); + + $this->admin = new Additional( + $this->config + ); + } + + public function testGetForm() { + $this->config + ->expects($this->at(0)) + ->method('getSystemValue') + ->with('mail_domain', '') + ->willReturn('mx.nextcloud.com'); + $this->config + ->expects($this->at(1)) + ->method('getSystemValue') + ->with('mail_from_address', '') + ->willReturn('no-reply@nextcloud.com'); + $this->config + ->expects($this->at(2)) + ->method('getSystemValue') + ->with('mail_smtpmode', '') + ->willReturn('php'); + $this->config + ->expects($this->at(3)) + ->method('getSystemValue') + ->with('mail_smtpsecure', '') + ->willReturn(true); + $this->config + ->expects($this->at(4)) + ->method('getSystemValue') + ->with('mail_smtphost', '') + ->willReturn('smtp.nextcloud.com'); + $this->config + ->expects($this->at(5)) + ->method('getSystemValue') + ->with('mail_smtpport', '') + ->willReturn(25); + $this->config + ->expects($this->at(6)) + ->method('getSystemValue') + ->with('mail_smtpauthtype', '') + ->willReturn('login'); + $this->config + ->expects($this->at(7)) + ->method('getSystemValue') + ->with('mail_smtpauth', false) + ->willReturn(true); + $this->config + ->expects($this->at(8)) + ->method('getSystemValue') + ->with('mail_smtpname', '') + ->willReturn('smtp.sender.com'); + $this->config + ->expects($this->at(9)) + ->method('getSystemValue') + ->with('mail_smtppassword', '') + ->willReturn('mypassword'); + + $expected = new TemplateResponse( + 'settings', + 'admin/additional-mail', + [ + 'sendmail_is_available' => (bool) \OC_Helper::findBinaryPath('sendmail'), + 'mail_domain' => 'mx.nextcloud.com', + 'mail_from_address' => 'no-reply@nextcloud.com', + 'mail_smtpmode' => 'php', + 'mail_smtpsecure' => true, + 'mail_smtphost' => 'smtp.nextcloud.com', + 'mail_smtpport' => 25, + 'mail_smtpauthtype' => 'login', + 'mail_smtpauth' => true, + 'mail_smtpname' => 'smtp.sender.com', + 'mail_smtppassword' => 'mypassword', + ], + '' + ); + + $this->assertEquals($expected, $this->admin->getForm()); + } + + public function testGetSection() { + $this->assertSame('additional', $this->admin->getSection()); + } + + public function testGetPriority() { + $this->assertSame(0, $this->admin->getPriority()); + } +} diff --git a/tests/lib/Settings/Admin/EncryptionTest.php b/tests/lib/Settings/Admin/EncryptionTest.php new file mode 100644 index 00000000000..a282b059c92 --- /dev/null +++ b/tests/lib/Settings/Admin/EncryptionTest.php @@ -0,0 +1,138 @@ +<?php +/** + * @copyright Copyright (c) 2016 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\Settings\Admin; + +use OC\Encryption\Manager; +use OC\Settings\Admin\Encryption; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\IUserManager; +use Test\TestCase; + +class EncryptionTest extends TestCase { + /** @var Encryption */ + private $admin; + /** @var Manager */ + private $manager; + /** @var IUserManager */ + private $userManager; + + public function setUp() { + parent::setUp(); + $this->manager = $this->getMockBuilder('\OC\Encryption\Manager')->disableOriginalConstructor()->getMock(); + $this->userManager = $this->getMockBuilder('\OCP\IUserManager')->getMock(); + + $this->admin = new Encryption( + $this->manager, + $this->userManager + ); + } + + /** + * @return array + */ + public function encryptionSettingsProvider() { + return [ + [true], + [false], + ]; + } + + /** + * @dataProvider encryptionSettingsProvider + * @param bool $enabled + */ + public function testGetFormWithOnlyOneBackend($enabled) { + $this->manager + ->expects($this->once()) + ->method('isEnabled') + ->willReturn($enabled); + $this->manager + ->expects($this->once()) + ->method('isReady') + ->willReturn($enabled); + $this->manager + ->expects($this->once()) + ->method('getEncryptionModules') + ->willReturn([]); + $this->userManager + ->expects($this->once()) + ->method('getBackends') + ->willReturn(['entry']); + $expected = new TemplateResponse( + 'settings', + 'admin/encryption', + [ + 'encryptionEnabled' => $enabled, + 'encryptionReady' => $enabled, + 'externalBackendsEnabled' => false, + 'encryptionModules' => [] + ], + '' + ); + $this->assertEquals($expected, $this->admin->getForm()); + } + + /** + * @dataProvider encryptionSettingsProvider + * @param bool $enabled + */ + public function testGetFormWithMultipleBackends($enabled) { + $this->manager + ->expects($this->once()) + ->method('isEnabled') + ->willReturn($enabled); + $this->manager + ->expects($this->once()) + ->method('isReady') + ->willReturn($enabled); + $this->manager + ->expects($this->once()) + ->method('getEncryptionModules') + ->willReturn([]); + $this->userManager + ->expects($this->once()) + ->method('getBackends') + ->willReturn(['entry', 'entry']); + $expected = new TemplateResponse( + 'settings', + 'admin/encryption', + [ + 'encryptionEnabled' => $enabled, + 'encryptionReady' => $enabled, + 'externalBackendsEnabled' => true, + 'encryptionModules' => [] + ], + '' + ); + $this->assertEquals($expected, $this->admin->getForm()); + } + + public function testGetSection() { + $this->assertSame('encryption', $this->admin->getSection()); + } + + public function testGetPriority() { + $this->assertSame(0, $this->admin->getPriority()); + } +} diff --git a/tests/lib/Settings/Admin/LoggingTest.php b/tests/lib/Settings/Admin/LoggingTest.php new file mode 100644 index 00000000000..181553d3894 --- /dev/null +++ b/tests/lib/Settings/Admin/LoggingTest.php @@ -0,0 +1,91 @@ +<?php +/** + * @copyright Copyright (c) 2016 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\Settings\Admin; + +use OC\Settings\Admin\Logging; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\IConfig; +use Test\TestCase; +use OC\Log\File as LogFile; + +class LoggingTest extends TestCase { + /** @var Logging */ + private $admin; + /** @var IConfig */ + private $config; + + public function setUp() { + parent::setUp(); + $this->config = $this->getMockBuilder('\OCP\IConfig')->getMock(); + + $this->admin = new Logging( + $this->config + ); + } + + public function testGetForm() { + $this->config + ->expects($this->at(0)) + ->method('getSystemValue') + ->with('log_type', 'file') + ->willReturn('owncloud'); + $this->config + ->expects($this->at(1)) + ->method('getSystemValue') + ->with('loglevel', 2) + ->willReturn(3); + + $numEntriesToLoad = 5; + $entries = LogFile::getEntries($numEntriesToLoad + 1); + $entriesRemaining = count($entries) > $numEntriesToLoad; + $entries = array_slice($entries, 0, $numEntriesToLoad); + + $logFileExists = file_exists(LogFile::getLogFilePath()) ; + $logFileSize = $logFileExists ? filesize(LogFile::getLogFilePath()) : 0; + + $expected = new TemplateResponse( + 'settings', + 'admin/logging', + [ + 'loglevel' => 3, + 'entries' => $entries, + 'entriesremain' => $entriesRemaining, + 'doesLogFileExist' => $logFileExists, + 'logFileSize' => $logFileSize, + 'showLog' => true, + ], + '' + ); + + $this->assertEquals($expected, $this->admin->getForm()); + } + + public function testGetSection() { + $this->assertSame('logging', $this->admin->getSection()); + } + + public function testGetPriority() { + $this->assertSame(0, $this->admin->getPriority()); + } +} diff --git a/tests/lib/Settings/Admin/ServerTest.php b/tests/lib/Settings/Admin/ServerTest.php new file mode 100644 index 00000000000..874422307e0 --- /dev/null +++ b/tests/lib/Settings/Admin/ServerTest.php @@ -0,0 +1,154 @@ +<?php +/** + * @copyright Copyright (c) 2016 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\Settings\Admin; + +use Doctrine\DBAL\Platforms\SqlitePlatform; +use OC\Settings\Admin\Server; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\IConfig; +use OCP\IDBConnection; +use OCP\IL10N; +use OCP\Lock\ILockingProvider; +use Test\TestCase; + +class ServerTest extends TestCase { + /** @var Server */ + private $admin; + /** @var IDBConnection */ + private $dbConnection; + /** @var IConfig */ + private $config; + /** @var ILockingProvider */ + private $lockingProvider; + /** @var IL10N */ + private $l10n; + + public function setUp() { + parent::setUp(); + $this->config = $this->getMockBuilder('\OCP\IConfig')->getMock(); + $this->dbConnection = $this->getMockBuilder('\OCP\IDBConnection')->getMock(); + $this->lockingProvider = $this->getMockBuilder('\OCP\Lock\ILockingProvider')->getMock(); + $this->l10n = $this->getMockBuilder('\OCP\IL10N')->getMock(); + + $this->admin = new Server( + $this->dbConnection, + $this->config, + $this->lockingProvider, + $this->l10n + ); + } + + public function testGetForm() { + $this->dbConnection + ->expects($this->once()) + ->method('getDatabasePlatform') + ->willReturn(new SqlitePlatform()); + $this->config + ->expects($this->at(0)) + ->method('getAppValue') + ->with('core', 'backgroundjobs_mode', 'ajax') + ->willReturn('ajax'); + $this->config + ->expects($this->at(2)) + ->method('getAppValue') + ->with('core', 'backgroundjobs_mode', 'ajax') + ->willReturn('ajax'); + $this->config + ->expects($this->at(4)) + ->method('getAppValue') + ->with('core', 'lastcron', false) + ->willReturn(false); + $this->config + ->expects($this->at(5)) + ->method('getAppValue') + ->with('core', 'cronErrors') + ->willReturn(''); + $this->config + ->expects($this->at(1)) + ->method('getSystemValue') + ->with('check_for_working_wellknown_setup', true) + ->willReturn(true); + $this->config + ->expects($this->at(3)) + ->method('getSystemValue') + ->with('cron_log', true) + ->willReturn(true); + $this->l10n + ->expects($this->at(0)) + ->method('t') + ->with('APCu') + ->willReturn('APCu'); + $this->l10n + ->expects($this->at(1)) + ->method('t') + ->with('Redis') + ->willReturn('Redis'); + $outdatedCaches = []; + $caches = [ + 'apcu' => ['name' => 'APCu', 'version' => '4.0.6'], + 'redis' => ['name' => 'Redis', 'version' => '2.2.5'], + ]; + foreach ($caches as $php_module => $data) { + $isOutdated = extension_loaded($php_module) && version_compare(phpversion($php_module), $data['version'], '<'); + if ($isOutdated) { + $outdatedCaches[$php_module] = $data; + } + } + $envPath = getenv('PATH'); + $expected = new TemplateResponse( + 'settings', + 'admin/server', + [ + // Diagnosis + 'readOnlyConfigEnabled' => \OC_Helper::isReadOnlyConfigEnabled(), + 'isLocaleWorking' => \OC_Util::isSetLocaleWorking(), + 'isAnnotationsWorking' => \OC_Util::isAnnotationsWorking(), + 'checkForWorkingWellKnownSetup' => true, + 'has_fileinfo' => \OC_Util::fileInfoLoaded(), + 'invalidTransactionIsolationLevel' => false, + 'getenvServerNotWorking' => empty($envPath), + 'OutdatedCacheWarning' => $outdatedCaches, + 'fileLockingType' => 'cache', + 'suggestedOverwriteCliUrl' => '', + + // Background jobs + 'backgroundjobs_mode' => 'ajax', + 'cron_log' => true, + 'lastcron' => false, + 'cronErrors' => '' + ], + '' + ); + + $this->assertEquals($expected, $this->admin->getForm()); + } + + public function testGetSection() { + $this->assertSame('server', $this->admin->getSection()); + } + + public function testGetPriority() { + $this->assertSame(0, $this->admin->getPriority()); + } +} diff --git a/tests/lib/Settings/Admin/SharingTest.php b/tests/lib/Settings/Admin/SharingTest.php new file mode 100644 index 00000000000..38ab7614d1c --- /dev/null +++ b/tests/lib/Settings/Admin/SharingTest.php @@ -0,0 +1,239 @@ +<?php +/** + * @copyright Copyright (c) 2016 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\Settings\Admin; + +use OC\Settings\Admin\Sharing; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\IConfig; +use Test\TestCase; + +class SharingTest extends TestCase { + /** @var Sharing */ + private $admin; + /** @var IConfig */ + private $config; + + public function setUp() { + parent::setUp(); + $this->config = $this->getMockBuilder('\OCP\IConfig')->getMock(); + + $this->admin = new Sharing( + $this->config + ); + } + + public function testGetFormWithoutExcludedGroups() { + $this->config + ->expects($this->at(0)) + ->method('getAppValue') + ->with('core', 'shareapi_exclude_groups_list', '') + ->willReturn(''); + $this->config + ->expects($this->at(1)) + ->method('getAppValue') + ->with('core', 'shareapi_allow_group_sharing', 'yes') + ->willReturn('yes'); + $this->config + ->expects($this->at(2)) + ->method('getAppValue') + ->with('core', 'shareapi_allow_links', 'yes') + ->willReturn('yes'); + $this->config + ->expects($this->at(3)) + ->method('getAppValue') + ->with('core', 'shareapi_allow_mail_notification', 'no') + ->willReturn('no'); + $this->config + ->expects($this->at(4)) + ->method('getAppValue') + ->with('core', 'shareapi_allow_public_notification', 'no') + ->willReturn('no'); + $this->config + ->expects($this->at(5)) + ->method('getAppValue') + ->with('core', 'shareapi_allow_public_upload', 'yes') + ->willReturn('yes'); + $this->config + ->expects($this->at(6)) + ->method('getAppValue') + ->with('core', 'shareapi_allow_resharing', 'yes') + ->willReturn('yes'); + $this->config + ->expects($this->at(7)) + ->method('getAppValue') + ->with('core', 'shareapi_allow_share_dialog_user_enumeration', 'yes') + ->willReturn('yes'); + $this->config + ->expects($this->at(8)) + ->method('getAppValue') + ->with('core', 'shareapi_enabled', 'yes') + ->willReturn('yes'); + $this->config + ->expects($this->at(9)) + ->method('getAppValue') + ->with('core', 'shareapi_default_expire_date', 'no') + ->willReturn('no'); + $this->config + ->expects($this->at(10)) + ->method('getAppValue') + ->with('core', 'shareapi_expire_after_n_days', '7') + ->willReturn('7'); + $this->config + ->expects($this->at(11)) + ->method('getAppValue') + ->with('core', 'shareapi_enforce_expire_date', 'no') + ->willReturn('no'); + $this->config + ->expects($this->at(12)) + ->method('getAppValue') + ->with('core', 'shareapi_exclude_groups', 'no') + ->willReturn('no'); + + $expected = new TemplateResponse( + 'settings', + 'admin/sharing', + [ + 'allowGroupSharing' => 'yes', + 'allowLinks' => 'yes', + 'allowMailNotification' => 'no', + 'allowPublicMailNotification' => 'no', + 'allowPublicUpload' => 'yes', + 'allowResharing' => 'yes', + 'allowShareDialogUserEnumeration' => 'yes', + 'enforceLinkPassword' => false, + 'onlyShareWithGroupMembers' => false, + 'shareAPIEnabled' => 'yes', + 'shareDefaultExpireDateSet' => 'no', + 'shareExpireAfterNDays' => '7', + 'shareEnforceExpireDate' => 'no', + 'shareExcludeGroups' => false, + 'shareExcludedGroupsList' => '', + ], + '' + ); + + $this->assertEquals($expected, $this->admin->getForm()); + } + + public function testGetFormWithExcludedGroups() { + $this->config + ->expects($this->at(0)) + ->method('getAppValue') + ->with('core', 'shareapi_exclude_groups_list', '') + ->willReturn('["NoSharers","OtherNoSharers"]'); + $this->config + ->expects($this->at(1)) + ->method('getAppValue') + ->with('core', 'shareapi_allow_group_sharing', 'yes') + ->willReturn('yes'); + $this->config + ->expects($this->at(2)) + ->method('getAppValue') + ->with('core', 'shareapi_allow_links', 'yes') + ->willReturn('yes'); + $this->config + ->expects($this->at(3)) + ->method('getAppValue') + ->with('core', 'shareapi_allow_mail_notification', 'no') + ->willReturn('no'); + $this->config + ->expects($this->at(4)) + ->method('getAppValue') + ->with('core', 'shareapi_allow_public_notification', 'no') + ->willReturn('no'); + $this->config + ->expects($this->at(5)) + ->method('getAppValue') + ->with('core', 'shareapi_allow_public_upload', 'yes') + ->willReturn('yes'); + $this->config + ->expects($this->at(6)) + ->method('getAppValue') + ->with('core', 'shareapi_allow_resharing', 'yes') + ->willReturn('yes'); + $this->config + ->expects($this->at(7)) + ->method('getAppValue') + ->with('core', 'shareapi_allow_share_dialog_user_enumeration', 'yes') + ->willReturn('yes'); + $this->config + ->expects($this->at(8)) + ->method('getAppValue') + ->with('core', 'shareapi_enabled', 'yes') + ->willReturn('yes'); + $this->config + ->expects($this->at(9)) + ->method('getAppValue') + ->with('core', 'shareapi_default_expire_date', 'no') + ->willReturn('no'); + $this->config + ->expects($this->at(10)) + ->method('getAppValue') + ->with('core', 'shareapi_expire_after_n_days', '7') + ->willReturn('7'); + $this->config + ->expects($this->at(11)) + ->method('getAppValue') + ->with('core', 'shareapi_enforce_expire_date', 'no') + ->willReturn('no'); + $this->config + ->expects($this->at(12)) + ->method('getAppValue') + ->with('core', 'shareapi_exclude_groups', 'no') + ->willReturn('yes'); + + $expected = new TemplateResponse( + 'settings', + 'admin/sharing', + [ + 'allowGroupSharing' => 'yes', + 'allowLinks' => 'yes', + 'allowMailNotification' => 'no', + 'allowPublicMailNotification' => 'no', + 'allowPublicUpload' => 'yes', + 'allowResharing' => 'yes', + 'allowShareDialogUserEnumeration' => 'yes', + 'enforceLinkPassword' => false, + 'onlyShareWithGroupMembers' => false, + 'shareAPIEnabled' => 'yes', + 'shareDefaultExpireDateSet' => 'no', + 'shareExpireAfterNDays' => '7', + 'shareEnforceExpireDate' => 'no', + 'shareExcludeGroups' => true, + 'shareExcludedGroupsList' => 'NoSharers|OtherNoSharers', + ], + '' + ); + + $this->assertEquals($expected, $this->admin->getForm()); + } + + public function testGetSection() { + $this->assertSame('sharing', $this->admin->getSection()); + } + + public function testGetPriority() { + $this->assertSame(0, $this->admin->getPriority()); + } +} diff --git a/tests/lib/Settings/Admin/TipsTricksTest.php b/tests/lib/Settings/Admin/TipsTricksTest.php new file mode 100644 index 00000000000..0e8857b56d0 --- /dev/null +++ b/tests/lib/Settings/Admin/TipsTricksTest.php @@ -0,0 +1,91 @@ +<?php +/** + * @copyright Copyright (c) 2016 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\Settings\Admin; + +use OC\Settings\Admin\TipsTricks; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\IConfig; +use Test\TestCase; + +class TipsTrickTest extends TestCase { + /** @var TipsTricks */ + private $admin; + /** @var IConfig */ + private $config; + + public function setUp() { + parent::setUp(); + $this->config = $this->getMockBuilder('\OCP\IConfig')->getMock(); + + $this->admin = new TipsTricks( + $this->config + ); + } + + public function testGetFormWithExcludedGroupsWithSQLite() { + $this->config + ->expects($this->once()) + ->method('getSystemValue') + ->with('dbtype') + ->willReturn('sqlite'); + + $expected = new TemplateResponse( + 'settings', + 'admin/tipstricks', + [ + 'databaseOverload' => true, + ], + '' + ); + + $this->assertEquals($expected, $this->admin->getForm()); + } + + public function testGetFormWithExcludedGroupsWithoutSQLite() { + $this->config + ->expects($this->once()) + ->method('getSystemValue') + ->with('dbtype') + ->willReturn('mysql'); + + $expected = new TemplateResponse( + 'settings', + 'admin/tipstricks', + [ + 'databaseOverload' => false, + ], + '' + ); + + $this->assertEquals($expected, $this->admin->getForm()); + } + + public function testGetSection() { + $this->assertSame('tips-tricks', $this->admin->getSection()); + } + + public function testGetPriority() { + $this->assertSame(0, $this->admin->getPriority()); + } +} diff --git a/tests/lib/Settings/ManagerTest.php b/tests/lib/Settings/ManagerTest.php new file mode 100644 index 00000000000..942a2bb63e7 --- /dev/null +++ b/tests/lib/Settings/ManagerTest.php @@ -0,0 +1,233 @@ +<?php +/** + * @copyright Copyright (c) 2016 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 Tests\Settings; + +use OC\Settings\Admin\Sharing; +use OC\Settings\Manager; +use OC\Settings\Section; +use OCP\Encryption\IManager; +use OCP\IConfig; +use OCP\IDBConnection; +use OCP\IL10N; +use OCP\ILogger; +use OCP\IUserManager; +use OCP\Lock\ILockingProvider; +use Test\TestCase; + +class ManagerTest extends TestCase { + /** @var Manager */ + private $manager; + /** @var ILogger */ + private $logger; + /** @var IDBConnection */ + private $dbConnection; + /** @var IL10N */ + private $l10n; + /** @var IConfig */ + private $config; + /** @var IManager */ + private $encryptionManager; + /** @var IUserManager */ + private $userManager; + /** @var ILockingProvider */ + private $lockingProvider; + + public function setUp() { + parent::setUp(); + + $this->logger = $this->getMockBuilder('\OCP\ILogger')->getMock(); + $this->dbConnection = $this->getMockBuilder('\OCP\IDBConnection')->getMock(); + $this->l10n = $this->getMockBuilder('\OCP\IL10N')->getMock(); + $this->config = $this->getMockBuilder('\OCP\IConfig')->getMock(); + $this->encryptionManager = $this->getMockBuilder('\OCP\Encryption\IManager')->getMock(); + $this->userManager = $this->getMockBuilder('\OCP\IUserManager')->getMock(); + $this->lockingProvider = $this->getMockBuilder('\OCP\Lock\ILockingProvider')->getMock(); + + $this->manager = new Manager( + $this->logger, + $this->dbConnection, + $this->l10n, + $this->config, + $this->encryptionManager, + $this->userManager, + $this->lockingProvider + ); + } + + public function testSetupSettings() { + $qb = $this->getMockBuilder('\OCP\DB\QueryBuilder\IQueryBuilder')->getMock(); + $qb + ->expects($this->once()) + ->method('select') + ->with('class') + ->willReturn($qb); + $this->dbConnection + ->expects($this->at(0)) + ->method('getQueryBuilder') + ->willReturn($qb); + $qb + ->expects($this->once()) + ->method('from') + ->with('admin_settings') + ->willReturn($qb); + $expressionBuilder = $this->getMockBuilder('\OCP\DB\QueryBuilder\IExpressionBuilder')->getMock(); + $qb + ->expects($this->once()) + ->method('expr') + ->willReturn($expressionBuilder); + $param = $this->getMockBuilder('\OCP\DB\QueryBuilder\IParameter')->getMock(); + $qb + ->expects($this->once()) + ->method('createNamedParameter') + ->with('OCA\Files\Settings\Admin') + ->willReturn($param); + $expressionBuilder + ->expects($this->once()) + ->method('eq') + ->with('class', $param) + ->willReturn('myString'); + $qb + ->expects($this->once()) + ->method('where') + ->with('myString') + ->willReturn($qb); + $stmt = $this->getMockBuilder('\Doctrine\DBAL\Driver\Statement')->getMock(); + $qb + ->expects($this->once()) + ->method('execute') + ->willReturn($stmt); + + $qb1 = $this->getMockBuilder('\OCP\DB\QueryBuilder\IQueryBuilder')->getMock(); + $qb1 + ->expects($this->once()) + ->method('insert') + ->with('admin_settings') + ->willReturn($qb1); + $this->dbConnection + ->expects($this->at(1)) + ->method('getQueryBuilder') + ->willReturn($qb1); + + $this->manager->setupSettings([ + 'admin' => 'OCA\Files\Settings\Admin', + ]); + } + + public function testGetAdminSections() { + $qb = $this->getMockBuilder('\OCP\DB\QueryBuilder\IQueryBuilder')->getMock(); + $expr = $this->getMockBuilder('OCP\DB\QueryBuilder\IExpressionBuilder')->getMock(); + $qb + ->expects($this->once()) + ->method('selectDistinct') + ->with('s.class') + ->willReturn($qb); + $qb + ->expects($this->once()) + ->method('addSelect') + ->with('s.priority') + ->willReturn($qb); + $qb + ->expects($this->exactly(2)) + ->method('from') + ->willReturn($qb); + $qb + ->expects($this->once()) + ->method('expr') + ->willReturn($expr); + $qb + ->expects($this->once()) + ->method('where') + ->willReturn($qb); + $stmt = $this->getMockBuilder('\Doctrine\DBAL\Driver\Statement')->getMock(); + $qb + ->expects($this->once()) + ->method('execute') + ->willReturn($stmt); + $this->dbConnection + ->expects($this->once()) + ->method('getQueryBuilder') + ->willReturn($qb); + $this->l10n + ->expects($this->any()) + ->method('t') + ->will($this->returnArgument(0)); + + $this->assertEquals([ + 0 => [new Section('server', 'Server settings', 0)], + 5 => [new Section('sharing', 'Sharing', 0)], + 45 => [new Section('encryption', 'Encryption', 0)], + 90 => [new Section('logging', 'Logging', 0)], + 98 => [new Section('additional', 'Additional settings', 0)], + 99 => [new Section('tips-tricks', 'Tips & tricks', 0)], + ], $this->manager->getAdminSections()); + } + + public function testGetAdminSettings() { + $qb = $this->getMockBuilder('\OCP\DB\QueryBuilder\IQueryBuilder')->getMock(); + $qb + ->expects($this->once()) + ->method('select') + ->with(['class', 'priority']) + ->willReturn($qb); + $qb + ->expects($this->once()) + ->method('from') + ->with('admin_settings') + ->willReturn($qb); + $expressionBuilder = $this->getMockBuilder('\OCP\DB\QueryBuilder\IExpressionBuilder')->getMock(); + $qb + ->expects($this->once()) + ->method('expr') + ->willReturn($expressionBuilder); + $param = $this->getMockBuilder('\OCP\DB\QueryBuilder\IParameter')->getMock(); + $qb + ->expects($this->once()) + ->method('createParameter') + ->with('section') + ->willReturn($param); + $expressionBuilder + ->expects($this->once()) + ->method('eq') + ->with('section', $param) + ->willReturn('myString'); + $qb + ->expects($this->once()) + ->method('where') + ->with('myString') + ->willReturn($qb); + $stmt = $this->getMockBuilder('\Doctrine\DBAL\Driver\Statement')->getMock(); + $qb + ->expects($this->once()) + ->method('execute') + ->willReturn($stmt); + $this->dbConnection + ->expects($this->exactly(2)) + ->method('getQueryBuilder') + ->willReturn($qb); + + $this->assertEquals([ + 0 => [new Sharing($this->config)], + ], $this->manager->getAdminSettings('sharing')); + } +} diff --git a/tests/lib/Settings/SectionTest.php b/tests/lib/Settings/SectionTest.php new file mode 100644 index 00000000000..422b931bb4b --- /dev/null +++ b/tests/lib/Settings/SectionTest.php @@ -0,0 +1,39 @@ +<?php +/** + * @copyright Copyright (c) 2016 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 Tests\Settings; + +use OC\Settings\Section; +use Test\TestCase; + +class SectionTest extends TestCase { + public function testGetID() { + $this->assertSame('ldap', (new Section('ldap', 'name', 1))->getID()); + } + public function testGetName() { + $this->assertSame('name', (new Section('ldap', 'name', 1))->getName()); + } + public function testGetPriority() { + $this->assertSame(1, (new Section('ldap', 'name', 1))->getPriority()); + } +} diff --git a/tests/lib/TestCase.php b/tests/lib/TestCase.php index 514cb6ea3a5..b9b18c644fd 100644 --- a/tests/lib/TestCase.php +++ b/tests/lib/TestCase.php @@ -24,6 +24,7 @@ namespace Test; use DOMDocument; use DOMNode; +use OC\Cache\CappedMemoryCache; use OC\Command\QueueBus; use OC\Files\Filesystem; use OC\Template\Base; diff --git a/tests/lib/UpdaterTest.php b/tests/lib/UpdaterTest.php index 643a18cc714..e45a9f08243 100644 --- a/tests/lib/UpdaterTest.php +++ b/tests/lib/UpdaterTest.php @@ -137,6 +137,12 @@ class UpdaterTest extends \Test\TestCase { ['8.1.0.0', '8.2.0.0', '8.1', true, true], ['8.2.0.1', '8.2.0.1', '8.1', true, true], ['8.3.0.0', '8.2.0.0', '8.1', true, true], + + // Downgrade of maintenance + ['9.0.53.0', '9.0.4.0', '8.1', false, false, 'nextcloud'], + // with vendor switch + ['9.0.53.0', '9.0.4.0', '8.1', true, false, ''], + ['9.0.53.0', '9.0.4.0', '8.1', true, false, 'owncloud'], ]; } @@ -148,12 +154,17 @@ class UpdaterTest extends \Test\TestCase { * @param string $allowedVersion * @param bool $result * @param bool $debug + * @param string $vendor */ - public function testIsUpgradePossible($oldVersion, $newVersion, $allowedVersion, $result, $debug = false) { + public function testIsUpgradePossible($oldVersion, $newVersion, $allowedVersion, $result, $debug = false, $vendor = 'nextcloud') { $this->config->expects($this->any()) ->method('getSystemValue') ->with('debug', false) ->willReturn($debug); + $this->config->expects($this->any()) + ->method('getAppValue') + ->with('core', 'vendor', '') + ->willReturn($vendor); $this->assertSame($result, $this->updater->isUpgradePossible($oldVersion, $newVersion, $allowedVersion)); } diff --git a/tests/lib/User/SessionTest.php b/tests/lib/User/SessionTest.php index 379c7e39442..4b8067117b1 100644 --- a/tests/lib/User/SessionTest.php +++ b/tests/lib/User/SessionTest.php @@ -371,7 +371,7 @@ class SessionTest extends \Test\TestCase { ->with('token_auth_enforced', false) ->will($this->returnValue(true)); $request - ->expects($this->exactly(2)) + ->expects($this->any()) ->method('getRemoteAddress') ->willReturn('192.168.0.1'); $this->throttler @@ -379,7 +379,7 @@ class SessionTest extends \Test\TestCase { ->method('sleepDelay') ->with('192.168.0.1'); $this->throttler - ->expects($this->once()) + ->expects($this->any()) ->method('getDelay') ->with('192.168.0.1') ->willReturn(0); @@ -412,7 +412,7 @@ class SessionTest extends \Test\TestCase { ->method('set') ->with('app_password', 'I-AM-AN-APP-PASSWORD'); $request - ->expects($this->exactly(2)) + ->expects($this->any()) ->method('getRemoteAddress') ->willReturn('192.168.0.1'); $this->throttler @@ -420,7 +420,7 @@ class SessionTest extends \Test\TestCase { ->method('sleepDelay') ->with('192.168.0.1'); $this->throttler - ->expects($this->once()) + ->expects($this->any()) ->method('getDelay') ->with('192.168.0.1') ->willReturn(0); @@ -459,7 +459,7 @@ class SessionTest extends \Test\TestCase { ->will($this->returnValue(true)); $request - ->expects($this->exactly(2)) + ->expects($this->any()) ->method('getRemoteAddress') ->willReturn('192.168.0.1'); $this->throttler @@ -467,7 +467,7 @@ class SessionTest extends \Test\TestCase { ->method('sleepDelay') ->with('192.168.0.1'); $this->throttler - ->expects($this->once()) + ->expects($this->any()) ->method('getDelay') ->with('192.168.0.1') ->willReturn(0); diff --git a/tests/phpunit-autotest.xml b/tests/phpunit-autotest.xml index 07de887c8cb..301f63a375d 100644 --- a/tests/phpunit-autotest.xml +++ b/tests/phpunit-autotest.xml @@ -8,9 +8,8 @@ > <testsuite name='ownCloud'> <directory suffix='.php'>lib/</directory> - <directory suffix='.php'>settings/</directory> - <directory suffix='.php'>core/</directory> - <directory suffix='.php'>ocs-provider/</directory> + <directory suffix='.php'>Settings/</directory> + <directory suffix='.php'>Core/</directory> <file>apps.php</file> </testsuite> <!-- filters for code coverage --> diff --git a/tests/phpunit.xml.dist b/tests/phpunit.xml.dist index 19fa38209a9..d3a5897dfaf 100644 --- a/tests/phpunit.xml.dist +++ b/tests/phpunit.xml.dist @@ -2,9 +2,8 @@ <phpunit bootstrap="bootstrap.php"> <testsuite name='ownCloud'> <directory suffix='.php'>lib/</directory> - <directory suffix='.php'>settings/</directory> - <directory suffix='.php'>core/</directory> - <directory suffix='.php'>ocs-provider/</directory> + <directory suffix='.php'>Settings/</directory> + <directory suffix='.php'>Core/</directory> <file>apps.php</file> </testsuite> <!-- filters for code coverage --> diff --git a/version.php b/version.php index e6298ae238f..8cf0822bc7e 100644 --- a/version.php +++ b/version.php @@ -25,7 +25,7 @@ // We only can count up. The 4. digit is only for the internal patchlevel to trigger DB upgrades // between betas, final and RCs. This is _not_ the public version number. Reset minor/patchlevel // when updating major/minor version number. -$OC_Version = array(9, 2, 0, 1); +$OC_Version = array(9, 2, 0, 2); // The human readable string $OC_VersionString = '11.0 alpha'; @@ -38,3 +38,5 @@ $OC_Channel = 'git'; // The build number $OC_Build = ''; +// Vendor of this package +$vendor = 'nextcloud'; |