From 7875b11b474ed545fbd7fd84b0abd684b1184129 Mon Sep 17 00:00:00 2001 From: Andrew Rodrigues Date: Thu, 24 Jan 2019 15:58:18 -0500 Subject: [PATCH 01/83] bump composer / persona --- install/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/package.json b/install/package.json index ff763fbf7b..40db66a770 100644 --- a/install/package.json +++ b/install/package.json @@ -80,7 +80,7 @@ "mousetrap": "^1.6.1", "mubsub-nbb": "^1.5.0", "nconf": "^0.10.0", - "nodebb-plugin-composer-default": "6.1.21", + "nodebb-plugin-composer-default": "6.1.22", "nodebb-plugin-dbsearch": "3.0.4", "nodebb-plugin-emoji": "^2.2.5", "nodebb-plugin-emoji-android": "2.0.0", @@ -90,7 +90,7 @@ "nodebb-plugin-spam-be-gone": "0.5.5", "nodebb-rewards-essentials": "0.0.13", "nodebb-theme-lavender": "5.0.8", - "nodebb-theme-persona": "9.1.11", + "nodebb-theme-persona": "9.1.14", "nodebb-theme-slick": "1.2.19", "nodebb-theme-vanilla": "10.1.16", "nodebb-widget-essentials": "4.0.12", From 6fdd48658997f2b10cb2fef4d32ce69729a55fbd Mon Sep 17 00:00:00 2001 From: RoiEX <8350879+RoiEXLab@users.noreply.github.com> Date: Wed, 10 Apr 2019 19:01:58 +0200 Subject: [PATCH 02/83] Update Node version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4aed8b6e35..afbf696c25 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ Our minimalist "Persona" theme gets you going right away, no coding experience r NodeBB requires the following software to be installed: -* A version of Node.js at least 6 or greater ([installation/upgrade instructions](https://github.com/nodesource/distributions)) +* A version of Node.js at least 8 or greater ([installation/upgrade instructions](https://github.com/nodesource/distributions)) * Redis, version 2.8.9 or greater **or** MongoDB, version 2.6 or greater * nginx, version 1.3.13 or greater (**only if** intending to use nginx to proxy requests to a NodeBB) From dd973abe8880f3c7f4901e06882973c26cc58aa1 Mon Sep 17 00:00:00 2001 From: "Misty (Bot)" Date: Wed, 10 Apr 2019 17:45:02 +0000 Subject: [PATCH 03/83] chore: incrementing version number - v1.12.1 --- install/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/package.json b/install/package.json index 8365f4f0e1..5d9009b433 100644 --- a/install/package.json +++ b/install/package.json @@ -2,7 +2,7 @@ "name": "nodebb", "license": "GPL-3.0", "description": "NodeBB Forum", - "version": "1.12.0", + "version": "1.12.1", "homepage": "http://www.nodebb.org", "repository": { "type": "git", @@ -171,4 +171,4 @@ "url": "https://github.com/barisusakli" } ] -} +} \ No newline at end of file From 93b688d00e2ed87267e2b1ce2fb7a023c1315d9b Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 10 Apr 2019 13:49:37 -0400 Subject: [PATCH 04/83] docs: updated changelog --- CHANGELOG.md | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 652b086e71..00db835f26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,108 @@ +#### 1.12.1 (2019-04-10) + +##### Chores + +* incrementing version number - v1.12.1 (dd973abe) +* comment cleanup (6bed51ef) +* bump persona (1f4db132) +* bump themes, fix: https://github.com/NodeBB/NodeBB/issues/7446 (0d19bb3d) +* incrementing version number - v1.12.0 (d87f8c52) +* **deps:** + * update dependency lint-staged to v8.1.5 (ae17481d) + * update node:8.15.1 docker digest to 918f0be (5f787d73) + * update node:8.15.1 docker digest to 3d43ad1 (ea77ad4e) + * update dependency grunt to v1.0.4 (a9130fad) + * update dependency eslint to v5.15.3 (d2932cf6) + * update dependency mocha to v6.0.2 (#7408) (1c671c32) + * update dependency eslint to v5.15.1 (d8486e88) + * update node:8.15.1 docker digest to c151597 (2cb0bdea) + * update dependency jsdom to v14 (a967253a) + +##### Documentation Changes + +* updating changelog (9aeb291e) + +##### New Features + +* #7515 (ac889db1) +* update unban logic/invocation and refactor User.bans module (3fbb6faf) +* add original sessionID to static:user.loggedOut (abe4abb6) +* #7501 (2ee2cd52) +* allow multiple cids for getActiveUsers (81306fff) +* manual password expiry. closes #7471 (24dcae21) +* #7358 (7211dde7) + +##### Bug Fixes + +* don't crash if templateData is undefined (eb2c3e56) +* clear children before building tree (397e062a) +* upgrade script date (4f3ca4d8) +* #7519 (ed91d3f2) +* #7517 (e479fad7) +* #7470 Properly handle recompilation of email templates (75ae29c1) +* resolve CORS error on uploading via URL (3871a02c) +* #7461 (dbc4d840) +* #7491 (8cc1864a) +* #7476 (4db0efe3) +* #7508 (b52dba5c) +* escape search snippet closes #7506 (e906bea4) +* #7490 once again (3ec9fc40) +* #7502 (3304ffe9) +* #7503 (1f3554ff) +* #7493, adding robots noindex meta tag to compose and reset routes (6415ba82) +* #7490, handling of image sizes if no size saved in db (86e1cdd5) +* #7494 (8f55ab13) +* #6911, email throttling options set (63e16ec0) +* throttling email output to 2 messages every second, fixes #6911 (33a1bf6c) +* #7469 missing email logos, occasionally (8d62ead3) +* #7487 (fddb783e) +* #7485 (78e0b983) +* move upload_url to prestart so it is defined in upgrade scripts (ad2d7a69) +* #7342 (cead89f0) +* #7477 (240f563a) +* #7473 (c289b904) +* #7378 (c37b2f2e) +* #7454 (dcdd41c7) +* #7472 (962b7f73) +* remove async.series, dont crash if postAtIndex is undefined (dd8d4f20) +* tests (c12e1d19) +* #7468 (b4a9bb10) +* #7444 Re-factor handling of og:image tags (#7463) (697a6597) +* tests (45d7e37a) +* callbacks (b48b6d75) +* return early if keys is empty (7addc5a0) +* return early if keys is empty (b3962c16) +* prevent infinite loops if category is already in children (b71e0eb1) +* #7448 (4732bed3) +* return early if there are not blocked uids (73d14e45) +* #7008 (756dfd8a) +* typo (f9d92db5) +* tests (e71ae80c) +* #7406 (cbfbcee5) +* #7432 (777ca032) +* change user/system cpu usage (aecdf739) +* strip exif data on image uploads (5eaa14e7) +* **deps:** + * update dependency nodebb-theme-persona to v9.1.29 (e5c12a49) + * update dependency nodebb-plugin-composer-default to v6.2.11 (30b042b8) + * update dependency nodebb-plugin-composer-default to v6.2.10 (cf180e09) + * update dependency html-to-text to v5 (b39ce25c) + * update dependency semver to v6 (8662aa95) + * update dependency spdx-license-list to v6 (447cf66b) + * update dependency nodebb-widget-essentials to v4.0.17 (#7489) (0f9cb86d) + * update dependency mongodb to v3.2.2 (#7482) (357f931c) + * update dependency nodemailer to v6 (0274c2bd) + * update dependency sharp to v0.22.0 (#7466) (c3261415) + * update dependency nodebb-theme-slick to v1.2.23 (#7460) (c20cd528) + * update dependency nodebb-theme-vanilla to v10.1.25 (fe30e06d) + * update dependency nodebb-theme-persona to v9.1.27 (5c605392) + * update dependency connect-redis to v3.4.1 (02804fe9) + * update dependency nodebb-plugin-composer-default to v6.2.9 (#7442) (80293146) + * update dependency nodebb-theme-vanilla to v10.1.23 (#7438) (48dd3c5b) + * update dependency nodebb-theme-slick to v1.2.22 (#7437) (3f4ae4b0) + * update dependency nodebb-theme-persona to v9.1.25 (#7436) (9887bb4f) + * update dependency nodebb-plugin-composer-default to v6.2.8 (#7435) (c18f2e1f) + ### 1.12.0 (2019-03-06) ##### Chores From 808c4909a4f5cb80d579936197e621a11b6561cf Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 10 Apr 2019 13:55:53 -0400 Subject: [PATCH 05/83] fix: #6438 only apply whitelist when fields request empty (#7528) * fix: #6438 only apply whitelist when fields request empty * feat: explicit password retrieval denied via getUsersFields --- src/user/data.js | 15 ++++----------- test/user.js | 8 ++++++++ 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/user/data.js b/src/user/data.js index 3ad1db6433..571482be0b 100644 --- a/src/user/data.js +++ b/src/user/data.js @@ -3,7 +3,6 @@ var async = require('async'); var validator = require('validator'); var nconf = require('nconf'); -var winston = require('winston'); var _ = require('lodash'); var db = require('../database'); @@ -85,17 +84,11 @@ module.exports = function (User) { plugins.fireHook('filter:user.whitelistFields', { uids: uids, whitelist: fieldWhitelist.slice() }, next); }, function (results, next) { - if (fields.length) { - const whitelistSet = new Set(results.whitelist); - fields = fields.filter(function (field) { - var isFieldWhitelisted = field && whitelistSet.has(field); - if (!isFieldWhitelisted) { - winston.verbose('[user/getUsersFields] ' + field + ' removed because it is not whitelisted, see `filter:user.whitelistFields`'); - } - return isFieldWhitelisted; - }); - } else { + if (!fields.length) { fields = results.whitelist; + } else { + // Never allow password retrieval via this method + fields = fields.filter(value => value !== 'password'); } db.getObjectsFields(uidsToUserKeys(uniqueUids), fields, next); diff --git a/test/user.js b/test/user.js index 857f909a5a..77fd9428a2 100644 --- a/test/user.js +++ b/test/user.js @@ -578,6 +578,14 @@ describe('User', function () { }); }); + it('should not return password even if explicitly requested', function (done) { + User.getUserFields(testUid, ['password'], function (err, payload) { + assert.ifError(err); + assert(!payload.hasOwnProperty('password')); + done(); + }); + }); + it('should return private data if field is whitelisted', function (done) { function filterMethod(data, callback) { data.whitelist.push('another_secret'); From d3ebda73705263bddd698d3c3792e6663b7d3daa Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 8 Apr 2019 10:43:15 -0400 Subject: [PATCH 06/83] fix: more graceful error handling and output for cli/reset --- src/cli/index.js | 5 ++++- src/cli/reset.js | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/cli/index.js b/src/cli/index.js index a7d937d416..e92d4b6fa1 100644 --- a/src/cli/index.js +++ b/src/cli/index.js @@ -242,7 +242,10 @@ resetCommand } require('./reset').reset(options, function (err) { - if (err) { throw err; } + if (err) { + return process.exit(1); + } + require('../meta/build').buildAll(function (err) { if (err) { throw err; } diff --git a/src/cli/reset.js b/src/cli/reset.js index 33b1f01601..1e1f9a0a50 100644 --- a/src/cli/reset.js +++ b/src/cli/reset.js @@ -77,8 +77,8 @@ exports.reset = function (options, callback) { async.series([db.init].concat(tasks), function (err) { if (err) { - winston.error('[reset] Errors were encountered during reset', err); - throw err; + winston.error('[reset] Errors were encountered during reset -- ' + err.message); + return callback(err); } winston.info('[reset] Reset complete'); From 97a7f02feb56a0c90ed5b9facbfbbe43887095dc Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 5 Apr 2019 22:06:02 +0000 Subject: [PATCH 07/83] fix(deps): update dependency mongodb to v3.2.3 --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 5d9009b433..edb9dddcea 100644 --- a/install/package.json +++ b/install/package.json @@ -75,7 +75,7 @@ "material-design-lite": "^1.3.0", "mime": "^2.2.0", "mkdirp": "^0.5.1", - "mongodb": "3.2.2", + "mongodb": "3.2.3", "morgan": "^1.9.0", "mousetrap": "^1.6.1", "mubsub-nbb": "^1.5.0", From b71697723717dd14447de35079b8ac97bc1f3bae Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 8 Apr 2019 18:52:03 +0000 Subject: [PATCH 08/83] chore(deps): update dependency mocha to v6.1.2 --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index edb9dddcea..c0f9377421 100644 --- a/install/package.json +++ b/install/package.json @@ -143,7 +143,7 @@ "husky": "1.3.1", "jsdom": "14.0.0", "lint-staged": "8.1.5", - "mocha": "6.0.2", + "mocha": "6.1.2", "mocha-lcov-reporter": "1.3.0", "nyc": "13.3.0", "smtp-server": "3.5.0" From c38db4f7650131e702c39059d61f6f6610e59d0d Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 10 Apr 2019 14:00:33 -0400 Subject: [PATCH 09/83] feat: #7515 This reverts commit 81f8cfe3da3b1d1521ad08a118bf1edb4abd7fef. --- public/language/en-GB/admin/manage/users.json | 5 +++ public/src/admin/manage/users.js | 6 ++++ src/controllers/admin/users.js | 6 +++- src/views/admin/manage/users.tpl | 33 ++++++++++++------- 4 files changed, 38 insertions(+), 12 deletions(-) diff --git a/public/language/en-GB/admin/manage/users.json b/public/language/en-GB/admin/manage/users.json index 05fc3f043f..01088037f2 100644 --- a/public/language/en-GB/admin/manage/users.json +++ b/public/language/en-GB/admin/manage/users.json @@ -28,6 +28,11 @@ "pills.banned": "Banned", "pills.search": "User Search", + "50-per-page": "50 per page", + "100-per-page": "100 per page", + "250-per-page": "250 per page", + "500-per-page": "500 per page", + "search.uid": "By User ID", "search.uid-placeholder": "Enter a user ID to search", "search.username": "By User Name", diff --git a/public/src/admin/manage/users.js b/public/src/admin/manage/users.js index 73e33b391b..ef85db041d 100644 --- a/public/src/admin/manage/users.js +++ b/public/src/admin/manage/users.js @@ -12,6 +12,12 @@ define('admin/manage/users', ['translator', 'benchpress'], function (translator, } navPills.removeClass('active').find('a[href="' + pathname + '"]').parent().addClass('active'); + $('#results-per-page').val(ajaxify.data.resultsPerPage).on('change', function () { + var query = utils.params(); + query.resultsPerPage = $('#results-per-page').val(); + ajaxify.go(window.location.pathname + '?' + $.param(query)); + }); + function getSelectedUids() { var uids = []; diff --git a/src/controllers/admin/users.js b/src/controllers/admin/users.js index 743834e1d7..cb4f2b7420 100644 --- a/src/controllers/admin/users.js +++ b/src/controllers/admin/users.js @@ -120,7 +120,10 @@ usersController.registrationQueue = function (req, res, next) { function getUsers(set, section, min, max, req, res, next) { var page = parseInt(req.query.page, 10) || 1; - var resultsPerPage = 50; + var resultsPerPage = parseInt(req.query.resultsPerPage, 10) || 50; + if (![50, 100, 250, 500].includes(resultsPerPage)) { + resultsPerPage = 50; + } var start = Math.max(0, page - 1) * resultsPerPage; var stop = start + resultsPerPage - 1; var byScore = min !== undefined && max !== undefined; @@ -161,6 +164,7 @@ function getUsers(set, section, min, max, req, res, next) { users: results.users, page: page, pageCount: Math.max(1, Math.ceil(results.count / resultsPerPage)), + resultsPerPage: resultsPerPage, }; data[section] = true; render(req, res, data); diff --git a/src/views/admin/manage/users.tpl b/src/views/admin/manage/users.tpl index 4b65102352..ef250aa980 100644 --- a/src/views/admin/manage/users.tpl +++ b/src/views/admin/manage/users.tpl @@ -33,17 +33,28 @@ +
- [[admin/manage/users:inactive.3-months]] - [[admin/manage/users:inactive.6-months]] - [[admin/manage/users:inactive.12-months]] + [[admin/manage/users:inactive.3-months]] + [[admin/manage/users:inactive.6-months]] + [[admin/manage/users:inactive.12-months]]
From 3a35b77d5f58d2c65e1e0bb4078b4a791c0dc5e7 Mon Sep 17 00:00:00 2001 From: "Misty (Bot)" Date: Thu, 11 Apr 2019 09:26:16 +0000 Subject: [PATCH 10/83] Latest translations and fallbacks --- .../language/it/admin/manage/post-queue.json | 18 +++--- .../language/it/admin/manage/privileges.json | 56 +++++++++---------- public/language/it/admin/manage/tags.json | 32 +++++------ public/language/it/admin/manage/uploads.json | 14 ++--- public/language/it/admin/menu.json | 2 +- public/language/it/admin/settings/chat.json | 18 +++--- public/language/it/admin/settings/post.json | 6 +- public/language/it/notifications.json | 2 +- public/language/it/pages.json | 2 +- public/language/it/success.json | 2 +- 10 files changed, 76 insertions(+), 76 deletions(-) diff --git a/public/language/it/admin/manage/post-queue.json b/public/language/it/admin/manage/post-queue.json index 4de24c991b..7c82529de8 100644 --- a/public/language/it/admin/manage/post-queue.json +++ b/public/language/it/admin/manage/post-queue.json @@ -1,11 +1,11 @@ { - "post-queue": "Post Queue", - "description": "There are no posts in the post queue.
To enable this feature, go to Settings → Post → Posting Restrictions and enable Post Queue.", - "user": "User", - "category": "Category", - "title": "Title", - "content": "Content", - "posted": "Posted", - "reply-to": "Reply to \"%1\"", - "content-editable": "You can click on individual content to edit before posting." + "post-queue": "Post in attesa", + "description": "Non ci sono post nei post in attesa.
Per abilitare questa funzione, vai in Impostazioni → Post → Restrizioni pubblicazione e abilita Post in attesa", + "user": "Utente", + "category": "Categoria", + "title": "Titolo", + "content": "Contenuto", + "posted": "Pubblicato", + "reply-to": "Rispondi a \"%1\"", + "content-editable": "Puoi cliccare su singoli contenuti per modificarli prima della pubblicazione." } \ No newline at end of file diff --git a/public/language/it/admin/manage/privileges.json b/public/language/it/admin/manage/privileges.json index 5e6d451b67..53cdfda762 100644 --- a/public/language/it/admin/manage/privileges.json +++ b/public/language/it/admin/manage/privileges.json @@ -1,34 +1,34 @@ { - "global": "Global", - "global.no-users": "No user-specific global privileges.", + "global": "Globale", + "global.no-users": "Nessun privilegio globale specifico per l'utente.", "chat": "Chat", - "upload-images": "Upload Images", - "upload-files": "Upload Files", - "signature": "Signature", + "upload-images": "Carica immagini", + "upload-files": "Carica file", + "signature": "Firma", "ban": "Ban", - "search-content": "Search Content", - "search-users": "Search Users", - "search-tags": "Search Tags", - "view-users": "View Users", - "view-tags": "View Tags", - "view-groups": "View Groups", - "allow-local-login": "Local Login", - "allow-group-creation": "Group Create", + "search-content": "Cerca contenuto", + "search-users": "Cerca utenti", + "search-tags": "Ricerca tag", + "view-users": "Visualizza utenti", + "view-tags": "Visualizza tag", + "view-groups": "Visualizza gruppi", + "allow-local-login": "Accesso locale", + "allow-group-creation": "Crea gruppo", - "find-category": "Find Category", - "access-category": "Access Category", - "access-topics": "Access Topics", - "create-topics": "Create Topics", - "reply-to-topics": "Reply to Topics", - "tag-topics": "Tag Topics", - "edit-posts": "Edit Posts", - "view-edit-history": "View Edit History", - "delete-posts": "Delete Posts", - "view_deleted": "View Deleted Posts", - "upvote-posts": "Upvote Posts", - "downvote-posts": "Downvote Posts", - "delete-topics": "Delete Topics", - "purge": "Purge", - "moderate": "Moderate" + "find-category": "Trova categoria", + "access-category": "Accesso categoria", + "access-topics": "Accesso discussioni", + "create-topics": "Crea discussioni", + "reply-to-topics": "Risposta alle discussioni", + "tag-topics": "Tag discussioni", + "edit-posts": "Modifica i post", + "view-edit-history": "Visualizza cronologia modifiche", + "delete-posts": "Elimina post", + "view_deleted": "Visualizza post eliminati", + "upvote-posts": "Post negativi", + "downvote-posts": "Post positivi", + "delete-topics": "Elimina discussioni", + "purge": "Elimina definitivamente", + "moderate": "Moderata" } \ No newline at end of file diff --git a/public/language/it/admin/manage/tags.json b/public/language/it/admin/manage/tags.json index df597a6166..529940c3c4 100644 --- a/public/language/it/admin/manage/tags.json +++ b/public/language/it/admin/manage/tags.json @@ -1,19 +1,19 @@ { - "none": "Your forum does not have any topics with tags yet.", - "bg-color": "Background Colour", - "text-color": "Text Colour", - "create-modify": "Create & Modify Tags", - "description": "Select tags via clicking and/or dragging, use shift to select multiple.", - "create": "Create Tag", - "modify": "Modify Tags", - "rename": "Rename Tags", - "delete": "Delete Selected Tags", - "search": "Search for tags...", - "settings": "Click here to visit the tag settings page.", - "name": "Tag Name", + "none": "Il tuo forum non ha ancora discussioni con tag.", + "bg-color": "Colore di sfondo", + "text-color": "Colore del testo", + "create-modify": "Crea e modifica i tag", + "description": "Seleziona i tag facendo clic e/o trascinando, utilizza shift per selezionare più tag.", + "create": "Crea tag", + "modify": "Modifica i tag", + "rename": "Rinomina i tag", + "delete": "Elimina i tag selezionati", + "search": "Ricerca per tag...", + "settings": "Clicca qui per visitare la pagina impostazioni tag.", + "name": "Nome Tag", - "alerts.editing-multiple": "Editing multiple tags", - "alerts.editing-x": "Editing \"%1\" tag", - "alerts.confirm-delete": "Do you want to delete the selected tags?", - "alerts.update-success": "Tag Updated!" + "alerts.editing-multiple": "Modifica di tag multipli", + "alerts.editing-x": "Modifica \"%1\" tag", + "alerts.confirm-delete": "Vuoi eliminare i tag selezionati?", + "alerts.update-success": "Tag aggiornato!" } \ No newline at end of file diff --git a/public/language/it/admin/manage/uploads.json b/public/language/it/admin/manage/uploads.json index 21bc8201fc..92f8828c3e 100644 --- a/public/language/it/admin/manage/uploads.json +++ b/public/language/it/admin/manage/uploads.json @@ -1,9 +1,9 @@ { - "upload-file": "Upload File", - "filename": "Filename", - "usage": "Post Usage", - "orphaned": "Orphaned", - "size/filecount": "Size / Filecount", - "confirm-delete": "Do you really want to delete this file?", - "filecount": "%1 files" + "upload-file": "Carica file", + "filename": "Nome file", + "usage": "Uso post", + "orphaned": "Orfano", + "size/filecount": "Dimensione / Numero file", + "confirm-delete": "Vuoi davvero cancellare questo file?", + "filecount": "%1 file" } \ No newline at end of file diff --git a/public/language/it/admin/menu.json b/public/language/it/admin/menu.json index cd95b5891f..c4b15896cd 100644 --- a/public/language/it/admin/menu.json +++ b/public/language/it/admin/menu.json @@ -14,7 +14,7 @@ "manage/users": "Users", "manage/admins-mods": "Admins & Mods", "manage/registration": "Registration Queue", - "manage/post-queue": "Post Queue", + "manage/post-queue": "Post in attesa", "manage/groups": "Groups", "manage/ip-blacklist": "IP Blacklist", "manage/uploads": "Uploads", diff --git a/public/language/it/admin/settings/chat.json b/public/language/it/admin/settings/chat.json index c538790b95..897767cb3a 100644 --- a/public/language/it/admin/settings/chat.json +++ b/public/language/it/admin/settings/chat.json @@ -1,11 +1,11 @@ { - "chat-settings": "Chat Settings", - "disable": "Disable chat", - "disable-editing": "Disable chat message editing/deletion", - "disable-editing-help": "Administrators and global moderators are exempt from this restriction", - "max-length": "Maximum length of chat messages", - "max-room-size": "Maximum number of users in chat rooms", - "delay": "Time between chat messages in milliseconds", - "restrictions.seconds-edit-after": "Number of seconds before users are allowed to edit chat messages after posting. (0 disabled)", - "restrictions.seconds-delete-after": "Number of seconds before users are allowed to delete chat messages after posting. (0 disabled)" + "chat-settings": "Impostazioni Chat", + "disable": "Disabilita chat", + "disable-editing": "Disabilita modifica/cancellazione messaggio chat", + "disable-editing-help": "Gli amministratori e i moderatori globali sono esenti da questa restrizione.", + "max-length": "Lunghezza massima dei messaggi della chat", + "max-room-size": "Numero massimo di utenti nelle chat room", + "delay": "Tempo tra i messaggi della chat in millisecondi", + "restrictions.seconds-edit-after": "Numero di secondi prima che gli utenti siano autorizzati a modificare i messaggi di chat dopo la pubblicazione. (0 disabilitato)", + "restrictions.seconds-delete-after": "Numero di secondi prima che gli utenti siano autorizzati a cancellare i messaggi di chat dopo la pubblicazione. (0 disabilitato)" } \ No newline at end of file diff --git a/public/language/it/admin/settings/post.json b/public/language/it/admin/settings/post.json index 6594fe384b..356809fc3a 100644 --- a/public/language/it/admin/settings/post.json +++ b/public/language/it/admin/settings/post.json @@ -7,11 +7,11 @@ "sorting.most-posts": "Most Posts", "sorting.topic-default": "Default Topic Sorting", "length": "Post Length", - "restrictions": "Posting Restrictions", + "restrictions": "Restrizioni pubblicazione", "restrictions-new": "New User Restrictions", - "restrictions.post-queue": "Enable post queue", + "restrictions.post-queue": "Abilita post in attesa", "restrictions-new.post-queue": "Enable new user restrictions", - "restrictions.post-queue-help": "Enabling post queue will put the posts of new users in a queue for approval.", + "restrictions.post-queue-help": "Abilitando post in attesa, i post dei nuovi utenti saranno messi in attesa per l'approvazione.", "restrictions-new.post-queue-help": "Enabling new user restrictions will set restrictions on posts created by new users.", "restrictions.seconds-between": "Seconds between posts", "restrictions.seconds-between-new": "Seconds between posts for new users", diff --git a/public/language/it/notifications.json b/public/language/it/notifications.json index 66fe877d72..be79d92047 100644 --- a/public/language/it/notifications.json +++ b/public/language/it/notifications.json @@ -58,7 +58,7 @@ "notificationType_group-invite": "Quando ricevi un invito ad un gruppo", "notificationType_group-request-membership": "When someone requests to join a group you own", "notificationType_new-register": "Quando qualcuno viene aggiunto alla coda di registrazione", - "notificationType_post-queue": "Quando un nuovo post è in attesa di revisione", + "notificationType_post-queue": "Quando un nuovo post è in attesa", "notificationType_new-post-flag": "Quando un post viene segnalato", "notificationType_new-user-flag": "Quando un utente viene segnalato" } \ No newline at end of file diff --git a/public/language/it/pages.json b/public/language/it/pages.json index 72d93e6ee5..0556ae1a03 100644 --- a/public/language/it/pages.json +++ b/public/language/it/pages.json @@ -13,7 +13,7 @@ "moderator-tools": "Strumenti di moderazione", "flagged-content": "Contenuti Segnalati", "ip-blacklist": "Lista nera degli IP", - "post-queue": "Post in coda", + "post-queue": "Post in attesa", "users/online": "Utenti Online", "users/latest": "Ultimi Utenti", "users/sort-posts": "Utenti maggiori contributori", diff --git a/public/language/it/success.json b/public/language/it/success.json index 35f6d5b2a9..f75ae41f5a 100644 --- a/public/language/it/success.json +++ b/public/language/it/success.json @@ -1,7 +1,7 @@ { "success": "Riuscito", "topic-post": "Hai postato correttamente.", - "post-queued": "La tua discussione è in attesa di approvazione.", + "post-queued": "Il tuo post è in attesa di approvazione.", "authentication-successful": "Autenticazione Riuscita", "settings-saved": "Impostazioni salvate!" } \ No newline at end of file From 35618de1a73dd2c2dee9b9a57c9999242aae5753 Mon Sep 17 00:00:00 2001 From: "Misty (Bot)" Date: Fri, 12 Apr 2019 09:26:28 +0000 Subject: [PATCH 11/83] Latest translations and fallbacks --- .../language/it/admin/manage/categories.json | 6 ++--- .../it/admin/manage/registration.json | 26 +++++++++---------- public/language/it/admin/manage/users.json | 6 ++--- public/language/it/admin/menu.json | 4 +-- .../language/it/admin/settings/advanced.json | 6 ++--- public/language/it/admin/settings/chat.json | 2 +- .../language/it/admin/settings/sockets.json | 8 +++--- public/language/it/admin/settings/tags.json | 16 ++++++------ public/language/it/admin/settings/user.json | 6 ++--- public/language/it/error.json | 4 +-- public/language/it/flags.json | 2 +- public/language/it/modules.json | 8 +++--- public/language/it/notifications.json | 2 +- public/language/it/pages.json | 2 +- public/language/it/topic.json | 16 ++++++------ public/language/it/user.json | 4 +-- 16 files changed, 59 insertions(+), 59 deletions(-) diff --git a/public/language/it/admin/manage/categories.json b/public/language/it/admin/manage/categories.json index 7e49aef36b..55a96afe6c 100644 --- a/public/language/it/admin/manage/categories.json +++ b/public/language/it/admin/manage/categories.json @@ -21,7 +21,7 @@ "copy-settings": "Copy Settings From", "optional-clone-settings": "(Optional) Clone Settings From Category", "clone-children": "Clone Children Categories And Settings", - "purge": "Purge Category", + "purge": "Elimina definitivamente categoria", "enable": "Enable", "disable": "Disable", @@ -59,8 +59,8 @@ "alert.none-active": "You have no active categories.", "alert.create": "Create a Category", "alert.confirm-moderate": "Are you sure you wish to grant the moderation privilege to this user group? This group is public, and any users can join at will.", - "alert.confirm-purge": "

Do you really want to purge this category \"%1\"?

Warning! All topics and posts in this category will be purged!

Purging a category will remove all topics and posts, and delete the category from the database. If you want to remove a category temporarily, you'll want to \"disable\" the category instead.

", - "alert.purge-success": "Category purged!", + "alert.confirm-purge": "

Vuoi davvero eliminare definitivamente questa categoria \"%1\"?

Attenzione!Tutte le discussioni e i posti in questa categoria saranno eliminati definitivamente!

Eliminare definitivamente una categoria rimuoverà tutte le discussioni e i post ed eliminerà la categoria dal database. Se vuoi rimuovere una categoria temporaneamente, puoi invece \"disabilitare\" la categoria.", + "alert.purge-success": "Categoria eliminata definitivamente!", "alert.copy-success": "Settings Copied!", "alert.set-parent-category": "Set Parent Category", "alert.updated": "Updated Categories", diff --git a/public/language/it/admin/manage/registration.json b/public/language/it/admin/manage/registration.json index f51b4d56e6..68e491a73d 100644 --- a/public/language/it/admin/manage/registration.json +++ b/public/language/it/admin/manage/registration.json @@ -1,20 +1,20 @@ { - "queue": "Queue", - "description": "There are no users in the registration queue.
To enable this feature, go to Settings → User → User Registration and set Registration Type to \"Admin Approval\".", + "queue": "Attesa", + "description": "Non ci sono utenti in attesa di registrazione.
Per abilitare questa funzione, vai in Impostazioni → Utente → Registrazione Utente e imposta Tipo Registrazione su \"Approvazione Amministratore\".", - "list.name": "Name", + "list.name": "Nome", "list.email": "Email", "list.ip": "IP", - "list.time": "Time", - "list.username-spam": "Frequency: %1 Appears: %2 Confidence: %3", - "list.email-spam": "Frequency: %1 Appears: %2", - "list.ip-spam": "Frequency: %1 Appears: %2", + "list.time": "Tempo", + "list.username-spam": "Frequenza: %1 Apparsi: %2 Confidenza: %3", + "list.email-spam": "Frequenza: %1 Apparsi: %2", + "list.ip-spam": "Frequenza: %1 Apparsi: %2", - "invitations": "Invitations", - "invitations.description": "Below is a complete list of invitations sent. Use ctrl-f to search through the list by email or username.

The username will be displayed to the right of the emails for users who have redeemed their invitations.", - "invitations.inviter-username": "Inviter Username", - "invitations.invitee-email": "Invitee Email", - "invitations.invitee-username": "Invitee Username (if registered)", + "invitations": "Inviti", + "invitations.description": "Di seguito è riportato l'elenco completo degli inviti inviati. Usa Ctrl-f per cercare attraverso la lista via email o nome utente.

Il nome utente sarà visualizzato a destra delle email per gli utenti che hanno riscattato i loro inviti.", + "invitations.inviter-username": "Nome dell'utente che invita", + "invitations.invitee-email": "Email dell'invitato", + "invitations.invitee-username": "Nome utente invitato (se registrato)", - "invitations.confirm-delete": "Are you sure you wish to delete this invitation?" + "invitations.confirm-delete": "Sei sicuro di voler eliminare questo invito?" } \ No newline at end of file diff --git a/public/language/it/admin/manage/users.json b/public/language/it/admin/manage/users.json index 05fc3f043f..74093e725e 100644 --- a/public/language/it/admin/manage/users.json +++ b/public/language/it/admin/manage/users.json @@ -11,7 +11,7 @@ "temp-ban": "Ban User(s) Temporarily", "unban": "Unban User(s)", "reset-lockout": "Reset Lockout", - "reset-flags": "Reset Flags", + "reset-flags": "Reset segnalazioni", "delete": "Delete User(s)", "purge": "Delete User(s) and Content", "download-csv": "Download CSV", @@ -47,7 +47,7 @@ "users.email": "email", "users.postcount": "postcount", "users.reputation": "reputation", - "users.flags": "flags", + "users.flags": "segnalazioni", "users.joined": "joined", "users.last-online": "last online", "users.banned": "banned", @@ -70,7 +70,7 @@ "alerts.button-ban-x": "Ban %1 user(s)", "alerts.unban-success": "User(s) unbanned!", "alerts.lockout-reset-success": "Lockout(s) reset!", - "alerts.flag-reset-success": "Flags(s) reset!", + "alerts.flag-reset-success": "Segnalazione(i) resettate!", "alerts.no-remove-yourself-admin": "You can't remove yourself as Administrator!", "alerts.make-admin-success": "User is now administrator.", "alerts.confirm-remove-admin": "Do you really want to remove this administrator?", diff --git a/public/language/it/admin/menu.json b/public/language/it/admin/menu.json index c4b15896cd..b072f6b3e9 100644 --- a/public/language/it/admin/menu.json +++ b/public/language/it/admin/menu.json @@ -7,13 +7,13 @@ "general/sounds": "Sounds", "general/social": "Social", - "section-manage": "Manage", + "section-manage": "Gestisci", "manage/categories": "Categories", "manage/privileges": "Privileges", "manage/tags": "Tags", "manage/users": "Users", "manage/admins-mods": "Admins & Mods", - "manage/registration": "Registration Queue", + "manage/registration": "Attesa di registrazione", "manage/post-queue": "Post in attesa", "manage/groups": "Groups", "manage/ip-blacklist": "IP Blacklist", diff --git a/public/language/it/admin/settings/advanced.json b/public/language/it/admin/settings/advanced.json index f989898d05..65cf9adc6d 100644 --- a/public/language/it/admin/settings/advanced.json +++ b/public/language/it/admin/settings/advanced.json @@ -16,10 +16,10 @@ "hsts.enabled": "Enabled HSTS (recommended)", "hsts.subdomains": "Include subdomains in HSTS header", "hsts.preload": "Allow preloading of HSTS header", - "hsts.help": "If enabled, an HSTS header will be set for this site. You can elect to include subdomains and preloading flags in your header. If in doubt, you can leave these unchecked. More information ", - "traffic-management": "Traffic Management", + "hsts.help": "Se abilitato, sarà impostata un'intestazione HSTS per questo sito. Puoi scegliere di includere sottodomini e segnalazioni di precaricamento nell'intestazione. In caso di dubbio, puoi lasciarle deselezionate. Più informazioni ", + "traffic-management": "Gestione Traffico", "traffic.help": "NodeBB deploys equipped with a module that automatically denies requests in high-traffic situations. You can tune these settings here, although the defaults are a good starting point.", - "traffic.enable": "Enable Traffic Management", + "traffic.enable": "Abilita Gestione Traffico", "traffic.event-lag": "Event Loop Lag Threshold (in milliseconds)", "traffic.event-lag-help": "Lowering this value decreases wait times for page loads, but will also show the \"excessive load\" message to more users. (Restart required)", "traffic.lag-check-interval": "Check Interval (in milliseconds)", diff --git a/public/language/it/admin/settings/chat.json b/public/language/it/admin/settings/chat.json index 897767cb3a..cbaff8f86f 100644 --- a/public/language/it/admin/settings/chat.json +++ b/public/language/it/admin/settings/chat.json @@ -4,7 +4,7 @@ "disable-editing": "Disabilita modifica/cancellazione messaggio chat", "disable-editing-help": "Gli amministratori e i moderatori globali sono esenti da questa restrizione.", "max-length": "Lunghezza massima dei messaggi della chat", - "max-room-size": "Numero massimo di utenti nelle chat room", + "max-room-size": "Numero massimo di utenti nelle stanza chat", "delay": "Tempo tra i messaggi della chat in millisecondi", "restrictions.seconds-edit-after": "Numero di secondi prima che gli utenti siano autorizzati a modificare i messaggi di chat dopo la pubblicazione. (0 disabilitato)", "restrictions.seconds-delete-after": "Numero di secondi prima che gli utenti siano autorizzati a cancellare i messaggi di chat dopo la pubblicazione. (0 disabilitato)" diff --git a/public/language/it/admin/settings/sockets.json b/public/language/it/admin/settings/sockets.json index d04ee42fcf..43ea82f06c 100644 --- a/public/language/it/admin/settings/sockets.json +++ b/public/language/it/admin/settings/sockets.json @@ -1,6 +1,6 @@ { - "reconnection": "Reconnection Settings", - "max-attempts": "Max Reconnection Attempts", - "default-placeholder": "Default: %1", - "delay": "Reconnection Delay" + "reconnection": "Impostazioni riconnessione", + "max-attempts": "Massimi tentativi di riconnessione", + "default-placeholder": "Predefinito: %1", + "delay": "Ritardo riconnessione" } \ No newline at end of file diff --git a/public/language/it/admin/settings/tags.json b/public/language/it/admin/settings/tags.json index d329cff68b..3b5d95bf8d 100644 --- a/public/language/it/admin/settings/tags.json +++ b/public/language/it/admin/settings/tags.json @@ -1,10 +1,10 @@ { - "tag": "Tag Settings", - "min-per-topic": "Minimum Tags per Topic", - "max-per-topic": "Maximum Tags per Topic", - "min-length": "Minimum Tag Length", - "max-length": "Maximum Tag Length", - "goto-manage": "Click here to visit the tag management page.", - "related-topics": "Related Topics", - "max-related-topics": "Maximum related topics to display (if supported by theme)" + "tag": "Impostazioni Tag", + "min-per-topic": "Tag minimi per discussione", + "max-per-topic": "Tag massimi per discussione", + "min-length": "Lunghezza minima tag", + "max-length": "Lunghezza massima tag", + "goto-manage": "Clicca qui per visitare la pagina di gestione tag.", + "related-topics": "Discussioni correlate", + "max-related-topics": "Numero massimo di discussioni correlate da visualizzare (se supportati dal tema)" } \ No newline at end of file diff --git a/public/language/it/admin/settings/user.json b/public/language/it/admin/settings/user.json index 2cfb16addc..16d535d622 100644 --- a/public/language/it/admin/settings/user.json +++ b/public/language/it/admin/settings/user.json @@ -32,15 +32,15 @@ "session-time-help": "These values are used to govern how long a user stays logged in when they check "Remember Me" on login. Note that only one of these values will be used. If there is no seconds value we fall back to days. If there is no days value we default to 14 days.", "online-cutoff": "Minutes after user is considered inactive", "online-cutoff-help": "If user performs no actions for this duration, they are considered inactive and they do not receive realtime updates.", - "registration": "User Registration", - "registration-type": "Registration Type", + "registration": "Registrazione Utente", + "registration-type": "Tipo Registrazione", "registration-type.normal": "Normal", "registration-type.admin-approval": "Admin Approval", "registration-type.admin-approval-ip": "Admin Approval for IPs", "registration-type.invite-only": "Invite Only", "registration-type.admin-invite-only": "Admin Invite Only", "registration-type.disabled": "No registration", - "registration-type.help": "Normal - Users can register from the /register page.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", + "registration-type.help": "Normale - Gli utenti possono registrarsi nella /pagina registrazione.
\nApprovazione Amministratore - Le registrazioni degli utenti sono messe in attesa di attesa di approvazione degli amministratori.
\nApprovazione Amministratore per IP - Normale per i nuovi utenti, Approvazione Amministratore per gli indirizzi IP che dispongono già di un account.
\nSolo su invito - Gli utenti possono invitarne altri dalla
pagina utente.
\nSolo su invito Amministratore: Solo gli amministratori possono invitare altri da utenti e dalle pagine amministratore/gestione/utenti.
\nNessuna registrazione - Nessuna registrazione utente.
", "registration.max-invites": "Maximum Invitations per User", "max-invites": "Maximum Invitations per User", "max-invites-help": "0 for no restriction. Admins get infinite invitations
Only applicable for \"Invite Only\"", diff --git a/public/language/it/error.json b/public/language/it/error.json index ff39fe2ffa..58b2217e28 100644 --- a/public/language/it/error.json +++ b/public/language/it/error.json @@ -99,11 +99,11 @@ "group-needs-owner": "Questo gruppo richiede almeno un proprietario.", "group-already-invited": "Questo utente è già stato invitato", "group-already-requested": "La tua richiesta di partecipazione è già stata inviata", - "post-already-deleted": "Questo Post è già stato cancellato", + "post-already-deleted": "Questo post è già stato eliminato", "post-already-restored": "Questo Post è già stato ripristinato", "topic-already-deleted": "Questo topic è già stato eliminato", "topic-already-restored": "Questo Topic è già stato ripristinato", - "cant-purge-main-post": "Non puoi svuotare il primo messaggio, elimina invece l'intera discussione", + "cant-purge-main-post": "Non puoi eliminare definitivamente il post principale, per favore elimina invece la discussione", "topic-thumbnails-are-disabled": "Le anteprime della Discussione sono disabilitate.", "invalid-file": "File non valido", "uploads-are-disabled": "Uploads disabilitati", diff --git a/public/language/it/flags.json b/public/language/it/flags.json index 75ba9493e0..608d348ac2 100644 --- a/public/language/it/flags.json +++ b/public/language/it/flags.json @@ -41,7 +41,7 @@ "no-notes": "Nessuna nota condivisa", "history": "Cronologia Segnalazione", - "back": "Torna all'elenco Segnalazioni", + "back": "Torna all'elenco segnalazioni", "no-history": "Nessuna cronologia segnalazione.", "state-all": "Tutti gli stati", diff --git a/public/language/it/modules.json b/public/language/it/modules.json index 0f5127aeb5..a923d30c9a 100644 --- a/public/language/it/modules.json +++ b/public/language/it/modules.json @@ -21,12 +21,12 @@ "chat.three_months": "3 Mesi", "chat.delete_message_confirm": "Sei sicuro di voler eliminare questo messaggio?", "chat.retrieving-users": "Estrapolando gli utenti...", - "chat.manage-room": "Gestisci stanza di chat", - "chat.add-user-help": "Cerca l'utente qui. Una volta selezionato, l'utente verrà aggiunto alla stanza di chat. L'utente non vedrà i messaggi scritti prima della suo arrivo alla stanza. Soltanto i propietari delle stanze () possono rimuoverne gli utenti.", + "chat.manage-room": "Gestisci stanza chat", + "chat.add-user-help": "Cerca qui gli utenti. Quando selezionato, l'utente sarà aggiunto alla chat.\nIl nuovo utente non sarà in grado di vedere i messaggi della chat scritti prima della sua partecipazione alla conversazione.\nSolo i proprietari della stanza () possono rimuovere gli utenti dalla stanza della chat.", "chat.confirm-chat-with-dnd-user": "Questo utente ha impostato il suo stato su Non Disturbare. Sei sicuro di voler iniziare una conversazione?", - "chat.rename-room": "Rinomina chat", + "chat.rename-room": "Rinomina stanza", "chat.rename-placeholder": "Inserisci qui il nome della stanza", - "chat.rename-help": "Il nome della stanza inserito sarà visibile a tutti i partecipanti.", + "chat.rename-help": "Il nome della stanza qui impostato sarà visibile da tutti i partecipanti nella stanza.", "chat.leave": "Abbandona Chat", "chat.leave-prompt": "Sei sicuro di volere abbandonare questa chat?", "chat.leave-help": "Abbandonando questa chat perderai ogni sua traccia. Anche dopo un tuo eventuale rientro, non vedrai nessun messaggio precedente.", diff --git a/public/language/it/notifications.json b/public/language/it/notifications.json index be79d92047..5792528245 100644 --- a/public/language/it/notifications.json +++ b/public/language/it/notifications.json @@ -57,7 +57,7 @@ "notificationType_new-chat": "Quando ricevi un messaggio in chat", "notificationType_group-invite": "Quando ricevi un invito ad un gruppo", "notificationType_group-request-membership": "When someone requests to join a group you own", - "notificationType_new-register": "Quando qualcuno viene aggiunto alla coda di registrazione", + "notificationType_new-register": "Quando qualcuno è in attesa della registrazione", "notificationType_post-queue": "Quando un nuovo post è in attesa", "notificationType_new-post-flag": "Quando un post viene segnalato", "notificationType_new-user-flag": "Quando un utente viene segnalato" diff --git a/public/language/it/pages.json b/public/language/it/pages.json index 0556ae1a03..f9304475f4 100644 --- a/public/language/it/pages.json +++ b/public/language/it/pages.json @@ -33,7 +33,7 @@ "group": "Gruppo %1", "chats": "Chat", "chat": "In chat con %1", - "flags": "Flags", + "flags": "Segnalazioni", "flag-details": "Flag %1 Details", "account/edit": "Modificando \"%1\"", "account/edit/password": "Modificando la password di \"%1\"", diff --git a/public/language/it/topic.json b/public/language/it/topic.json index 5f6183de5e..3b0ea49574 100644 --- a/public/language/it/topic.json +++ b/public/language/it/topic.json @@ -19,8 +19,8 @@ "reply-as-topic": "Topic risposta", "guest-login-reply": "Effettua il Log in per rispondere", "edit": "Modifica", - "delete": "Cancella", - "purge": "Svuota", + "delete": "Elimina", + "purge": "Elimina definitivamente", "restore": "Ripristina", "move": "Muovi", "fork": "Dividi", @@ -67,18 +67,18 @@ "thread_tools.select_category": "Seleziona Categoria", "thread_tools.fork": "Dividi Discussione", "thread_tools.delete": "Elimina Discussione", - "thread_tools.delete-posts": "Cancella Post", + "thread_tools.delete-posts": "Elimina Post", "thread_tools.delete_confirm": "Sei sicuro di voler eliminare questa discussione?", "thread_tools.restore": "Ripristina Discussione", "thread_tools.restore_confirm": "Sei sicuro di voler ripristinare questa discussione?", - "thread_tools.purge": "Svuota Discussione", - "thread_tools.purge_confirm": "Sei sicuro di voler svuotare questa discussione?", + "thread_tools.purge": "Elimina definitivamente discussione", + "thread_tools.purge_confirm": "Sei sicuro di voler eliminare definitivamente questa discussione?", "thread_tools.merge_topics": "Unisci le Discussioni", "thread_tools.merge": "Unisci", "topic_move_success": "Questa discussione è stata correttamente spostata in %1", - "post_delete_confirm": "Sei sicuro di voler cancellare questo post?", + "post_delete_confirm": "Sei sicuro di voler eliminare questo post?", "post_restore_confirm": "Sei sicuro di voler ripristinare questo post?", - "post_purge_confirm": "Sei sicuro di voler svuotare questo post?", + "post_purge_confirm": "Sei sicuro di voler eliminare definitivamente questo post?", "load_categories": "Caricamento Categorie", "confirm_move": "Sposta", "confirm_fork": "Dividi", @@ -95,7 +95,7 @@ "fork_no_pids": "Nessun post selezionato!", "fork_pid_count": "%1 post selezionati", "fork_success": "Topic Diviso con successo ! Clicca qui per andare al Topic Diviso.", - "delete_posts_instruction": "Clicca sui post che vuoi cancellare/eliminare", + "delete_posts_instruction": "Clicca sui post che vuoi eliminare/eliminare definitivamente", "merge_topics_instruction": "Clicca sulle discussioni che vuoi unire", "move_posts_instruction": "Clicca sui post che vuoi spostare", "composer.title_placeholder": "Inserisci qui il titolo della discussione...", diff --git a/public/language/it/user.json b/public/language/it/user.json index 40da8fc917..b9bc800dae 100644 --- a/public/language/it/user.json +++ b/public/language/it/user.json @@ -13,7 +13,7 @@ "unban_account": "Togli il BAN", "delete_account": "Elimina Account", "delete_account_confirm": "Sicuro di volere eliminare il tuo account?
Questa azione è irreversibile e non ti sarà possibile recuperare nessuno dei tuoi dati

Inserisci la tua password per confermare l'eliminazione del tuo account.", - "delete_this_account_confirm": "Sei sicuro di voler cancellare questo account?
Questa azione è irreversibile e non potrai recuperare nessun dato

", + "delete_this_account_confirm": "Sei sicuro di voler eliminare questo account?
Questa azione è irreversibile e non potrai recuperare nessun dato

", "account-deleted": "Account eliminato", "fullname": "Nome e Cognome", "website": "Sito Internet", @@ -137,7 +137,7 @@ "sso.dissociate": "Dissocia", "sso.dissociate-confirm-title": "Conferma dissociazione", "sso.dissociate-confirm": "Sei sicuro di voler dissociare il tuo account da %1?", - "info.latest-flags": "Ultime Segnalazioni", + "info.latest-flags": "Ultime segnalazioni", "info.no-flags": "Non è stato trovato nessun post segnalato", "info.ban-history": "Storico dei Ban recenti", "info.no-ban-history": "Questo utente non è mai stato bannato", From ba5e1eaa4f0a0219a6f452ebab24e7ceb33d11ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Sat, 13 Apr 2019 05:04:06 -0400 Subject: [PATCH 12/83] feat: #7527 --- src/events.js | 2 ++ src/socket.io/admin/user.js | 24 ++++++++++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/events.js b/src/events.js index f6fe006d02..1c6aeae09c 100644 --- a/src/events.js +++ b/src/events.js @@ -30,6 +30,8 @@ events.types = [ 'topic-purge', 'topic-rename', 'password-reset', + 'user-makeAdmin', + 'user-removeAdmin', 'user-ban', 'user-unban', 'user-delete', diff --git a/src/socket.io/admin/user.js b/src/socket.io/admin/user.js index 02ade56a89..87b6b798ca 100644 --- a/src/socket.io/admin/user.js +++ b/src/socket.io/admin/user.js @@ -28,8 +28,20 @@ User.makeAdmins = function (socket, uids, callback) { } } - async.each(uids, function (uid, next) { - groups.join('administrators', uid, next); + async.eachSeries(uids, function (uid, next) { + async.waterfall([ + function (next) { + groups.join('administrators', uid, next); + }, + function (next) { + events.log({ + type: 'user-makeAdmin', + uid: socket.uid, + targetUid: uid, + ip: socket.ip, + }, next); + }, + ], next); }, next); }, ], callback); @@ -52,6 +64,14 @@ User.removeAdmins = function (socket, uids, callback) { groups.leave('administrators', uid, next); }, + function (next) { + events.log({ + type: 'user-removeAdmin', + uid: socket.uid, + targetUid: uid, + ip: socket.ip, + }, next); + }, ], next); }, callback); }; From 0fe954816fc230a82a6d6591cdaf5a5e3e5e4902 Mon Sep 17 00:00:00 2001 From: "Misty (Bot)" Date: Sat, 13 Apr 2019 09:25:50 +0000 Subject: [PATCH 13/83] Latest translations and fallbacks --- public/language/sr/groups.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/public/language/sr/groups.json b/public/language/sr/groups.json index f75b2090bb..f9ebbee210 100644 --- a/public/language/sr/groups.json +++ b/public/language/sr/groups.json @@ -35,9 +35,9 @@ "details.creation_date": "Датум настанка", "details.description": "Опис", "details.badge_preview": "Приказ беџа", - "details.change_icon": "Промена иконе", - "details.change_label_colour": "Change Label Colour", - "details.change_text_colour": "Change Text Colour", + "details.change_icon": "Промени икону", + "details.change_label_colour": "Промени боју ознаке", + "details.change_text_colour": "Промени боју текста", "details.badge_text": "Текст беџа", "details.userTitleEnabled": "Приказ беџа", "details.private_help": "Уколико је укључено, приступање групи захтева одобрење власника групе.", From a54f8f00d22d38427edee42039b018a3378f7df7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Sat, 13 Apr 2019 05:29:00 -0400 Subject: [PATCH 14/83] fix(deps): update dependency nodebb-plugin-composer-default to v6.2.12 (#7538) --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index c0f9377421..9fa148d29c 100644 --- a/install/package.json +++ b/install/package.json @@ -80,7 +80,7 @@ "mousetrap": "^1.6.1", "mubsub-nbb": "^1.5.0", "nconf": "^0.10.0", - "nodebb-plugin-composer-default": "6.2.11", + "nodebb-plugin-composer-default": "6.2.12", "nodebb-plugin-dbsearch": "3.0.6", "nodebb-plugin-emoji": "^2.2.5", "nodebb-plugin-emoji-android": "2.0.0", From 69dd8e4d068d0954aaae552bf933d51a9e14c030 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 13 Apr 2019 15:41:53 +0000 Subject: [PATCH 15/83] chore(deps): update dependency eslint-plugin-import to v2.17.1 --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 9fa148d29c..1219685acf 100644 --- a/install/package.json +++ b/install/package.json @@ -137,7 +137,7 @@ "coveralls": "3.0.3", "eslint": "5.15.3", "eslint-config-airbnb-base": "13.1.0", - "eslint-plugin-import": "2.16.0", + "eslint-plugin-import": "2.17.1", "grunt": "1.0.4", "grunt-contrib-watch": "1.1.0", "husky": "1.3.1", From 81f3fbdcfcdcd4ab6f1946bf1e8b1a2ae1640ef7 Mon Sep 17 00:00:00 2001 From: "Misty (Bot)" Date: Mon, 15 Apr 2019 09:26:38 +0000 Subject: [PATCH 16/83] Latest translations and fallbacks --- public/language/fr/admin/development/info.json | 4 ++-- public/language/fr/admin/manage/categories.json | 2 +- public/language/fr/admin/manage/groups.json | 10 +++++----- public/language/fr/admin/manage/users.json | 6 +++--- public/language/fr/admin/settings/email.json | 6 +++--- public/language/fr/groups.json | 4 ++-- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/public/language/fr/admin/development/info.json b/public/language/fr/admin/development/info.json index 92fc8cc839..26f71e4e97 100644 --- a/public/language/fr/admin/development/info.json +++ b/public/language/fr/admin/development/info.json @@ -7,8 +7,8 @@ "online": "en ligne", "git": "git", "memory": "mémoire", - "load": "system load", - "cpu-usage": "cpu usage", + "load": "Charge du système", + "cpu-usage": "Utilisation du processeur", "uptime": "disponibilité", "registered": "Enregistré", diff --git a/public/language/fr/admin/manage/categories.json b/public/language/fr/admin/manage/categories.json index 0a4a83c590..c0e6cc6fb5 100644 --- a/public/language/fr/admin/manage/categories.json +++ b/public/language/fr/admin/manage/categories.json @@ -17,7 +17,7 @@ "parent-category": "Catégorie parente", "optional-parent-category": "Catégorie parente (optionnel)", "parent-category-none": "(Aucun)", - "copy-parent": "Copy Parent", + "copy-parent": "Copier Parent", "copy-settings": "Copier les paramètres de", "optional-clone-settings": "Copier les paramètres de la catégorie (optionnel)", "clone-children": "Copier les catégories et les paramètres", diff --git a/public/language/fr/admin/manage/groups.json b/public/language/fr/admin/manage/groups.json index 44b731b0b7..100dff4936 100644 --- a/public/language/fr/admin/manage/groups.json +++ b/public/language/fr/admin/manage/groups.json @@ -1,12 +1,12 @@ { "name": "Nom du groupe", "badge": "Badge", - "properties": "Properties", + "properties": "Propriétées", "description": "Description du groupe", "member-count": "Nombre de membres", - "system": "System", - "hidden": "Hidden", - "private": "Private", + "system": "Système", + "hidden": "Caché", + "private": "Privé", "edit": "Éditer", "search-placeholder": "Rechercher", "create": "Créer un groupe", @@ -21,7 +21,7 @@ "edit.user-title": "Titre des membres", "edit.icon": "Icône du groupe", "edit.label-color": "Couleur du groupe", - "edit.text-color": "Group Text Color", + "edit.text-color": "Couleur du groupe", "edit.show-badge": "Afficher le badge", "edit.private-details": "Si activé, rejoindre les groupes nécessitera l'approbation de l'un de leurs propriétaires.", "edit.private-override": "Attention : Les groupes privés sont désactivés au niveau du système, ce qui annule cette option.", diff --git a/public/language/fr/admin/manage/users.json b/public/language/fr/admin/manage/users.json index 11164ae71d..eddfa18d4a 100644 --- a/public/language/fr/admin/manage/users.json +++ b/public/language/fr/admin/manage/users.json @@ -6,7 +6,7 @@ "validate-email": "Vérifier l'adresse e-mail", "send-validation-email": "Envoyer un e-mail de vérification", "password-reset-email": "Envoyer un e-mail de réinitialisation du mot de passe", - "force-password-reset": "Force Password Reset & Log User Out", + "force-password-reset": "Forcer la réinitialisation du mot de passe et déconnecter l'utilisateur", "ban": "Bannir les utilisateurs", "temp-ban": "Bannir temporairement les utilisateurs", "unban": "Dé-bannir les utilisateurs", @@ -82,9 +82,9 @@ "alerts.confirm-remove-moderator": "Voulez-vous vraiment supprimer ce modérateur?", "alerts.remove-moderator-success": "L'utilisateur n'est plus modérateur", "alerts.confirm-validate-email": "Voulez-vous réellement vérifier les adresses e-mail de ces utilisateurs ?", - "alerts.confirm-force-password-reset": "Are you sure you want to force the password reset and log out these user(s)?", + "alerts.confirm-force-password-reset": "Êtes-vous sûr de vouloir forcer la réinitialisation du mot de passe et déconnecter ces utilisateur(s) ?", "alerts.validate-email-success": "Adresse e-mail vérifiée", - "alerts.validate-force-password-reset-success": "User(s) passwords have been reset and their existing sessions have been revoked.", + "alerts.validate-force-password-reset-success": "Les mots de passe des utilisateurs ont été réinitialisés et leurs sessions existantes ont été révoquées.", "alerts.password-reset-confirm": "Voulez-vous réellement envoyer un e-mail de réinitialisation de mot de passe à ces utilisateurs ?", "alerts.confirm-delete": "Attention !
Voulez-vous réellement supprimer ces utilisateurs ?
Cette action est irréversible ! Seuls les comptes des= ce utilisateurs seront supprimés, leurs sujets et messages resteront. ", "alerts.delete-success": "Utilisateur(s) supprimé(s) !", diff --git a/public/language/fr/admin/settings/email.json b/public/language/fr/admin/settings/email.json index cf14d8ead7..64a7f37c8b 100644 --- a/public/language/fr/admin/settings/email.json +++ b/public/language/fr/admin/settings/email.json @@ -4,9 +4,9 @@ "address-help": "L'adresse e-mail suivante fait référence à l'adresse que le destinataire verra dans les champs \"De :\" et \"Répondre à :\". ", "from": "Nom de l’expéditeur", "from-help": "Le nom de l’expéditeur à afficher dans l'e-mail", - "sendmail-rate-limit": "Send X emails...", - "sendmail-rate-delta": "... every X milliseconds", - "sendmail-rate-help": "Instructs the NodeBB mailer to limit the number of messages sent at once in order to not overwhelm email receiving services. These options do not apply if SMTP Transport is enabled (below).", + "sendmail-rate-limit": "Envoyer X emails...", + "sendmail-rate-delta": ".... toutes les X millisecondes", + "sendmail-rate-help": "Indique à NodeBB la limite du nombre de mails envoyés en une seule fois afin de ne pas surcharger les services de réception d’e-mails. Ces options ne s'appliquent pas si le transport SMTP est activé (ci-dessous).", "smtp-transport": "Protocole SMTP", "smtp-transport.enabled": "Utiliser un server extérieur pour envoyer les emails", diff --git a/public/language/fr/groups.json b/public/language/fr/groups.json index ce35fd84d9..003fedb501 100644 --- a/public/language/fr/groups.json +++ b/public/language/fr/groups.json @@ -36,8 +36,8 @@ "details.description": "Description", "details.badge_preview": "Aperçu du badge", "details.change_icon": "Modifier l'icône", - "details.change_label_colour": "Change Label Colour", - "details.change_text_colour": "Change Text Colour", + "details.change_label_colour": "Changer la couleur de l'étiquette", + "details.change_text_colour": "Changer la couleur du texte", "details.badge_text": "Texte du badge", "details.userTitleEnabled": "Afficher le badge", "details.private_help": "Si cette case est cochée, rejoindre un groupe nécessite l'accord d'un propriétaire du groupe.", From 8778f00b69413f21a3164eddfdfea9ecda20b85b Mon Sep 17 00:00:00 2001 From: Baris Usakli Date: Mon, 15 Apr 2019 11:33:02 -0400 Subject: [PATCH 17/83] fix: #7540 --- src/views/admin/manage/groups.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/admin/manage/groups.tpl b/src/views/admin/manage/groups.tpl index bdcc09d1b1..b65cae462e 100644 --- a/src/views/admin/manage/groups.tpl +++ b/src/views/admin/manage/groups.tpl @@ -22,7 +22,7 @@ {groups.displayName} - {groups.userTitle} + {groups.userTitle} From ddffc904f4ec48ac4dce711c9077873101e0a4db Mon Sep 17 00:00:00 2001 From: Andrew Rodrigues Date: Mon, 15 Apr 2019 12:33:57 -0400 Subject: [PATCH 18/83] feat: allow file uploading on registration interstitial --- install/package.json | 4 ++-- src/controllers/authentication.js | 1 + src/routes/authentication.js | 5 +++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/install/package.json b/install/package.json index 1219685acf..6298e37a5f 100644 --- a/install/package.json +++ b/install/package.json @@ -90,9 +90,9 @@ "nodebb-plugin-spam-be-gone": "0.6.1", "nodebb-rewards-essentials": "0.0.13", "nodebb-theme-lavender": "5.0.9", - "nodebb-theme-persona": "9.1.29", + "nodebb-theme-persona": "9.1.30", "nodebb-theme-slick": "1.2.23", - "nodebb-theme-vanilla": "10.1.25", + "nodebb-theme-vanilla": "10.1.26", "nodebb-widget-essentials": "4.0.17", "nodemailer": "^6.0.0", "passport": "^0.4.0", diff --git a/src/controllers/authentication.js b/src/controllers/authentication.js index 061359394c..41d1316852 100644 --- a/src/controllers/authentication.js +++ b/src/controllers/authentication.js @@ -152,6 +152,7 @@ authenticationController.registerComplete = function (req, res, next) { var callbacks = data.interstitials.reduce(function (memo, cur) { if (cur.hasOwnProperty('callback') && typeof cur.callback === 'function') { + req.body.files = req.files; memo.push(function (next) { cur.callback(req.session.registration, req.body, function (err) { // Pass error as second argument so all callbacks are executed diff --git a/src/routes/authentication.js b/src/routes/authentication.js index 11e8c03432..49f6233ac2 100644 --- a/src/routes/authentication.js +++ b/src/routes/authentication.js @@ -120,6 +120,11 @@ Auth.reloadRoutes = function (router, callback) { }); }); + var multipart = require('connect-multiparty'); + var multipartMiddleware = multipart(); + var middlewares = [multipartMiddleware, Auth.middleware.applyCSRF, Auth.middleware.applyBlacklist]; + + router.post('/register', middlewares, controllers.authentication.register); router.post('/register', Auth.middleware.applyCSRF, Auth.middleware.applyBlacklist, controllers.authentication.register); router.post('/register/complete', Auth.middleware.applyCSRF, Auth.middleware.applyBlacklist, controllers.authentication.registerComplete); router.post('/register/abort', controllers.authentication.registerAbort); From 00552d7183f0416a0caa113fe2f1e658659648f7 Mon Sep 17 00:00:00 2001 From: Andrew Rodrigues Date: Mon, 15 Apr 2019 12:36:09 -0400 Subject: [PATCH 19/83] fix: fire filter:register.complete for users approved via registration queue --- src/user/approval.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/user/approval.js b/src/user/approval.js index f0a5a77b98..b0c7769422 100644 --- a/src/user/approval.js +++ b/src/user/approval.js @@ -108,6 +108,9 @@ module.exports = function (User) { function (next) { markNotificationRead(username, next); }, + function (next) { + plugins.fireHook('filter:register.complete', { uid: uid }, next); + }, function (next) { var title = meta.config.title || meta.config.browserTitle || 'NodeBB'; var data = { From 9bf3517db1f37264f39a18f6aa36c5a73c7898f2 Mon Sep 17 00:00:00 2001 From: Andrew Rodrigues Date: Mon, 15 Apr 2019 13:19:27 -0400 Subject: [PATCH 20/83] fix: failing test from 00552d7183f0416a0caa113fe2f1e658659648f7 --- src/user/approval.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/user/approval.js b/src/user/approval.js index b0c7769422..dd319485d8 100644 --- a/src/user/approval.js +++ b/src/user/approval.js @@ -111,7 +111,7 @@ module.exports = function (User) { function (next) { plugins.fireHook('filter:register.complete', { uid: uid }, next); }, - function (next) { + function (result, next) { var title = meta.config.title || meta.config.browserTitle || 'NodeBB'; var data = { username: username, From 551b18cd4f187fd5bbf0292457267089de8ad942 Mon Sep 17 00:00:00 2001 From: Andrew Rodrigues Date: Mon, 15 Apr 2019 15:59:04 -0400 Subject: [PATCH 21/83] chore: bump themes --- install/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/package.json b/install/package.json index 6298e37a5f..2b91ba44ff 100644 --- a/install/package.json +++ b/install/package.json @@ -90,9 +90,9 @@ "nodebb-plugin-spam-be-gone": "0.6.1", "nodebb-rewards-essentials": "0.0.13", "nodebb-theme-lavender": "5.0.9", - "nodebb-theme-persona": "9.1.30", + "nodebb-theme-persona": "9.1.31", "nodebb-theme-slick": "1.2.23", - "nodebb-theme-vanilla": "10.1.26", + "nodebb-theme-vanilla": "10.1.27", "nodebb-widget-essentials": "4.0.17", "nodemailer": "^6.0.0", "passport": "^0.4.0", From a876c53b550055c2d30da9a17281ac0658b043a2 Mon Sep 17 00:00:00 2001 From: "Misty (Bot)" Date: Tue, 16 Apr 2019 09:26:40 +0000 Subject: [PATCH 22/83] Latest translations and fallbacks --- .../it/admin/manage/ip-blacklist.json | 28 +++++++-------- .../language/it/admin/manage/privileges.json | 2 +- .../language/it/admin/settings/advanced.json | 34 +++++++++---------- .../it/admin/settings/reputation.json | 24 ++++++------- public/language/it/error.json | 2 +- public/language/it/global.json | 4 +-- public/language/it/pages.json | 2 +- public/language/nl/groups.json | 4 +-- 8 files changed, 50 insertions(+), 50 deletions(-) diff --git a/public/language/it/admin/manage/ip-blacklist.json b/public/language/it/admin/manage/ip-blacklist.json index 588fbd62b6..3bdcdf32c0 100644 --- a/public/language/it/admin/manage/ip-blacklist.json +++ b/public/language/it/admin/manage/ip-blacklist.json @@ -1,19 +1,19 @@ { - "lead": "Configure your IP blacklist here.", - "description": "Occasionally, a user account ban is not enough of a deterrant. Other times, restricting access to the forum to a specific IP or a range of IPs is the best way to protect a forum. In these scenarios, you can add troublesome IP addresses or entire CIDR blocks to this blacklist, and they will be prevented from logging in to or registering a new account.", - "active-rules": "Active Rules", - "validate": "Validate Blacklist", - "apply": "Apply Blacklist", - "hints": "Syntax Hints", - "hint-1": "Define a single IP addresses per line. You can add IP blocks as long as they follow the CIDR format (e.g. 192.168.100.0/22).", - "hint-2": "You can add in comments by starting lines with the # symbol.", + "lead": "Configura qui la tua blacklist degli IP.", + "description": "Occasionalmente, il ban di un account utente non è un deterrente sufficiente. Altre volte, limitare l'accesso al forum a un IP specifico o a una serie di IP è il modo migliore per proteggere il forum. In questi scenari, è possibile aggiungere a questa blacklist indirizzi IP fastidiosi o interi blocchi CIDR, che non potranno accedere o registrare un nuovo account.", + "active-rules": "Regole attive", + "validate": "Convalida la Blacklist", + "apply": "Applica la Blacklist", + "hints": "Suggerimenti per la sintassi", + "hint-1": "Definisci un singolo indirizzo IP per linea. È possibile aggiungere blocchi IP a condizione che seguano il formato CIDR. (es. 192.168.100.0/22).", + "hint-2": "Puoi aggiungere commenti iniziando le righe con il simbolo #.", - "validate.x-valid": "%1 out of %2 rule(s) valid.", - "validate.x-invalid": "The following %1 rules are invalid:", + "validate.x-valid": "%1 su %2 regola(e) valide.", + "validate.x-invalid": "Le seguenti regole %1 non sono valide:", - "alerts.applied-success": "Blacklist Applied", + "alerts.applied-success": "Blacklist applicata", - "analytics.blacklist-hourly": "Figure 1 – Blacklist hits per hour", - "analytics.blacklist-daily": "Figure 2 – Blacklist hits per day", - "ip-banned": "IP banned" + "analytics.blacklist-hourly": "La figura 1 – Numero di visite in Blacklist per ora", + "analytics.blacklist-daily": "Figura 2 – Numero di visite in Blacklist per ora", + "ip-banned": "IP bannati" } \ No newline at end of file diff --git a/public/language/it/admin/manage/privileges.json b/public/language/it/admin/manage/privileges.json index 53cdfda762..92f146da8d 100644 --- a/public/language/it/admin/manage/privileges.json +++ b/public/language/it/admin/manage/privileges.json @@ -27,7 +27,7 @@ "delete-posts": "Elimina post", "view_deleted": "Visualizza post eliminati", "upvote-posts": "Post negativi", - "downvote-posts": "Post positivi", + "downvote-posts": "Post votati negativamente", "delete-topics": "Elimina discussioni", "purge": "Elimina definitivamente", "moderate": "Moderata" diff --git a/public/language/it/admin/settings/advanced.json b/public/language/it/admin/settings/advanced.json index 65cf9adc6d..e392bac423 100644 --- a/public/language/it/admin/settings/advanced.json +++ b/public/language/it/admin/settings/advanced.json @@ -1,27 +1,27 @@ { - "maintenance-mode": "Maintenance Mode", - "maintenance-mode.help": "When the forum is in maintenance mode, all requests will be redirected to a static holding page. Administrators are exempt from this redirection, and are able to access the site normally.", - "maintenance-mode.message": "Maintenance Message", - "headers": "Headers", + "maintenance-mode": "Modalità manutenzione", + "maintenance-mode.help": "Quando il forum è in modalità manutenzione, tutte le richieste saranno reindirizzate ad una pagina di attesa statica. Gli amministratori sono esenti da questo reindirizzamento e sono in grado di accedere al sito normalmente.", + "maintenance-mode.message": "Messaggio di manutenzione", + "headers": "Intestazioni", "headers.allow-from": "Set ALLOW-FROM to Place NodeBB in an iFrame", - "headers.powered-by": "Customise the \"Powered By\" header sent by NodeBB", + "headers.powered-by": "Personalizza l'intestazione \"Fornito da\" inviata da NodeBBB", "headers.acao": "Access-Control-Allow-Origin", "headers.acao-regex": "Access-Control-Allow-Origin Regular Expression", - "headers.acao-help": "To deny access to all sites, leave empty", - "headers.acao-regex-help": "Enter regular expressions here to match dynamic origins. To deny access to all sites, leave empty", + "headers.acao-help": "Per negare l'accesso a tutti i siti, lascia vuoto", + "headers.acao-regex-help": "Inserisci qui le espressioni regolari per abbinare le origini dinamiche. Per negare l'accesso a tutti i siti, lascia vuoto", "headers.acac": "Access-Control-Allow-Credentials", "headers.acam": "Access-Control-Allow-Methods", "headers.acah": "Access-Control-Allow-Headers", - "hsts": "Strict Transport Security", - "hsts.enabled": "Enabled HSTS (recommended)", - "hsts.subdomains": "Include subdomains in HSTS header", - "hsts.preload": "Allow preloading of HSTS header", - "hsts.help": "Se abilitato, sarà impostata un'intestazione HSTS per questo sito. Puoi scegliere di includere sottodomini e segnalazioni di precaricamento nell'intestazione. In caso di dubbio, puoi lasciarle deselezionate. Più informazioni ", + "hsts": "Rigorosa sicurezza trasporto", + "hsts.enabled": "HSTS abilitato (consigliato)", + "hsts.subdomains": "Includi i sottodomini nell'intestazione HSTS", + "hsts.preload": "Consenti la precarica dell'intestazione HSTS", + "hsts.help": "Se abilitato, sarà impostata un'intestazione HSTS per questo sito. Puoi scegliere di includere sottodomini e segnalazioni di precaricamento nell'intestazione. In caso di dubbio, puoi lasciarle deselezionate. Più informazioni ", "traffic-management": "Gestione Traffico", - "traffic.help": "NodeBB deploys equipped with a module that automatically denies requests in high-traffic situations. You can tune these settings here, although the defaults are a good starting point.", + "traffic.help": "NodeBB è dotato di un modulo che nega automaticamente le richieste in situazioni ad alto traffico. Puoi regolare queste impostazioni qui, anche se i valori predefiniti sono un buon punto di partenza.", "traffic.enable": "Abilita Gestione Traffico", - "traffic.event-lag": "Event Loop Lag Threshold (in milliseconds)", - "traffic.event-lag-help": "Lowering this value decreases wait times for page loads, but will also show the \"excessive load\" message to more users. (Restart required)", - "traffic.lag-check-interval": "Check Interval (in milliseconds)", - "traffic.lag-check-interval-help": "Lowering this value causes NodeBB to become more sensitive to spikes in load, but may also cause the check to become too sensitive. (Restart required)" + "traffic.event-lag": "Soglia ritardo ciclo eventi (in millisecondi)", + "traffic.event-lag-help": "L'abbassamento di questo valore diminuisce i tempi di attesa per il caricamento della pagina, ma mostrerà il messaggio \"carico eccessivo\" a più utenti. (Necessario riavviare)", + "traffic.lag-check-interval": "Intervallo di controllo (in millisecondi)", + "traffic.lag-check-interval-help": "L'abbassamento di questo valore fa sì che NodeBBB diventi più sensibile ai picchi di carico, ma può anche far sì che il controllo diventi troppo sensibile. (Necessario riavviare)" } \ No newline at end of file diff --git a/public/language/it/admin/settings/reputation.json b/public/language/it/admin/settings/reputation.json index 910909ff65..4b9e2943b3 100644 --- a/public/language/it/admin/settings/reputation.json +++ b/public/language/it/admin/settings/reputation.json @@ -1,14 +1,14 @@ { - "reputation": "Reputation Settings", - "disable": "Disable Reputation System", - "disable-down-voting": "Disable Down Voting", - "votes-are-public": "All Votes Are Public", - "thresholds": "Activity Thresholds", - "min-rep-downvote": "Minimum reputation to downvote posts", - "min-rep-flag": "Minimum reputation to flag posts", - "min-rep-website": "Minimum reputation to add \"Website\" to user profile", - "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", - "min-rep-signature": "Minimum reputation to add \"Signature\" to user profile", - "min-rep-profile-picture": "Minimum reputation to add \"Profile Picture\" to user profile", - "min-rep-cover-picture": "Minimum reputation to add \"Cover Picture\" to user profile" + "reputation": "Impostazioni reputazione", + "disable": "Disabilita sistema reputazione", + "disable-down-voting": "Disabilita voto negativo", + "votes-are-public": "Tutti i voti sono pubblici", + "thresholds": "Soglie di attività", + "min-rep-downvote": "Reputazione minima per votare negativamente i post", + "min-rep-flag": "Reputazione minima per segnalare i post", + "min-rep-website": "Reputazione minima per aggiungere \"Sito Web\" al profilo utente", + "min-rep-aboutme": "Reputazione minima per aggiungere \"Su di me\" al profilo utente", + "min-rep-signature": "Reputazione minima per aggiungere \"Firma\" al profilo utente", + "min-rep-profile-picture": "Reputazione minima per aggiungere \"Immagine profilo\" al profilo utente", + "min-rep-cover-picture": "Reputazione minima per aggiungere \"Immagine copertina\" al profilo utente" } \ No newline at end of file diff --git a/public/language/it/error.json b/public/language/it/error.json index 58b2217e28..01b5292d5c 100644 --- a/public/language/it/error.json +++ b/public/language/it/error.json @@ -125,7 +125,7 @@ "already-voting-for-this-post": "Hai già votato per questo post", "reputation-system-disabled": "Il sistema di reputazione è disabilitato.", "downvoting-disabled": "Il Downvoting è disabilitato", - "not-enough-reputation-to-downvote": "Non hai i privilegi per votare negativamente questo post", + "not-enough-reputation-to-downvote": "Non hai abbastanza reputazione per votare negativamente questo post", "not-enough-reputation-to-flag": "Tu non hai abbastanza reputazione per segnalare questo Post", "not-enough-reputation-min-rep-website": "Non hai abbastanza reputazione per aggiungere un sito", "not-enough-reputation-min-rep-aboutme": "Non hai abbastanza reputazione per aggiungere informazioni su di te", diff --git a/public/language/it/global.json b/public/language/it/global.json index 952890e6c4..307b367b77 100644 --- a/public/language/it/global.json +++ b/public/language/it/global.json @@ -56,8 +56,8 @@ "votes": "Votazioni", "upvoters": "Hanno votato positivamente", "upvoted": "Apprezzati", - "downvoters": "Hanno negato negativamente", - "downvoted": "Votato negativamente", + "downvoters": "Votata negativamente", + "downvoted": "Votata negativamente", "views": "Visualizzazioni", "reputation": "Reputazione", "read_more": "per saperne di più", diff --git a/public/language/it/pages.json b/public/language/it/pages.json index f9304475f4..5884034c40 100644 --- a/public/language/it/pages.json +++ b/public/language/it/pages.json @@ -12,7 +12,7 @@ "top-alltime": "Top Voted Topics", "moderator-tools": "Strumenti di moderazione", "flagged-content": "Contenuti Segnalati", - "ip-blacklist": "Lista nera degli IP", + "ip-blacklist": "Blacklist degli IP", "post-queue": "Post in attesa", "users/online": "Utenti Online", "users/latest": "Ultimi Utenti", diff --git a/public/language/nl/groups.json b/public/language/nl/groups.json index 978b663ed4..582d83ce05 100644 --- a/public/language/nl/groups.json +++ b/public/language/nl/groups.json @@ -36,8 +36,8 @@ "details.description": "Beschrijving", "details.badge_preview": "Badge Voorbeeld", "details.change_icon": "Wijzig icoon", - "details.change_label_colour": "Change Label Colour", - "details.change_text_colour": "Change Text Colour", + "details.change_label_colour": "Wijzig labelkleur", + "details.change_text_colour": "Wijzig tekstkleur", "details.badge_text": "Badge Tekst", "details.userTitleEnabled": "Badge Weergeven", "details.private_help": "Wanneer ingeschakeld, zal eerst een groepseigenaar goedkeuring moeten verlenen voordat nieuwe leden kunnen toetreden", From 740388492fc744c4bc1462769640ab3d18bdec20 Mon Sep 17 00:00:00 2001 From: Andrew Rodrigues Date: Tue, 16 Apr 2019 17:51:52 -0400 Subject: [PATCH 23/83] fix: #7545 --- src/routes/authentication.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/routes/authentication.js b/src/routes/authentication.js index 49f6233ac2..efba27052d 100644 --- a/src/routes/authentication.js +++ b/src/routes/authentication.js @@ -125,8 +125,7 @@ Auth.reloadRoutes = function (router, callback) { var middlewares = [multipartMiddleware, Auth.middleware.applyCSRF, Auth.middleware.applyBlacklist]; router.post('/register', middlewares, controllers.authentication.register); - router.post('/register', Auth.middleware.applyCSRF, Auth.middleware.applyBlacklist, controllers.authentication.register); - router.post('/register/complete', Auth.middleware.applyCSRF, Auth.middleware.applyBlacklist, controllers.authentication.registerComplete); + router.post('/register/complete', middlewares, controllers.authentication.registerComplete); router.post('/register/abort', controllers.authentication.registerAbort); router.post('/login', Auth.middleware.applyCSRF, Auth.middleware.applyBlacklist, controllers.authentication.login); router.post('/logout', Auth.middleware.applyCSRF, controllers.authentication.logout); From 4df925e76a29f523a4af7247fd49d4523dee8c7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Wed, 17 Apr 2019 17:08:52 -0400 Subject: [PATCH 24/83] fix: remove redis object cache --- src/database/redis/hash.js | 85 +++++++++++--------------------------- src/database/redis/main.js | 5 --- 2 files changed, 24 insertions(+), 66 deletions(-) diff --git a/src/database/redis/hash.js b/src/database/redis/hash.js index 7be90aa7f0..9df27690d4 100644 --- a/src/database/redis/hash.js +++ b/src/database/redis/hash.js @@ -3,13 +3,6 @@ module.exports = function (redisClient, module) { var helpers = module.helpers.redis; - const async = require('async'); - const _ = require('lodash'); - - const cache = require('../cache').create('redis'); - - module.objectCache = cache; - module.setObject = function (key, data, callback) { callback = callback || function () {}; if (!key || !data) { @@ -30,11 +23,7 @@ module.exports = function (redisClient, module) { return callback(); } redisClient.hmset(key, data, function (err) { - if (err) { - return callback(err); - } - cache.delObjectCache(key); - callback(); + callback(err); }); }; @@ -44,51 +33,23 @@ module.exports = function (redisClient, module) { return callback(); } redisClient.hset(key, field, value, function (err) { - if (err) { - return callback(err); - } - cache.delObjectCache(key); - callback(); + callback(err); }); }; module.getObject = function (key, callback) { - module.getObjects([key], function (err, data) { - if (err) { - return callback(err); - } - callback(null, data && data.length ? data[0] : null); - }); + redisClient.hgetall(key, callback); }; module.getObjects = function (keys, callback) { - var cachedData = {}; - function getFromCache(next) { - process.nextTick(next, null, keys.map(key => _.clone(cachedData[key]))); + if (!Array.isArray(keys) || !keys.length) { + return setImmediate(callback, null, []); } - - const unCachedKeys = cache.getUnCachedKeys(keys, cachedData); - if (!unCachedKeys.length) { - return getFromCache(callback); + if (keys.length > 1) { + helpers.execKeys(redisClient, 'batch', 'hgetall', keys, callback); + } else { + redisClient.hgetall(keys[0], (err, data) => callback(err, [data])); } - - async.waterfall([ - function (next) { - if (unCachedKeys.length > 1) { - helpers.execKeys(redisClient, 'batch', 'hgetall', unCachedKeys, next); - } else { - redisClient.hgetall(unCachedKeys[0], (err, data) => next(err, [data])); - } - }, - function (data, next) { - unCachedKeys.forEach(function (key, i) { - cachedData[key] = data[i] || null; - cache.set(key, cachedData[key]); - }); - - getFromCache(next); - }, - ], callback); }; module.getObjectField = function (key, field, callback) { @@ -107,20 +68,25 @@ module.exports = function (redisClient, module) { if (!Array.isArray(fields) || !fields.length) { return callback(null, keys.map(function () { return {}; })); } - module.getObjects(keys, function (err, items) { + var batch = redisClient.batch(); + + for (var x = 0; x < keys.length; x += 1) { + batch.hmget.apply(batch, [keys[x]].concat(fields)); + } + + batch.exec(function (err, results) { if (err) { return callback(err); } - const returnData = items.map((item) => { - item = item || {}; - const result = {}; - fields.forEach((field) => { - result[field] = item[field] !== undefined ? item[field] : null; - }); - return result; - }); - callback(null, returnData); + results = results.map(function makeObject(array) { + var obj = {}; + for (var i = 0, ii = fields.length; i < ii; i += 1) { + obj[fields[i]] = array[i]; + } + return obj; + }); + callback(null, results); }); }; @@ -150,14 +116,12 @@ module.exports = function (redisClient, module) { return setImmediate(callback); } redisClient.hdel(key, field, function (err) { - cache.delObjectCache(key); callback(err); }); }; module.deleteObjectFields = function (key, fields, callback) { helpers.execKeyValues(redisClient, 'batch', 'hdel', key, fields, function (err) { - cache.delObjectCache(key); callback(err); }); }; @@ -176,7 +140,6 @@ module.exports = function (redisClient, module) { if (err) { return callback(err); } - cache.delObjectCache(key); callback(null, Array.isArray(result) ? result.map(value => parseInt(value, 10)) : parseInt(result, 10)); } value = parseInt(value, 10); diff --git a/src/database/redis/main.js b/src/database/redis/main.js index c81f3aa73e..5fe8e27562 100644 --- a/src/database/redis/main.js +++ b/src/database/redis/main.js @@ -16,7 +16,6 @@ module.exports = function (redisClient, module) { if (err) { return callback(err); } - module.objectCache.resetObjectCache(); callback(); }); }; @@ -36,7 +35,6 @@ module.exports = function (redisClient, module) { module.delete = function (key, callback) { callback = callback || function () {}; redisClient.del(key, function (err) { - module.objectCache.delObjectCache(key); callback(err); }); }; @@ -48,7 +46,6 @@ module.exports = function (redisClient, module) { batch.del(keys[i]); } batch.exec(function (err) { - module.objectCache.delObjectCache(keys); callback(err); }); }; @@ -75,8 +72,6 @@ module.exports = function (redisClient, module) { if (err && err.message !== 'ERR no such key') { return callback(err); } - module.objectCache.delObjectCache(oldKey); - module.objectCache.delObjectCache(newKey); callback(); }); }; From c6cd6c5705a220be6d9a1e9854fafa5bcef5eab3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 18 Apr 2019 08:00:55 -0400 Subject: [PATCH 25/83] fix: add post queue to /compose POST route --- src/controllers/admin/postqueue.js | 13 ++++++++++--- src/controllers/composer.js | 24 +++++++++++++++++++++--- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/controllers/admin/postqueue.js b/src/controllers/admin/postqueue.js index 52754637a6..1cb66ff0c8 100644 --- a/src/controllers/admin/postqueue.js +++ b/src/controllers/admin/postqueue.js @@ -64,8 +64,10 @@ function getQueuedPosts(ids, callback) { function (data, next) { postData = data; data.forEach(function (data) { - data.data = JSON.parse(data.data); - data.data.timestampISO = utils.toISOString(data.data.timestamp); + if (data) { + data.data = JSON.parse(data.data); + data.data.timestampISO = utils.toISOString(data.data.timestamp); + } return data; }); const uids = data.map(data => data && data.uid); @@ -73,10 +75,15 @@ function getQueuedPosts(ids, callback) { }, function (userData, next) { postData.forEach(function (postData, index) { - postData.user = userData[index]; + if (postData) { + postData.user = userData[index]; + } }); async.map(postData, function (postData, next) { + if (!postData) { + return next(null, postData); + } postData.data.rawContent = validator.escape(String(postData.data.content)); postData.data.title = validator.escape(String(postData.data.title || '')); async.waterfall([ diff --git a/src/controllers/composer.js b/src/controllers/composer.js index 880e1b2b78..356cae1f57 100644 --- a/src/controllers/composer.js +++ b/src/controllers/composer.js @@ -6,6 +6,7 @@ var nconf = require('nconf'); var user = require('../user'); var plugins = require('../plugins'); var topics = require('../topics'); +var posts = require('../posts'); var helpers = require('./helpers'); exports.get = function (req, res, callback) { @@ -53,21 +54,38 @@ exports.post = function (req, res) { async.waterfall([ function (next) { + function queueOrPost(postFn, data, next) { + async.waterfall([ + function (next) { + posts.shouldQueue(req.uid, data, next); + }, + function (shouldQueue, next) { + if (shouldQueue) { + delete data.req; + posts.addToQueue(data, next); + } else { + postFn(data, next); + } + }, + ], next); + } if (body.tid) { data.tid = body.tid; - topics.reply(data, next); + queueOrPost(topics.reply, data, next); } else if (body.cid) { data.cid = body.cid; data.title = body.title; data.tags = []; data.thumb = ''; - - topics.post(data, next); + queueOrPost(topics.post, data, next); } else { next(new Error('[[error:invalid-data]]')); } }, function (result, next) { + if (result.queued) { + return res.redirect((nconf.get('relative_path') || '/')); + } var uid = result.uid ? result.uid : result.topicData.uid; user.updateOnlineUsers(uid); next(null, result.pid ? '/post/' + result.pid : '/topic/' + result.topicData.slug); From 45acf809871ae1f2e26a2c24edfc2953611b4750 Mon Sep 17 00:00:00 2001 From: Aziz Khoury Date: Fri, 19 Apr 2019 00:22:33 +0300 Subject: [PATCH 26/83] remove expire timestamp when banning user permanently, fixes #7547 (#7548) --- src/user/bans.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/user/bans.js b/src/user/bans.js index 5832dfea59..6de515b426 100644 --- a/src/user/bans.js +++ b/src/user/bans.js @@ -45,6 +45,9 @@ module.exports = function (User) { if (until > now) { tasks.push(async.apply(db.sortedSetAdd, 'users:banned:expire', until, uid)); tasks.push(async.apply(User.setUserField, uid, 'banned:expire', until)); + } else { + tasks.push(async.apply(db.sortedSetRemove, 'users:banned:expire', uid)); + tasks.push(async.apply(User.setUserField, uid, 'banned:expire', 0)); } async.series(tasks, function (err) { From abcca134dc750a1e1d01b22157dcd403f278f15f Mon Sep 17 00:00:00 2001 From: Andrew Rodrigues Date: Fri, 19 Apr 2019 11:58:53 -0400 Subject: [PATCH 27/83] chore: bump themes --- install/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/package.json b/install/package.json index 2b91ba44ff..9f053a4b6f 100644 --- a/install/package.json +++ b/install/package.json @@ -90,9 +90,9 @@ "nodebb-plugin-spam-be-gone": "0.6.1", "nodebb-rewards-essentials": "0.0.13", "nodebb-theme-lavender": "5.0.9", - "nodebb-theme-persona": "9.1.31", + "nodebb-theme-persona": "9.1.32", "nodebb-theme-slick": "1.2.23", - "nodebb-theme-vanilla": "10.1.27", + "nodebb-theme-vanilla": "10.1.28", "nodebb-widget-essentials": "4.0.17", "nodemailer": "^6.0.0", "passport": "^0.4.0", From f10708e7344f78e17d0f1c21218a5ef5d6e9f74a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Wed, 24 Apr 2019 06:23:20 -0400 Subject: [PATCH 28/83] chore(deps): update node.js to v8.16.0 (#7554) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 2de61215ec..9e83cc1363 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # The base image is the latest 8.x node (LTS) -FROM node:8.15.1@sha256:918f0be3932f555cd2645ca828b9c231a2dab10d9cf2dbb58896411207bbe52f +FROM node:8.16.0@sha256:3dc377430ed62815eac3d97f08f3760bca89250c6168515e4e5e03d892745825 RUN mkdir -p /usr/src/app WORKDIR /usr/src/app From ca694fd166a9fd52becf29377c5b26e486413bfe Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Wed, 24 Apr 2019 06:23:39 -0400 Subject: [PATCH 29/83] chore(deps): update dependency jsdom to v14.1.0 (#7555) --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 9f053a4b6f..ccc2f1d9c7 100644 --- a/install/package.json +++ b/install/package.json @@ -141,7 +141,7 @@ "grunt": "1.0.4", "grunt-contrib-watch": "1.1.0", "husky": "1.3.1", - "jsdom": "14.0.0", + "jsdom": "14.1.0", "lint-staged": "8.1.5", "mocha": "6.1.2", "mocha-lcov-reporter": "1.3.0", From d4d8d98fe2054dbae356c661c89cadf16a286bb8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Wed, 24 Apr 2019 07:07:52 -0400 Subject: [PATCH 30/83] chore(deps): update dependency jsdom to v15 (#7556) --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index ccc2f1d9c7..24eed70ea0 100644 --- a/install/package.json +++ b/install/package.json @@ -141,7 +141,7 @@ "grunt": "1.0.4", "grunt-contrib-watch": "1.1.0", "husky": "1.3.1", - "jsdom": "14.1.0", + "jsdom": "15.0.0", "lint-staged": "8.1.5", "mocha": "6.1.2", "mocha-lcov-reporter": "1.3.0", From c1fb17f9a76d45ce10f45c1d80b90b1a1cf1845c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Wed, 24 Apr 2019 11:10:54 -0400 Subject: [PATCH 31/83] chore(deps): update dependency eslint-plugin-import to v2.17.2 (#7546) --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 24eed70ea0..9f7cfd4d93 100644 --- a/install/package.json +++ b/install/package.json @@ -137,7 +137,7 @@ "coveralls": "3.0.3", "eslint": "5.15.3", "eslint-config-airbnb-base": "13.1.0", - "eslint-plugin-import": "2.17.1", + "eslint-plugin-import": "2.17.2", "grunt": "1.0.4", "grunt-contrib-watch": "1.1.0", "husky": "1.3.1", From e81a1dbb65f6472e1b58c1a222560f0256c2499e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 24 Apr 2019 15:52:55 +0000 Subject: [PATCH 32/83] chore(deps): update dependency husky to v2 --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 9f7cfd4d93..f9ed338510 100644 --- a/install/package.json +++ b/install/package.json @@ -140,7 +140,7 @@ "eslint-plugin-import": "2.17.2", "grunt": "1.0.4", "grunt-contrib-watch": "1.1.0", - "husky": "1.3.1", + "husky": "2.0.0", "jsdom": "15.0.0", "lint-staged": "8.1.5", "mocha": "6.1.2", From 2c98dd5f9dca14d2dedc1c68433aa8934342d8b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Wed, 24 Apr 2019 14:38:46 -0400 Subject: [PATCH 33/83] Object cache refactor (#7558) * fix: cache refactor db.getObjectField no longer loads entire object db.getObjectsFields only clones data once more tests * feat: add back cache to redis db.getObjectField no longer loads entire object --- src/database/mongo/hash.js | 111 +++++++++++++++----------------- src/database/postgres/hash.js | 6 +- src/database/redis/hash.js | 115 +++++++++++++++++++++++----------- src/database/redis/main.js | 5 ++ test/database/hash.js | 41 ++++++++++++ 5 files changed, 180 insertions(+), 98 deletions(-) diff --git a/src/database/mongo/hash.js b/src/database/mongo/hash.js index 54a45edf60..b6be45b776 100644 --- a/src/database/mongo/hash.js +++ b/src/database/mongo/hash.js @@ -39,31 +39,70 @@ module.exports = function (db, module) { module.getObject = function (key, callback) { if (!key) { - return callback(); + return setImmediate(callback, null, null); } module.getObjects([key], function (err, data) { - if (err) { - return callback(err); - } - callback(null, data && data.length ? data[0] : null); + callback(err, data && data.length ? data[0] : null); }); }; module.getObjects = function (keys, callback) { - var cachedData = {}; - function getFromCache() { - process.nextTick(callback, null, keys.map(key => _.clone(cachedData[key]))); - } + module.getObjectsFields(keys, [], callback); + }; + module.getObjectField = function (key, field, callback) { + if (!key) { + return setImmediate(callback, null, null); + } + const cachedData = {}; + cache.getUnCachedKeys([key], cachedData); + if (cachedData[key]) { + return setImmediate(callback, null, cachedData[key].hasOwnProperty(field) ? cachedData[key][field] : null); + } + field = helpers.fieldToString(field); + db.collection('objects').findOne({ _key: key }, { projection: { _id: 0, [field]: 1 } }, function (err, item) { + if (err || !item) { + return callback(err, null); + } + callback(null, item.hasOwnProperty(field) ? item[field] : null); + }); + }; + + module.getObjectFields = function (key, fields, callback) { + if (!key) { + return setImmediate(callback, null, null); + } + module.getObjectsFields([key], fields, function (err, data) { + callback(err, data ? data[0] : null); + }); + }; + + module.getObjectsFields = function (keys, fields, callback) { if (!Array.isArray(keys) || !keys.length) { - return callback(null, []); + return setImmediate(callback, null, []); + } + const cachedData = {}; + function returnData() { + var mapped = keys.map(function (key) { + if (!fields.length) { + return _.clone(cachedData[key]); + } + + const item = cachedData[key] || {}; + const result = {}; + fields.forEach((field) => { + result[field] = item[field] !== undefined ? item[field] : null; + }); + return result; + }); + + callback(null, mapped); } const unCachedKeys = cache.getUnCachedKeys(keys, cachedData); - if (!unCachedKeys.length) { - return getFromCache(); + return process.nextTick(returnData); } var query = { _key: { $in: unCachedKeys } }; @@ -81,53 +120,7 @@ module.exports = function (db, module) { cache.set(key, cachedData[key]); }); - getFromCache(); - }); - }; - - module.getObjectField = function (key, field, callback) { - if (!key) { - return callback(); - } - module.getObject(key, function (err, item) { - if (err || !item) { - return callback(err, null); - } - callback(null, item.hasOwnProperty(field) ? item[field] : null); - }); - }; - - module.getObjectFields = function (key, fields, callback) { - if (!key) { - return callback(); - } - module.getObjectsFields([key], fields, function (err, data) { - callback(err, data ? data[0] : null); - }); - }; - - module.getObjectsFields = function (keys, fields, callback) { - if (!Array.isArray(keys) || !keys.length) { - return callback(null, []); - } - module.getObjects(keys, function (err, items) { - if (err) { - return callback(err); - } - if (items === null) { - items = []; - } - - const returnData = items.map((item) => { - item = item || {}; - const result = {}; - fields.forEach((field) => { - result[field] = item[field] !== undefined ? item[field] : null; - }); - return result; - }); - - callback(null, returnData); + returnData(); }); }; diff --git a/src/database/postgres/hash.js b/src/database/postgres/hash.js index aeb794185b..969104c84b 100644 --- a/src/database/postgres/hash.js +++ b/src/database/postgres/hash.js @@ -65,7 +65,7 @@ VALUES ($1::TEXT, jsonb_build_object($2::TEXT, $3::TEXT::JSONB)) module.getObject = function (key, callback) { if (!key) { - return callback(); + return callback(null, null); } db.query({ @@ -122,7 +122,7 @@ SELECT h."data" module.getObjectField = function (key, field, callback) { if (!key) { - return callback(); + return setImmediate(callback, null, null); } db.query({ @@ -151,7 +151,7 @@ SELECT h."data"->>$2::TEXT f module.getObjectFields = function (key, fields, callback) { if (!key) { - return callback(); + return setImmediate(callback, null, null); } db.query({ diff --git a/src/database/redis/hash.js b/src/database/redis/hash.js index 9df27690d4..355393f05c 100644 --- a/src/database/redis/hash.js +++ b/src/database/redis/hash.js @@ -3,6 +3,13 @@ module.exports = function (redisClient, module) { var helpers = module.helpers.redis; + const async = require('async'); + const _ = require('lodash'); + + const cache = require('../cache').create('redis'); + + module.objectCache = cache; + module.setObject = function (key, data, callback) { callback = callback || function () {}; if (!key || !data) { @@ -23,7 +30,11 @@ module.exports = function (redisClient, module) { return callback(); } redisClient.hmset(key, data, function (err) { - callback(err); + if (err) { + return callback(err); + } + cache.delObjectCache(key); + callback(); }); }; @@ -33,61 +44,90 @@ module.exports = function (redisClient, module) { return callback(); } redisClient.hset(key, field, value, function (err) { - callback(err); + if (err) { + return callback(err); + } + cache.delObjectCache(key); + callback(); }); }; module.getObject = function (key, callback) { - redisClient.hgetall(key, callback); - }; - - module.getObjects = function (keys, callback) { - if (!Array.isArray(keys) || !keys.length) { - return setImmediate(callback, null, []); + if (!key) { + return setImmediate(callback, null, null); } - if (keys.length > 1) { - helpers.execKeys(redisClient, 'batch', 'hgetall', keys, callback); - } else { - redisClient.hgetall(keys[0], (err, data) => callback(err, [data])); - } - }; - module.getObjectField = function (key, field, callback) { - module.getObjectFields(key, [field], function (err, data) { - callback(err, data ? data[field] : null); + module.getObjectsFields([key], [], function (err, data) { + callback(err, data && data.length ? data[0] : null); }); }; + module.getObjects = function (keys, callback) { + module.getObjectsFields(keys, [], callback); + }; + + module.getObjectField = function (key, field, callback) { + if (!key) { + return setImmediate(callback, null, null); + } + const cachedData = {}; + cache.getUnCachedKeys([key], cachedData); + if (cachedData[key]) { + return setImmediate(callback, null, cachedData[key].hasOwnProperty(field) ? cachedData[key][field] : null); + } + redisClient.hget(key, field, callback); + }; + module.getObjectFields = function (key, fields, callback) { + if (!key) { + return setImmediate(callback, null, null); + } module.getObjectsFields([key], fields, function (err, results) { callback(err, results ? results[0] : null); }); }; module.getObjectsFields = function (keys, fields, callback) { - if (!Array.isArray(fields) || !fields.length) { + if (!Array.isArray(keys) || !keys.length) { + return setImmediate(callback, null, []); + } + if (!Array.isArray(fields)) { return callback(null, keys.map(function () { return {}; })); } - var batch = redisClient.batch(); + const cachedData = {}; + const unCachedKeys = cache.getUnCachedKeys(keys, cachedData); - for (var x = 0; x < keys.length; x += 1) { - batch.hmget.apply(batch, [keys[x]].concat(fields)); - } - - batch.exec(function (err, results) { - if (err) { - return callback(err); - } - - results = results.map(function makeObject(array) { - var obj = {}; - for (var i = 0, ii = fields.length; i < ii; i += 1) { - obj[fields[i]] = array[i]; + async.waterfall([ + function (next) { + if (unCachedKeys.length > 1) { + helpers.execKeys(redisClient, 'batch', 'hgetall', unCachedKeys, next); + } else if (unCachedKeys.length === 1) { + redisClient.hgetall(unCachedKeys[0], (err, data) => next(err, [data])); + } else { + next(null, []); } - return obj; - }); - callback(null, results); - }); + }, + function (data, next) { + unCachedKeys.forEach(function (key, i) { + cachedData[key] = data[i] || null; + cache.set(key, cachedData[key]); + }); + + var mapped = keys.map(function (key) { + if (!fields.length) { + return _.clone(cachedData[key]); + } + + const item = cachedData[key] || {}; + const result = {}; + fields.forEach((field) => { + result[field] = item[field] !== undefined ? item[field] : null; + }); + return result; + }); + next(null, mapped); + }, + ], callback); }; module.getObjectKeys = function (key, callback) { @@ -116,12 +156,14 @@ module.exports = function (redisClient, module) { return setImmediate(callback); } redisClient.hdel(key, field, function (err) { + cache.delObjectCache(key); callback(err); }); }; module.deleteObjectFields = function (key, fields, callback) { helpers.execKeyValues(redisClient, 'batch', 'hdel', key, fields, function (err) { + cache.delObjectCache(key); callback(err); }); }; @@ -140,6 +182,7 @@ module.exports = function (redisClient, module) { if (err) { return callback(err); } + cache.delObjectCache(key); callback(null, Array.isArray(result) ? result.map(value => parseInt(value, 10)) : parseInt(result, 10)); } value = parseInt(value, 10); diff --git a/src/database/redis/main.js b/src/database/redis/main.js index 5fe8e27562..c81f3aa73e 100644 --- a/src/database/redis/main.js +++ b/src/database/redis/main.js @@ -16,6 +16,7 @@ module.exports = function (redisClient, module) { if (err) { return callback(err); } + module.objectCache.resetObjectCache(); callback(); }); }; @@ -35,6 +36,7 @@ module.exports = function (redisClient, module) { module.delete = function (key, callback) { callback = callback || function () {}; redisClient.del(key, function (err) { + module.objectCache.delObjectCache(key); callback(err); }); }; @@ -46,6 +48,7 @@ module.exports = function (redisClient, module) { batch.del(keys[i]); } batch.exec(function (err) { + module.objectCache.delObjectCache(keys); callback(err); }); }; @@ -72,6 +75,8 @@ module.exports = function (redisClient, module) { if (err && err.message !== 'ERR no such key') { return callback(err); } + module.objectCache.delObjectCache(oldKey); + module.objectCache.delObjectCache(newKey); callback(); }); }; diff --git a/test/database/hash.js b/test/database/hash.js index 392379e66b..f521b4238a 100644 --- a/test/database/hash.js +++ b/test/database/hash.js @@ -92,6 +92,20 @@ describe('Hash methods', function () { }); }); }); + + it('should work for field names with "." in them when they are cached', function (done) { + db.setObjectField('dotObject3', 'my.dot.field', 'foo2', function (err) { + assert.ifError(err); + db.getObject('dotObject3', function (err, data) { + assert.ifError(err); + db.getObjectField('dotObject3', 'my.dot.field', function (err, value) { + assert.ifError(err); + assert.equal(value, 'foo2'); + done(); + }); + }); + }); + }); }); describe('getObject()', function () { @@ -113,6 +127,15 @@ describe('Hash methods', function () { done(); }); }); + + it('should return null if key is falsy', function (done) { + db.getObject(null, function (err, data) { + assert.ifError(err); + assert.equal(arguments.length, 2); + assert.equal(data, null); + done(); + }); + }); }); describe('getObjects()', function () { @@ -163,6 +186,15 @@ describe('Hash methods', function () { done(); }); }); + + it('should return null if key is falsy', function (done) { + db.getObjectField(null, 'test', function (err, data) { + assert.ifError(err); + assert.equal(arguments.length, 2); + assert.equal(data, null); + done(); + }); + }); }); describe('getObjectFields()', function () { @@ -188,6 +220,15 @@ describe('Hash methods', function () { done(); }); }); + + it('should return null if key is falsy', function (done) { + db.getObjectFields(null, ['test', 'foo'], function (err, data) { + assert.ifError(err); + assert.equal(arguments.length, 2); + assert.equal(data, null); + done(); + }); + }); }); describe('getObjectsFields()', function () { From 65ff0bbd4f8214f0bc560575e652e257d7ca4880 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 24 Apr 2019 21:27:31 +0000 Subject: [PATCH 34/83] chore(deps): update dependency husky to v2.1.0 --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index f9ed338510..4be9ddf163 100644 --- a/install/package.json +++ b/install/package.json @@ -140,7 +140,7 @@ "eslint-plugin-import": "2.17.2", "grunt": "1.0.4", "grunt-contrib-watch": "1.1.0", - "husky": "2.0.0", + "husky": "2.1.0", "jsdom": "15.0.0", "lint-staged": "8.1.5", "mocha": "6.1.2", From 1a7036a68b2be62421c43eb41443f7c782fe51f4 Mon Sep 17 00:00:00 2001 From: Baris Usakli Date: Thu, 25 Apr 2019 15:39:13 -0400 Subject: [PATCH 35/83] feat: add node12 to travis --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 9dde9454e3..08d4c6a62a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,6 +30,7 @@ addons: - mongodb-org-server postgresql: "9.5" node_js: + - "12" - "10" - "8" branches: From 288a25f0a3343aef3b4fcfa9c275c682369f80ce Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Thu, 25 Apr 2019 15:51:41 -0400 Subject: [PATCH 36/83] fix(deps): update dependency sharp to v0.22.1 (#7561) --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 4be9ddf163..42e59c1c7c 100644 --- a/install/package.json +++ b/install/package.json @@ -110,7 +110,7 @@ "sanitize-html": "^1.16.3", "semver": "^6.0.0", "serve-favicon": "^2.4.5", - "sharp": "0.22.0", + "sharp": "0.22.1", "sitemap": "^2.0.0", "socket.io": "2.2.0", "socket.io-adapter-cluster": "^1.0.1", From 8775e7e652a5f239d3fd90dc456e33284d65855b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 25 Apr 2019 19:19:55 -0400 Subject: [PATCH 37/83] fix: node12 tests --- src/topics/tags.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/topics/tags.js b/src/topics/tags.js index 2be85a2c73..29d8d047d6 100644 --- a/src/topics/tags.js +++ b/src/topics/tags.js @@ -424,9 +424,7 @@ module.exports = function (Topics) { } } - matches = matches.sort(function (a, b) { - return a > b; - }); + matches.sort(); next(null, { matches: matches }); }, ], callback); From 09681e6ccf2d472abb20ba8dc3aafbd1bd11771e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 25 Apr 2019 21:43:21 -0400 Subject: [PATCH 38/83] fix: #7562 --- public/src/app.js | 1 + public/src/modules/chat.js | 19 +++++++++++-------- public/src/modules/taskbar.js | 10 +++++++--- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/public/src/app.js b/public/src/app.js index 1a8e1a65e5..9ca5678f4f 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -425,6 +425,7 @@ app.cacheBuster = null; return user && parseInt(user.uid, 10) !== parseInt(app.user.uid, 10); }); roomData.uid = uid || app.user.uid; + roomData.isSelf = true; chat.createModal(roomData, loadAndCenter); }); } diff --git a/public/src/modules/chat.js b/public/src/modules/chat.js index d952d6abbc..47bda91e50 100644 --- a/public/src/modules/chat.js +++ b/public/src/modules/chat.js @@ -73,6 +73,7 @@ define('chat', [ title: '[[modules:chat.chatting_with]] ' + (data.roomName || username), touid: data.message.fromUser.uid, roomId: data.roomId, + isSelf: false, }); } }); @@ -89,8 +90,8 @@ define('chat', [ }); roomData.silent = true; roomData.uid = app.user.uid; - module.createModal(roomData, function (modal) { - module.toggleNew(modal.attr('data-uuid'), !isSelf, true); + roomData.isSelf = isSelf; + module.createModal(roomData, function () { if (!isSelf) { updateTitleAndPlaySound(data.message.mid, username); } @@ -231,13 +232,15 @@ define('chat', [ roomId: data.roomId, icon: 'fa-comment', state: '', + isSelf: data.isSelf, + }, function () { + taskbar.toggleNew(chatModal.attr('data-uuid'), !data.isSelf); + $(window).trigger('action:chat.loaded', chatModal); + + if (typeof callback === 'function') { + callback(chatModal); + } }); - - $(window).trigger('action:chat.loaded', chatModal); - - if (typeof callback === 'function') { - callback(chatModal); - } }); }); }; diff --git a/public/src/modules/taskbar.js b/public/src/modules/taskbar.js index d285756391..954c491580 100644 --- a/public/src/modules/taskbar.js +++ b/public/src/modules/taskbar.js @@ -79,7 +79,8 @@ define('taskbar', ['benchpress', 'translator'], function (Benchpress, translator update(); }; - taskbar.push = function (module, uuid, options) { + taskbar.push = function (module, uuid, options, callback) { + callback = callback || function () {}; var element = taskbar.tasklist.find('li[data-uuid="' + uuid + '"]'); var data = { @@ -92,7 +93,9 @@ define('taskbar', ['benchpress', 'translator'], function (Benchpress, translator $(window).trigger('filter:taskbar.push', data); if (!element.length && data.module) { - createTaskbar(data); + createTaskbarItem(data, callback); + } else { + callback(element); } }; @@ -146,7 +149,7 @@ define('taskbar', ['benchpress', 'translator'], function (Benchpress, translator taskbar.tasklist.find('.active').removeClass('active'); } - function createTaskbar(data) { + function createTaskbarItem(data, callback) { translator.translate(data.options.title, function (taskTitle) { var title = $('

').text(taskTitle || 'NodeBB Task').html(); @@ -175,6 +178,7 @@ define('taskbar', ['benchpress', 'translator'], function (Benchpress, translator taskbarEl.data(data); $(window).trigger('action:taskbar.pushed', data); + callback(taskbarEl); }); } From 7c4201f28202040df6aec6a62f11255fc0992432 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Thu, 25 Apr 2019 21:49:49 -0400 Subject: [PATCH 39/83] fix(deps): update dependency nodebb-theme-persona to v9.1.33 (#7563) --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 42e59c1c7c..ce44d8bc94 100644 --- a/install/package.json +++ b/install/package.json @@ -90,7 +90,7 @@ "nodebb-plugin-spam-be-gone": "0.6.1", "nodebb-rewards-essentials": "0.0.13", "nodebb-theme-lavender": "5.0.9", - "nodebb-theme-persona": "9.1.32", + "nodebb-theme-persona": "9.1.33", "nodebb-theme-slick": "1.2.23", "nodebb-theme-vanilla": "10.1.28", "nodebb-widget-essentials": "4.0.17", From f86d74d8b9858e0b7ccff1fc1a99e3f0aeaa68d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 25 Apr 2019 22:18:12 -0400 Subject: [PATCH 40/83] fix: #7424 --- public/src/modules/chat.js | 58 +++++++++++++++++++++++--------------- 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/public/src/modules/chat.js b/public/src/modules/chat.js index 47bda91e50..d6a69c1056 100644 --- a/public/src/modules/chat.js +++ b/public/src/modules/chat.js @@ -55,28 +55,7 @@ define('chat', [ newMessage = data.self === 0; if (module.modalExists(data.roomId)) { - require(['forum/chats/messages'], function (ChatsMessages) { - var modal = module.getModal(data.roomId); - - ChatsMessages.appendChatMessage(modal.find('.chat-content'), data.message); - - if (modal.is(':visible')) { - taskbar.updateActive(modal.attr('data-uuid')); - ChatsMessages.scrollToBottom(modal.find('.chat-content')); - } else if (!ajaxify.data.template.chats) { - module.toggleNew(modal.attr('data-uuid'), true, true); - } - - if (!isSelf && (!modal.is(':visible') || !app.isFocused)) { - updateTitleAndPlaySound(data.message.mid, username); - taskbar.push('chat', modal.attr('data-uuid'), { - title: '[[modules:chat.chatting_with]] ' + (data.roomName || username), - touid: data.message.fromUser.uid, - roomId: data.roomId, - isSelf: false, - }); - } - }); + addMessageToModal(data); } else if (!ajaxify.data.template.chats) { socket.emit('modules.chats.loadRoom', { roomId: data.roomId, @@ -91,15 +70,44 @@ define('chat', [ roomData.silent = true; roomData.uid = app.user.uid; roomData.isSelf = isSelf; - module.createModal(roomData, function () { + module.createModal(roomData, function (modal) { if (!isSelf) { updateTitleAndPlaySound(data.message.mid, username); } + if (!modal) { + addMessageToModal(data); + } }); }); } }; + function addMessageToModal(data) { + var modal = module.getModal(data.roomId); + var username = data.message.fromUser.username; + var isSelf = data.self === 1; + require(['forum/chats/messages'], function (ChatsMessages) { + ChatsMessages.appendChatMessage(modal.find('.chat-content'), data.message); + + if (modal.is(':visible')) { + taskbar.updateActive(modal.attr('data-uuid')); + ChatsMessages.scrollToBottom(modal.find('.chat-content')); + } else if (!ajaxify.data.template.chats) { + module.toggleNew(modal.attr('data-uuid'), true, true); + } + + if (!isSelf && (!modal.is(':visible') || !app.isFocused)) { + updateTitleAndPlaySound(data.message.mid, username); + taskbar.push('chat', modal.attr('data-uuid'), { + title: '[[modules:chat.chatting_with]] ' + (data.roomName || username), + touid: data.message.fromUser.uid, + roomId: data.roomId, + isSelf: false, + }); + } + }); + } + function updateTitleAndPlaySound(mid, username) { app.alternatingTitle('[[modules:chat.user_has_messaged_you, ' + username + ']]'); require(['sounds'], function (sounds) { @@ -128,8 +136,12 @@ define('chat', [ }; module.createModal = function (data, callback) { + callback = callback || function () {}; require(['scrollStop', 'forum/chats', 'forum/chats/messages'], function (scrollStop, Chats, ChatsMessages) { app.parseAndTranslate('chat', data, function (chatModal) { + if (module.modalExists(data.roomId)) { + return callback(null); + } var uuid = utils.generateUUID(); var dragged = false; From fe6d64ccbc8fd356d1073224e4a481e85d3f5605 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Fri, 26 Apr 2019 12:59:01 -0400 Subject: [PATCH 41/83] fix: #7147 --- src/controllers/helpers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/helpers.js b/src/controllers/helpers.js index efdf97e811..699db7ba4f 100644 --- a/src/controllers/helpers.js +++ b/src/controllers/helpers.js @@ -117,7 +117,7 @@ helpers.notAllowed = function (req, res, error) { if (err) { return winston.error(err); } - if (req.loggedIn) { + if (req.loggedIn || req.uid === -1) { if (res.locals.isAPI) { res.status(403).json({ path: req.path.replace(/^\/api/, ''), From 32cf07d73259b634ff17425c3bed707515ccbac4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Fri, 26 Apr 2019 16:39:27 -0400 Subject: [PATCH 42/83] fix: #7464 --- public/src/modules/navigator.js | 48 ++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/public/src/modules/navigator.js b/public/src/modules/navigator.js index 3d5b697b90..9ab970fd57 100644 --- a/public/src/modules/navigator.js +++ b/public/src/modules/navigator.js @@ -9,7 +9,10 @@ define('navigator', ['forum/pagination', 'components'], function (pagination, co var touchTooltipEl; var touchIntervalId; var touchX; + var touchY; var touchIndex; + var isNavigating = false; + var firstMove = true; navigator.scrollActive = false; @@ -72,28 +75,45 @@ define('navigator', ['forum/pagination', 'components'], function (pagination, co $('.pagination-block.visible-xs').on('touchstart', function (e) { touchTooltipEl = $('.navigator-thumb'); - touchTooltipEl.removeClass('hidden'); touchX = Math.min($(window).width(), Math.max(0, e.touches[0].clientX)); - updateTooltip(); - touchIntervalId = setInterval(updateTooltip, 100); + touchY = Math.min($(window).height(), Math.max(0, e.touches[0].clientY)); + firstMove = true; }).on('touchmove', function (e) { - e.preventDefault(); - e.stopPropagation(); var windowWidth = $(window).width(); + var windowHeight = $(window).height(); + var deltaX = Math.abs(touchX - Math.min(windowWidth, Math.max(0, e.touches[0].clientX))); + var deltaY = Math.abs(touchY - Math.min(windowHeight, Math.max(0, e.touches[0].clientY))); touchX = Math.min(windowWidth, Math.max(0, e.touches[0].clientX)); - var percent = touchX / windowWidth; - index = Math.max(1, Math.ceil(count * percent)); - index = index > count ? count : index; - - navigator.updateTextAndProgressBar(); + touchY = Math.min(windowHeight, Math.max(0, e.touches[0].clientY)); + if (deltaX >= deltaY && firstMove) { + isNavigating = true; + touchIntervalId = setInterval(updateTooltip, 100); + } + if (isNavigating) { + e.preventDefault(); + e.stopPropagation(); + var percent = touchX / windowWidth; + index = Math.max(1, Math.ceil(count * percent)); + index = index > count ? count : index; + if (firstMove) { + updateTooltip(function () { + touchTooltipEl.removeClass('hidden'); + }); + } + navigator.updateTextAndProgressBar(); + } + firstMove = false; }).on('touchend', function () { if (touchIntervalId) { clearInterval(touchIntervalId); touchIntervalId = 0; } - touchTooltipEl.addClass('hidden'); - navigator.scrollToIndex(index - 1, true, 0); + if (isNavigating) { + touchTooltipEl.addClass('hidden'); + navigator.scrollToIndex(index - 1, true, 0); + isNavigating = false; + } }); handleKeys(); @@ -102,7 +122,8 @@ define('navigator', ['forum/pagination', 'components'], function (pagination, co navigator.update(0); }; - function updateTooltip() { + function updateTooltip(callback) { + callback = callback || function () {}; if (touchIndex === index) { return; } @@ -123,6 +144,7 @@ define('navigator', ['forum/pagination', 'components'], function (pagination, co } else { touchTooltipEl.find('.time').text(ds + ' ' + date.getFullYear()); } + callback(); }); } From edc26a5b66f2ef781bf9bf6a58702d2e3ab47759 Mon Sep 17 00:00:00 2001 From: "Misty (Bot)" Date: Sat, 27 Apr 2019 09:25:57 +0000 Subject: [PATCH 43/83] Latest translations and fallbacks --- public/language/fi/admin/admin.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/public/language/fi/admin/admin.json b/public/language/fi/admin/admin.json index 36f0fdde60..959fcd0bb9 100644 --- a/public/language/fi/admin/admin.json +++ b/public/language/fi/admin/admin.json @@ -1,7 +1,7 @@ { - "alert.confirm-rebuild-and-restart": "Are you sure you wish to rebuild and restart NodeBB?", - "alert.confirm-restart": "Are you sure you wish to restart NodeBB?", + "alert.confirm-rebuild-and-restart": "Haluatko varmasti uudelleenrakentaa ja uudelleenkäynnistää NodeBB:n?", + "alert.confirm-restart": "Haluatko varmasti uudelleenkäynnistää NodeBB:n?", - "acp-title": "%1 | NodeBB Admin Control Panel", - "settings-header-contents": "Contents" + "acp-title": "%1 | NodeBB admin hallintapaneeli", + "settings-header-contents": "Sisältö" } \ No newline at end of file From 07e9b67e8d9b362884ae9332be9d3d8702935624 Mon Sep 17 00:00:00 2001 From: Baris Usakli Date: Sat, 27 Apr 2019 11:20:09 -0400 Subject: [PATCH 44/83] fix: #7565 --- src/views/admin/settings/post.tpl | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/views/admin/settings/post.tpl b/src/views/admin/settings/post.tpl index b95e13fc7d..97d8ed6499 100644 --- a/src/views/admin/settings/post.tpl +++ b/src/views/admin/settings/post.tpl @@ -58,7 +58,10 @@
[[admin/settings/post:restrictions]]
- +
+ + +
From ed79f37b3e407831eb88d9337d428eec83b0e229 Mon Sep 17 00:00:00 2001 From: "Misty (Bot)" Date: Sun, 28 Apr 2019 09:25:49 +0000 Subject: [PATCH 45/83] Latest translations and fallbacks --- public/language/ru/category.json | 10 +++++----- public/language/ru/pages.json | 2 +- public/language/ru/search.json | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/public/language/ru/category.json b/public/language/ru/category.json index 50ae1221bf..c4fb0c561d 100644 --- a/public/language/ru/category.json +++ b/public/language/ru/category.json @@ -10,12 +10,12 @@ "watch": "Следить", "ignore": "Игнорировать", "watching": "Отслеживать", - "not-watching": "Not Watching", + "not-watching": "Перестать отслеживать", "ignoring": "Игнорировать", - "watching.description": "Show topics in unread and recent", - "not-watching.description": "Do not show topics in unread, show in recent", - "ignoring.description": "Do not show topics in unread and recent", - "watching.message": "You are now watching updates from this category and all subcategories", + "watching.description": "Показать непрочитанные и недавние темы", + "not-watching.description": "Не показывать непрочитанные темы, показывать последние", + "ignoring.description": " Не показывать непрочитанные и последние темы", + "watching.message": "Вы сейчас просматриваете обновления из этой категории и всех подкатегорий", "notwatching.message": "You are not watching updates from this category and all subcategories", "ignoring.message": "You are now ignoring updates from this category and all subcategories", "watched-categories": "Ваши сообщества" diff --git a/public/language/ru/pages.json b/public/language/ru/pages.json index 79734c40c8..d7579fa2a4 100644 --- a/public/language/ru/pages.json +++ b/public/language/ru/pages.json @@ -45,7 +45,7 @@ "account/posts": "Сообщение от участника %1", "account/topics": "Тема создана участником %1", "account/groups": "%1 групп", - "account/watched_categories": "%1's Watched Categories", + "account/watched_categories": "%1 просмотренных категорий", "account/bookmarks": "%1 сообщений в закладках", "account/settings": "Настройки учётной записи", "account/watched": "Тему просмотрели %1", diff --git a/public/language/ru/search.json b/public/language/ru/search.json index 5e0d2f21cb..2dfc26029f 100644 --- a/public/language/ru/search.json +++ b/public/language/ru/search.json @@ -17,7 +17,7 @@ "at-most": "Максимум", "relevance": "Релевантность", "post-time": "Время публикации", - "votes": "Votes", + "votes": "Голосов", "newer-than": "Ранее чем", "older-than": "Позже чем", "any-date": "Любая дата", @@ -31,7 +31,7 @@ "sort-by": "Сортировать по", "last-reply-time": "Время последнего ответа", "topic-title": "Название темы", - "topic-votes": "Topic votes", + "topic-votes": "Голосов темы", "number-of-replies": "Количество ответов", "number-of-views": "Количество просмотров", "topic-start-date": "Время создания темы", @@ -44,5 +44,5 @@ "search-preferences-saved": "Настройки поиска сохранены", "search-preferences-cleared": "Настройки поиска очищены", "show-results-as": "Показать результаты как:", - "see-more-results": "See more results (%1)" + "see-more-results": "Показать больше результатов (%1)" } \ No newline at end of file From 9385c8e3ee59ec829ceeb5d1ba2fb0773d56ad04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Mon, 29 Apr 2019 09:52:30 -0400 Subject: [PATCH 46/83] feat: #7319 --- public/src/client/topic/replies.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/src/client/topic/replies.js b/public/src/client/topic/replies.js index e02c2df1ae..5ec0fe44f0 100644 --- a/public/src/client/topic/replies.js +++ b/public/src/client/topic/replies.js @@ -31,7 +31,7 @@ define('forum/topic/replies', ['navigator', 'components', 'forum/topic/posts'], 'downvote:disabled': ajaxify.data['downvote:disabled'], 'reputation:disabled': ajaxify.data['reputation:disabled'], loggedIn: !!app.user.uid, - hideReplies: true, + hideReplies: config.hasOwnProperty('showNestedReplies') ? !config.showNestedReplies : true, }; app.parseAndTranslate('topic', 'posts', tplData, function (html) { $('
', { component: 'post/replies' }).html(html).hide().insertAfter(button) @@ -56,7 +56,7 @@ define('forum/topic/replies', ['navigator', 'components', 'forum/topic/posts'], return; } incrementCount(post, 1); - data.hideReplies = true; + data.hideReplies = config.hasOwnProperty('showNestedReplies') ? !config.showNestedReplies : true; app.parseAndTranslate('topic', 'posts', data, function (html) { var replies = $('[component="post"][data-pid="' + post.toPid + '"] [component="post/replies"]').first(); if (replies.length) { From c940a733593059d07c645a7a8c84c85aa52a0fa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Mon, 29 Apr 2019 10:28:56 -0400 Subject: [PATCH 47/83] fix: #7539 --- public/src/modules/helpers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/src/modules/helpers.js b/public/src/modules/helpers.js index 4462971e00..0abd12bc1b 100644 --- a/public/src/modules/helpers.js +++ b/public/src/modules/helpers.js @@ -121,7 +121,7 @@ if (child && !child.isSection) { var link = child.link ? child.link : (relative_path + '/category/' + child.slug); html += '' + - '
' + + '' + '' + child.name + ''; From b990312088fabf3e7c63557abcf6a6e1d95f3a65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Mon, 29 Apr 2019 10:59:52 -0400 Subject: [PATCH 48/83] fix: test --- test/template-helpers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/template-helpers.js b/test/template-helpers.js index 7090683c3c..ada455ef4f 100644 --- a/test/template-helpers.js +++ b/test/template-helpers.js @@ -102,7 +102,7 @@ describe('helpers', function () { ], }; var html = helpers.generateChildrenCategories(category); - assert.equal(html, '
children
'); + assert.equal(html, 'children'); done(); }); From 8945ebcb81543bb72be68277d87f6f5438dd1a45 Mon Sep 17 00:00:00 2001 From: jayjay9 Date: Wed, 1 May 2019 06:35:47 -0700 Subject: [PATCH 49/83] fix: group cover upload not working for s3 upload (#7571) --- src/groups/cover.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/groups/cover.js b/src/groups/cover.js index fc336d0e0d..a18062f307 100644 --- a/src/groups/cover.js +++ b/src/groups/cover.js @@ -38,6 +38,7 @@ module.exports = function (Groups) { image.uploadImage(filename, 'files', { path: tempPath, uid: uid, + name: 'groupCover', }, next); }, function (uploadData, next) { @@ -54,6 +55,7 @@ module.exports = function (Groups) { image.uploadImage('groupCoverThumb-' + data.groupName + path.extname(tempPath), 'files', { path: tempPath, uid: uid, + name: 'groupCover', }, next); }, function (uploadData, next) { From bf6fc502c4a679e548002bad95c5bb927a35a2b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Wed, 1 May 2019 11:10:44 -0400 Subject: [PATCH 50/83] fix: #7564 --- public/src/modules/chat.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/public/src/modules/chat.js b/public/src/modules/chat.js index d6a69c1056..54414a5c54 100644 --- a/public/src/modules/chat.js +++ b/public/src/modules/chat.js @@ -318,6 +318,9 @@ define('chat', [ $(window).on('resize', function () { messagesEl.css('height', module.calculateChatListHeight(modalEl)); + require(['forum/chats/messages'], function (ChatsMessages) { + ChatsMessages.scrollToBottom(modalEl.find('.chat-content')); + }); }); }; From 3d938e7bf8bf3a063121a0087a643b229d8741d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Fri, 3 May 2019 09:48:30 -0400 Subject: [PATCH 51/83] fix: increase batch size --- src/upgrades/1.11.1/remove_ignored_cids_per_user.js | 1 + src/upgrades/1.12.0/category_watch_state.js | 1 + 2 files changed, 2 insertions(+) diff --git a/src/upgrades/1.11.1/remove_ignored_cids_per_user.js b/src/upgrades/1.11.1/remove_ignored_cids_per_user.js index f175e4074f..1d80f0cf09 100644 --- a/src/upgrades/1.11.1/remove_ignored_cids_per_user.js +++ b/src/upgrades/1.11.1/remove_ignored_cids_per_user.js @@ -16,6 +16,7 @@ module.exports = { db.deleteAll(keys, next); }, { progress: this.progress, + batch: 500, }, callback); }, }; diff --git a/src/upgrades/1.12.0/category_watch_state.js b/src/upgrades/1.12.0/category_watch_state.js index 178b7a0354..2d9cbe0c4c 100644 --- a/src/upgrades/1.12.0/category_watch_state.js +++ b/src/upgrades/1.12.0/category_watch_state.js @@ -36,6 +36,7 @@ module.exports = { }, next); }, { progress: progress, + batch: 500, }, next); }, function (next) { From 69d14cc6dd2ec9870215587b261c61e2e4bd4e2b Mon Sep 17 00:00:00 2001 From: "Misty (Bot)" Date: Sun, 5 May 2019 09:26:00 +0000 Subject: [PATCH 52/83] Latest translations and fallbacks --- .../language/pt-BR/admin/advanced/cache.json | 2 +- .../pt-BR/admin/advanced/database.json | 42 ++++++------ .../language/pt-BR/admin/advanced/errors.json | 2 +- .../pt-BR/admin/appearance/customise.json | 10 +-- .../pt-BR/admin/appearance/skins.json | 4 +- .../pt-BR/admin/appearance/themes.json | 6 +- .../pt-BR/admin/development/info.json | 8 +-- .../pt-BR/admin/development/logger.json | 8 +-- .../language/pt-BR/admin/extend/plugins.json | 26 +++---- .../language/pt-BR/admin/extend/rewards.json | 18 ++--- .../language/pt-BR/admin/extend/widgets.json | 8 +-- .../pt-BR/admin/general/dashboard.json | 48 ++++++------- .../pt-BR/admin/general/homepage.json | 4 +- .../pt-BR/admin/general/navigation.json | 12 ++-- .../language/pt-BR/admin/general/social.json | 4 +- .../language/pt-BR/admin/general/sounds.json | 4 +- .../pt-BR/admin/manage/admins-mods.json | 16 ++--- .../pt-BR/admin/manage/categories.json | 36 +++++----- .../pt-BR/admin/manage/privileges.json | 54 +++++++-------- .../language/pt-BR/admin/settings/user.json | 68 +++++++++---------- public/language/pt-BR/user.json | 18 ++--- 21 files changed, 199 insertions(+), 199 deletions(-) diff --git a/public/language/pt-BR/admin/advanced/cache.json b/public/language/pt-BR/admin/advanced/cache.json index 45c3eecd50..01d565c95b 100644 --- a/public/language/pt-BR/admin/advanced/cache.json +++ b/public/language/pt-BR/admin/advanced/cache.json @@ -5,7 +5,7 @@ "length-to-max": "Tamanho / Máximo", "percent-full": "%1% Cheio", "post-cache-size": "Tamanho do Cache de Posts", - "items-in-cache": "Ítems no Cache", + "items-in-cache": "Itens no Cache", "control-panel": "Painel de Controle", "update-settings": "Atualizar Configurações de Cache" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/advanced/database.json b/public/language/pt-BR/admin/advanced/database.json index d6289d4b46..f96d860b31 100644 --- a/public/language/pt-BR/admin/advanced/database.json +++ b/public/language/pt-BR/admin/advanced/database.json @@ -2,33 +2,33 @@ "x-b": "%1 b", "x-mb": "%1 mb", "x-gb": "%1 gb", - "uptime-seconds": "Tempo Rodando em Segundos", - "uptime-days": "Tempo Rodando em Dias", + "uptime-seconds": "Tempo de Atividade em Segundos", + "uptime-days": "Tempo de Atividade em Dias", "mongo": "Mongo", "mongo.version": "Versão do MongoDB", "mongo.storage-engine": "Mecanismo de Armazenamento", - "mongo.collections": "Collections", + "mongo.collections": "Coleções", "mongo.objects": "Objetos", - "mongo.avg-object-size": "Tam. Médio de Objeto", - "mongo.data-size": "Data Size", + "mongo.avg-object-size": "Tamanho Médio de Objeto", + "mongo.data-size": "Quantidade de Dados", "mongo.storage-size": "Tamanho do Armazenamento", "mongo.index-size": "Tamanho do Índice", "mongo.file-size": "Tamanho do Arquivo", "mongo.resident-memory": "Resident Memory", "mongo.virtual-memory": "Memória Virtual", "mongo.mapped-memory": "Memória Mapeada", - "mongo.bytes-in": "Bytes In", - "mongo.bytes-out": "Bytes Out", - "mongo.num-requests": "Number of Requests", - "mongo.raw-info": "Informação Raw do MongoDB", - "mongo.unauthorized": "NodeBB was unable to query the MongoDB database for relevant statistics. Please ensure that the user in use by NodeBB contains the "clusterMonitor" role for the "admin" database.", + "mongo.bytes-in": "Bytes recebidos", + "mongo.bytes-out": "Bytes enviados", + "mongo.num-requests": "Quantidade de Requisições", + "mongo.raw-info": "Informações Não-Processadas do MongoDB", + "mongo.unauthorized": "O NodeBB não conseguiu consultar o banco de dados MongoDB para gerar estatísticas relevantes. Por favor, certifique-se de que o usuário em uso pelo NodeBB tem a função de "clusterMonitor" para o banco de dados "admin".", "redis": "Redis", "redis.version": "Versão do Redis", - "redis.keys": "Keys", - "redis.expires": "Expires", - "redis.avg-ttl": "Average TTL", + "redis.keys": "Chaves", + "redis.expires": "Expira em", + "redis.avg-ttl": "Tempo médio de TTL", "redis.connected-clients": "Clientes Conectados", "redis.connected-slaves": "Connected Slaves", "redis.blocked-clients": "Clientes Bloqueados", @@ -36,17 +36,17 @@ "redis.memory-frag-ratio": "Proporção da Fragmentação da Memória", "redis.total-connections-recieved": "Total de Conexões Recebidas", "redis.total-commands-processed": "Total de Comandos Processados", - "redis.iops": "Ops. Instantâneas Por Segundo", - "redis.iinput": "Instantaneous Input Per Second", - "redis.ioutput": "Instantaneous Output Per Second", - "redis.total-input": "Total Input", - "redis.total-output": "Total Ouput", + "redis.iops": "Operações Instantâneas Por Segundo", + "redis.iinput": "Entradas Instantâneas Por Segundo", + "redis.ioutput": "Saídas Instantâneas Por Segundo", + "redis.total-input": "Total Recebido", + "redis.total-output": "Total Enviado", "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", - "redis.raw-info": "Informação Raw do Redis", + "redis.raw-info": "Informações Não-Processadas do Redis", "postgres": "Postgres", - "postgres.version": "PostgreSQL Version", - "postgres.raw-info": "Postgres Raw Info" + "postgres.version": "Versão do PostgreSQL", + "postgres.raw-info": "Informações Não-Processadas do Postgres" } diff --git a/public/language/pt-BR/admin/advanced/errors.json b/public/language/pt-BR/admin/advanced/errors.json index 90c85005fa..57d4ce0617 100644 --- a/public/language/pt-BR/admin/advanced/errors.json +++ b/public/language/pt-BR/admin/advanced/errors.json @@ -9,6 +9,6 @@ "route": "Rota", "count": "Contagem", "no-routes-not-found": "Ihuul! Sem erros 404!", - "clear404-confirm": "Você tem certeza que deseja limpar todos os logs de erro 404?", + "clear404-confirm": "Você tem certeza de que deseja limpar todos os logs de erro 404?", "clear404-success": "Erros de \"404 Não Encontrada\" apagados" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/appearance/customise.json b/public/language/pt-BR/admin/appearance/customise.json index 802a081c37..443bfea1c5 100644 --- a/public/language/pt-BR/admin/appearance/customise.json +++ b/public/language/pt-BR/admin/appearance/customise.json @@ -1,16 +1,16 @@ { - "custom-css": "CSS/LESS personalizado.", + "custom-css": "CSS/LESS personalizado", "custom-css.description": "Insira suas próprias declarações CSS/LESS aqui, elas serão aplicadas após todos os outros estilos.", - "custom-css.enable": "Habilitar CSS/LESS personalizado.", + "custom-css.enable": "Habilitar CSS/LESS personalizado", "custom-js": "Javascript personalizado.", "custom-js.description": "Insira seu javascript aqui. Ele será executado após a pagina ter sido completamente carregada.", "custom-js.enable": "Habilitar javascript personalizado.", "custom-header": "Cabeçalho Personalizado", - "custom-header.description": "Insira HTML personalizado aqui ( Meta Tags, etc...) para que seja adicionado ao <head> do seu fórum. Tags de script são permitidas, porém são desaconselhadas uma vez que a tab de Javascript Personalizado está disponível.", - "custom-header.enable": "Ligar o Cabeçalho Personalizado", + "custom-header.description": "Insira HTML personalizado aqui ( Meta Tags, etc.) para que seja adicionado ao <head> do seu fórum. Tags de script são permitidas, porém são desaconselhadas uma vez que a tab de Javascript Personalizado está disponível.", + "custom-header.enable": "Habilitar Cabeçalho Personalizado", "custom-css.livereload": "Habilitar Recarregamento Automático", - "custom-css.livereload.description": "Ligue isso para forçar com que todas as sessões em todos os dispositivos em tua conta atualizem quando quer que você clique em salvar" + "custom-css.livereload.description": "Habilite esta opção para forçar todas as sessões em todos os dispositivos que estão conectados a sua conta a serem atualizados sempre que você clicar em salvar" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/appearance/skins.json b/public/language/pt-BR/admin/appearance/skins.json index 1911c54b2a..7b1b6fa8f3 100644 --- a/public/language/pt-BR/admin/appearance/skins.json +++ b/public/language/pt-BR/admin/appearance/skins.json @@ -1,9 +1,9 @@ { "loading": "Carregando Skins...", - "homepage": "Homepage", + "homepage": "Página Inicial", "select-skin": "Escolher Skin", "current-skin": "Skin Atual", "skin-updated": "Skin Atualizada", "applied-success": "A skin %1 foi aplicada com sucesso", - "revert-success": "Skin revertida para cores base" + "revert-success": "A skin foi restaurada para as cores iniciais" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/appearance/themes.json b/public/language/pt-BR/admin/appearance/themes.json index dd09a9286d..3f2d6d67c1 100644 --- a/public/language/pt-BR/admin/appearance/themes.json +++ b/public/language/pt-BR/admin/appearance/themes.json @@ -1,11 +1,11 @@ { "checking-for-installed": "Procurando por temas instalados...", - "homepage": "Homepage", + "homepage": "Página Inicial", "select-theme": "Escolher Tema", "current-theme": "Tema Atual", "no-themes": "Nenhum tema instalado encontrado", - "revert-confirm": "Tem certeza que você deseja restaurar o tema padrão do NodeBB?", + "revert-confirm": "Tem certeza de que você deseja restaurar o tema padrão do NodeBB?", "theme-changed": "Tema Alterado", "revert-success": "Você reverteu com sucesso o seu NodeBB para seu tema padrão.", - "restart-to-activate": "Por favor reconstrua e reinicie seu NodeBB para ativar este tema." + "restart-to-activate": "Por favor, recompile e reinicie seu NodeBB para ativar este tema." } \ No newline at end of file diff --git a/public/language/pt-BR/admin/development/info.json b/public/language/pt-BR/admin/development/info.json index bd3d60c53c..277aae3210 100644 --- a/public/language/pt-BR/admin/development/info.json +++ b/public/language/pt-BR/admin/development/info.json @@ -7,13 +7,13 @@ "online": "online", "git": "git", "memory": "memória", - "load": "system load", - "cpu-usage": "cpu usage", - "uptime": "tempo rodando", + "load": "carga do sistema", + "cpu-usage": "uso da cpu", + "uptime": "tempo de atividade", "registered": "Registrado", "sockets": "Sockets", "guests": "Visitantes", - "info": "Info" + "info": "Informação" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/development/logger.json b/public/language/pt-BR/admin/development/logger.json index 666bbf3a2b..bc0d99be27 100644 --- a/public/language/pt-BR/admin/development/logger.json +++ b/public/language/pt-BR/admin/development/logger.json @@ -1,11 +1,11 @@ { "logger-settings": "Configurações de Logs", "description": "Ao habilitar as caixas de checagem, você irá receber os logs no seu terminal. Se você escolher um caminho de arquivo (path), os logs serão salvos em um arquivo ao invés disso. O log de HTTP é útil para coletar estatísticas sobre quem, quando, e o que as pessoas acessam no seu fórum. Além de logar solicitações de HTTP, nós podemos também logar eventos de socket.io Logs de socket.io, em combinação com o monitor redis-cli, podem ser de muito auxílio para se aprender o funcionamento interno do NodeBB.", - "explanation": "Apenas marque/desmarque as configurações de log para habilitar ou desabilitar o log enquanto rodando. Reiniciar não é necessário.", - "enable-http": "Ligar o log de HTTP", - "enable-socket": "Ligar o log de eventos do socket.io", + "explanation": "Apenas marque/desmarque as configurações de log para habilitar ou desabilitar o log enquanto em tempo real. Reiniciar não é necessário.", + "enable-http": "Habilitar o log de HTTP", + "enable-socket": "Habilitar o log de eventos do socket.io", "file-path": "Caminho do arquivo de log", - "file-path-placeholder": "/caminho/para/o/arquivo-de-log.log ::: deixe em branco para logar para o seu terminal", + "file-path-placeholder": "/caminho/para/o/arquivo-de-log.log ::: deixe em branco para que os logs cheguem no seu terminal", "control-panel": "Painel de Controle do Logger", "update-settings": "Atualizar Configurações do Logger" diff --git a/public/language/pt-BR/admin/extend/plugins.json b/public/language/pt-BR/admin/extend/plugins.json index a325be6b91..765c1aa9fb 100644 --- a/public/language/pt-BR/admin/extend/plugins.json +++ b/public/language/pt-BR/admin/extend/plugins.json @@ -7,14 +7,14 @@ "none-active": "Nenhum Plugin Ativo", "find-plugins": "Encontrar Plugins", - "plugin-search": "Busca de Plugins", + "plugin-search": "Pesquisar Plugin", "plugin-search-placeholder": "Pesquisar por plugin...", "reorder-plugins": "Re-ordenar Plugins", "order-active": "Ordenar Plugins Ativos", - "dev-interested": "Interessado em escrever plugins para o NodeBB?", - "docs-info": "Documentação completa sobre criação de plugins pode ser encontrada noPortal de Documentação do NodeBB.", + "dev-interested": "Interessado em desenvolver plugins para o NodeBB?", + "docs-info": "A documentação completa sobre a criação de plugins pode ser encontrada noPortal de Documentação do NodeBB.", - "order.description": "Certos plugins funcionam melhor quando eles são inicializados antes/após outros plugins.", + "order.description": "Certos plugins funcionam melhor quando eles são inicializados antes ou após outros plugins.", "order.explanation": "Os plugins são carregados na ordem especificada aqui, de cima para baixo", "plugin-item.themes": "Temas", @@ -28,26 +28,26 @@ "plugin-item.upgrade": "Atualizar", "plugin-item.more-info": "Para mais informação:", "plugin-item.unknown": "Desconhecido", - "plugin-item.unknown-explanation": "O estado deste plugin não pôde ser determinado, possivelmente devido à um erro de configuração.", + "plugin-item.unknown-explanation": "O estado deste plugin não pôde ser determinado, possivelmente devido a um erro de configuração.", "alert.enabled": "Plugin Ativado", "alert.disabled": "Plugin Desativado", "alert.upgraded": "Plugin Atualizado", "alert.installed": "Plugin Instalado", "alert.uninstalled": "Plugin Desinstalado", - "alert.activate-success": "Por favor reinicie o seu NodeBB para ativar completamente este plugin", + "alert.activate-success": "Por favor, reinicie o seu NodeBB para ativar completamente este plugin", "alert.deactivate-success": "Plugin desativado com sucesso", "alert.upgrade-success": "Por favor, recompile e reinicie seu NodeBB para atualizar totalmente este plugin.", "alert.install-success": "Plugin instalado com sucesso, por favor ative o plugin.", - "alert.uninstall-success": "O plugin foi desativado com sucesso e desinstalado.", - "alert.suggest-error": "

O NodeBB não pôde encontrar o administrador de pacotes, proceder com a instalação da última versão?

O servidor retornou (%1): %2
", - "alert.package-manager-unreachable": "

O NodeBB não pôde encontrar o administrador de pacotes, um upgrade não é sugerível agora.

", - "alert.incompatible": "Na

sua versão do NodeBB (v%1) o plugin pode ser atualizado até a sua v%2. Por favor atualize o seu NodeBB se você quiser instalar uma versão mais recente deste plugin.

", - "alert.possibly-incompatible": "

Nenhuma Informação de Compatibilidade Encontrada

Este plugin não especificou uma versão específica para instalação dada a sua versão do NodeBB. A compatibilidade completa não pode ser garantid, e pode causar o seu NodeBB de não mais iniciar adequadamente.

Se ocorrer que o NodeBB não se inicie adequadamente:

$ ./nodebb reset plugin=\"%1\"

Continuar a instalação da última versão deste plugin?

", - "alert.reorder": "Plugins reordenados", + "alert.uninstall-success": "O plugin foi desativado e desinstalado com sucesso.", + "alert.suggest-error": "

O NodeBB não pôde encontrar o gerenciador de pacotes, proceder com a instalação da última versão?

O servidor retornou (%1): %2
", + "alert.package-manager-unreachable": "

O NodeBB não pôde encontrar o gerenciador de pacotes, não é recomendado realizar uma atualização agora.

", + "alert.incompatible": "

Na versão atual do seu NodeBB (v%1), só é permitido atualizar até a versão v%2 deste plugin. Por favor, atualize o seu NodeBB se você quiser instalar uma versão mais recente deste plugin.

", + "alert.possibly-incompatible": "

Nenhuma Informação de Compatibilidade Encontrada

Dada a versão do seu NodeBB, este plugin não especificou uma versão específica para instalação. Portanto, não é garantida uma completa compatibilidade. Podendo, assim, causar problemas na hora de iniciar o seu NodeBB.

Caso isto ocorra, tente isso:

$ ./nodebb reset plugin=\"%1\"

Deseja continuar com a instalação da última versão deste plugin?

", + "alert.reorder": "Plugins Reorganizados", "alert.reorder-success": "Por favor, recompile e reinicie o NodeBB para completar o processo.", - "license.title": "Informação de Licença do Plugin", + "license.title": "Informação sobre a Licença do Plugin", "license.intro": "O plugin %1 está licenciado sob a %2. Por gentileza leia e entenda a licença antes de ativar este plugin.", "license.cta": "Deseja continuar com a ativação deste plugin?" } diff --git a/public/language/pt-BR/admin/extend/rewards.json b/public/language/pt-BR/admin/extend/rewards.json index 79e93cfb24..40e4341023 100644 --- a/public/language/pt-BR/admin/extend/rewards.json +++ b/public/language/pt-BR/admin/extend/rewards.json @@ -3,15 +3,15 @@ "condition-if-users": "Se do Usuário", "condition-is": "É:", "condition-then": "Então:", - "max-claims": "Tanto de vezes que o prêmio é reivindicável", - "zero-infinite": "Entre 0 para infinito", + "max-claims": "Tanto de vezes que a recompensa é reivindicável", + "zero-infinite": "Use 0 para infinito", "delete": "Deletar", - "enable": "Ligar", - "disable": "Desligar", - "control-panel": "Controle de Prêmios", - "new-reward": "Novo Prêmio", + "enable": "Habilitar", + "disable": "Desabilitar", + "control-panel": "Controle de Recompensas", + "new-reward": "Nova Recompensa", - "alert.delete-success": "Prêmio removido com sucesso", - "alert.no-inputs-found": "Prêmio ilegal - nenhuma entrada encontrada!", - "alert.save-success": "Prêmios salvos com sucesso" + "alert.delete-success": "Recompensa excluída com sucesso", + "alert.no-inputs-found": "Recompensa ilegal - nenhuma entrada encontrada!", + "alert.save-success": "Recompensas salvas com sucesso" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/extend/widgets.json b/public/language/pt-BR/admin/extend/widgets.json index d21f3f40c1..44efdc10aa 100644 --- a/public/language/pt-BR/admin/extend/widgets.json +++ b/public/language/pt-BR/admin/extend/widgets.json @@ -3,20 +3,20 @@ "explanation": "Escolha um widget do menu de dropdown e então arraste e solte numa área de widget do template à esquerda.", "none-installed": "Nenhum widget encontrado! Ative o plugin de widgets padrão no painel de controle de plugins. ", "clone-from": "Copiar widgets de", - "containers.available": "Contâineres Disponíveis", + "containers.available": "Contêineres Disponíveis", "containers.explanation": "Arrastar e soltar em cima de qualquer widget ativo", "containers.none": "Nenhum", "container.well": "Bem", "container.jumbotron": "Jumbotron", "container.panel": "Painel", - "container.panel-header": "Cabeçalho de Painel", + "container.panel-header": "Cabeçalho do Painel", "container.panel-body": "Corpo do Painel", "container.alert": "Alerta", - "alert.confirm-delete": "Tem certeza que deseja excluir este widget?", + "alert.confirm-delete": "Tem certeza de que deseja excluir este widget?", "alert.updated": "Widgets Atualizados", "alert.update-success": "Widgets atualizados com sucesso", "alert.clone-success": "Widgets copiados com sucesso!", - "error.select-clone": "Por favor, seleciona a página a ser copiada" + "error.select-clone": "Por favor, selecione a página a ser copiada" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/general/dashboard.json b/public/language/pt-BR/admin/general/dashboard.json index d5dda63976..9b6c0e0c2e 100644 --- a/public/language/pt-BR/admin/general/dashboard.json +++ b/public/language/pt-BR/admin/general/dashboard.json @@ -8,11 +8,11 @@ "page-views-seven": "Últimos 7 Dias", "page-views-thirty": "Últimos 30 Dias", "page-views-last-day": "Últimas 24 horas", - "page-views-custom": "Alcançe de Data Personalizado", - "page-views-custom-start": "Ínicio do Alcance", - "page-views-custom-end": "Fim do Alcance", - "page-views-custom-help": "Entre uma data de alcance de visualizações de página que você quer ver. Se nenhum selecionador de data estiver disponível, o formato aceito é AAAA-MM-DD", - "page-views-custom-error": "Por favor entre com um alcance de data válido no formato AAAA-MM-DD", + "page-views-custom": "Intervalo de Data Personalizado", + "page-views-custom-start": "Ínicio do Intervalo", + "page-views-custom-end": "Fim do Intervalo", + "page-views-custom-help": "Entre com um intervalo de data de visualizações de página que gostaria de ver. Se nenhum selecionador de data estiver disponível, o formato aceito é AAAA-MM-DD", + "page-views-custom-error": "Por favor, entre com um intervalo de data válido no formato AAAA-MM-DD", "stats.day": "Dia", "stats.week": "Semana", @@ -20,29 +20,29 @@ "stats.all": "Todos os Tempos", "updates": "Atualizações", - "running-version": "Você está rodando o NodeBB v%1.", - "keep-updated": "Sempre se certifique de que o seu NodeBB está atualizado para os últimos patches de segurança e bug fixes.", + "running-version": "Você está usando o NodeBB v%1.", + "keep-updated": "Sempre se certifique de que o seu NodeBB está atualizado com os últimos patches de segurança e de correções de bugs.", "up-to-date": "

Você está atualizado

", - "upgrade-available": "

A new version (v%1) has been released. Consider upgrading your NodeBB.

", - "prerelease-upgrade-available": "

This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider upgrading your NodeBB.

", - "prerelease-warning": "

Esta é uma versão pre-release do NodeBB. Bugs inesperados podem ocorrer.

", - "running-in-development": "O fórum está sendo executado em modo de desenvolvedor. O fórum pode estar abrto à potenciais vulnerabilidades; por favor, entre em contato com o seu administrador de sistemas.", - "latest-lookup-failed": "

Failed to look up latest available version of NodeBB

", + "upgrade-available": "

Uma nova versão (v%1) foi lançada. Considere atualizar o seu NodeBB.

", + "prerelease-upgrade-available": "

Esta é uma versão de pré-lançamento desatualizada do NodeBB. Uma nova versão (v%1) foi lançada. Considere atualizar o seu NodeBB.

", + "prerelease-warning": "

Esta é uma versão de pré-lançamento do NodeBB. Bugs inesperados podem ocorrer.

", + "running-in-development": "O fórum está sendo executado em modo de desenvolvedor. O fórum pode estar sujeito a potenciais vulnerabilidades; por favor, entre em contato com o seu administrador de sistemas.", + "latest-lookup-failed": "

Falha ao procurar a versão mais recente disponível do NodeBB

", "notices": "Avisos", "restart-not-required": "Reiniciar não é necessário", "restart-required": "É necessário reiniciar", "search-plugin-installed": "Plugin de Pesquisa instalado", "search-plugin-not-installed": "Plugin de Pesquisa não instalado", - "search-plugin-tooltip": "Instale um plugin de pesquisa da página de plugins de modo à ativar a funcionalidade de pesquisa", + "search-plugin-tooltip": "Instale um plugin de pesquisa na página de plugins para que a funcionalidade de pesquisa seja ativada", "control-panel": "Controle do Sistema", - "rebuild-and-restart": "Rebuild & Restart", + "rebuild-and-restart": "Recompilar & Reiniciar", "restart": "Reiniciar", - "restart-warning": "Rebuilding or Restarting your NodeBB will drop all existing connections for a few seconds.", - "restart-disabled": "Rebuilding and Restarting your NodeBB has been disabled as you do not seem to be running it via the appropriate daemon.", + "restart-warning": "Recompilar ou Reiniciar o seu NodeBB desconectará todas as conexões existentes por alguns segundos.", + "restart-disabled": "Recompilar e Reiniciar o seu NodeBB foi desativado, pois parece que você não está fazendo-o por meios apropriados.", "maintenance-mode": "Modo de Manutenção", - "maintenance-mode-title": "Clique aqui para colocar o modo de manutenção no NodeBB", + "maintenance-mode-title": "Clique aqui para ativar o modo de manutenção do NodeBB", "realtime-chart-updates": "Atualização de Gráfico em Tempo Real", "active-users": "Usuários Ativos", @@ -62,15 +62,15 @@ "recent": "Recente", "unread": "Não-lidos", - "high-presence-topics": "Tópicos de Alta Presença", + "high-presence-topics": "Tópicos de Alta Participação", - "graphs.page-views": "Visualizações de Página", - "graphs.page-views-registered": "Page Views Registered", - "graphs.page-views-guest": "Page Views Guest", - "graphs.page-views-bot": "Page Views Bot", + "graphs.page-views": "Páginas Visualizadas", + "graphs.page-views-registered": "Páginas Visualizadas por Registrados", + "graphs.page-views-guest": "Páginas Visualizadas por Visitantes", + "graphs.page-views-bot": "Páginas Visualizadas por Bot", "graphs.unique-visitors": "Visitantes Únicos", "graphs.registered-users": "Usuários Registrados", "graphs.anonymous-users": "Usuários Anônimos", - "last-restarted-by": "Last restarted by", - "no-users-browsing": "No users browsing" + "last-restarted-by": "Última vez reiniciado por", + "no-users-browsing": "Nenhum usuário navegando" } diff --git a/public/language/pt-BR/admin/general/homepage.json b/public/language/pt-BR/admin/general/homepage.json index 8e57255fd1..d2a1bb0f7e 100644 --- a/public/language/pt-BR/admin/general/homepage.json +++ b/public/language/pt-BR/admin/general/homepage.json @@ -3,6 +3,6 @@ "description": "Escolha qual página será mostrada quando usuários navegarem para a URL raíz do seu fórum.", "home-page-route": "Rota da Página Inicial", "custom-route": "Rota Personalizada", - "allow-user-home-pages": "Permitir Home Pages de Usuários", - "home-page-title": "Title of the home page (default \"Home\")" + "allow-user-home-pages": "Permitir Páginas Iniciais do Usuário", + "home-page-title": "Título da página inicial (padrão \"Home\")" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/general/navigation.json b/public/language/pt-BR/admin/general/navigation.json index 0242453dc5..c89a8acd9b 100644 --- a/public/language/pt-BR/admin/general/navigation.json +++ b/public/language/pt-BR/admin/general/navigation.json @@ -4,19 +4,19 @@ "route": "Rota:", "tooltip": "Tooltip:", "text": "Texto:", - "text-class": "Classe do Texto: optional", - "class": "Class: optional", + "text-class": "Classe do Texto: opcional", + "class": "Classe: opcional", "id": "ID: opcional", "properties": "Propriedades:", - "groups": "Groups:", + "groups": "Grupos:", "open-new-window": "Abrir em uma nova janela", "btn.delete": "Deletar", - "btn.disable": "Desligar", - "btn.enable": "Ligar", + "btn.disable": "Desabilitar", + "btn.enable": "Habilitar", - "available-menu-items": "Ítems Disponíveis no Menu", + "available-menu-items": "Itens Disponíveis no Menu", "custom-route": "Rota Personalizada", "core": "core", "plugin": "plugin" diff --git a/public/language/pt-BR/admin/general/social.json b/public/language/pt-BR/admin/general/social.json index 3ccf112c2f..3c58397604 100644 --- a/public/language/pt-BR/admin/general/social.json +++ b/public/language/pt-BR/admin/general/social.json @@ -1,5 +1,5 @@ { "post-sharing": "Compartilhamento de Posts", - "info-plugins-additional": "Plugins podem adicionar redes adicionais para compartilhar posts.", - "save-success": "Redes de Compartilhamento de Posts salvas com êxito." + "info-plugins-additional": "Plugins podem adicionar redes sociais adicionais para compartilhar posts.", + "save-success": "Redes de Compartilhamento de Posts salvas com êxito!" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/general/sounds.json b/public/language/pt-BR/admin/general/sounds.json index 7ee81880ec..9c8d09b9bc 100644 --- a/public/language/pt-BR/admin/general/sounds.json +++ b/public/language/pt-BR/admin/general/sounds.json @@ -2,8 +2,8 @@ "notifications": "Notificações", "chat-messages": "Mensagens de Chat", "play-sound": "Tocar", - "incoming-message": "Recebimento de Mensagem", - "outgoing-message": "Envio de Mensagem", + "incoming-message": "Ao receber mensagem", + "outgoing-message": "Ao enviar mensagem", "upload-new-sound": "Enviar Novo Som", "saved": "Configurações Salvas" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/manage/admins-mods.json b/public/language/pt-BR/admin/manage/admins-mods.json index e0f39ed5d4..df8d1bb2bc 100644 --- a/public/language/pt-BR/admin/manage/admins-mods.json +++ b/public/language/pt-BR/admin/manage/admins-mods.json @@ -1,10 +1,10 @@ { - "administrators": "Administrators", - "global-moderators": "Global Moderators", - "no-global-moderators": "No Global Moderators", - "moderators-of-category": "%1 Moderators", - "no-moderators": "No Moderators", - "add-administrator": "Add Administrator", - "add-global-moderator": "Add Global Moderator", - "add-moderator": "Add Moderator" + "administrators": "Administradores", + "global-moderators": "Moderadores Globais", + "no-global-moderators": "Moderadores não Globais", + "moderators-of-category": "%1 Moderadores", + "no-moderators": "Sem moderadores", + "add-administrator": "Adicionar Administrador", + "add-global-moderator": "Adicionar Moderador Global", + "add-moderator": "Adicionar Moderador" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/manage/categories.json b/public/language/pt-BR/admin/manage/categories.json index f7c69ec60a..4b9d24f6b3 100644 --- a/public/language/pt-BR/admin/manage/categories.json +++ b/public/language/pt-BR/admin/manage/categories.json @@ -10,42 +10,42 @@ "custom-class": "Classe Personalizada", "num-recent-replies": "# de Respostas Recentes", "ext-link": "Link Externo", - "is-section": "Trate estacategoria como uma seção", - "upload-image": "Fazer upload de Imagem", + "is-section": "Trate esta categoria como uma seção", + "upload-image": "Enviar Imagem", "delete-image": "Remover", "category-image": "Imagem da Categoria", - "parent-category": "Categoria Mãe", - "optional-parent-category": "(Opcional) Categoria Mãe", + "parent-category": "Categoria-Mãe", + "optional-parent-category": "(Opcional) Categoria-Mãe", "parent-category-none": "(Nenhum)", - "copy-parent": "Copy Parent", + "copy-parent": "Copiar Mãe", "copy-settings": "Copiar Configurações De", - "optional-clone-settings": "(Opcional) Clonar Configurações De Categoria", - "clone-children": "Clone Children Categories And Settings", + "optional-clone-settings": "(Opcional) Clonar Configurações de Categoria", + "clone-children": "Copiar as categorias-filho e suas configurações", "purge": "Purgar Categoria", - "enable": "Ativar", + "enable": "Ativar.", "disable": "Desativar", "edit": "Editar", - "select-category": "Escolher Categoria", - "set-parent-category": "Definir Categoria Mãe", + "select-category": "Selecionar Categoria", + "set-parent-category": "Definir Categoria-Mãe", - "privileges.description": "You can configure the access control privileges for portions of the site in this section. Privileges can be granted on a per-user or a per-group basis. Select the domain of effect from the dropdown below.", - "privileges.category-selector": "Configuring privileges for ", - "privileges.warning": "Nota: Configurações de privilégio entram em efeito imediatamente. Não é necessário salvar a categoria após ajustar estas configurações.", + "privileges.description": "Você pode configurar os privilégios de controle de acesso para partes do site nesta seção. Privilégios podem ser concedidos por usuário ou por grupo. Selecione o que você quer alterar no menu dropdown abaixo.", + "privileges.category-selector": "Configurando privilégios para", + "privileges.warning": "Atenção: as alterações nas configurações de privilégios têm efeito imediato. Não é necessário salvar a categoria após ajustar estas configurações.", "privileges.section-viewing": "Privilégios de Visualização", "privileges.section-posting": "Privilégios de Postagem", "privileges.section-moderation": "Privilégios de Moderação", - "privileges.section-other": "Other", + "privileges.section-other": "Outros", "privileges.section-user": "Usuário", "privileges.search-user": "Adicionar Usuário", - "privileges.no-users": "Sem privilégios específicos de usuário nesta categoria.", + "privileges.no-users": "Sem privilégios para usuários específicos nesta categoria.", "privileges.section-group": "Grupo", "privileges.group-private": "Este grupo é privado", "privileges.search-group": "Adicionar Grupo", "privileges.copy-to-children": "Copiar para Filhos", "privileges.copy-from-category": "Copiar da Categoria", - "privileges.inherit": "Se o grupo registered-users recebe um privilégio específico, todos os outros grupos recebem um privilégio implícito, mesmo se eles não estão explicitamente definidos/checados. Este privilégio implícito é exibido para você porque todos os usuários são parte do grupo de usuários registered-users e portanto, privilégios para grupos adicionais não precisam ser explicitamente concedidos.", + "privileges.inherit": "Se o grupo registered-users recebe um privilégio específico, todos os outros grupos recebem um privilégio implícito, mesmo que eles não estejam explicitamente definidos/habilitados. Este privilégio implícito é exibido para você, porque todos os usuários são parte do grupo registered-users e, portanto, privilégios para grupos adicionais não precisam ser explicitamente concedidos.", "analytics.back": "De volta para a lista de Categorias", "analytics.title": "Analítica da categoria \"%1\"", @@ -59,7 +59,7 @@ "alert.none-active": "Você não possui categorias ativas.", "alert.create": "Criar uma Categoria", "alert.confirm-moderate": "Você tem certeza que deseja conceder privilégios de moderação para este grupo de usuários? Este grupo é público, e quaisquer usuários podem entrar à vontade.", - "alert.confirm-purge": "

Você realmente quer purgar esta categoria \"%1\"?

Aviso! Todos os tópicos e posts desta categoria serão purgados!

Purgar uma categoria removerá todos os tópicos e posts, e deletará a categoria do banco de dados. Se você quiser remover uma categoria temporariamente, você irá preferir \"desabilitar\" a categoria ao invés disso.

", + "alert.confirm-purge": "

Você realmente quer purgar esta categoria \"%1\"?

Aviso! Todos os tópicos e posts desta categoria serão purgados!

Purgar uma categoria removerá todos os tópicos e posts, e deletará a categoria do banco de dados. Se você quiser remover uma categoria temporariamente, ao invés de fazer isso nós recomendados que você \"desabilite\" a categoria.

", "alert.purge-success": "Categoria purgada!", "alert.copy-success": "Configurações Copiadas!", "alert.set-parent-category": "Definir Categoria Mãe", @@ -72,5 +72,5 @@ "alert.group-search": "Pesquise por um grupo aqui...", "collapse-all": "Esconder todos", "expand-all": "Expandir todos", - "disable-on-create": "Disable on create" + "disable-on-create": "Desativar ao criar" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/manage/privileges.json b/public/language/pt-BR/admin/manage/privileges.json index c469fd0464..ec0549fb6c 100644 --- a/public/language/pt-BR/admin/manage/privileges.json +++ b/public/language/pt-BR/admin/manage/privileges.json @@ -1,34 +1,34 @@ { "global": "Global", - "global.no-users": "No user-specific global privileges.", + "global.no-users": "Sem privilégios globais para usuários específicos.", - "chat": "Chat", - "upload-images": "Upload Images", - "upload-files": "Upload Files", - "signature": "Signature", - "ban": "Ban", - "search-content": "Search Content", - "search-users": "Search Users", + "chat": "Conversar", + "upload-images": "Enviar Imagens", + "upload-files": "Enviar Arquivos", + "signature": "Assinatura", + "ban": "Banir", + "search-content": "Pesquisar Conteúdo", + "search-users": "Pesquisar Usuários", "search-tags": "Pesquisar Tags", - "view-users": "View Users", - "view-tags": "View Tags", - "view-groups": "View Groups", - "allow-local-login": "Local Login", - "allow-group-creation": "Group Create", + "view-users": "Ver Usuários", + "view-tags": "Ver Tags", + "view-groups": "Ver Grupos", + "allow-local-login": "Login Local", + "allow-group-creation": "Criar Grupo", - "find-category": "Find Category", - "access-category": "Access Category", - "access-topics": "Access Topics", - "create-topics": "Create Topics", - "reply-to-topics": "Reply to Topics", + "find-category": "Encontrar Categoria", + "access-category": "Acessar Categoria", + "access-topics": "Acessar Tópicos", + "create-topics": "Criar Tópicos", + "reply-to-topics": "Responder aos Tópicos", "tag-topics": "Definir tag em tópicos", - "edit-posts": "Edit Posts", - "view-edit-history": "View Edit History", - "delete-posts": "Delete Posts", - "view_deleted": "View Deleted Posts", - "upvote-posts": "Upvote Posts", - "downvote-posts": "Downvote Posts", - "delete-topics": "Delete Topics", - "purge": "Purge", - "moderate": "Moderate" + "edit-posts": "Editar Posts", + "view-edit-history": "Ver Histórico de Edição", + "delete-posts": "Deletar Posts", + "view_deleted": "Ver Posts Deletados", + "upvote-posts": "Positivar Posts", + "downvote-posts": "Negativar Posts", + "delete-topics": "Deletar Tópicos", + "purge": "Purgar", + "moderate": "Moderar" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/settings/user.json b/public/language/pt-BR/admin/settings/user.json index 6b4117a2d6..9847002802 100644 --- a/public/language/pt-BR/admin/settings/user.json +++ b/public/language/pt-BR/admin/settings/user.json @@ -4,48 +4,48 @@ "email-confirm-interval": "O usuário não pode reenviar um email de confirmação até", "email-confirm-email2": "minutos se passaram", "allow-login-with": "Permitir login com", - "allow-login-with.username-email": "Nome de Usuário ou Email", + "allow-login-with.username-email": "Nome de Usuário ou E-mail", "allow-login-with.username": "Apenas Nome de Usuário", - "allow-login-with.email": "Apenas Email", + "allow-login-with.email": "Apenas E-mail", "account-settings": "Configurações de Conta", - "gdpr_enabled": "Enable GDPR consent collection", - "gdpr_enabled_help": "When enabled, all new registrants will be required to explicitly give consent for data collection and usage under the General Data Protection Regulation (GDPR). Note: Enabling GDPR does not force pre-existing users to provide consent. To do so, you will need to install the GDPR plugin.", + "gdpr_enabled": "Ativar coleta de consentimento do GDPR", + "gdpr_enabled_help": "Quando ativado, todos os novos usuários que se cadastrarem devem autorizar explicitamente a coleta e o uso de dados de acordo com o Regulamento Geral sobre a Proteção de Dados (GDPR). Atenção: ao habilitar a requisição de autorização de acordo com o GDPR, não força os usuários já cadastrados a autorizar a coleta e o uso de dados. Para isso, você precisa instalar o plugin GDPR.", "disable-username-changes": "Desabilitar mudança de nome de usuário", - "disable-email-changes": "Desabilitar mudanças de email", + "disable-email-changes": "Desabilitar mudanças de e-mail", "disable-password-changes": "Desabilitar mudanças de senha", "allow-account-deletion": "Permitir exclusão de conta", "hide-fullname": "Esconder nome completo de outros usuários", - "hide-email": "Esconder email de outros usuários", + "hide-email": "Esconder e-mail de outros usuários", "themes": "Temas", - "disable-user-skins": "Impedir usuários de escolherem um skin personalizado", + "disable-user-skins": "Impedir usuários de escolherem um tema diferente", "account-protection": "Proteção de Conta", - "admin-relogin-duration": "Admin relogin duration (minutes)", - "admin-relogin-duration-help": "After a set amount of time accessing the admin section will require re-login, set to 0 to disable", + "admin-relogin-duration": "Duração para que se exija um novo login para acessar o painel administrativo (em minutos)", + "admin-relogin-duration-help": "Após um determinado período de tempo, o acesso ao painel administrativo exigirá um novo login. Defina como 0 para desabilitar.", "login-attempts": "Tentativas de login por hora", - "login-attempts-help": "Se tentativas de login na conta de um usuário ultrapassar este limite, aquela conta será trancada por um período de tempo pré-configurado", - "lockout-duration": "Duração de Trancamento de Conta (minutos)", - "login-days": "Dias para lembrar sessões de login de usuários", - "password-expiry-days": "Forçar redefinição de senha após um numero definido de dias", - "session-time": "Session Time", - "session-time-days": "Days", - "session-time-seconds": "Seconds", - "session-time-help": "These values are used to govern how long a user stays logged in when they check "Remember Me" on login. Note that only one of these values will be used. If there is no seconds value we fall back to days. If there is no days value we default to 14 days.", - "online-cutoff": "Minutes after user is considered inactive", - "online-cutoff-help": "If user performs no actions for this duration, they are considered inactive and they do not receive realtime updates.", + "login-attempts-help": "Se as tentativas de login na conta de um usuário ultrapassar este limite, essa conta será bloqueada por um período de tempo pré-determinado.", + "lockout-duration": "Duração do Bloqueio de Conta (em minutos)", + "login-days": "Dias para lembrar as sessões de login dos usuários", + "password-expiry-days": "Forçar a redefinição de senha após um determinado número de dias", + "session-time": "Tempo de Sessão", + "session-time-days": "Dias", + "session-time-seconds": "Segundos", + "session-time-help": "Estes valores são usados para determinar por quanto tempo um usuário fica logado quando eles habilitarem a opção "Lembrar-me" durante o login. Observe que apenas um destes valores será usado. Se não houver um valor para segundos, usamos o valor de dias. Se não houver um valor para dias, usamos o valor padrão, que é 14 dias.", + "online-cutoff": "Minutos para que o usuário seja considerado inativo", + "online-cutoff-help": "Se o usuário não realizar nenhuma ação durante esse período, ele será considerado inativo e não receberá atualizações em tempo real.", "registration": "Registro de Usuário", "registration-type": "Tipo de Registro", "registration-type.normal": "Normal", "registration-type.admin-approval": "Aprovação do Administrador", "registration-type.admin-approval-ip": "Aprovação do Administrador para IPs", - "registration-type.invite-only": "Apenas Convite", - "registration-type.admin-invite-only": "Apenas Convite do Administrador", - "registration-type.disabled": "Sem registro", - "registration-type.help": "Normal - Usuários pode se registrar pela página /register.
\nAprovação da Administração - Registros de usuários são colocados em uma fila de aprovação pelos administradores.
\nAprovação da Administração pelos IPs - Normal para novos usuários, Aprovação pela Administração para endereços IP que já têm uma conta.
\nApenas Convite - Usuários podem convidar outros pela página usuários.
\nApenas Convite da Administração - Apenas administradores podem convidar outros pelas páginas usuários e admin/manage/users.
\nSem registro - Sem registro de usuários.
", + "registration-type.invite-only": "Apenas por Convite", + "registration-type.admin-invite-only": "Apenas por Convite da Administração", + "registration-type.disabled": "Desativar registros", + "registration-type.help": "Normal - Usuários podem se registrar pela página /register.
\nAprovação da Administração - Registros de usuários são colocados em uma fila de aprovação para os administradores.
\nAprovação da Administração para mesmo IP - Normal para novos usuários, Aprovação da Administração para endereço IP que já tem uma conta.
\nApenas por Convite - Usuários podem convidar outras pessoas para participar do comunidade pela página usuários.
\nApenas por Convite da Administração - Apenas administradores podem convidar outras pessoas para participar da comunidade pelas páginas usuários e admin/manage/users.
\nDesativar registros - Novos usuários não poderão se registrar.
", "registration.max-invites": "Máximo de Convites por Usuário", "max-invites": "Máximo de Convites por Usuário", - "max-invites-help": "0 para nenhuma restrição. Administradores tem convites infinitos
Apenas aplicável para \"Apenas Convite\"", - "invite-expiration": "Vencimento do convite", - "invite-expiration-help": "núm. de dias em que o convite vence.", + "max-invites-help": "0 para nenhuma restrição. Administradores têm convites infinitos.
Apenas aplicável para \"Apenas por Convite\".", + "invite-expiration": "O convite expira em", + "invite-expiration-help": "número de dias em que o convite expira.", "min-username-length": "Tamanho Mínimo do Nome de Usuário", "max-username-length": "Tamanho Máximo do Nome de Usuário", "min-password-length": "Tamanho Mínimo da Senha", @@ -55,23 +55,23 @@ "user-search": "Pesquisa de Usuário", "user-search-results-per-page": "Número de resultados para exibir", "default-user-settings": "Configurações Padrão de Usuário", - "show-email": "Exibir email", + "show-email": "Exibir e-mail", "show-fullname": "Exibir nome completo", "restrict-chat": "Permitir apenas mensagens de chat de usuários que eu sigo", "outgoing-new-tab": "Abrir links externos em nova aba", "topic-search": "Permitir Busca dentro do Tópico", - "digest-freq": "Assinar o Resumo", + "digest-freq": "Habilitar o recebimento de Resumos", "digest-freq.off": "Desligado", "digest-freq.daily": "Diário", "digest-freq.weekly": "Semanal", "digest-freq.monthly": "Mensal", "email-chat-notifs": "Envie um email se uma nova mensagem de chat chegar e eu não estiver online", - "email-post-notif": "Enviar um email quando respostas forem dadas à tópicos que estou inscrito", + "email-post-notif": "Envie um email quando respostas forem dadas a tópicos que estou inscrito", "follow-created-topics": "Seguir tópicos que você criar", "follow-replied-topics": "Seguir os tópicos que você responder", - "default-notification-settings": "Default notification settings", - "categoryWatchState": "Default category watch state", - "categoryWatchState.watching": "Watching", - "categoryWatchState.notwatching": "Not Watching", - "categoryWatchState.ignoring": "Ignoring" + "default-notification-settings": "Configurações Padrão de Notificações", + "categoryWatchState": "Estado padrão em relação a acompanhar as categorias", + "categoryWatchState.watching": "Acompanhando", + "categoryWatchState.notwatching": "Não Acompanhar", + "categoryWatchState.ignoring": "Ignorar" } \ No newline at end of file diff --git a/public/language/pt-BR/user.json b/public/language/pt-BR/user.json index e7108ed96e..476b3f3503 100644 --- a/public/language/pt-BR/user.json +++ b/public/language/pt-BR/user.json @@ -49,7 +49,7 @@ "change_picture": "Alterar Foto", "change_username": "Mudar nome de usuário", "change_email": "Mudar email", - "email_same_as_password": "Please enter your current password to continue – you've entered your new email again", + "email_same_as_password": "Por favor, digite a sua senha atual para continuar – você digitou o seu novo e-mail novamente", "edit": "Editar", "edit-profile": "Editar Perfil", "default_picture": "Ícone Padrão", @@ -150,22 +150,22 @@ "info.moderation-note": "Nota da Moderação", "info.moderation-note.success": "Nota da moderação salva", "info.moderation-note.add": "Adicionar nota", - "sessions.description": "This page allows you to view any active sessions on this forum and revoke them if necessary. You can revoke your own session by logging out of your account.", + "sessions.description": "Esta página permite que você veja quaisquer sessões ativas neste fórum e as revogue se necessário. Você pode revogar a sua sessão atual ao desconectar-se.", "consent.title": "Seus direitos & Consentimento", "consent.lead": "Este fórum da comunidade coleta e processa suas informações pessoais.", - "consent.intro": "We use this information strictly to personalise your experience in this community, as well as to associate the posts you make to your user account. During the registration step you were asked to provide a username and email address, you can also optionally provide additional information to complete your user profile on this website.

We retain this information for the life of your user account, and you are able to withdraw consent at any time by deleting your account. At any time you may request a copy of your contribution to this website, via your Rights & Consent page.

If you have any questions or concerns, we encourage you to reach out to this forum's administrative team.", - "consent.email_intro": "Occasionally, we may send emails to your registered email address in order to provide updates and/or to notify you of new activity that is pertinent to you. You can customise the frequency of the community digest (including disabling it outright), as well as select which types of notifications to receive via email, via your user settings page.", - "consent.digest_frequency": "Unless explicitly changed in your user settings, this community delivers email digests every %1.", - "consent.digest_off": "Unless explicitly changed in your user settings, this community does not send out email digests", - "consent.received": "You have provided consent for this website to collect and process your information. No additional action is required.", - "consent.not_received": "You have not provided consent for data collection and processing. At any time this website's administration may elect to delete your account in order to become compliant with the General Data Protection Regulation.", + "consent.intro": "Nós usamos estas informações estritamente para personalizar a sua experiência nesta comunidade, assim como vincular as postagens que você faz à sua conta de usuário. Durante o processo de registro, foi solicitado apenas um usuário e um endereço de e-mail. No entanto, se desejar, você também pode fornecer informações adicionais para completar o seu perfil de usuário.

Enquanto sua conta de usuário existir, nós guardaremos estas informações, porém, você tem a possibilidade de retirar este consentimento a qualquer momento e, para isso, basta excluir a conta. A qualquer momento, você pode requisitar uma cópia da sua contribuição para este site, através da sua página de Direitos & Consentimento.

Se você tem alguma dúvida ou preocupação, nós o aconselhamos a entrar em contato com a equipe administrativa deste fórum.", + "consent.email_intro": "Ocasionalmente, nós poderemos mandar e-mails para o e-mail usado no registro para fornecer atualizações e/ou para notificá-lo sobre novas atividades que são importantes para você. Você tanto pode customizar a frequência destes resumos (inclusive desativá-los imediatamente), bem como selecionar quais tipos de notificações que você deseja receber por e-mail, através da página de configurações de usuário.", + "consent.digest_frequency": "A menos que seja explicitamente alterada nas configurações do usuário, essa comunidade fornece resumos por e-mail a cada %1.", + "consent.digest_off": "A menos que seja explicitamente alterada nas configurações do usuário, essa comunidade não envia resumos por e-mail", + "consent.received": "Você autorizou este site a coletar e a processar os seus dados. Nenhuma ação adicional é necessária.", + "consent.not_received": "Você não autorizou a coleta e o processamento dos seus dados. A qualquer momento, a administração deste site pode optar por excluir sua conta para se tornar compatível com o Regulamento Geral sobre a Proteção de Dados.", "consent.give": "Dar o consentimento", "consent.right_of_access": "Você tem o Direito de Acessar", "consent.right_of_access_description": "Você tem o direito de acessar todos os dados coletados por este site mediante solicitação. Você pode recuperar uma cópia desses dados clicando no botão apropriado abaixo.", "consent.right_to_rectification": "Você tem o Direito de Retificar", "consent.right_to_rectification_description": "Você tem o direito de alterar ou atualizar quaisquer dados imprecisos fornecidos a nós. Seu perfil pode ser atualizado editando seu perfil e postar conteúdo sempre pode ser editado. Se esse não for o caso, entre em contato com a equipe administrativa do site.", "consent.right_to_erasure": "Você tem o Direito de Apagar", - "consent.right_to_erasure_description": "At any time, you are able to revoke your consent to data collection and/or processing by deleting your account. Your individual profile can be deleted, although your posted content will remain. If you wish to delete both your account and your content, please contact the administrative team for this website.", + "consent.right_to_erasure_description": "A qualquer momento, você pode revogar o consentimento à coleta e/ou ao processamento de dados excluindo sua conta. Seu perfil individual pode ser excluído, no entanto, as suas postagens serão mantidas. Se você desejar deletar tanto a sua conta e as suas postagens, por favor, entre em contato com a equipe administrativa deste site.", "consent.right_to_data_portability": "Você tem o Direito de Portabilidade de Dados", "consent.right_to_data_portability_description": "Você pode solicitar de nós uma exportação legível por máquina de quaisquer dados coletados sobre você e sua conta. Você pode fazer isso clicando no botão apropriado abaixo.", "consent.export_profile": "Exportar Perfil (.csv)", From c838ad153dc6da3d9333d81c2013c2a048870fbe Mon Sep 17 00:00:00 2001 From: "Misty (Bot)" Date: Mon, 6 May 2019 09:26:11 +0000 Subject: [PATCH 53/83] Latest translations and fallbacks --- .../pt-BR/admin/appearance/customise.json | 4 +- .../pt-BR/admin/development/logger.json | 6 +- .../language/pt-BR/admin/extend/rewards.json | 4 +- .../pt-BR/admin/general/navigation.json | 4 +- .../pt-BR/admin/manage/categories.json | 2 +- .../language/pt-BR/admin/manage/groups.json | 22 +++---- .../pt-BR/admin/manage/ip-blacklist.json | 6 +- .../pt-BR/admin/manage/post-queue.json | 2 +- .../pt-BR/admin/manage/registration.json | 4 +- public/language/pt-BR/admin/manage/tags.json | 2 +- .../language/pt-BR/admin/manage/uploads.json | 12 ++-- public/language/pt-BR/admin/manage/users.json | 52 +++++++-------- public/language/pt-BR/admin/menu.json | 22 +++---- .../pt-BR/admin/settings/advanced.json | 20 +++--- .../language/pt-BR/admin/settings/chat.json | 8 +-- .../pt-BR/admin/settings/cookies.json | 4 +- .../language/pt-BR/admin/settings/email.json | 44 ++++++------- .../pt-BR/admin/settings/general.json | 14 ++-- .../language/pt-BR/admin/settings/group.json | 8 +-- .../language/pt-BR/admin/settings/guest.json | 6 +- .../pt-BR/admin/settings/notifications.json | 4 +- .../pt-BR/admin/settings/pagination.json | 4 +- .../language/pt-BR/admin/settings/post.json | 38 +++++------ .../pt-BR/admin/settings/reputation.json | 14 ++-- .../pt-BR/admin/settings/uploads.json | 28 ++++---- .../language/pt-BR/admin/settings/user.json | 4 +- .../pt-BR/admin/settings/web-crawler.json | 2 +- public/language/pt-BR/category.json | 18 ++--- public/language/pt-BR/email.json | 16 ++--- public/language/pt-BR/error.json | 66 +++++++++---------- public/language/pt-BR/flags.json | 22 +++---- public/language/pt-BR/global.json | 16 ++--- public/language/pt-BR/groups.json | 14 ++-- public/language/pt-BR/modules.json | 16 ++--- public/language/pt-BR/notifications.json | 18 ++--- public/language/pt-BR/pages.json | 18 ++--- public/language/pt-BR/register.json | 10 +-- public/language/pt-BR/reset_password.json | 2 +- public/language/pt-BR/search.json | 10 +-- public/language/pt-BR/success.json | 2 +- public/language/pt-BR/topic.json | 24 +++---- public/language/pt-BR/unread.json | 4 +- public/language/pt-BR/uploads.json | 4 +- public/language/pt-BR/user.json | 36 +++++----- public/language/pt-BR/users.json | 2 +- 45 files changed, 319 insertions(+), 319 deletions(-) diff --git a/public/language/pt-BR/admin/appearance/customise.json b/public/language/pt-BR/admin/appearance/customise.json index 443bfea1c5..1bb1b79f03 100644 --- a/public/language/pt-BR/admin/appearance/customise.json +++ b/public/language/pt-BR/admin/appearance/customise.json @@ -11,6 +11,6 @@ "custom-header.description": "Insira HTML personalizado aqui ( Meta Tags, etc.) para que seja adicionado ao <head> do seu fórum. Tags de script são permitidas, porém são desaconselhadas uma vez que a tab de Javascript Personalizado está disponível.", "custom-header.enable": "Habilitar Cabeçalho Personalizado", - "custom-css.livereload": "Habilitar Recarregamento Automático", - "custom-css.livereload.description": "Habilite esta opção para forçar todas as sessões em todos os dispositivos que estão conectados a sua conta a serem atualizados sempre que você clicar em salvar" + "custom-css.livereload": "Ativar Recarregamento Automático", + "custom-css.livereload.description": "Ative esta opção para forçar todas as sessões em todos os dispositivos que estão conectados a sua conta a serem atualizados sempre que você clicar em salvar" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/development/logger.json b/public/language/pt-BR/admin/development/logger.json index bc0d99be27..03ee8e289a 100644 --- a/public/language/pt-BR/admin/development/logger.json +++ b/public/language/pt-BR/admin/development/logger.json @@ -1,9 +1,9 @@ { "logger-settings": "Configurações de Logs", "description": "Ao habilitar as caixas de checagem, você irá receber os logs no seu terminal. Se você escolher um caminho de arquivo (path), os logs serão salvos em um arquivo ao invés disso. O log de HTTP é útil para coletar estatísticas sobre quem, quando, e o que as pessoas acessam no seu fórum. Além de logar solicitações de HTTP, nós podemos também logar eventos de socket.io Logs de socket.io, em combinação com o monitor redis-cli, podem ser de muito auxílio para se aprender o funcionamento interno do NodeBB.", - "explanation": "Apenas marque/desmarque as configurações de log para habilitar ou desabilitar o log enquanto em tempo real. Reiniciar não é necessário.", - "enable-http": "Habilitar o log de HTTP", - "enable-socket": "Habilitar o log de eventos do socket.io", + "explanation": "Apenas marque/desmarque as configurações de log para ativar ou desativar o log enquanto em tempo real. Reiniciar não é necessário.", + "enable-http": "Ativar o log de HTTP", + "enable-socket": "Ativar o log de eventos do socket.io", "file-path": "Caminho do arquivo de log", "file-path-placeholder": "/caminho/para/o/arquivo-de-log.log ::: deixe em branco para que os logs cheguem no seu terminal", diff --git a/public/language/pt-BR/admin/extend/rewards.json b/public/language/pt-BR/admin/extend/rewards.json index 40e4341023..4b9c21f169 100644 --- a/public/language/pt-BR/admin/extend/rewards.json +++ b/public/language/pt-BR/admin/extend/rewards.json @@ -6,8 +6,8 @@ "max-claims": "Tanto de vezes que a recompensa é reivindicável", "zero-infinite": "Use 0 para infinito", "delete": "Deletar", - "enable": "Habilitar", - "disable": "Desabilitar", + "enable": "Ativar", + "disable": "Desativar", "control-panel": "Controle de Recompensas", "new-reward": "Nova Recompensa", diff --git a/public/language/pt-BR/admin/general/navigation.json b/public/language/pt-BR/admin/general/navigation.json index c89a8acd9b..84704c797e 100644 --- a/public/language/pt-BR/admin/general/navigation.json +++ b/public/language/pt-BR/admin/general/navigation.json @@ -13,8 +13,8 @@ "open-new-window": "Abrir em uma nova janela", "btn.delete": "Deletar", - "btn.disable": "Desabilitar", - "btn.enable": "Habilitar", + "btn.disable": "Desativar", + "btn.enable": "Ativar", "available-menu-items": "Itens Disponíveis no Menu", "custom-route": "Rota Personalizada", diff --git a/public/language/pt-BR/admin/manage/categories.json b/public/language/pt-BR/admin/manage/categories.json index 4b9d24f6b3..d320c64e07 100644 --- a/public/language/pt-BR/admin/manage/categories.json +++ b/public/language/pt-BR/admin/manage/categories.json @@ -23,7 +23,7 @@ "clone-children": "Copiar as categorias-filho e suas configurações", "purge": "Purgar Categoria", - "enable": "Ativar.", + "enable": "Ativar", "disable": "Desativar", "edit": "Editar", diff --git a/public/language/pt-BR/admin/manage/groups.json b/public/language/pt-BR/admin/manage/groups.json index 8e399fdfa7..7179ebe186 100644 --- a/public/language/pt-BR/admin/manage/groups.json +++ b/public/language/pt-BR/admin/manage/groups.json @@ -1,30 +1,30 @@ { "name": "Nome do Grupo", - "badge": "Badge", - "properties": "Properties", + "badge": "Insígnia", + "properties": "Propriedades", "description": "Descrição do Grupo", "member-count": "Número de Membros", - "system": "System", - "hidden": "Hidden", - "private": "Private", + "system": "Sistema", + "hidden": "Oculto", + "private": "Privado", "edit": "Editar", "search-placeholder": "Procurar", "create": "Criar Grupo", "description-placeholder": "Uma breve descrição do seu grupo", "create-button": "Criar", - "alerts.create-failure": "Uh-Oh

Houve um problema ao criar o seu grupo. Por favor tente novamente mais tarde!

", - "alerts.confirm-delete": "Você está certo de que deseja deletar este grupo?", + "alerts.create-failure": "Uh-Oh

Houve um problema ao criar o seu grupo. Por favor, tente novamente mais tarde!

", + "alerts.confirm-delete": "Você tem certeza de que deseja deletar este grupo?", "edit.name": "Nome", "edit.description": "Descrição", "edit.user-title": "Título dos Membros", "edit.icon": "Ícone do Grupo", "edit.label-color": "Cor do Rótulo do Grupo", - "edit.text-color": "Group Text Color", - "edit.show-badge": "Mostrar Distintivo", - "edit.private-details": "Se habilitado, entrar em grupos requer a aprovação de um dono do grupo.", - "edit.private-override": "Aviso: Grupos privados estão desabilitados no sistema, o que sobrepõe esta opção.", + "edit.text-color": "Cor do Texto do Grupo", + "edit.show-badge": "Mostrar Insígnia", + "edit.private-details": "Se ativado, entrar em grupos requer a aprovação do dono do grupo.", + "edit.private-override": "Aviso: grupos privados estão desabilitados no sistema, o que sobrepõe esta opção.", "edit.disable-requests": "Desabilitar solicitações de entrada", "edit.hidden": "Oculto", "edit.hidden-details": "Se ligado, o grupo não será encontrado nas listagens de grupos, e os usuários terão de ser convidados manualmente", diff --git a/public/language/pt-BR/admin/manage/ip-blacklist.json b/public/language/pt-BR/admin/manage/ip-blacklist.json index 98fb26ff43..2971b69fa8 100644 --- a/public/language/pt-BR/admin/manage/ip-blacklist.json +++ b/public/language/pt-BR/admin/manage/ip-blacklist.json @@ -1,6 +1,6 @@ { "lead": "Configure a sua lista negra de IPs aqui.", - "description": "Ocasionalmente, um banimento de conta de usuário não é suficientemente impeditivo. Outras vezes, restringir acesso ao fórum para um IP específico ou uma faixa de endereços IPs é o melhor jeito de proteger um fórum. Nestes cenários, você pode adicionar endereços IPs problemáticos ou blocos CIDR inteiros à está lista negra, e eles serão impedidos de logar ou registrar uma nova conta.", + "description": "Ocasionalmente, um banimento de conta de usuário não é suficientemente impeditivo. Outras vezes, restringir acesso ao fórum para um IP específico ou uma faixa de endereços IPs é o melhor jeito de proteger um fórum. Nestes cenários, você pode adicionar endereços IPs problemáticos ou blocos CIDR inteiros a esta lista negra, e eles serão impedidos de logar ou registrar uma nova conta.", "active-rules": "Regras Ativas", "validate": "Validar Lista Negra", "apply": "Aplicar Lista Negra", @@ -13,7 +13,7 @@ "alerts.applied-success": "Lista Negra Aplicada", - "analytics.blacklist-hourly": "Figura 1 – Acessos na lista de bloqueio pot hora", + "analytics.blacklist-hourly": "Figura 1 – Acessos na lista de bloqueio por hora", "analytics.blacklist-daily": "Figura 2 – Acessos na lista de bloqueio por dia", - "ip-banned": "IP banned" + "ip-banned": "IP banido" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/manage/post-queue.json b/public/language/pt-BR/admin/manage/post-queue.json index 3e48609165..6b63d67d09 100644 --- a/public/language/pt-BR/admin/manage/post-queue.json +++ b/public/language/pt-BR/admin/manage/post-queue.json @@ -7,5 +7,5 @@ "content": "Conteúdo", "posted": "Postado", "reply-to": "Resposta para \"%1\"", - "content-editable": "You can click on individual content to edit before posting." + "content-editable": "Você pode clicar em um post individual para editar antes de postar." } \ No newline at end of file diff --git a/public/language/pt-BR/admin/manage/registration.json b/public/language/pt-BR/admin/manage/registration.json index 6e1173dfd9..2f1b13b8bf 100644 --- a/public/language/pt-BR/admin/manage/registration.json +++ b/public/language/pt-BR/admin/manage/registration.json @@ -11,9 +11,9 @@ "list.ip-spam": "Frequência: %1 Aparece: %2", "invitations": "Convites", - "invitations.description": "Abaixo está uma lista completa dos convites enviados. Use ctrl-f para procurar pela lista por email ou nome se usuário.

O nome de usuário será exibido à direita dos emails para usuários que aceitaram seus convites.", + "invitations.description": "Abaixo está uma lista completa dos convites enviados. Use CTRL + F para procurar na lista por um e-mail ou um nome de usuário.

O nome do usuário será exibido à direita dos e-mails para usuários que aceitaram seus convites.", "invitations.inviter-username": "Nome de Usuário do Convidante", - "invitations.invitee-email": "Email do Convidado", + "invitations.invitee-email": "E-mail do Convidado", "invitations.invitee-username": "Nome do Usuário do Convidado (se registrado)", "invitations.confirm-delete": "Tem certeza que deseja excluir este convite?" diff --git a/public/language/pt-BR/admin/manage/tags.json b/public/language/pt-BR/admin/manage/tags.json index 876859f45c..b1382bba57 100644 --- a/public/language/pt-BR/admin/manage/tags.json +++ b/public/language/pt-BR/admin/manage/tags.json @@ -3,7 +3,7 @@ "bg-color": "Cor de Fundo", "text-color": "Cor do Text", "create-modify": "Criar & Modificar Tags", - "description": "Escolha tags clicando e/ou arrastando, use shift para escolher diversas.", + "description": "Escolha tags clicando e/ou arrastando. Use o SHIFT para escolher várias ao mesmo tempo.", "create": "Criar Tag", "modify": "Modificar Tags", "rename": "Renomear Tags", diff --git a/public/language/pt-BR/admin/manage/uploads.json b/public/language/pt-BR/admin/manage/uploads.json index 21bc8201fc..60db7bfc02 100644 --- a/public/language/pt-BR/admin/manage/uploads.json +++ b/public/language/pt-BR/admin/manage/uploads.json @@ -1,9 +1,9 @@ { - "upload-file": "Upload File", - "filename": "Filename", - "usage": "Post Usage", + "upload-file": "Enviar Arquivo", + "filename": "Nome do Arquivo", + "usage": "Uso do Post", "orphaned": "Orphaned", - "size/filecount": "Size / Filecount", - "confirm-delete": "Do you really want to delete this file?", - "filecount": "%1 files" + "size/filecount": "Tamanho / Quantidade de arquivos", + "confirm-delete": "Você tem certeza de que deseja deletar este arquivo?", + "filecount": "%1 arquivos" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/manage/users.json b/public/language/pt-BR/admin/manage/users.json index 0432d61a81..23589de1fe 100644 --- a/public/language/pt-BR/admin/manage/users.json +++ b/public/language/pt-BR/admin/manage/users.json @@ -3,14 +3,14 @@ "edit": "Editar", "make-admin": "Tornar Administrador", "remove-admin": "Excluir Administrador", - "validate-email": "Validar Email", - "send-validation-email": "Enviar Email de Validação", - "password-reset-email": "Enviar Email de Redefinição de Senha", - "force-password-reset": "Force Password Reset & Log User Out", + "validate-email": "Validar E-mail", + "send-validation-email": "Enviar E-mail de Validação", + "password-reset-email": "Enviar E-mail de Redefinição de Senha", + "force-password-reset": "Forçar a Redifinição de Senha & Desconectar Usuário", "ban": "Banir Usuário(s)", "temp-ban": "Banir Usuário(s) Temporariamente", "unban": "Desbanir Usuário(s)", - "reset-lockout": "Excluir Trancamento", + "reset-lockout": "Excluir Bloqueio", "reset-flags": "Resetar Sinalizações", "delete": "Deletar Usuário(s)", "purge": "Excluir Usuário(s) e Conteúdo", @@ -32,8 +32,8 @@ "search.uid-placeholder": "Digite o ID do usuário para pesquisar", "search.username": "Por Nome de Usuário", "search.username-placeholder": "Entre com um nome de usuário para pesquisar", - "search.email": "Por Email", - "search.email-placeholder": "Digite um email para pesquisar", + "search.email": "Por E-mail", + "search.email-placeholder": "Digite um e-mail para pesquisar", "search.ip": "Por Endereço IP", "search.ip-placeholder": "Digite um endereço IP para pesquisar", "search.not-found": "Usuário não encontrado!", @@ -43,18 +43,18 @@ "inactive.12-months": "12 meses", "users.uid": "uid", - "users.username": "username", - "users.email": "email", - "users.postcount": "postcount", - "users.reputation": "reputation", - "users.flags": "flags", - "users.joined": "joined", - "users.last-online": "last online", - "users.banned": "banned", + "users.username": "nome de usuário", + "users.email": "e-mail", + "users.postcount": "quantidade de posts", + "users.reputation": "reputação", + "users.flags": "sinalizações", + "users.joined": "juntou-se em", + "users.last-online": "última vez online", + "users.banned": "banido", "create.username": "Nome de Usuário", - "create.email": "Email", - "create.email-placeholder": "Email deste usuário", + "create.email": "E-mail", + "create.email-placeholder": "E-mail deste usuário", "create.password": "Senha", "create.password-confirm": "Confirme a Senha", @@ -62,14 +62,14 @@ "temp-ban.reason": "Motivo (Opcional)", "temp-ban.hours": "Horas", "temp-ban.days": "Dias", - "temp-ban.explanation": "Entre com o período de tempo para o banimento. Note que um tempo de 0 será considerado um banimento permanente", + "temp-ban.explanation": "Entre com o período de tempo para o banimento. Note que um tempo de 0 será considerado um banimento permanente.", "alerts.confirm-ban": "Você realmente deseja banir este usuário permanentemente?", "alerts.confirm-ban-multi": "Você realmente quer banir estes usuários permanentemente?", "alerts.ban-success": "Usuário(s) banido(s)!", "alerts.button-ban-x": "Banir %1 usuário(s)", "alerts.unban-success": "Usuário(s) desbanidos!", - "alerts.lockout-reset-success": "Trancamento(s) excluídos!", + "alerts.lockout-reset-success": "Bloqueio(s) redefinidos!", "alerts.flag-reset-success": "Sinalização(ões) excluída(s)!", "alerts.no-remove-yourself-admin": "Você não pode remover a si mesmo como Administrador!", "alerts.make-admin-success": "O usuário agora é administrador.", @@ -81,11 +81,11 @@ "alerts.make-moderator-success": "O usuário agora é moderador.", "alerts.confirm-remove-moderator": "Você tem certeza que deseja remover este moderador?", "alerts.remove-moderator-success": "O usuário deixou de ser moderador.", - "alerts.confirm-validate-email": "Você deseja validar o(s) email(s) deste(s) usuário(s)?", - "alerts.confirm-force-password-reset": "Are you sure you want to force the password reset and log out these user(s)?", - "alerts.validate-email-success": "Emails validados", - "alerts.validate-force-password-reset-success": "User(s) passwords have been reset and their existing sessions have been revoked.", - "alerts.password-reset-confirm": "Você quer enviar email(s) de redefinição de senha para este(s) usuário(s)?", + "alerts.confirm-validate-email": "Você deseja validar o e-mail deste(s) usuário(s)?", + "alerts.confirm-force-password-reset": "Tem certeza de que deseja forçar a redefinição de senha e desconectar esses usuário(s)?", + "alerts.validate-email-success": "E-mails validados", + "alerts.validate-force-password-reset-success": "A senha do(s) usuário(s) foi redefinida e as suas sessões existentes foram revogadas.", + "alerts.password-reset-confirm": "Você quer enviar e-mail(s) de redefinição de senha para este(s) usuário(s)?", "alerts.confirm-delete": "Aviso!
Você realmente quer deletar usuário(s)?
Esta ação não é reversível! Apenas a conta do usuário será deletada, seus posts e tópicos permanecerão.", "alerts.delete-success": "Usuário(s) Deletados!", "alerts.confirm-purge": "Aviso!
Você realmente quer deletar usuário(s) e o conteúdo deles?
Esta ação não é reversível! Todos os dados e conteúdos serão apagados!", @@ -96,7 +96,7 @@ "alerts.error-x": "Erro

%1

", "alerts.create-success": "Usuário criado!", - "alerts.prompt-email": "Emails:", - "alerts.email-sent-to": "Um email de convite foi enviado para %1", + "alerts.prompt-email": "E-mails:", + "alerts.email-sent-to": "Um e-mail de convite foi enviado para %1", "alerts.x-users-found": "%1 usuário(s) encontrado(s)! A pesquisa levou %2 ms." } \ No newline at end of file diff --git a/public/language/pt-BR/admin/menu.json b/public/language/pt-BR/admin/menu.json index 2f706c0da5..2622148479 100644 --- a/public/language/pt-BR/admin/menu.json +++ b/public/language/pt-BR/admin/menu.json @@ -1,6 +1,6 @@ { "section-general": "Geral", - "general/dashboard": "Painel", + "general/dashboard": "Painel de Controle", "general/homepage": "Página Inicial", "general/navigation": "Navegação", "general/languages": "Idiomas", @@ -9,12 +9,12 @@ "section-manage": "Administrar", "manage/categories": "Categorias", - "manage/privileges": "Privileges", + "manage/privileges": "Privilégios", "manage/tags": "Tags", "manage/users": "Usuários", "manage/admins-mods": "Admins & Mods", "manage/registration": "Fila de Registro", - "manage/post-queue": "File de Posts", + "manage/post-queue": "Fila de Posts", "manage/groups": "Grupos", "manage/ip-blacklist": "Lista Negra de IPs", "manage/uploads": "Uploads", @@ -22,7 +22,7 @@ "section-settings": "Configurações", "settings/general": "Geral", "settings/reputation": "Reputação", - "settings/email": "Email", + "settings/email": "E-mail", "settings/user": "Usuário", "settings/group": "Grupo", "settings/guest": "Visitantes", @@ -42,12 +42,12 @@ "section-appearance": "Aparência", "appearance/themes": "Temas", "appearance/skins": "Skins", - "appearance/customise": "Custom Content (HTML/JS/CSS)", + "appearance/customise": "Conteúdo Personalizado (HTML/JS/CSS)", - "section-extend": "Extenda", + "section-extend": "Personalizar", "extend/plugins": "Plugins", "extend/widgets": "Widgets", - "extend/rewards": "Prêmios", + "extend/rewards": "Recompensas", "section-social-auth": "Autenticação Social", @@ -64,8 +64,8 @@ "development/logger": "Logger", "development/info": "Informação", - "rebuild-and-restart-forum": "Rebuild & Restart Forum", - "restart-forum": "Reiniciar o Fórum", + "rebuild-and-restart-forum": "Recompilar & Reiniciar Fórum", + "restart-forum": "Reiniciar Fórum", "logout": "Sair da Conta", "view-forum": "Ver Fórum", @@ -77,6 +77,6 @@ "connection-lost": "A conexão com %1 foi perdida, tentando reconectar...", - "alerts.version": "Running NodeBB v%1", - "alerts.upgrade": "Upgrade to v%1" + "alerts.version": "Usando NodeBB v%1", + "alerts.upgrade": "Atualizar para v%1" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/settings/advanced.json b/public/language/pt-BR/admin/settings/advanced.json index 4ae6f3af6a..53a87f05e3 100644 --- a/public/language/pt-BR/admin/settings/advanced.json +++ b/public/language/pt-BR/admin/settings/advanced.json @@ -1,27 +1,27 @@ { "maintenance-mode": "Modo de Manutenção", - "maintenance-mode.help": "Quando o fórum está em modo de manutenção, todas as solicitações serão redirecionadas para uma página estática. Administradores são isentos deste redirecionamento, e podem acessar o site normalmente.", + "maintenance-mode.help": "Quando o fórum está em modo de manutenção, todas as solicitações serão redirecionadas para uma página estática. Administradores não sofrem este redirecionamento e podem acessar o site normalmente.", "maintenance-mode.message": "Mensagem de Manutenção", "headers": "Cabeçalhos", "headers.allow-from": "Defina ALLOW-FROM para Colocar o NodeBB em um iFrame", "headers.powered-by": "Personalizar o cabeçalho de \"Powered By\" enviado pelo NodeBB", "headers.acao": "Access-Control-Allow-Origin", "headers.acao-regex": "Access-Control-Allow-Origin Regular Expression", - "headers.acao-help": "Para impedir o acesso à todos os sites, deixe vazio", - "headers.acao-regex-help": "Enter regular expressions here to match dynamic origins. To deny access to all sites, leave empty", + "headers.acao-help": "Para impedir o acesso a todos os sites, deixe vazio", + "headers.acao-regex-help": "Insira expressões regulares aqui para corresponder às origens dinâmicas. Para impedir o acesso a todos os sites, deixe vazio", "headers.acac": "Access-Control-Allow-Credentials", "headers.acam": "Access-Control-Allow-Methods", "headers.acah": "Access-Control-Allow-Headers", "hsts": "Strict Transport Security", - "hsts.enabled": "Enabled HSTS (recommended)", - "hsts.subdomains": "Include subdomains in HSTS header", - "hsts.preload": "Allow preloading of HSTS header", - "hsts.help": "If enabled, an HSTS header will be set for this site. You can elect to include subdomains and preloading flags in your header. If in doubt, you can leave these unchecked. More information ", + "hsts.enabled": "Habilitar HSTS (recomendado)", + "hsts.subdomains": "Incluir subdomínios no cabeçalho do HSTS", + "hsts.preload": "Permitir pré-carregamento do cabeçalho do HSTS", + "hsts.help": "Se habilitado, um cabeçalho de HSTS será enviado para este site. Você pode selecionar tanto quais subdomínios deseja incluir, como quais serão as flags de pré-carregamento no seu cabeçalho. Se estiver em dúvida, você pode deixar esta opção desmarcada. Mais informações", "traffic-management": "Administração de Tráfego", - "traffic.help": "O NodeBB é instalado equipado com um módulo que automaticamente nega solicitações em situações de alto tráfego. Você pode ajustar estas configurações aqui, apesar de que os padrões são um bom começo.", - "traffic.enable": "Ligar a Administração de Tráfego", + "traffic.help": "Quando instalado, o NodeBB vem equipado com um módulo que nega automaticamente solicitações em situações de alto tráfego. Você pode ajustar estas configurações aqui, apesar de que os valores padrões são um bom começo.", + "traffic.enable": "Ativar a Administração de Tráfego", "traffic.event-lag": "Limite do Lag do Loop de Eventos (em milisegundos)", "traffic.event-lag-help": "Abaixar este valor diminui o tempo de espera para o carregamentos de página, mas irá também mostrar a mensagem de \"carga excessiva\" para mais usuários. (É necessário reiniciar)", "traffic.lag-check-interval": "Intervalo de Checagem (em milisegundos)", - "traffic.lag-check-interval-help": "Diminuir este valor causa o NodeBB de ficar mais sensível à spikes no carregamente, mas também pode causar a checagem de se tornar muito sensível. (É necessário reiniciar)" + "traffic.lag-check-interval-help": "Diminuir esse valor faz com que o NodeBB fique mais sensível a picos de carga, mas também pode fazer com que a verificação fique muito sensível. (É necessário reiniciar)" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/settings/chat.json b/public/language/pt-BR/admin/settings/chat.json index 2a26937e11..c59f7de81c 100644 --- a/public/language/pt-BR/admin/settings/chat.json +++ b/public/language/pt-BR/admin/settings/chat.json @@ -1,11 +1,11 @@ { "chat-settings": "Configurações de Chat", - "disable": "Desabilitar o chat", + "disable": "Desativar o chat", "disable-editing": "Desabilitar editar/apagar mensagem ", - "disable-editing-help": "Administradores e moderadores globais estão isentos desta restrição", + "disable-editing-help": "Administradores e moderadores globais não sofrem esta restrição", "max-length": "Tamanho máximo das mensagens de chat", "max-room-size": "Número máximo de usuários nas salas de chat", "delay": "Tempo entre mensagens de chat em milisegundos", - "restrictions.seconds-edit-after": "Number of seconds before users are allowed to edit chat messages after posting. (0 disabled)", - "restrictions.seconds-delete-after": "Number of seconds before users are allowed to delete chat messages after posting. (0 disabled)" + "restrictions.seconds-edit-after": "Número de segundos para que os usuários possam editar mensagens de chat após enviar. (0 para desativar)", + "restrictions.seconds-delete-after": "Número de segundos para que os usuários possam editar mensagens de chat após enviar. (0 para desativar)" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/settings/cookies.json b/public/language/pt-BR/admin/settings/cookies.json index 6b8c005c7f..de6a3c855f 100644 --- a/public/language/pt-BR/admin/settings/cookies.json +++ b/public/language/pt-BR/admin/settings/cookies.json @@ -1,11 +1,11 @@ { "eu-consent": "Anuência para Europa", - "consent.enabled": "Ligado", + "consent.enabled": "Ativado", "consent.message": "Mensagem de notificação", "consent.acceptance": "Mensagem de aprovação", "consent.link-text": "Texto do Link da Política", "consent.blank-localised-default": "Deixar em branco para utilizar os padrões de localidade do NodeBB", "settings": "Configurações", "cookie-domain": "Domínio da sessão de cookie", - "blank-default": "Deixar em branco para o padrão" + "blank-default": "Deixe em branco para o valor padrão" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/settings/email.json b/public/language/pt-BR/admin/settings/email.json index 9d5f1daf9d..3c663bb847 100644 --- a/public/language/pt-BR/admin/settings/email.json +++ b/public/language/pt-BR/admin/settings/email.json @@ -1,21 +1,21 @@ { - "email-settings": "Configurações de Email", - "address": "Endereço de Email", - "address-help": "O seguinte endereço de email se refere ao email que o recipiente verá nos campos \"De\" e \"Responder Para\".", + "email-settings": "Configurações de E-mail", + "address": "Endereço de E-mail", + "address-help": "O seguinte endereço de e-mail se refere ao e-mail que o destinatário verá nos campos \"De\" e \"Responder Para\".", "from": "Por Nome (From)", - "from-help": "O nome de (from) para mostrar no email.", - "sendmail-rate-limit": "Send X emails...", - "sendmail-rate-delta": "... every X milliseconds", - "sendmail-rate-help": "Instructs the NodeBB mailer to limit the number of messages sent at once in order to not overwhelm email receiving services. These options do not apply if SMTP Transport is enabled (below).", + "from-help": "O nome que será mostrado em \"De\" no e-mail.", + "sendmail-rate-limit": "Enviar X e-mails...", + "sendmail-rate-delta": "... a cada X milisegundos", + "sendmail-rate-help": "Instrui o mailer do NodeBB a limitar o número de mensagens enviadas de uma vez para não sobrecarregar os serviços de recebimento de e-mail. Essas opções não se aplicam se o Transporte por SMTP estiver habilitado (abaixo).", "smtp-transport": "Trasporte por SMTP", - "smtp-transport.enabled": "Utilizar um servidor de email externo para enviar emails", - "smtp-transport-help": "Você pode escolher entre uma lista de serviços conhecidos ou adicioanr algum pessoal.", + "smtp-transport.enabled": "Utilizar um servidor de e-mail externo para enviar e-mails", + "smtp-transport-help": "Você pode escolher entre uma lista de serviços conhecidos ou adicionar um personalizado.", "smtp-transport.service": "Escolha um serviço", "smtp-transport.service-custom": "Serviço Personalizado", "smtp-transport.service-help": "Escolha o nome de um serviço acima de modo a utilizar a informação conhecida sobre ele. Alternativamente, escolha 'Serviço Personalizado' e entre com os seus detalhes abaixo.", - "smtp-transport.gmail-warning1": "Houve relatos do serviço do Gmail não funcionar em contas com segurança aumentada. Nestes casos, você terá que configurar a sua contada do GMail para permitir apps menos seguros.", - "smtp-transport.gmail-warning2": "Para mais informação sobre este workaround, por gentileza consulte este artigo no NodeMailer sobre o assunto.. Uma alternativa seria utilizar um plugin de email terceirizado como o SendGrid, Maigun etc. . Explore pelos plugins disponíveis aqui.", + "smtp-transport.gmail-warning1": "Houve relatos do serviço do Gmail não funcionar em contas com uma segurança elevada. Nestes casos, você terá que configurar a sua contada do GMail para permitir apps menos seguros.", + "smtp-transport.gmail-warning2": "Para mais informação sobre esta solução, por gentileza consulte este artigo no NodeMailer sobre o assunto. Uma alternativa seria utilizar um plugin de e-mail terceirizado como o SendGrid, Maigun, etc. Clique para procurar por plugins disponíveis.", "smtp-transport.host": "Host SMTP", "smtp-transport.port": "Porta SMTP", "smtp-transport.security": "Segurança da conexão", @@ -23,18 +23,18 @@ "smtp-transport.security-starttls": "StartTLS", "smtp-transport.security-none": "Nenhuma", "smtp-transport.username": "Nome de usuário", - "smtp-transport.username-help": "Para o serviço do Gmail, entre com o endereço de email completo aqui, especiamente se você estiver usando um domínio administrado pelo Google Apps.", + "smtp-transport.username-help": "Para o serviço do Gmail, entre com o endereço de e-mail completo aqui, principalmente se você estiver usando um domínio administrado pelo Google Apps.", "smtp-transport.password": "Senha", - "template": "Editar Modelo do Email", - "template.select": "Escolher Modelo do Email", + "template": "Editar Modelo do E-mail", + "template.select": "Escolher Modelo do E-mail", "template.revert": "Reverter ao Original", - "testing": "Teste de Email", - "testing.select": "Escolher Modelo do Email", - "testing.send": "Enviar Email de Teste", - "testing.send-help": "O email de teste será enviado para o endereço de email do usuário atualmente logado.", - "subscriptions": "Assinaturas por Email", - "subscriptions.disable": "Desligar emails de notificação por assinatura", - "subscriptions.hour": "Hora do Resumo", - "subscriptions.hour-help": "Por favor entre um número representando a hora para enviar os resumos agendados via email (por ex. 0 para meia-noite, 17 para 5:00pm). Tenha em mente que esta é a hora de acordo com o servidor, e pode não combinar exatamente com o relógio do seu sistema.
O horário aproximado do servidor é:
O próximo resumo diário está agendado para ser enviado " + "testing": "Teste de E-mail", + "testing.select": "Escolher Modelo do E-mail", + "testing.send": "Enviar E-mail de Teste", + "testing.send-help": "O e-mail de teste será enviado para o seu endereço de e-mail.", + "subscriptions": "Assinaturas por E-mail", + "subscriptions.disable": "Desativar e-mails de notificação por assinatura", + "subscriptions.hour": "Hora de Envio dos Resumos", + "subscriptions.hour-help": "Por favor, entre um número representando a hora para enviar os resumos agendados via e-mail (por exemplo: 0 para meia-noite, 17 para 5:00pm). Tenha em mente que esta é a hora de acordo com o servidor e pode não combinar exatamente com o relógio do seu sistema.
O horário aproximado do servidor é:
O próximo resumo diário está agendado para ser enviado " } \ No newline at end of file diff --git a/public/language/pt-BR/admin/settings/general.json b/public/language/pt-BR/admin/settings/general.json index 20413a1002..c41c158d02 100644 --- a/public/language/pt-BR/admin/settings/general.json +++ b/public/language/pt-BR/admin/settings/general.json @@ -3,33 +3,33 @@ "title": "Título do Site", "title.url": "URL", "title.url-placeholder": "A URL do título do site", - "title.url-help": "Quando o título é clicado, enviar os usuários para este endereço. Se deixado em branco, o usuário será enviado para o índice do fórum.", + "title.url-help": "Quando o título é clicado, enviar os usuários para este endereço. Se deixado em branco, o usuário será enviado para a página inicial do fórum.", "title.name": "Nome da Sua Comunidade", "title.show-in-header": "Mostrar o Título do Site no Cabeçalho", "browser-title": "Título do Navegador", "browser-title-help": "Se nenhum título de navegador for especificado, o título do site será usado", "title-layout": "Layout do Título", - "title-layout-help": "Defina como o título do navegador será estruturado, ie. {pageTitle} | {browserTitle}", + "title-layout-help": "Defina como o título do navegador será estruturado, por exemplo: {pageTitle} | {browserTitle}", "description.placeholder": "Uma descrição curta sobre a sua comunidade", "description": "Descrição do Site", "keywords": "Palavras-chave do Site", "keywords-placeholder": "Palavras-chave descrevendo sua comunidade, separadas por vírgula", "logo": "Logo do Site", "logo.image": "Imagem", - "logo.image-placeholder": "Path para um logotipo para mostrar no cabeçalho do fórum", + "logo.image-placeholder": "Caminho de URL do logotipo para mostrar no cabeçalho do fórum", "logo.upload": "Enviar", "logo.url": "URL", "logo.url-placeholder": "A URL do logo do site", - "logo.url-help": "Quando o logotipo for clicado, enviar usuários para este endereço. Se deixado em branco, o usuário será enviado para o índice do fórum.", + "logo.url-help": "Quando o logotipo for clicado, enviar usuários para este endereço. Se deixado em branco, o usuário será enviado para a página inicial do fórum.", "logo.alt-text": "Todo o Texto", "log.alt-text-placeholder": "Texto alternativo para acessibilidade", "favicon": "Favicon", "favicon.upload": "Enviar", "touch-icon": "Ícone de Desktop/Touch Screen", "touch-icon.upload": "Enviar", - "touch-icon.help": "Tamanho e formato recomendados: 192x192, apenas formato PNG. Se nenhum ícone de touch screen for especificado, o NodeBB usará o seu favicon, ao invés dele.", + "touch-icon.help": "Tamanho e formato recomendados: 192x192, apenas formato PNG. Se nenhum ícone de touch screen for especificado, o NodeBB usará o ícone usado no favicon.", "outgoing-links": "Links Externos", - "outgoing-links.warning-page": "Utilizar Página de Aviso de Links Externos", + "outgoing-links.warning-page": "Habilitar Página de Aviso de Links Externos", "search-default-sort-by": "Padrão de ordenação de pesquisa por", - "outgoing-links.whitelist": "Domínios para colocar na lista branca de passar pela página de aviso" + "outgoing-links.whitelist": "Domínios que não receberão o aviso de link externo quando clicados" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/settings/group.json b/public/language/pt-BR/admin/settings/group.json index a7365cb01b..063420edf3 100644 --- a/public/language/pt-BR/admin/settings/group.json +++ b/public/language/pt-BR/admin/settings/group.json @@ -3,10 +3,10 @@ "private-groups": "Grupos Privados", "private-groups.help": "Se habilitado, a entrada nos grupos exigirá a apovação do dono do grupo (Padrão: ligado)", "private-groups.warning": "Atenção! Se esta opção estiver desabilitada e você tiver grupos privados, eles automaticamente se tornarão públicos.", - "allow-multiple-badges-help": "This flag can be used to allow users to select multiple group badges, requires theme support.", - "max-name-length": "Tamanho Máximo do Nome de Grupos", - "max-title-length": "Maximum Group Title Length", + "allow-multiple-badges-help": "Esta opção pode ser usada para permitir que os usuários selecionem várias insígnias de grupo, requer suporte ao tema.", + "max-name-length": "Tamanho Máximo do Nome do Grupo", + "max-title-length": "Tamanho Máximo do Título do Grupo", "cover-image": "Imagem de Capa do Grupo", "default-cover": "Imagens de Capa Padrão", - "default-cover-help": "Adicione uma lista separada por vírgulas de imagens de capa padrão para grupo que não tenham enviado uma imagem de capa" + "default-cover-help": "Adicione uma lista, separada por vírgulas, de imagens de capa padrão para grupos que não tenham enviado uma imagem de capa" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/settings/guest.json b/public/language/pt-BR/admin/settings/guest.json index de7c93ac34..b36a97550b 100644 --- a/public/language/pt-BR/admin/settings/guest.json +++ b/public/language/pt-BR/admin/settings/guest.json @@ -1,5 +1,5 @@ { - "handles": "Apelidos para Visitantes", - "handles.enabled": "Permitir handles de visitantes", - "handles.enabled-help": "Esta opção mostra um novo campo que permite visitantes de escolher um nome para associar à cada post que eles fizerem. Se desabilitado, eles serão simplesmente chamados de \"Visitante\"." + "handles": "Nome para Visitantes", + "handles.enabled": "Permitir que visitantes escolham um nome", + "handles.enabled-help": "Esta opção mostra um novo campo que permite visitantes de escolher um nome para associar a cada post que eles fizerem. Se desabilitado, eles serão simplesmente chamados de \"Visitante\"." } \ No newline at end of file diff --git a/public/language/pt-BR/admin/settings/notifications.json b/public/language/pt-BR/admin/settings/notifications.json index d832b3429a..0f27361d11 100644 --- a/public/language/pt-BR/admin/settings/notifications.json +++ b/public/language/pt-BR/admin/settings/notifications.json @@ -2,6 +2,6 @@ "notifications": "Notificações", "welcome-notification": "Notificação de Boas-vindas", "welcome-notification-link": "Link da Notificação de Boas-vindas", - "welcome-notification-uid": "Welcome Notification User (UID)", - "notification-alert-timeout": "Notification Alert Timeout" + "welcome-notification-uid": "Usuário de Notificação de Boas-vindas (UID)", + "notification-alert-timeout": "Tempo do Alerta de Notificação" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/settings/pagination.json b/public/language/pt-BR/admin/settings/pagination.json index 5a439ed519..b57add8f33 100644 --- a/public/language/pt-BR/admin/settings/pagination.json +++ b/public/language/pt-BR/admin/settings/pagination.json @@ -3,8 +3,8 @@ "enable": "Paginar posts e tópicos ao invés de usar rolagem infinita.", "topics": "Paginação de Tópico", "posts-per-page": "Posts por Página", - "max-posts-per-page": "Maximum posts per page", + "max-posts-per-page": "Máximo de posts por página", "categories": "Paginação de Categorias", "topics-per-page": "Tópicos por Página", - "max-topics-per-page": "Maximum topics per page" + "max-topics-per-page": "Máximo de tópicos por página" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/settings/post.json b/public/language/pt-BR/admin/settings/post.json index 3941fcc260..dd3e08069e 100644 --- a/public/language/pt-BR/admin/settings/post.json +++ b/public/language/pt-BR/admin/settings/post.json @@ -1,34 +1,34 @@ { "sorting": "Ordenação de Posts", "sorting.post-default": "Ordenação Padrão de Posts", - "sorting.oldest-to-newest": "Da Mais Antigo para Mais Recente", - "sorting.newest-to-oldest": "Mais recente para mais Antigo", - "sorting.most-votes": "Mais Votos", - "sorting.most-posts": "Most Posts", + "sorting.oldest-to-newest": "Do Mais Antigo para o Mais Recente", + "sorting.newest-to-oldest": "Do Mais Recente para o Mais Antigo", + "sorting.most-votes": "Mais Votados", + "sorting.most-posts": "Mais postados", "sorting.topic-default": "Ordenação Padrão de Tópicos", - "length": "Post Length", + "length": "Tamanho do Post", "restrictions": "Restições de Postagem", - "restrictions-new": "New User Restrictions", - "restrictions.post-queue": "Ligar enfileiramento de posts", - "restrictions-new.post-queue": "Enable new user restrictions", - "restrictions.post-queue-help": "Ligar o enfieiramento de posts colocará os posts de novos usuários numa fia por aprovação.", - "restrictions-new.post-queue-help": "Enabling new user restrictions will set restrictions on posts created by new users.", - "restrictions.seconds-between": "Seconds between posts", - "restrictions.seconds-between-new": "Seconds between posts for new users", - "restrictions.rep-threshold": "Reputation threshold before these restrictions are lifted", + "restrictions-new": "Restrições a Novos Usuários", + "restrictions.post-queue": "Ativar enfileiramento de posts", + "restrictions-new.post-queue": "Ativar novas restrições de usuários", + "restrictions.post-queue-help": "Ativar o enfieiramento de posts colocará os posts de novos usuários numa fila à espera de aprovação.", + "restrictions-new.post-queue-help": "A ativação de novas restrições de usuários definirá restrições em postagens criadas por novos usuários.", + "restrictions.seconds-between": "Tempo em segundos entre postagens", + "restrictions.seconds-between-new": "Tempo em segundos entre postagens para novos usuários", + "restrictions.rep-threshold": "Reputação mínima para que essas restrições sejam desativadas", "restrictions.seconds-defore-new": "Segundos antes que um novo usuário possa postar", - "restrictions.seconds-edit-after": "Number of seconds before users are allowed to edit posts after posting. (0 disabled)", - "restrictions.seconds-delete-after": "Number of seconds before users are allowed to delete posts after posting. (0 disabled)", + "restrictions.seconds-edit-after": "Número de segundos para que usuários sejam permitidos a editar posts depois de postar. (0 para desativar)", + "restrictions.seconds-delete-after": "Número de segundos para que usuários sejam permitidos a deletar posts depois de postar. (0 para desativar)", "restrictions.replies-no-delete": "Número de respostas após o qual os usuários são impedidos de excluir seus próprios tópicos. (0 desligado)", "restrictions.min-title-length": "Tamanho Mínimo dos Títulos", "restrictions.max-title-length": "Tamanho Máximo dos Títulos", "restrictions.min-post-length": "Tamanho Mínimo dos Posts", "restrictions.max-post-length": "Tamanho Máximo dos Posts", - "restrictions.days-until-stale": "Days until topic is considered stale", + "restrictions.days-until-stale": "Dias para que o tópico seja considerado antigo", "restrictions.stale-help": "Se um tópico é considerado \"antigo\", então um aviso será exibido aos usuários que tentarem responder àquele tópico.", "timestamp": "Timestamp", "timestamp.cut-off": "Data de corte (em dias)", - "timestamp.cut-off-help": "Datas & horários serão exibidos de uma forma relativa (por ex. \"3 horas atrás\" / \"5 dias atrás\"), e localizado nos diversos\n\\t\\t\\t\\t\\tidiomas. Após um certo ponto, este texto pode ser trocado para mostrar a própria data localizada\n\\t\\t\\t\\t\\t(por ex. 5 Nov 2016 15:30).
(Padrão: 30, ou um mês). Defina como 0 para sempre mostrar datas, deixe em branco para sempre mostrar horários relativos.", + "timestamp.cut-off-help": "Datas & horários serão exibidos de uma forma relativa (por exemplo: \"3 horas atrás\" / \"5 dias atrás\"), e de acordo com os mais diversos\n\t\t\t\t\tidiomas. Após um certo ponto, este texto pode ser trocado para mostrar a própria data local\n\t\t\t\t\t(por exemplo: 5 Nov 2016 15:30).
(Padrão: 30, ou um mês). Defina como 0 para sempre mostrar datas, deixe em branco para sempre mostrar horários relativos.", "teaser": "Post de Propaganda", "teaser.last-post": "Último – Exibir o último post, incluindo o post original, se não houver respostas", "teaser.last-reply": "Último – Exibir a última resposta, ou um marcador \"Sem respostas\" se não houver respostas", @@ -44,11 +44,11 @@ "signature.no-images": "Desabilitar imagens em assinaturas", "signature.max-length": "Tamanho Máximo de Assinatura", "composer": "Configurações do Compositor", - "composer-help": "As seguintes configurações governam a funcionalidade e/ou aparência do compositor de postagem exibido\n\\t\\t\\t\\tpara os usuários quando eles criam novos tópicos, ou respondem à tópicos existentes.", + "composer-help": "As seguintes configurações diz respeito à funcionalidade e/ou à aparência do compositor de postagem mostrado\n\t\t\t\taos usuários quando eles criam novos tópicos ou respondem a tópicos existentes.", "composer.show-help": "Mostrar aba \"Ajuda\"", "composer.enable-plugin-help": "Permitir plugins de adicionar conteúdo à aba ajuda", "composer.custom-help": "Texto de Ajuda Personalizado", "ip-tracking": "Rastreamento de IP", "ip-tracking.each-post": "Rastrear Endereço IP para cada post", - "enable-post-history": "Enable Post History" + "enable-post-history": "Ativar o Histórico de Postagem" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/settings/reputation.json b/public/language/pt-BR/admin/settings/reputation.json index 1c8e40cef5..c7a31e9d7b 100644 --- a/public/language/pt-BR/admin/settings/reputation.json +++ b/public/language/pt-BR/admin/settings/reputation.json @@ -1,14 +1,14 @@ { "reputation": "Configurações de Reputação", "disable": "Desabilitar o Sistema de Reputação", - "disable-down-voting": "Desabilitar Baixo Votar", + "disable-down-voting": "Desativar a Negativação", "votes-are-public": "Todos os Votos São Públicos", - "thresholds": "Limiares de Atividade", + "thresholds": "Limites às atividades", "min-rep-downvote": "Reputação mínima para votar negativamente em posts", "min-rep-flag": "Reputação mínima para sinalizar posts", - "min-rep-website": "Minimum reputation to add \"Website\" to user profile", - "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", - "min-rep-signature": "Minimum reputation to add \"Signature\" to user profile", - "min-rep-profile-picture": "Minimum reputation to add \"Profile Picture\" to user profile", - "min-rep-cover-picture": "Minimum reputation to add \"Cover Picture\" to user profile" + "min-rep-website": "Reputação mínima para adicionar \"Website\" ao perfil do usuário", + "min-rep-aboutme": "Reputação mínima para adicionar \"Sobre mim\" ao perfil do usuário", + "min-rep-signature": "Reputação mínima para adicionar \"Assinatura\" ao perfil do usuário", + "min-rep-profile-picture": "Reputação mínima para adicionar \"Foto do Perfil\" ao perfil do usuário", + "min-rep-cover-picture": "Reputação mínima para adicionar \"Foto de Capa\" ao perfil do usuário" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/settings/uploads.json b/public/language/pt-BR/admin/settings/uploads.json index db326bbfcd..41529ea746 100644 --- a/public/language/pt-BR/admin/settings/uploads.json +++ b/public/language/pt-BR/admin/settings/uploads.json @@ -2,24 +2,24 @@ "posts": "Posts", "allow-files": "Permitir usuários de enviar arquivos comuns", "private": "Tornar arquivos enviados particulares", - "private-extensions": "File extensions to make private", - "private-uploads-extensions-help": "Enter comma-separated list of file extensions to make private here (e.g. pdf,xls,doc). An empty list means all files are private.", - "resize-image-width-threshold": "Resize images if they are wider than specified width", - "resize-image-width-threshold-help": "(in pixels, default: 1520 pixels, set to 0 to disable)", - "resize-image-width": "Resize images down to specified width", - "resize-image-width-help": "(in pixels, default: 760 pixels, set to 0 to disable)", - "resize-image-quality": "Quality to use when resizing images", - "resize-image-quality-help": "Use a lower quality setting to reduce the file size of resized images.", + "private-extensions": "Extensões de arquivo para tornar privado", + "private-uploads-extensions-help": "Digite uma lista, separada por vírgulas, de extensões de arquivos para torná-las privadas aqui (por exemplo: pdf, xls, doc). Uma lista vazia sinigica que todos os arquivos são privado.", + "resize-image-width-threshold": "Redimensionar imagens se a largura dela for maior do que a largura especificada", + "resize-image-width-threshold-help": "(em pixels, padrão: 1520 pixels, defina como 0 para desativar)", + "resize-image-width": "Redimensionar imagens para a largura especificada", + "resize-image-width-help": "(em pixels, padrão: 760 pixels, defina como 0 para desativar)", + "resize-image-quality": "Qualidade para usar ao redimensionar imagens", + "resize-image-quality-help": "Use uma configuração de qualidade mais baixa para reduzir o tamanho do arquivo de imagens redimensionadas.", "max-file-size": "Tamanho Máximo de Arquivo (em KiB)", "max-file-size-help": "(em kibibytes, padrão: 2048 KiB)", - "reject-image-width": "Maximum Image Width (in pixels)", - "reject-image-width-help": "Images wider than this value will be rejected.", - "reject-image-height": "Maximum Image Height (in pixels)", - "reject-image-height-help": "Images taller than this value will be rejected.", + "reject-image-width": "Largura Máxima da Imagem (em pixels)", + "reject-image-width-help": "Imagens com uma largura maior que esta serão rejeitadas.", + "reject-image-height": "Altura Máxima das Imagens (em pixels)", + "reject-image-height-help": "Imagens com uma altura maior do que este valor serão rejeitadas.", "allow-topic-thumbnails": "Permitir usuários de enviar miniaturas de tópico", "topic-thumb-size": "Tamanho da Miniatura de Tópico", "allowed-file-extensions": "Extensões de Arquivo Permitidas", - "allowed-file-extensions-help": "Digite uma lista separada por vírguls fr extensões de arquivos aqui (ex. pdf,xls,doc). Uma lista vazia significa que todas as extensões são permitidas.", + "allowed-file-extensions-help": "Digite uma lista, separada por vírgulas, de extensões de arquivos aqui (por exemplo: pdf,xls,doc). Uma lista vazia significa que todas as extensões são permitidas.", "profile-avatars": "Avatares de Perfil", "allow-profile-image-uploads": "Permitir usuários de enviar imagens de perfil", "convert-profile-image-png": "Converter imagens de perfil enviadas para PNG", @@ -34,5 +34,5 @@ "keep-all-user-images": "Manter versões antigas de avatares e capas de perfil no servidor", "profile-covers": "Capas de Perfil", "default-covers": "Imagens de Capa Padrão", - "default-covers-help": "Adicione uma lista separada por vírgulas de imagens de capa padrão para contas que não tenham enviado uma imagem de capa" + "default-covers-help": "Adicione uma lista, separada por vírgulas, de imagens de capa padrão para contas que não tenham enviado uma imagem de capa" } diff --git a/public/language/pt-BR/admin/settings/user.json b/public/language/pt-BR/admin/settings/user.json index 9847002802..d572ecda63 100644 --- a/public/language/pt-BR/admin/settings/user.json +++ b/public/language/pt-BR/admin/settings/user.json @@ -1,7 +1,7 @@ { "authentication": "Autenticação", - "require-email-confirmation": "Exigir Confirmação de Email", - "email-confirm-interval": "O usuário não pode reenviar um email de confirmação até", + "require-email-confirmation": "Exigir Confirmação de E-mail", + "email-confirm-interval": "O usuário não pode reenviar um e-mail de confirmação até", "email-confirm-email2": "minutos se passaram", "allow-login-with": "Permitir login com", "allow-login-with.username-email": "Nome de Usuário ou E-mail", diff --git a/public/language/pt-BR/admin/settings/web-crawler.json b/public/language/pt-BR/admin/settings/web-crawler.json index 85064ffb0b..ed9a88aebf 100644 --- a/public/language/pt-BR/admin/settings/web-crawler.json +++ b/public/language/pt-BR/admin/settings/web-crawler.json @@ -3,7 +3,7 @@ "robots-txt": "Personalização de Robots.txt Deixe em branco para o padrão", "sitemap-feed-settings": "Configurações de Mapa do Site & Feeds", "disable-rss-feeds": "Desabilitar Feeds RSS", - "disable-sitemap-xml": "Desligar Sitemap.xml", + "disable-sitemap-xml": "Desativar Sitemap.xml", "sitemap-topics": "Número de Tópicos para mostrar no Mapa do Site", "clear-sitemap-cache": "Limpar Cache de Mapa do Site", "view-sitemap": "Ver Mapa do Site" diff --git a/public/language/pt-BR/category.json b/public/language/pt-BR/category.json index 6cc5f96f88..a0bba260d7 100644 --- a/public/language/pt-BR/category.json +++ b/public/language/pt-BR/category.json @@ -9,14 +9,14 @@ "no_new_posts": "Nenhum post novo.", "watch": "Acompanhar", "ignore": "Ignorar", - "watching": "Seguindo", - "not-watching": "Not Watching", - "ignoring": "Ignorando", - "watching.description": "Show topics in unread and recent", - "not-watching.description": "Do not show topics in unread, show in recent", - "ignoring.description": "Do not show topics in unread and recent", - "watching.message": "You are now watching updates from this category and all subcategories", - "notwatching.message": "You are not watching updates from this category and all subcategories", - "ignoring.message": "You are now ignoring updates from this category and all subcategories", + "watching": "Acompanhando", + "not-watching": "Não Acompanhar", + "ignoring": "Ignorar", + "watching.description": "Mostrar tópicos em não-lidos e recentes", + "not-watching.description": "Não mostrar tópicos em não-lidos, mostrar em recentes", + "ignoring.description": "Não mostrar tópicos em não-lidos e nem em recentes", + "watching.message": "Agora, você está acompanhando as novidades desta categoria e todas as suas subcategorias", + "notwatching.message": "Agora, você não está acompanhando as novidades nem desta categoria e nem de suas subcategorias", + "ignoring.message": "Agora, você está ignorando as novidades desta categorias e de todas as suas subcategorias", "watched-categories": "Categorias acompanhadas" } \ No newline at end of file diff --git a/public/language/pt-BR/email.json b/public/language/pt-BR/email.json index 2bf2ac51f1..42bd967556 100644 --- a/public/language/pt-BR/email.json +++ b/public/language/pt-BR/email.json @@ -1,18 +1,18 @@ { - "test-email.subject": "Test Email", - "password-reset-requested": "Password Reset Requested!", + "test-email.subject": "E-mail de Teste", + "password-reset-requested": "Redefinição de Senha Solicitada!", "welcome-to": "Bem vindo a %1", "invite": "Convite de %1", "greeting_no_name": "Olá", "greeting_with_name": "Olà %1", - "email.verify-your-email.subject": "Please verify your email", - "email.verify.text1": "Your email address has changed!", + "email.verify-your-email.subject": "Por favor, confirme o seu e-mail", + "email.verify.text1": "O seu endereço de e-mail foi alterado!", "welcome.text1": "Obrigado por se registrar com %1!", "welcome.text2": "Para terminar de ativar sua conta, nós precisamos verificar que você é o dono do endereço de email com o que você se registrou.", "welcome.text3": "Um administrador aceitou o seu pedido de registro. Você pode fazer login agora com seu nome de usuário/senha.", "welcome.cta": "Clique aqui para confirmar seu endereço de email", "invitation.text1": "%1 convidou você para participar de %2", - "invitation.text2": "Your invitation will expire in %1 days.", + "invitation.text2": "O seu convite irá expirar em %1 dias.", "invitation.ctr": "Clique aqui para criar a sua conta.", "reset.text1": "Nós recebemos um pedido para reconfigurar sua senha, possivelmente porque você a esqueceu. Se este não é o caso, por favor ignore este email.", "reset.text2": "Para continuar com a reconfiguração de senha, por favor clique no seguinte link:", @@ -27,18 +27,18 @@ "digest.week": "semana", "digest.month": "mês", "digest.subject": "Resumo de %1", - "digest.title": "Your Daily Digest", + "digest.title": "O seu resumo diário", "notif.chat.subject": "Nova mensagem de chat recebida de %1", "notif.chat.cta": "Clique aqui para continuar a conversa", "notif.chat.unsub.info": "Esta notificação de chat foi enviada a você devido às suas configurações de assinatura.", "notif.post.cta": "Clique aqui para ler o tópico completo", "notif.post.unsub.info": "Esta notificação de postagem foi enviada para você devido as suas configurações de assinatura.", - "notif.cta": "Click here to go to forum", + "notif.cta": "Clique aqui para ir ao fórum", "test.text1": "Este é um e-mail de teste, para verificar que o enviador de emails está corretamente configurado no seu NodeBB.", "unsub.cta": "Clique aqui para alterar estas configurações", "banned.subject": "Você foi banido de %1", "banned.text1": "O usuário %1 foi banido de %2.", - "banned.text2": "Este banimento dururá até %1.", + "banned.text2": "Este banimento durará até %1.", "banned.text3": "Este é o motivo pelo qual você foi banido:", "closing": "Obrigado!" } \ No newline at end of file diff --git a/public/language/pt-BR/error.json b/public/language/pt-BR/error.json index efbd53e807..faea3f64e5 100644 --- a/public/language/pt-BR/error.json +++ b/public/language/pt-BR/error.json @@ -18,27 +18,27 @@ "invalid-username-or-password": "Por favor especifique ambos nome de usuário e senha", "invalid-search-term": "Termo de pesquisa inválido", "invalid-url": "URL Inválido", - "local-login-disabled": "Local login system has been disabled for non-privileged accounts.", - "csrf-invalid": "Nós não fomos capazes de logá-lo, provavelmente devido à uma sessão expirada. Por favor tente novamente.", - "invalid-pagination-value": "Valor de paginação inválido, precisa ser entre no mínimo %1 e no máximo %2", + "local-login-disabled": "O sistema de login local foi desativado para contas sem privilégios.", + "csrf-invalid": "Não foi possível realizar o seu login, provavelmente porque a sua sessão expirou. Por favor, tente novamente.", + "invalid-pagination-value": "Valor de paginação inválido, precisa ser no mínimo %1 e no máximo %2", "username-taken": "Nome de usuário já existe", "email-taken": "Email já cadastrado", "email-not-confirmed": "O seu email ainda não foi confirmado, por favor clique aqui para confirmar seu email.", "email-not-confirmed-chat": "Você não está habilitado a conversar até que seu email seja confirmado, por favor clique aqui para confirmar seu email.", - "email-not-confirmed-email-sent": "O seu email ainda não foi confirmado, por favor confira a sua caixa de entrada pelo email de confirmação.", + "email-not-confirmed-email-sent": "O seu e-mail ainda não foi confirmado. Por favor, verifique sua caixa de entrada para o e-mail de confirmação.", "no-email-to-confirm": "Este fórum exige confirmação de email, por gentileza clique aqui para digitar um email", "email-confirm-failed": "Nós não pudemos confirmar seu email, por gentileza tente novamente mais tarde.", "confirm-email-already-sent": "O email de confirmação já foi enviado, por favor aguarde %1 minuto(s) para enviar outro.", - "sendmail-not-found": "O executável do sendmail não pôde ser encontrado, por favor se certifique de que ele está instalado e é executável pelo usuário que roda o NodeBB.", + "sendmail-not-found": "O executável do sendmail não pôde ser encontrado. Por favor, certifique-se de que ele está instalado e que está autorizado a ser executado pelo usuário que roda o NodeBB.", "username-too-short": "Nome de usuário muito curto", "username-too-long": "Nome de usuário muito longo", "password-too-long": "A senha é muito grande", - "reset-rate-limited": "Too many password reset requests (rate limited)", + "reset-rate-limited": "Muitas solicitações de redefinição de senha (taxa de ação limitada)", "user-banned": "Usuário banido", "user-banned-reason": "Desculpa, esta conta foi banida (Motivo: %1)", - "user-banned-reason-until": "Desculpe, esta conta foi banida até %1 (Motivo: %2)", + "user-banned-reason-until": "Desculpa, esta conta foi banida até %1 (Motivo: %2)", "user-too-new": "Desculpe, é necessário que você aguarde %1 segundo(s) antes de fazer o seu primeiro post.", - "blacklisted-ip": "Desculpe, o seu endereço IP foi banido desta comunidade. Se você acha que isso é um engano, por favor contate um administrador.", + "blacklisted-ip": "Desculpa, o seu endereço IP foi banido desta comunidade. Se você acha que isso é um engano, por favor, contate um administrador.", "ban-expiry-missing": "Por favor forneça uma data para o fim deste banimento", "no-category": "A categoria não existe", "no-topic": "O tópico não existe", @@ -50,19 +50,19 @@ "category-disabled": "Categoria desativada", "topic-locked": "Tópico Trancado", "post-edit-duration-expired": "Você só pode editar posts %1 segundo(s) após postar.", - "post-edit-duration-expired-minutes": "Você pode apenas editar posts por %1 minuto(s) após postar", - "post-edit-duration-expired-minutes-seconds": "Você pode apenas editar posts por %1 minuto(s) e %2 segundo(s) após postar", - "post-edit-duration-expired-hours": "Você pode apenas editar posts por %1 hora(s) após postar", - "post-edit-duration-expired-hours-minutes": "Você pode apenas editar posts por %1 hora(s) e %2 minuto(s) após postar", - "post-edit-duration-expired-days": "Você pode apenas editar posts por %1 dia(s) após postar", - "post-edit-duration-expired-days-hours": "Você pode apenas editar posts por %1 dia(s) e %2 hora(s) após postar", - "post-delete-duration-expired": "Você só pode deletar posts por %1 segundo(s) depois de postar", - "post-delete-duration-expired-minutes": "Você só pode deletar posts por %1 minuto(s) depois de postar", - "post-delete-duration-expired-minutes-seconds": "Você só pode deletar posts por %1 minuto(s) e %2 segundo(s) depois de postar", - "post-delete-duration-expired-hours": "Você só pode deletar posts por %1 hora(s) depois de postar", - "post-delete-duration-expired-hours-minutes": "Você só pode deletar posts por %1 hora(s) e %2 minutos(s) depois de postar", - "post-delete-duration-expired-days": "Você só pode deletar posts por %1 dia(s) depois de postar", - "post-delete-duration-expired-days-hours": "Você só pode deletar posts por %1 dia(s) e %2 hora(s) depois de postar", + "post-edit-duration-expired-minutes": "Você só pode editar posts %1 minuto(s) após postar", + "post-edit-duration-expired-minutes-seconds": "Você só pode editar posts %1 minuto(s) e %2 segundo(s) após postar", + "post-edit-duration-expired-hours": "Você só pode editar posts %1 hora(s) após postar", + "post-edit-duration-expired-hours-minutes": "Você só pode editar posts %1 hora(s) e %2 minuto(s) após postar", + "post-edit-duration-expired-days": "Você só pode editar posts %1 dia(s) após postar", + "post-edit-duration-expired-days-hours": "Você só pode editar posts %1 dia(s) e %2 hora(s) após postar", + "post-delete-duration-expired": "Você só pode deletar posts %1 segundo(s) após postar", + "post-delete-duration-expired-minutes": "Você só pode deletar post %1 minuto(s) após postar", + "post-delete-duration-expired-minutes-seconds": "Você só pode deletar posts %1 minuto(s) e %2 segundo(s) após postar", + "post-delete-duration-expired-hours": "Você só pode deletar posts %1 hora(s) após postar", + "post-delete-duration-expired-hours-minutes": "Você só pode deletar posts %1 hora(s) e %2 minutos(s) após postar", + "post-delete-duration-expired-days": "Você só pode deletar posts %1 dia(s) após postar", + "post-delete-duration-expired-days-hours": "Você só pode deletar posts %1 dia(s) e %2 hora(s) após postar", "cant-delete-topic-has-reply": "Você não pode excluir o seu tópico após ele ter uma resposta", "cant-delete-topic-has-replies": "Você não pode excluir o seu tópico após ele ter %1 respostas", "content-too-short": "Por favor digite um post maior. Posts precisam conter ao menos %1 caractere(s).", @@ -79,17 +79,17 @@ "still-uploading": "Aguarde a conclusão dos uploads.", "file-too-big": "O tamanho máximo permitido de arquivo é de %1 kB - por favor faça upload de um arquivo menor", "guest-upload-disabled": "O upload por visitantes foi desabilitado", - "cors-error": "Unable to upload image due to misconfigured CORS", + "cors-error": "Não é possível fazer o upload da imagem devido ao CORS mal configurado", "already-bookmarked": "Você já adicionou este post aos favoritos", "already-unbookmarked": "Você já removeu este post dos favoritos", "cant-ban-other-admins": "Você não pode banir outros administradores!", "cant-remove-last-admin": "Você é o único administrador. Adicione outro usuário como administrador antes de remover a si mesmo como admin", - "cant-delete-admin": "Remova o privilégio de administrador desta conta antes de tentar deletá-la.", + "cant-delete-admin": "Remova os privilégios de administrador dessa conta antes de tentar excluí-la.", "invalid-image": "Imagem Inválida", "invalid-image-type": "Tipo inválido de imagem. Os tipos permitidos são: %1", "invalid-image-extension": "Extensão de imagem inválida", "invalid-file-type": "Tipo de arquivo inválido. Os tipos permitidos são: %1", - "invalid-image-dimensions": "Image dimensions are too big", + "invalid-image-dimensions": "As dimensões da imagem são muito grandes", "group-name-too-short": "Nome do grupo é muito curto", "group-name-too-long": "O nome do grupo é muito extenso", "group-already-exists": "O grupo já existe", @@ -121,7 +121,7 @@ "chat-edit-duration-expired": "Você só pode editar mensagens de chat %1 segundo(s) após postar", "chat-delete-duration-expired": "Você só pode deletar mensagens de chat %1 segundo(s) após postar", "chat-deleted-already": "Essa mensagem de chat já foi deletada", - "chat-restored-already": "This chat message has already been restored.", + "chat-restored-already": "Essa mensagem de chat já foi restaurada.", "already-voting-for-this-post": "Você já votou neste post.", "reputation-system-disabled": "O sistema de reputação está desabilitado.", "downvoting-disabled": "Negativação está desabilitada", @@ -139,8 +139,8 @@ "parse-error": "Algo deu errado ao receber a resposta do servidor", "wrong-login-type-email": "Por favor use seu email para fazer login", "wrong-login-type-username": "Por favor use o seu nome de usuário para fazer login", - "sso-registration-disabled": "Registration has been disabled for %1 accounts, please register with an email address first", - "sso-multiple-association": "You cannot associate multiple accounts from this service to your NodeBB account. Please dissociate your existing account and try again.", + "sso-registration-disabled": "O cadastro foi desativado para as contas de %1. Por favor, registre-se com um endereço de e-mail primeiro.", + "sso-multiple-association": "Você não pode associar várias contas deste serviço à sua conta do NodeBB. Por favor, desassocie sua conta existente e tente novamente.", "invite-maximum-met": "Você já convidou o número máximo de pessoas (%1 de %2).", "no-session-found": "Nenhuma sessão de login encontrada!", "not-in-room": "O usuário não está na sala", @@ -149,13 +149,13 @@ "no-users-selected": "Nenhuma escolha de usuário(s) foi feita", "invalid-home-page-route": "Rota de página inicial inválida", "invalid-session": "Erro de Sessão", - "invalid-session-text": "Parece que sua sessão de login não está mais ativa, ou não combina mais com a do servidor. Por gentileza, recarregue esta página.", + "invalid-session-text": "Parece que sua sessão de login não está mais ativao ou não corresponde mais com a do servidor. Por favor, recarregue esta página.", "no-topics-selected": "Nenhum tópico selecionado!", "cant-move-to-same-topic": "Não é possível mover um post para o mesmo tópico!", - "cannot-block-self": "You cannot block yourself!", + "cannot-block-self": "Você pode bloquear a si mesmo!", "cannot-block-privileged": "Você não pode bloquear administradores e moderadores globais", - "cannot-block-guest": "Guest are not able to block other users", - "already-blocked": "This user is already blocked", - "already-unblocked": "This user is already unblocked", - "no-connection": "There seems to be a problem with your internet connection" + "cannot-block-guest": "Vistantes não podem bloquear outros usuários", + "already-blocked": "Este usuário já foi bloqueado", + "already-unblocked": "Este usuário já foi desbloqueado", + "no-connection": "Parece haver um problema com sua conexão com a internet" } \ No newline at end of file diff --git a/public/language/pt-BR/flags.json b/public/language/pt-BR/flags.json index 658ff25695..40a439838b 100644 --- a/public/language/pt-BR/flags.json +++ b/public/language/pt-BR/flags.json @@ -4,12 +4,12 @@ "reported-at": "Reportado Em", "description": "Descrição", "no-flags": "Ihuul! Nenhuma sinalização encontrada.", - "assignee": "Cessionário", + "assignee": "Responsável", "update": "Atualizar", "updated": "Atualizado", "target-purged": "O conteúdo ao qual essa sinalização se referia foi removido e não está mais disponível.", - "graph-label": "Daily Flags", + "graph-label": "Sinalizações Diárias", "quick-filters": "Filtros Rápidos", "filter-active": "Há um ou mais filtros ativos nesta lista de sinalizações", "filter-reset": "Remover Filtros", @@ -19,11 +19,11 @@ "filter-type": "Tipo de Sinalização", "filter-type-all": "Todo o Conteúdo", "filter-type-post": "Post", - "filter-type-user": "User", + "filter-type-user": "Usuário", "filter-state": "Estado", - "filter-assignee": "UID do Cessionário", + "filter-assignee": "UID do Responsável", "filter-cid": "Categoria", - "filter-quick-mine": "Procurado à mim", + "filter-quick-mine": "Atribuído a mim", "filter-cid-all": "Todas as categorias", "apply-filters": "Aplicar Filtros", @@ -31,7 +31,7 @@ "flagged-user": "Usuário Sinalizado", "view-profile": "Ver Perfil", "start-new-chat": "Iniciar Novo Chat", - "go-to-target": "Ver Sinalizado", + "go-to-target": "Ver o Sinalizado", "user-view": "Ver Perfil", "user-edit": "Editar Perfil", @@ -49,18 +49,18 @@ "state-wip": "Trabalho em Progresso", "state-resolved": "Resolvido", "state-rejected": "Rejeitado", - "no-assignee": "Não Procurado", + "no-assignee": "Não Atribuído", "note-added": "Nota Adicionada", "modal-title": "Reportar Conteúdo Inadequado", - "modal-body": "Por favor especifique sua razão para sinalizar %1 %2 para revisão. Alternativamente, use um dos botões de reporte rápido se for aplicável.", + "modal-body": "Por favor, especifique a razão pela qual você está sinalizando %1 %2 para a revisão. Alternativamente, use um dos botões de reporte rápido se for aplicável.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Ofensivo", "modal-reason-other": "Outro (especifique abaixo)", "modal-reason-custom": "Motivo para reportar este conteúdo...", - "modal-submit": "Enviar Reportagem", + "modal-submit": "Enviar Denúncia", "modal-submit-success": "O conteúdo foi sinalizado para moderação.", "modal-submit-confirm": "Cofirmar Envio", - "modal-submit-confirm-text": "You have a custom reason specified already. Are you sure you wish to submit via quick-report?", - "modal-submit-confirm-text-help": "Submitting a quick report will overwrite any custom reasons defined." + "modal-submit-confirm-text": "Você já especificou um motivo individual. Tem certeza de que deseja enviar uma denúncia rápida?", + "modal-submit-confirm-text-help": "O envio de uma denúncia rápida substituirá os motivos individuais especificados." } \ No newline at end of file diff --git a/public/language/pt-BR/global.json b/public/language/pt-BR/global.json index 4be8ef553f..8bf8524106 100644 --- a/public/language/pt-BR/global.json +++ b/public/language/pt-BR/global.json @@ -10,7 +10,7 @@ "500.title": "Erro Interno.", "500.message": "Oops! Parece que algo deu errado!", "400.title": "Solicitação Inválida.", - "400.message": "Parece que esse link contém informação inválida, por favor o verifique novamente. Senão, retorne para a página inicial.", + "400.message": "Parece que este link está incorreto. Por favor, verifique e tente novamente. Caso contrário, volte para a página inicial.", "register": "Cadastrar", "login": "Login", "please_log_in": "Por Favor Efetue o Login", @@ -71,7 +71,7 @@ "posted_in_ago_by": "postado em %1 %2 por %3", "user_posted_ago": "%1 postou %2", "guest_posted_ago": "Visitante postou %1", - "last_edited_by": "editado por último por %1", + "last_edited_by": "última edição por %1", "norecentposts": "Nenhum Post Recente", "norecenttopics": "Sem Tópicos Recentes", "recentposts": "Posts Recentes", @@ -85,7 +85,7 @@ "language": "Idioma", "guest": "Visitante", "guests": "Visitantes", - "former_user": "A Former User", + "former_user": "Um ex-usuário", "updated.title": "Fórum Atualizado", "updated.message": "Este fórum foi atualizado para sua última versão. Clique aqui para atualizar a página.", "privacy": "Privacidade", @@ -100,14 +100,14 @@ "upload": "Upload", "uploads": "Uploads", "allowed-file-types": "Os tipos de arquivo permitidos são %1", - "unsaved-changes": "Você tem alterações não salvas. Tem certeza que você deseja sair da página?", - "reconnecting-message": "Parece que sua conexão com %1 caiu, por favor aguarde enquanto tentamos reconectar.", + "unsaved-changes": "Você tem alterações não salvas. Tem certeza de que você deseja sair da página?", + "reconnecting-message": "Parece que sua conexão com %1 caiu. Por favor, aguarde enquanto tentamos reconectar.", "play": "Executar", - "cookies.message": "Este website utiliza cookies para assegrar que você tenha a melhor experiência em nosso site.", + "cookies.message": "Este site usa cookies para garantir que você obtenha a melhor experiência em nosso site.", "cookies.accept": "Entendi!", "cookies.learn_more": "Saber Mais", "edited": "Editado", - "disabled": "Desligado", + "disabled": "Desativado", "select": "Escolha", - "user-search-prompt": "Type something here to find users..." + "user-search-prompt": "Digite alguma coisa aqui para encontrar usuários..." } \ No newline at end of file diff --git a/public/language/pt-BR/groups.json b/public/language/pt-BR/groups.json index aac66e2500..63e3811c4b 100644 --- a/public/language/pt-BR/groups.json +++ b/public/language/pt-BR/groups.json @@ -27,8 +27,8 @@ "details.disableJoinRequests": "Desabilitar pedidos de participação", "details.grant": "Conceder/Retomar a Posse", "details.kick": "Chutar", - "details.kick_confirm": "Você tem certeza que deseja remover este membro do grupo?", - "details.add-member": "Add Member", + "details.kick_confirm": "Você tem certeza de que deseja remover este membro do grupo?", + "details.add-member": "Adicionar Membro", "details.owner_options": "Administração do Grupo", "details.group_name": "Nome do Grupo", "details.member_count": "Número de Membros", @@ -36,8 +36,8 @@ "details.description": "Descrição", "details.badge_preview": "Visualização do Distintivo", "details.change_icon": "Mudar Ícone", - "details.change_label_colour": "Change Label Colour", - "details.change_text_colour": "Change Text Colour", + "details.change_label_colour": "Alterar Cor do Rótulo", + "details.change_text_colour": "Alterar Cor do Texto", "details.badge_text": "Texto da Badge", "details.userTitleEnabled": "Mostrar Badge", "details.private_help": "Se habilitado, a entrada nos grupos requer aprovação de um dos donos do grupo", @@ -54,7 +54,7 @@ "membership.reject": "Rejeitar", "new-group.group_name": "Nome do Grupo:", "upload-group-cover": "Fazer upload de capa do grupo", - "bulk-invite-instructions": "Entre uma lista separada por vírgulas de nome usuários para convidar à este grupo", - "bulk-invite": "Convite em Lote", - "remove_group_cover_confirm": "Tem certeza que deseja remover a imagem de capa?" + "bulk-invite-instructions": "Digite uma lista, separada por vírgulas, de nomes usuários para convidar para este grupo", + "bulk-invite": "Convite em Massa", + "remove_group_cover_confirm": "Tem certeza de que deseja remover a imagem de capa?" } \ No newline at end of file diff --git a/public/language/pt-BR/modules.json b/public/language/pt-BR/modules.json index 6c1adf79a2..21bf713965 100644 --- a/public/language/pt-BR/modules.json +++ b/public/language/pt-BR/modules.json @@ -21,19 +21,19 @@ "chat.three_months": "3 Meses", "chat.delete_message_confirm": "Tem certeza que deseja excluir esta mensagem?", "chat.retrieving-users": "Carregando usuários", - "chat.manage-room": "Administrar conversa", - "chat.add-user-help": "Search for users here. When selected, the user will be added to the chat. The new user will not be able to see chat messages written before they were added to the conversation. Only room owners () may remove users from chat rooms.", - "chat.confirm-chat-with-dnd-user": "Este usuário definiu seu estado como DnD(Do not disturb─Não perturbe). Você ainda assim quer conversar com ele?", + "chat.manage-room": "Administrar Salas de Conversa", + "chat.add-user-help": "Pesquise usuários aqui. Quando selecionado, o usuário será adicionado ao chat. O novo usuário não poderá ver as mensagens de chat que foram enviadas antes de ele ser adicionado à conversa. Somente os donos de salas () podem remover usuários de salas de conversa.", + "chat.confirm-chat-with-dnd-user": "Este usuário definiu seu estado como DnD(Do not disturb - Não perturbe). Você ainda assim quer conversar com ele?", "chat.rename-room": "Renomear sala", - "chat.rename-placeholder": "Entre com o nome da sala", + "chat.rename-placeholder": "Digite o nome da sala aqui", "chat.rename-help": "O nome informado será visto por todos os participantes desta sala", "chat.leave": "Sair da conversa", "chat.leave-prompt": "Tem certeza que deseja sair da conversa?", - "chat.leave-help": "Ao sair desta conversa você não recebera mais informações sobre o mesmo. Se você for adicionado novamente no futuro, você não poderá visualizar o histórico da conversa antes de sua re-entrada.", + "chat.leave-help": "Ao sair desta conversa você não receberá mais informações à respeito desta. Se você for adicionado novamente no futuro, você não poderá visualizar o histórico da conversa antes de sua re-entrada.", "chat.in-room": "Nesta sala", "chat.kick": "Expulsar", - "chat.show-ip": "Show IP", - "chat.owner": "Room Owner", + "chat.show-ip": "Mostrar IP", + "chat.owner": "Dono da Sala", "composer.compose": "Compor", "composer.show_preview": "Exibir Pré-visualização", "composer.hide_preview": "Esconder Pré-visualização", @@ -47,7 +47,7 @@ "composer.formatting.italic": "Itálico", "composer.formatting.list": "Lista", "composer.formatting.strikethrough": "Riscado", - "composer.formatting.code": "Code", + "composer.formatting.code": "Código", "composer.formatting.link": "Link", "composer.formatting.picture": "Imagem", "composer.upload-picture": "Fazer upload de Imagem", diff --git a/public/language/pt-BR/notifications.json b/public/language/pt-BR/notifications.json index 9685b6656f..fa3a8a4912 100644 --- a/public/language/pt-BR/notifications.json +++ b/public/language/pt-BR/notifications.json @@ -8,16 +8,16 @@ "outgoing_link_message": "Você está saindo de %1", "continue_to": "Continuar para %1", "return_to": "Voltar para %1", - "new_notification": "You have a new notification", + "new_notification": "Você tem uma nova notificação", "you_have_unread_notifications": "Você possui notificações não lidas.", "all": "Tudo", "topics": "Tópicos", "replies": "Respostas", "chat": "Conversas", "follows": "Seguindo", - "upvote": "Cimavotos", + "upvote": "Votos positivos", "new-flags": "Novas Sinalizações", - "my-flags": "Sinalizações designadas à mim", + "my-flags": "Sinalizações designadas a mim", "bans": "Banimentos", "new_message_from": "Nova mensagem de %1", "upvoted_your_post_in": "%1 deu voto positivo para seu post em %2.", @@ -40,7 +40,7 @@ "user_started_following_you_multiple": "%1 e %2 outros começaram a lhe acompanhar.", "new_register": "%1 lhe enviou um pedido de cadastro.", "new_register_multiple": "Há %1 pedidos de registro aguardando revisão.", - "flag_assigned_to_you": "A Sinalização %1 foi desiganada para você", + "flag_assigned_to_you": "A Sinalização %1 foi atribuída a você", "post_awaiting_review": "Post aguardando revisão", "email-confirmed": "Email Confirmado", "email-confirmed-message": "Obrigado por validar o seu email. Agora sua conta está plenamente ativada.", @@ -48,16 +48,16 @@ "email-confirm-sent": "Email de confirmação enviado.", "none": "Nenhum", "notification_only": "Apenas Notificações", - "email_only": "Apenas Email", - "notification_and_email": "Notificações e Email", + "email_only": "Apenas E-mail", + "notification_and_email": "Notificações e E-mail", "notificationType_upvote": "Quando alguém dá um voto positivo em seu post", "notificationType_new-topic": "Quando alguém que você segue posta um tópico", - "notificationType_new-reply": "Quando uma nova resposta é postada em um tópico que você está observando", + "notificationType_new-reply": "Quando uma nova resposta é postada em um tópico que você está acompanhando", "notificationType_follow": "Quando alguém começar a seguir você", "notificationType_new-chat": "Quando você receber uma mensagem de chat", "notificationType_group-invite": "Quando você receber um convite para um grupo", - "notificationType_group-request-membership": "When someone requests to join a group you own", - "notificationType_new-register": "Quando alguém for adicionado a fila de registro", + "notificationType_group-request-membership": "Quando alguém pede para participar de um grupo que você é dono", + "notificationType_new-register": "Quando alguém for adicionado à fila de registro", "notificationType_post-queue": "Quando um novo post entrar na fila", "notificationType_new-post-flag": "Quando um post for marcado", "notificationType_new-user-flag": "Quando um usuário for marcado" diff --git a/public/language/pt-BR/pages.json b/public/language/pt-BR/pages.json index 61bd93a1ee..37d89051ab 100644 --- a/public/language/pt-BR/pages.json +++ b/public/language/pt-BR/pages.json @@ -6,10 +6,10 @@ "popular-month": "Tópicos populares deste mês", "popular-alltime": "Tópicos populares de todos os tempos", "recent": "Tópicos Recentes", - "top-day": "Top voted topics today", - "top-week": "Top voted topics this week", - "top-month": "Top voted topics this month", - "top-alltime": "Top Voted Topics", + "top-day": "Tópicos mais votados de hoje", + "top-week": "Tópicos mais votados nesta semana", + "top-month": "Tópicos mais votados neste mês", + "top-alltime": "Tópicos mais votados", "moderator-tools": "Ferramentas de Moderação", "flagged-content": "Conteúdo Sinalizado", "ip-blacklist": "Lista negra de IPs", @@ -25,7 +25,7 @@ "tags": "Tags", "tag": "Tópicos com a tag "%1"", "register": "Registrar uma conta", - "registration-complete": "Registro completado", + "registration-complete": "Registro completo", "login": "Entrar na sua conta", "reset": "Redefinir a senha da sua conta", "categories": "Categorias", @@ -49,14 +49,14 @@ "account/bookmarks": "Posts Favoritos de %1's", "account/settings": "Configurações de Usuário", "account/watched": "Tópicos assistidos por %1", - "account/ignored": "Topics ignored by %1", + "account/ignored": "Tópicos ignorados por %1", "account/upvoted": "Posts votados positivamente por %1", "account/downvoted": "Posts votados negativamente por %1", "account/best": "Melhores posts de %1", "account/blocks": "Usuários bloqueados para %1", - "account/uploads": "Uploads by %1", - "account/sessions": "Login Sessions", - "confirm": "Email Confirmado", + "account/uploads": "Uploads feitos por %1", + "account/sessions": "Sessões de Login", + "confirm": "E-mail Confirmado", "maintenance.text": "%1 está atualmente sob manutenção. Por favor retorne em outro momento.", "maintenance.messageIntro": "Adicionalmente, o administrador deixou esta mensagem:", "throttled.text": "%1 está atualmente indisponível devido a excesso de contingente. Por favor retorne em outro momento." diff --git a/public/language/pt-BR/register.json b/public/language/pt-BR/register.json index 118fdf1e64..4be5d20838 100644 --- a/public/language/pt-BR/register.json +++ b/public/language/pt-BR/register.json @@ -18,9 +18,9 @@ "agree_to_terms_of_use": "Eu concordo com os Termos de Uso", "terms_of_use_error": "Você deve concordar com os Termos de Uso", "registration-added-to-queue": "O seu cadastro foi adicionado à fila de aprovação. Você receberá um email quando ele for aceito por um administrador.", - "interstitial.intro": "Nós pedimos alguma informação adicional antes que você possa criar a sua conta.", - "interstitial.errors-found": "Nós não pudemos completar o seu cadastro:", - "gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.", - "gdpr_agree_email": "I consent to receive digest and notification emails from this website.", - "gdpr_consent_denied": "You must give consent to this site to collect/process your information, and to send you emails." + "interstitial.intro": "Precisamos de algumas informações adicionais antes de podermos criar sua conta.", + "interstitial.errors-found": "Não foi possível concluir o seu cadastro:", + "gdpr_agree_data": "Eu concordo com a coleta e o processamento de minhas informações pessoais neste site.", + "gdpr_agree_email": "Eu concordo em receber e-mails de resumo e notificação deste site.", + "gdpr_consent_denied": "Você deve autorizar não só que este site colete e processe suas informações, como também de permitir que este envie e-mails para você." } \ No newline at end of file diff --git a/public/language/pt-BR/reset_password.json b/public/language/pt-BR/reset_password.json index 60178906a0..76c2356a13 100644 --- a/public/language/pt-BR/reset_password.json +++ b/public/language/pt-BR/reset_password.json @@ -9,7 +9,7 @@ "repeat_password": "Confirmar Senha", "enter_email": "Por favor digite seu endereço de email e nós iremos lhe enviar em email com instruções de como reconfigurar a sua conta.", "enter_email_address": "Digite seu Email", - "password_reset_sent": "A password reset email has been sent to the specified address. Please note that only one email will be sent per minute.", + "password_reset_sent": "Um email de redefinição de senha foi enviado para o endereço especificado. Por favor, note que apenas um e-mail será enviado por minuto.", "invalid_email": "Email Inválido / Email não existe!", "password_too_short": "A senha entrada é muito curta, por favor escolha uma senha diferente.", "passwords_do_not_match": "As duas senhas que você digitou não combinam.", diff --git a/public/language/pt-BR/search.json b/public/language/pt-BR/search.json index e19a8ed51a..c4cc5f9b68 100644 --- a/public/language/pt-BR/search.json +++ b/public/language/pt-BR/search.json @@ -5,9 +5,9 @@ "in": "Em", "titles": "Títulos", "titles-posts": "Títulos e Posts", - "match-words": "Match words", - "all": "All", - "any": "Any", + "match-words": "Palavras correspondentes", + "all": "Todos", + "any": "Qualquer", "posted-by": "Postado por", "in-categories": "Nas Categorias", "search-child-categories": "Pesquisar subcategorias", @@ -31,7 +31,7 @@ "sort-by": "Ordenar por", "last-reply-time": "Data da última resposta", "topic-title": "Título do tópico", - "topic-votes": "Topic votes", + "topic-votes": "Votos do Tópico", "number-of-replies": "Número de respostas", "number-of-views": "Número de visualizações", "topic-start-date": "Data do início do tópico", @@ -44,5 +44,5 @@ "search-preferences-saved": "Preferências de pesquisa salvas", "search-preferences-cleared": "Preferências de pesquisa limpas", "show-results-as": "Mostrar resultados como", - "see-more-results": "See more results (%1)" + "see-more-results": "Veja mais resultados (%1)" } \ No newline at end of file diff --git a/public/language/pt-BR/success.json b/public/language/pt-BR/success.json index a482ec700b..d842a2abd2 100644 --- a/public/language/pt-BR/success.json +++ b/public/language/pt-BR/success.json @@ -1,7 +1,7 @@ { "success": "Sucesso", "topic-post": "Você postou com sucesso.", - "post-queued": "Seu post foi enfieirado para aprovação.", + "post-queued": "A sua postagem está na fila para aprovação.", "authentication-successful": "Autenticação Bem-sucedida", "settings-saved": "Configurações salvas!" } \ No newline at end of file diff --git a/public/language/pt-BR/topic.json b/public/language/pt-BR/topic.json index 51ce9b3566..0997cccb32 100644 --- a/public/language/pt-BR/topic.json +++ b/public/language/pt-BR/topic.json @@ -28,17 +28,17 @@ "share": "Compartilhar", "tools": "Ferramentas", "locked": "Trancado", - "pinned": "Afixado", + "pinned": "Fixado", "moved": "Movido", - "copy-ip": "Copy IP", - "ban-ip": "Ban IP", - "view-history": "Edit History", + "copy-ip": "Copiar IP", + "ban-ip": "Banir IP", + "view-history": "Histórico de Edição", "bookmark_instructions": "Clique aqui para retornar ao último post lido neste tópico.", "flag_title": "Sinalizar este post para moderação", - "merged_message": "This topic has been merged into %2", + "merged_message": "Este tópico foi mesclado em %2", "deleted_message": "Este tópico foi deletado. Apenas usuários com privilégios de moderação de tópico podem vê-lo.", "following_topic.message": "Agora você receberá notificações quando alguém responder este tópico.", - "not_following_topic.message": "Você verá este tópico na lista de tópicos não-lidos, mas você não receberá notificações quendo alguém posta no tópico.", + "not_following_topic.message": "Você verá este tópico na lista de tópicos não-lidos, mas você não receberá notificações quando alguém postar no tópico.", "ignoring_topic.message": "Você não verá mais este tópico na lista de tópicos não lidos. Você será notificado quando você for mencionado ou sua postagem for votada positivamente.", "login_to_subscribe": "Por favor se cadastre ou entre para assinar à este tópico.", "markAsUnreadForAll.success": "Tópico marcado como não lido para todos.", @@ -49,8 +49,8 @@ "watch.title": "Seja notificado sobre novas respostas neste tópico", "unwatch.title": "Parar de acompanhar este tópico", "share_this_post": "Compartilhar este Post", - "watching": "Seguindo", - "not-watching": "Não Seguindo", + "watching": "Acompanhando", + "not-watching": "Não acompanhando", "ignoring": "Ignorando", "watching.description": "Me notificar de novas respostas.
Mostrar tópico em não-lidos.", "not-watching.description": "Não me notificar de novas respostas.
Mostrar tópico em não-lido se a categoria não estiver sendo ignorada.", @@ -62,7 +62,7 @@ "thread_tools.lock": "Trancar Tópico", "thread_tools.unlock": "Destrancar Tópico", "thread_tools.move": "Mover Tópico", - "thread_tools.move-posts": "Move Posts", + "thread_tools.move-posts": "Mover Posts", "thread_tools.move_all": "Mover Tudo", "thread_tools.select_category": "Escolha a Categoria", "thread_tools.fork": "Ramificar Tópico", @@ -125,9 +125,9 @@ "stale.create": "Criar um novo tópico", "stale.reply_anyway": "Responder à este tópico assim mesmo", "link_back": "Re: [%1](%2)", - "diffs.title": "Post Edit History", - "diffs.description": "This post has %1 revisions. Click one of the revisions below to see the post content at that point in time.", - "diffs.no-revisions-description": "This post has %1 revisions.", + "diffs.title": "Histórico de Edição do Post", + "diffs.description": "Este post foi revisado %1 vezes. Clique em uma das revisões abaixo para ver o conteúdo da postagem naquele momento.", + "diffs.no-revisions-description": "Este post foi revisado %1 vezes.", "diffs.current-revision": "revisão atual", "diffs.original-revision": "revisão original" } \ No newline at end of file diff --git a/public/language/pt-BR/unread.json b/public/language/pt-BR/unread.json index 5f75048653..a0a998c319 100644 --- a/public/language/pt-BR/unread.json +++ b/public/language/pt-BR/unread.json @@ -10,6 +10,6 @@ "all-topics": "Todos os Tópicos", "new-topics": "Novos Tópicos", "watched-topics": "Topicos Acompanhados", - "unreplied-topics": "Unreplied Topics", - "multiple-categories-selected": "Multiple Selected" + "unreplied-topics": "Tópicos Sem Resposta", + "multiple-categories-selected": "Vários Selecionados" } \ No newline at end of file diff --git a/public/language/pt-BR/uploads.json b/public/language/pt-BR/uploads.json index cded001ea9..ee71e0fa11 100644 --- a/public/language/pt-BR/uploads.json +++ b/public/language/pt-BR/uploads.json @@ -4,6 +4,6 @@ "upload-success": "Upload realizado com sucesso!", "maximum-file-size": "No máximo %1 kb", "no-uploads-found": "Uploads não encontrados", - "public-uploads-info": "Uploads publicos, todos os visitantes poderão vê-los", - "private-uploads-info": "Uploads privados, somente usuários logados poderão vê-los" + "public-uploads-info": "Uploads públicos, todos os visitantes poderão vê-los.", + "private-uploads-info": "Uploads privados, somente usuários logados poderão vê-los." } \ No newline at end of file diff --git a/public/language/pt-BR/user.json b/public/language/pt-BR/user.json index 476b3f3503..41313ff730 100644 --- a/public/language/pt-BR/user.json +++ b/public/language/pt-BR/user.json @@ -7,12 +7,12 @@ "postcount": "Número de Posts", "email": "Email", "confirm_email": "Confirmar Email", - "account_info": "Informação da Conta", + "account_info": "Informações da Conta", "ban_account": "Banir Conta", "ban_account_confirm": "Você realmente quer banir esse usuario?", "unban_account": "Desbanir Conta", "delete_account": "Deletar Conta", - "delete_account_confirm": "Tem certeza que deseja deletar a sua conta?
Esta ação é irreversível e você não poderá recuperar nenhuma informação

Insira sua senha para confirmar que você deseja destruir essa conta.", + "delete_account_confirm": "Tem certeza de que deseja deletar a sua conta?
Esta ação é irreversível e você não poderá recuperar nenhuma informação

Insira sua senha para confirmar que você deseja excluir essa conta.", "delete_this_account_confirm": "Você tem certeza que deseja excluir essa conta?
Essa ação é irreversível e você não poderá recuperar quaisquer dados

", "account-deleted": "Conta excluída", "fullname": "Nome Completo", @@ -28,7 +28,7 @@ "watched_categories": "Categorias acompanhadas", "watched": "Acompanhado", "ignored": "Ignorado", - "default-category-watch-state": "Default category watch state", + "default-category-watch-state": "Estado padrão em relação a acompanhar as categorias", "followers": "Seguidores", "following": "Seguindo", "blocks": "Bloqueados", @@ -67,7 +67,7 @@ "password": "Senha", "username_taken_workaround": "O nome de usuário que você escolheu já existia, então nós o alteramos um pouquinho. Agora você é conhecido como %1", "password_same_as_username": "A sua senha é igual ao seu nome de usuário, por favor escolha outra senha.", - "password_same_as_email": "Tua senha é a mesma que o teu email, por favor escolha outra senha.", + "password_same_as_email": "A sua senha é igual ao seu e-mail. Por favor, escolha outra senha.", "weak_password": "Senha fraca.", "upload_picture": "Carregar Foto", "upload_a_picture": "Carregue uma Foto", @@ -92,8 +92,8 @@ "has_no_topics": "Esse usuário ainda não postou quaisquer tópicos.", "has_no_watched_topics": "Esse usuário ainda não acompanhou quaisquer tópicos.", "has_no_ignored_topics": "O usuário ainda não ignorou nenhum tópico.", - "has_no_upvoted_posts": "Este usuário ainda não votou quaisquer posts positivamente.", - "has_no_downvoted_posts": "Este usuário ainda não votou quaisquer posts negativamente.", + "has_no_upvoted_posts": "Este usuário ainda não votou positivamente em quaisquer posts.", + "has_no_downvoted_posts": "Este usuário ainda não votou negativamente em quaisquer posts.", "has_no_voted_posts": "Este usuário não tem posts votados", "has_no_blocks": "Você não bloqueou nenhum usuário.", "email_hidden": "Email Escondido", @@ -102,41 +102,41 @@ "topics_per_page": "Tópicos por Página", "posts_per_page": "Posts por Página", "max_items_per_page": "No máximo 1%", - "acp_language": "Língua da Página de Administrador", + "acp_language": "Idioma da Página de Administrador", "notification_sounds": "Tocar um som quando você receber uma notificação.", "notifications_and_sounds": "Notificações & Sons", - "incoming-message-sound": "Som de recebimento de mensagem", - "outgoing-message-sound": "Som de envio de mensagem", + "incoming-message-sound": "Som ao receber mensagem", + "outgoing-message-sound": "Som ao enviar mensagem", "notification-sound": "Som de notificação", "no-sound": "Sem som", "upvote-notif-freq": "Frequência de Notificação de Votos Positivos", "upvote-notif-freq.all": "Todos os Votos Positivos", - "upvote-notif-freq.first": "First Per Post", + "upvote-notif-freq.first": "Primeiro Por Post", "upvote-notif-freq.everyTen": "A Cada 10 Votos Positivos", - "upvote-notif-freq.threshold": "On 1, 5, 10, 25, 50, 100, 150, 200...", + "upvote-notif-freq.threshold": "A cada 1, 5, 10, 25, 50, 100, 150, 200...", "upvote-notif-freq.logarithmic": "A cada 10, 100, 1000...", - "upvote-notif-freq.disabled": "Desabilitado", + "upvote-notif-freq.disabled": "Desativado", "browsing": "Configurações de Navegação", "open_links_in_new_tab": "Abrir links externos em nova aba", "enable_topic_searching": "Habilitar Pesquisa dentro de Tópico", "topic_search_help": "Se habilitado, a pesquisa dentro do tópico irá substituir a pesquisa padrão do seu navegador. Assim, você poderá pesquisar pelo tópico inteiro, e não apenas pelo o que está sendo exibido na tela.", "scroll_to_my_post": "Após postar uma réplica, mostre o novo post", - "follow_topics_you_reply_to": "Assistir os tópicos que você responde", - "follow_topics_you_create": "Assistir aos tópicos que você cria", + "follow_topics_you_reply_to": "Acompanhar os tópicos que você responde", + "follow_topics_you_create": "Acompanhar os tópicos que você cria", "grouptitle": "Título do Grupo", "no-group-title": "Sem título de grupo", "select-skin": "Escolha uma Skin", "select-homepage": "Selecione uma página inicial", "homepage": "Página inicial", - "homepage_description": "Selecione uma página para usar como página inicial do fórum ou 'None' para usar a página inicial padrão.", - "custom_route": "Rota de página inicial personalizada", + "homepage_description": "Selecione uma página para usar como página inicial do fórum ou 'Nenhum' para usar a página inicial padrão.", + "custom_route": "Rota da página inicial personalizada", "custom_route_help": "Entre com o nome da rota aqui, sem nenhuma barra anterior (por exemplo, \"recente\", ou \"popular\")", "sso.title": "Logar por outros Serviços", "sso.associated": "Associado com", "sso.not-associated": "Clique aqui para associar com", "sso.dissociate": "Desassociar", "sso.dissociate-confirm-title": "Confirmar Desassociação", - "sso.dissociate-confirm": "Tem certeza que deseja desassociar a sua conta de %1?", + "sso.dissociate-confirm": "Tem certeza de que deseja desassociar a sua conta de %1?", "info.latest-flags": "Últimas Sinalizações", "info.no-flags": "Nenhum Post Sinalizado Encontrado", "info.ban-history": "Histórico de Banimentos Recentes", @@ -169,6 +169,6 @@ "consent.right_to_data_portability": "Você tem o Direito de Portabilidade de Dados", "consent.right_to_data_portability_description": "Você pode solicitar de nós uma exportação legível por máquina de quaisquer dados coletados sobre você e sua conta. Você pode fazer isso clicando no botão apropriado abaixo.", "consent.export_profile": "Exportar Perfil (.csv)", - "consent.export_uploads": "Export Uploaded Content (.zip)", + "consent.export_uploads": "Exportar Arquivos Enviados (.zip)", "consent.export_posts": "Exportar Posts (.csv)" } \ No newline at end of file diff --git a/public/language/pt-BR/users.json b/public/language/pt-BR/users.json index 30647dffc9..b7ff2950b4 100644 --- a/public/language/pt-BR/users.json +++ b/public/language/pt-BR/users.json @@ -10,7 +10,7 @@ "filter-by": "Filtrar Por", "online-only": "Apenas Online", "invite": "Convidar", - "prompt-email": "Emails:", + "prompt-email": "E-mails:", "invitation-email-sent": "Um email de convite foi enviado para %1", "user_list": "Lista de Usuários", "recent_topics": "Tópicos Recentes", From 10a47a2912f6376133b8b07bcbcb0476c2435693 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 4 May 2019 19:03:19 +0000 Subject: [PATCH 54/83] fix(deps): update dependency postcss to v7.0.16 --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index ce44d8bc94..f7ce4ed754 100644 --- a/install/package.json +++ b/install/package.json @@ -99,7 +99,7 @@ "passport-local": "1.0.0", "pg": "^7.4.0", "pg-cursor": "^2.0.0", - "postcss": "7.0.14", + "postcss": "7.0.16", "postcss-clean": "1.1.0", "promise-polyfill": "^8.0.0", "prompt": "^1.0.0", From 4e39caf8ae75857192cf0906721520ea79c41cfb Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 3 May 2019 07:41:02 +0000 Subject: [PATCH 55/83] chore(deps): update dependency lint-staged to v8.1.6 --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index f7ce4ed754..7d3fa099d6 100644 --- a/install/package.json +++ b/install/package.json @@ -142,7 +142,7 @@ "grunt-contrib-watch": "1.1.0", "husky": "2.1.0", "jsdom": "15.0.0", - "lint-staged": "8.1.5", + "lint-staged": "8.1.6", "mocha": "6.1.2", "mocha-lcov-reporter": "1.3.0", "nyc": "13.3.0", From 8a018a5f81c7f541c8a1cd417878da6599f190be Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 2 May 2019 03:36:05 +0000 Subject: [PATCH 56/83] chore(deps): update dependency husky to v2.2.0 --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 7d3fa099d6..e32d2c5bcc 100644 --- a/install/package.json +++ b/install/package.json @@ -140,7 +140,7 @@ "eslint-plugin-import": "2.17.2", "grunt": "1.0.4", "grunt-contrib-watch": "1.1.0", - "husky": "2.1.0", + "husky": "2.2.0", "jsdom": "15.0.0", "lint-staged": "8.1.6", "mocha": "6.1.2", From 9210baf5180f1891e16f6393b8079fa2b414c1b0 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 2 May 2019 12:57:29 +0000 Subject: [PATCH 57/83] chore(deps): update dependency nyc to v14 --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index e32d2c5bcc..2533aaf389 100644 --- a/install/package.json +++ b/install/package.json @@ -145,7 +145,7 @@ "lint-staged": "8.1.6", "mocha": "6.1.2", "mocha-lcov-reporter": "1.3.0", - "nyc": "13.3.0", + "nyc": "14.1.0", "smtp-server": "3.5.0" }, "bugs": { From 692e2ead0b899a37996db13cef8f9d8a142f98a7 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 30 Mar 2019 04:22:03 +0000 Subject: [PATCH 58/83] chore(deps): update dependency eslint to v5.16.0 --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 2533aaf389..0459ce9b4e 100644 --- a/install/package.json +++ b/install/package.json @@ -135,7 +135,7 @@ "@commitlint/cli": "7.5.2", "@commitlint/config-angular": "7.5.0", "coveralls": "3.0.3", - "eslint": "5.15.3", + "eslint": "5.16.0", "eslint-config-airbnb-base": "13.1.0", "eslint-plugin-import": "2.17.2", "grunt": "1.0.4", From 96cb29aab0cbd79234350723391a5007121e3c28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Wed, 8 May 2019 11:08:23 -0400 Subject: [PATCH 59/83] fix: #7461 --- src/views/emails/notification.tpl | 2 +- src/views/emails/partials/header.tpl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/views/emails/notification.tpl b/src/views/emails/notification.tpl index 60579d48cd..489446e468 100644 --- a/src/views/emails/notification.tpl +++ b/src/views/emails/notification.tpl @@ -19,7 +19,7 @@ -

+

{body}

diff --git a/src/views/emails/partials/header.tpl b/src/views/emails/partials/header.tpl index 3f689deb3b..0466c83cfe 100644 --- a/src/views/emails/partials/header.tpl +++ b/src/views/emails/partials/header.tpl @@ -139,7 +139,7 @@ } - [role="presentation"] img { + .notification-body img { max-width: 100%; } From 59bdc970e62ee373ee1f720caeae7bf4f7cd92bd Mon Sep 17 00:00:00 2001 From: Andrew Rodrigues Date: Wed, 8 May 2019 14:42:18 -0400 Subject: [PATCH 60/83] chore: bump themes --- install/package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/install/package.json b/install/package.json index 0459ce9b4e..0916c1e6ea 100644 --- a/install/package.json +++ b/install/package.json @@ -90,9 +90,9 @@ "nodebb-plugin-spam-be-gone": "0.6.1", "nodebb-rewards-essentials": "0.0.13", "nodebb-theme-lavender": "5.0.9", - "nodebb-theme-persona": "9.1.33", + "nodebb-theme-persona": "9.1.34", "nodebb-theme-slick": "1.2.23", - "nodebb-theme-vanilla": "10.1.28", + "nodebb-theme-vanilla": "10.1.29", "nodebb-widget-essentials": "4.0.17", "nodemailer": "^6.0.0", "passport": "^0.4.0", @@ -171,4 +171,4 @@ "url": "https://github.com/barisusakli" } ] -} \ No newline at end of file +} From 31f347daad8543da74536b77253d695bb9a8f481 Mon Sep 17 00:00:00 2001 From: "Misty (Bot)" Date: Thu, 9 May 2019 09:26:36 +0000 Subject: [PATCH 61/83] Latest translations and fallbacks --- public/language/pt-BR/admin/admin.json | 2 +- public/language/pt-BR/admin/settings/user.json | 4 ++-- public/language/pt-BR/user.json | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/public/language/pt-BR/admin/admin.json b/public/language/pt-BR/admin/admin.json index 78edc52495..899a520a07 100644 --- a/public/language/pt-BR/admin/admin.json +++ b/public/language/pt-BR/admin/admin.json @@ -1,5 +1,5 @@ { - "alert.confirm-rebuild-and-restart": "Tem certeza de que deseja reconstruir e reiniciar o NodeBB?", + "alert.confirm-rebuild-and-restart": "Tem certeza de que deseja recompilar e reiniciar o NodeBB?", "alert.confirm-restart": "Tem certeza de que você deseja reiniciar o NodeBB?", "acp-title": "%1 | Painel de Controle Administrativo do NodeBB", diff --git a/public/language/pt-BR/admin/settings/user.json b/public/language/pt-BR/admin/settings/user.json index d572ecda63..389aef0aa6 100644 --- a/public/language/pt-BR/admin/settings/user.json +++ b/public/language/pt-BR/admin/settings/user.json @@ -2,7 +2,7 @@ "authentication": "Autenticação", "require-email-confirmation": "Exigir Confirmação de E-mail", "email-confirm-interval": "O usuário não pode reenviar um e-mail de confirmação até", - "email-confirm-email2": "minutos se passaram", + "email-confirm-email2": "minutos decorridos", "allow-login-with": "Permitir login com", "allow-login-with.username-email": "Nome de Usuário ou E-mail", "allow-login-with.username": "Apenas Nome de Usuário", @@ -70,7 +70,7 @@ "follow-created-topics": "Seguir tópicos que você criar", "follow-replied-topics": "Seguir os tópicos que você responder", "default-notification-settings": "Configurações Padrão de Notificações", - "categoryWatchState": "Estado padrão em relação a acompanhar as categorias", + "categoryWatchState": "Configuração padrão em relação a acompanhar as novidades das categorias", "categoryWatchState.watching": "Acompanhando", "categoryWatchState.notwatching": "Não Acompanhar", "categoryWatchState.ignoring": "Ignorar" diff --git a/public/language/pt-BR/user.json b/public/language/pt-BR/user.json index 41313ff730..1413f67c57 100644 --- a/public/language/pt-BR/user.json +++ b/public/language/pt-BR/user.json @@ -28,7 +28,7 @@ "watched_categories": "Categorias acompanhadas", "watched": "Acompanhado", "ignored": "Ignorado", - "default-category-watch-state": "Estado padrão em relação a acompanhar as categorias", + "default-category-watch-state": "Configuração padrão em relação a acompanhar as novidades das categorias", "followers": "Seguidores", "following": "Seguindo", "blocks": "Bloqueados", @@ -120,7 +120,7 @@ "open_links_in_new_tab": "Abrir links externos em nova aba", "enable_topic_searching": "Habilitar Pesquisa dentro de Tópico", "topic_search_help": "Se habilitado, a pesquisa dentro do tópico irá substituir a pesquisa padrão do seu navegador. Assim, você poderá pesquisar pelo tópico inteiro, e não apenas pelo o que está sendo exibido na tela.", - "scroll_to_my_post": "Após postar uma réplica, mostre o novo post", + "scroll_to_my_post": "Ao responder um tópico, role a página até a minha postagem", "follow_topics_you_reply_to": "Acompanhar os tópicos que você responde", "follow_topics_you_create": "Acompanhar os tópicos que você cria", "grouptitle": "Título do Grupo", From c9ca72d0f3c96b6f7af1a1655482ac9e5bdf0924 Mon Sep 17 00:00:00 2001 From: Baris Usakli Date: Thu, 9 May 2019 12:00:46 -0400 Subject: [PATCH 62/83] fix: #7582 --- src/image.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/image.js b/src/image.js index b1c703ef5b..af61621c23 100644 --- a/src/image.js +++ b/src/image.js @@ -92,6 +92,9 @@ image.size = function (path, callback) { }; image.stripEXIF = function (path, callback) { + if (path.endsWith('.gif')) { + return setImmediate(callback); + } async.waterfall([ function (next) { fs.readFile(path, next); From cf5aeace6b61e2a4d0686d278c36758ecd86b7b3 Mon Sep 17 00:00:00 2001 From: Baris Usakli Date: Thu, 9 May 2019 14:49:38 -0400 Subject: [PATCH 63/83] feat: closes #7583 --- install/data/defaults.json | 1 + public/language/en-GB/admin/settings/advanced.json | 1 + src/middleware/maintenance.js | 2 +- src/views/admin/settings/advanced.tpl | 4 ++++ 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/install/data/defaults.json b/install/data/defaults.json index c99c67b42d..b2bcbec5af 100644 --- a/install/data/defaults.json +++ b/install/data/defaults.json @@ -95,6 +95,7 @@ "feeds:disableSitemap": 0, "sitemapTopics": 500, "maintenanceMode": 0, + "maintenanceModeStatus": 503, "votesArePublic": 0, "maximumInvites": 0, "username:disableEdit": 0, diff --git a/public/language/en-GB/admin/settings/advanced.json b/public/language/en-GB/admin/settings/advanced.json index f989898d05..4bd6b2aa60 100644 --- a/public/language/en-GB/admin/settings/advanced.json +++ b/public/language/en-GB/admin/settings/advanced.json @@ -1,6 +1,7 @@ { "maintenance-mode": "Maintenance Mode", "maintenance-mode.help": "When the forum is in maintenance mode, all requests will be redirected to a static holding page. Administrators are exempt from this redirection, and are able to access the site normally.", + "maintenance-mode.status": "Maintenance Mode Status Code", "maintenance-mode.message": "Maintenance Message", "headers": "Headers", "headers.allow-from": "Set ALLOW-FROM to Place NodeBB in an iFrame", diff --git a/src/middleware/maintenance.js b/src/middleware/maintenance.js index 4297c88494..e98a75b9ef 100644 --- a/src/middleware/maintenance.js +++ b/src/middleware/maintenance.js @@ -24,7 +24,7 @@ module.exports = function (middleware) { if (isAdmin) { return callback(); } - res.status(503); + res.status(meta.config.maintenanceModeStatus); data = { site_title: meta.config.title || 'NodeBB', message: meta.config.maintenanceModeMessage, diff --git a/src/views/admin/settings/advanced.tpl b/src/views/admin/settings/advanced.tpl index 4aec0e51fa..79af8dde7f 100644 --- a/src/views/admin/settings/advanced.tpl +++ b/src/views/admin/settings/advanced.tpl @@ -13,6 +13,10 @@

[[admin/settings/advanced:maintenance-mode.help]]

+
+ + +
From e114b16d7af6d0cef4f547ce0bffa0c9644f6077 Mon Sep 17 00:00:00 2001 From: Andrew Rodrigues Date: Thu, 9 May 2019 15:50:51 -0400 Subject: [PATCH 64/83] fix: if editing password is disabled in ACP, prevent direct access via route/socket (related: #7576) --- src/controllers/accounts/edit.js | 4 ++-- src/user/profile.js | 15 +++++++++++---- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/controllers/accounts/edit.js b/src/controllers/accounts/edit.js index ada68d258c..5d600d7e90 100644 --- a/src/controllers/accounts/edit.js +++ b/src/controllers/accounts/edit.js @@ -98,8 +98,8 @@ function renderRoute(name, req, res, next) { return next(); } - if ((name === 'username' && userData['username:disableEdit']) || (name === 'email' && userData['email:disableEdit'])) { - return next(); + if (meta.config[name + ':disableEdit'] && !userData.isAdmin) { + return helpers.notAllowed(req, res); } if (name === 'password') { diff --git a/src/user/profile.js b/src/user/profile.js index f2ba3466f5..cd42beb472 100644 --- a/src/user/profile.js +++ b/src/user/profile.js @@ -319,11 +319,18 @@ module.exports = function (User) { User.isPasswordValid(data.newPassword, next); }, function (next) { - if (parseInt(uid, 10) !== parseInt(data.uid, 10)) { - User.isAdministrator(uid, next); - } else { - User.isPasswordCorrect(uid, data.currentPassword, data.ip, next); + User.isAdministrator(uid, next); + }, + function (isAdmin, next) { + if (meta.config['password:disableEdit'] && !isAdmin) { + return next(new Error('[[error:no-privileges]]')); } + + if (isAdmin && parseInt(uid, 10) !== parseInt(data.uid, 10)) { + return next(null, true); + } + + User.isPasswordCorrect(uid, data.currentPassword, data.ip, next); }, function (isAdminOrPasswordMatch, next) { if (!isAdminOrPasswordMatch) { From 50260e137ac43e641abcc4505a972f9d756a003a Mon Sep 17 00:00:00 2001 From: Andrew Rodrigues Date: Thu, 9 May 2019 15:51:36 -0400 Subject: [PATCH 65/83] fix: #7576 "Disable password changes" can be sidestepped --- src/controllers/index.js | 5 +++++ src/socket.io/user.js | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/src/controllers/index.js b/src/controllers/index.js index 3e54e6f98d..30fe85ce04 100644 --- a/src/controllers/index.js +++ b/src/controllers/index.js @@ -40,6 +40,10 @@ Controllers.errors = require('./errors'); Controllers.composer = require('./composer'); Controllers.reset = function (req, res, next) { + if (meta.config['password:disableEdit']) { + return helpers.notAllowed(req, res); + } + res.locals.metaTags = { ...res.locals.metaTags, name: 'robots', @@ -120,6 +124,7 @@ Controllers.login = function (req, res, next) { }]); data.error = req.flash('error')[0] || errorText; data.title = '[[pages:login]]'; + data.allowPasswordReset = !meta.config['password:disableEdit']; privileges.global.canGroup('local:login', 'registered-users', function (err, hasLoginPrivilege) { if (err) { diff --git a/src/socket.io/user.js b/src/socket.io/user.js index 83274f66df..b3b9ef8492 100644 --- a/src/socket.io/user.js +++ b/src/socket.io/user.js @@ -100,6 +100,10 @@ SocketUser.reset.send = function (socket, email, callback) { return callback(new Error('[[error:invalid-data]]')); } + if (meta.config['password:disableEdit']) { + return callback(new Error('[[error:no-privileges]]')); + } + user.reset.send(email, function (err) { events.log({ type: 'password-reset', From d349754d9ea6923bf20377c9bafebd66b1684647 Mon Sep 17 00:00:00 2001 From: Andrew Rodrigues Date: Thu, 9 May 2019 16:06:51 -0400 Subject: [PATCH 66/83] chore: bump themes #7576 --- install/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/package.json b/install/package.json index 0916c1e6ea..c6cab10b2f 100644 --- a/install/package.json +++ b/install/package.json @@ -90,9 +90,9 @@ "nodebb-plugin-spam-be-gone": "0.6.1", "nodebb-rewards-essentials": "0.0.13", "nodebb-theme-lavender": "5.0.9", - "nodebb-theme-persona": "9.1.34", + "nodebb-theme-persona": "9.1.35", "nodebb-theme-slick": "1.2.23", - "nodebb-theme-vanilla": "10.1.29", + "nodebb-theme-vanilla": "10.1.30", "nodebb-widget-essentials": "4.0.17", "nodemailer": "^6.0.0", "passport": "^0.4.0", From 1703233f48c0db22fe15a0cd8df74605a9812bac Mon Sep 17 00:00:00 2001 From: yossizahn Date: Fri, 10 May 2019 17:47:22 +0300 Subject: [PATCH 67/83] fix: #7586, switchTimeagoLanguage shouldn't discriminate against languages w/o shorthands --- public/src/modules/translator.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/public/src/modules/translator.js b/public/src/modules/translator.js index 8466af852d..ae286fdc25 100644 --- a/public/src/modules/translator.js +++ b/public/src/modules/translator.js @@ -610,9 +610,6 @@ delete adaptor.timeagoShort; var languageCode = utils.userLangToTimeagoCode(config.userLang); - if (!config.timeagoCodes.includes(languageCode + '-short')) { - languageCode = 'en'; - } jQuery.getScript(config.relative_path + '/assets/vendor/jquery/timeago/locales/jquery.timeago.' + languageCode + '.js').done(callback); }, From bd94fbc2b13382eb2e67e4bf4888069ebb3c6af9 Mon Sep 17 00:00:00 2001 From: Baris Usakli Date: Fri, 10 May 2019 12:41:40 -0400 Subject: [PATCH 68/83] feat: let theme know downvoting is disabled, closes https://github.com/NodeBB/NodeBB/pull/7568 dont load downvote data if downvoting is disabled --- src/socket.io/posts/votes.js | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/socket.io/posts/votes.js b/src/socket.io/posts/votes.js index 29535641ea..c357c2beca 100644 --- a/src/socket.io/posts/votes.js +++ b/src/socket.io/posts/votes.js @@ -14,7 +14,7 @@ module.exports = function (SocketPosts) { if (!data || !data.pid || !data.cid) { return callback(new Error('[[error:invalid-data]]')); } - + const showDownvotes = !meta.config['downvote:disabled']; async.waterfall([ function (next) { if (meta.config.votesArePublic) { @@ -32,6 +32,9 @@ module.exports = function (SocketPosts) { db.getSetMembers('pid:' + data.pid + ':upvote', next); }, downvoteUids: function (next) { + if (!showDownvotes) { + return setImmediate(next, null, []); + } db.getSetMembers('pid:' + data.pid + ':downvote', next); }, }, next); @@ -41,17 +44,17 @@ module.exports = function (SocketPosts) { upvoters: function (next) { user.getUsersFields(results.upvoteUids, ['username', 'userslug', 'picture'], next); }, - upvoteCount: function (next) { - next(null, results.upvoteUids.length); - }, downvoters: function (next) { user.getUsersFields(results.downvoteUids, ['username', 'userslug', 'picture'], next); }, - downvoteCount: function (next) { - next(null, results.downvoteUids.length); - }, }, next); }, + function (results, next) { + results.upvoteCount = results.upvoters.length; + results.downvoteCount = results.downvoters.length; + results.showDownvotes = showDownvotes; + next(null, results); + } ], callback); }; From 26d6d0bed12875bf045e4a648d6bc2db17406445 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Fri, 10 May 2019 12:43:37 -0400 Subject: [PATCH 69/83] fix(deps): update dependency mongodb to v3.2.4 (#7581) --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index c6cab10b2f..b05725f96d 100644 --- a/install/package.json +++ b/install/package.json @@ -75,7 +75,7 @@ "material-design-lite": "^1.3.0", "mime": "^2.2.0", "mkdirp": "^0.5.1", - "mongodb": "3.2.3", + "mongodb": "3.2.4", "morgan": "^1.9.0", "mousetrap": "^1.6.1", "mubsub-nbb": "^1.5.0", From 9047210c67c36c488e9061526e686243ce799fa0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Fri, 10 May 2019 12:43:56 -0400 Subject: [PATCH 70/83] chore(deps): update dependency nyc to v14.1.1 (#7584) --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index b05725f96d..f8fd80eb08 100644 --- a/install/package.json +++ b/install/package.json @@ -145,7 +145,7 @@ "lint-staged": "8.1.6", "mocha": "6.1.2", "mocha-lcov-reporter": "1.3.0", - "nyc": "14.1.0", + "nyc": "14.1.1", "smtp-server": "3.5.0" }, "bugs": { From bd86e58daf7c11aafbfbde27a3d44fb69b83f710 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Fri, 10 May 2019 12:45:47 -0400 Subject: [PATCH 71/83] fix(deps): update dependency nodebb-theme-persona to v9.1.36 (#7588) --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index f8fd80eb08..297b4e7324 100644 --- a/install/package.json +++ b/install/package.json @@ -90,7 +90,7 @@ "nodebb-plugin-spam-be-gone": "0.6.1", "nodebb-rewards-essentials": "0.0.13", "nodebb-theme-lavender": "5.0.9", - "nodebb-theme-persona": "9.1.35", + "nodebb-theme-persona": "9.1.36", "nodebb-theme-slick": "1.2.23", "nodebb-theme-vanilla": "10.1.30", "nodebb-widget-essentials": "4.0.17", From a9f9d19b4e9000c9863a3febb1fa7f1eb784f06c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Fri, 10 May 2019 12:45:57 -0400 Subject: [PATCH 72/83] fix(deps): update dependency nodebb-theme-vanilla to v10.1.31 (#7589) --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 297b4e7324..e78a009510 100644 --- a/install/package.json +++ b/install/package.json @@ -92,7 +92,7 @@ "nodebb-theme-lavender": "5.0.9", "nodebb-theme-persona": "9.1.36", "nodebb-theme-slick": "1.2.23", - "nodebb-theme-vanilla": "10.1.30", + "nodebb-theme-vanilla": "10.1.31", "nodebb-widget-essentials": "4.0.17", "nodemailer": "^6.0.0", "passport": "^0.4.0", From 3a7e99a503dfeec649ba65a5593dc8c1d97222fd Mon Sep 17 00:00:00 2001 From: Baris Usakli Date: Fri, 10 May 2019 12:59:04 -0400 Subject: [PATCH 73/83] fix: tests --- src/socket.io/posts/votes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/socket.io/posts/votes.js b/src/socket.io/posts/votes.js index c357c2beca..34bf8c0fbd 100644 --- a/src/socket.io/posts/votes.js +++ b/src/socket.io/posts/votes.js @@ -54,7 +54,7 @@ module.exports = function (SocketPosts) { results.downvoteCount = results.downvoters.length; results.showDownvotes = showDownvotes; next(null, results); - } + }, ], callback); }; From 4f0dc443079aa7d66915100211bfda5ab79eb684 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 10 May 2019 14:50:00 -0400 Subject: [PATCH 74/83] fix: #7590 updated chat and post edit and delete timeout labels in ACP --- public/language/en-GB/admin/settings/chat.json | 4 ++-- public/language/en-GB/admin/settings/post.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/public/language/en-GB/admin/settings/chat.json b/public/language/en-GB/admin/settings/chat.json index c538790b95..c1741d101c 100644 --- a/public/language/en-GB/admin/settings/chat.json +++ b/public/language/en-GB/admin/settings/chat.json @@ -6,6 +6,6 @@ "max-length": "Maximum length of chat messages", "max-room-size": "Maximum number of users in chat rooms", "delay": "Time between chat messages in milliseconds", - "restrictions.seconds-edit-after": "Number of seconds before users are allowed to edit chat messages after posting. (0 disabled)", - "restrictions.seconds-delete-after": "Number of seconds before users are allowed to delete chat messages after posting. (0 disabled)" + "restrictions.seconds-edit-after": "Number of seconds a chat message will remain editable. (0 disabled)", + "restrictions.seconds-delete-after": "Number of seconds a chat message will remain deletable. (0 disabled)" } \ No newline at end of file diff --git a/public/language/en-GB/admin/settings/post.json b/public/language/en-GB/admin/settings/post.json index 6594fe384b..528f02d835 100644 --- a/public/language/en-GB/admin/settings/post.json +++ b/public/language/en-GB/admin/settings/post.json @@ -17,8 +17,8 @@ "restrictions.seconds-between-new": "Seconds between posts for new users", "restrictions.rep-threshold": "Reputation threshold before these restrictions are lifted", "restrictions.seconds-defore-new": "Seconds before new user can post", - "restrictions.seconds-edit-after": "Number of seconds before users are allowed to edit posts after posting. (0 disabled)", - "restrictions.seconds-delete-after": "Number of seconds before users are allowed to delete posts after posting. (0 disabled)", + "restrictions.seconds-edit-after": "Number of seconds a post remains editable. (0 disabled)", + "restrictions.seconds-delete-after": "Number of seconds a post remains deletable. (0 disabled)", "restrictions.replies-no-delete": "Number of replies after users are disallowed to delete their own topics. (0 disabled)", "restrictions.min-title-length": "Minimum Title Length", "restrictions.max-title-length": "Maximum Title Length", From 58311b6cf67dde1c8c4dc396568083b40fbc571a Mon Sep 17 00:00:00 2001 From: "Misty (Bot)" Date: Mon, 13 May 2019 09:26:36 +0000 Subject: [PATCH 75/83] Latest translations and fallbacks --- public/language/tr/admin/settings/user.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/language/tr/admin/settings/user.json b/public/language/tr/admin/settings/user.json index d4dbcfa188..abdb66593c 100644 --- a/public/language/tr/admin/settings/user.json +++ b/public/language/tr/admin/settings/user.json @@ -40,7 +40,7 @@ "registration-type.invite-only": "Sadece Davet", "registration-type.admin-invite-only": "Sadece Yönetici Daveti", "registration-type.disabled": "Kayıt yok", - "registration-type.help": "Normal - Kullanıcılar kayıt sayfasından kayıt yaptırabilirler.
\nYönetici Onayı - Kullanıcı kayıtları, yöneticiler için bir onay kuyruğuna yerleştirilir.
\nIP'ler için Yönetici Onayı - Yeni kullanıcılar için normal, varolan hesaplardaki IP adresleri için Yönetici Onayı.
\nYalnızca Davet - Kullanıcılar, kullanıcılar sayfasından başkalarını davet edebilir.
\nYalnızca Yönetici Daveti - Yalnızca yöneticiler başkalarını
kullanıcılar ve yönetici/yönet/ kullanıcılar sayfalarından davet edebilir.
\nKayıt yok - Kullanıcı kaydı yok.
", + "registration-type.help": "Normal - Kullanıcılar kayıt sayfasından kayıt yaptırabilirler.
\nYönetici Onayı - Kullanıcı kayıtları, yöneticiler için bir
onay kuyruğuna yerleştirilir.
\nIP'ler için Yönetici Onayı - Yeni kullanıcılar için normal, varolan hesaplardaki IP adresleri için Yönetici Onayı.
\nYalnızca Davet - Kullanıcılar, kullanıcılar sayfasından başkalarını davet edebilir.
\nYalnızca Yönetici Daveti - Yalnızca yöneticiler başkalarını kullanıcılar ve yönetici/yönet/ sayfalarından davet edebilir.
\nKayıt yok - Kullanıcı kaydı yok.
", "registration.max-invites": "Kullanıcı Başına Maksimum Davetiye", "max-invites": "Kullanıcı Başına Maksimum Davetiye", "max-invites-help": "Kısıtlama olmaması için 0. Yöneticiler sınırsız davetiyeye sahiptir
\"Yalnızca Davet\" seçeneği için geçerlidir", From 0d86781cb5cf83f27314949f12d1a85b5dbc9340 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 13 May 2019 15:54:37 -0400 Subject: [PATCH 76/83] fix: #7599 image size measurement erroring out on missing path --- src/controllers/admin/uploads.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/controllers/admin/uploads.js b/src/controllers/admin/uploads.js index 8aef187347..a0c27ae20c 100644 --- a/src/controllers/admin/uploads.js +++ b/src/controllers/admin/uploads.js @@ -291,7 +291,7 @@ function uploadImage(filename, folder, uploadedFile, req, res, next) { }), async.apply(meta.configs.set, 'brand:emailLogo', path.join(nconf.get('upload_url'), 'system/site-logo-x50.png')), function (next) { - image.size(imageData.path, function (err, size) { + image.size(uploadedFile.path, function (err, size) { if (err) { return next(err); } @@ -308,7 +308,7 @@ function uploadImage(filename, folder, uploadedFile, req, res, next) { next(err, imageData); }); } else if (path.basename(filename, path.extname(filename)) === 'og:image' && folder === 'system') { - image.size(imageData.path, function (err, size) { + image.size(uploadedFile.path, function (err, size) { if (err) { next(err); } From c20e331306e882c035b67c801988e7c30be632fb Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 14 May 2019 16:50:28 +0000 Subject: [PATCH 77/83] chore(deps): update dependency husky to v2.3.0 --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index e78a009510..7d79408860 100644 --- a/install/package.json +++ b/install/package.json @@ -140,7 +140,7 @@ "eslint-plugin-import": "2.17.2", "grunt": "1.0.4", "grunt-contrib-watch": "1.1.0", - "husky": "2.2.0", + "husky": "2.3.0", "jsdom": "15.0.0", "lint-staged": "8.1.6", "mocha": "6.1.2", From 6421f10f8114618e105da559af8ded6b40d75b30 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 11 May 2019 01:35:56 +0000 Subject: [PATCH 78/83] chore(deps): update node:8.16.0 docker digest to b5484d1 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 9e83cc1363..77829edf46 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # The base image is the latest 8.x node (LTS) -FROM node:8.16.0@sha256:3dc377430ed62815eac3d97f08f3760bca89250c6168515e4e5e03d892745825 +FROM node:8.16.0@sha256:b5484d1eece03b69a2222c8444ac32730e7d0ed6be8af7304d9d0b5fd691a950 RUN mkdir -p /usr/src/app WORKDIR /usr/src/app From 3ff8154bbde932f7e033399a1f8c501c5e42936d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 6 May 2019 19:04:49 +0000 Subject: [PATCH 79/83] chore(deps): update dependency mocha to v6.1.4 --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 7d79408860..784c721aae 100644 --- a/install/package.json +++ b/install/package.json @@ -143,7 +143,7 @@ "husky": "2.3.0", "jsdom": "15.0.0", "lint-staged": "8.1.6", - "mocha": "6.1.2", + "mocha": "6.1.4", "mocha-lcov-reporter": "1.3.0", "nyc": "14.1.1", "smtp-server": "3.5.0" From fcd6dc88d01d69080b84009dc5101351629942df Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 14 May 2019 17:02:50 +0000 Subject: [PATCH 80/83] chore(deps): update dependency jsdom to v15.1.0 --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 784c721aae..3a31ba9c65 100644 --- a/install/package.json +++ b/install/package.json @@ -141,7 +141,7 @@ "grunt": "1.0.4", "grunt-contrib-watch": "1.1.0", "husky": "2.3.0", - "jsdom": "15.0.0", + "jsdom": "15.1.0", "lint-staged": "8.1.6", "mocha": "6.1.4", "mocha-lcov-reporter": "1.3.0", From 9998e86b3b2f7dfa275c8689aee8605d1e481d51 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 9 May 2019 12:30:30 +0000 Subject: [PATCH 81/83] chore(deps): update commitlint monorepo --- install/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/package.json b/install/package.json index 3a31ba9c65..b8916c86b1 100644 --- a/install/package.json +++ b/install/package.json @@ -132,8 +132,8 @@ "zxcvbn": "^4.4.2" }, "devDependencies": { - "@commitlint/cli": "7.5.2", - "@commitlint/config-angular": "7.5.0", + "@commitlint/cli": "7.6.1", + "@commitlint/config-angular": "7.6.0", "coveralls": "3.0.3", "eslint": "5.16.0", "eslint-config-airbnb-base": "13.1.0", From 05a6413e4462f2bb743409485552f9e7704e59d2 Mon Sep 17 00:00:00 2001 From: "Misty (Bot)" Date: Wed, 15 May 2019 09:26:44 +0000 Subject: [PATCH 82/83] Latest translations and fallbacks --- public/language/pl/admin/development/info.json | 4 ++-- public/language/pl/admin/manage/groups.json | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/public/language/pl/admin/development/info.json b/public/language/pl/admin/development/info.json index aa9e025623..1cf80f089f 100644 --- a/public/language/pl/admin/development/info.json +++ b/public/language/pl/admin/development/info.json @@ -7,8 +7,8 @@ "online": "dostępny", "git": "git", "memory": "pamięć", - "load": "system load", - "cpu-usage": "cpu usage", + "load": "obciążenie systemu", + "cpu-usage": "użycie procesora", "uptime": "czas działania", "registered": "Zarejestrowane", diff --git a/public/language/pl/admin/manage/groups.json b/public/language/pl/admin/manage/groups.json index 45241f5e4b..056e7a5c8d 100644 --- a/public/language/pl/admin/manage/groups.json +++ b/public/language/pl/admin/manage/groups.json @@ -1,12 +1,12 @@ { "name": "Nazwa grupy", "badge": "Badge", - "properties": "Properties", + "properties": "Właściwości", "description": "Opis grupy", "member-count": "Liczba użytkowników", "system": "System", - "hidden": "Hidden", - "private": "Private", + "hidden": "Ukryty", + "private": "Prywatny", "edit": "Edytuj", "search-placeholder": "Szukaj", "create": "Utwórz grupę", @@ -21,7 +21,7 @@ "edit.user-title": "Tytuł członków ", "edit.icon": "Ikona grupy", "edit.label-color": "Kolor etykiety grupy", - "edit.text-color": "Group Text Color", + "edit.text-color": "Kolor Tekstu Grupy", "edit.show-badge": "Pokaż etykietę", "edit.private-details": "Jeśli włączone, przystępowanie do grup wymaga zatwierdzenia przez właściciela grupy", "edit.private-override": "Ostrzeżenie: Prywatne grupy są wyłączone w ustawieniach, co powoduje przesłonięcia opcji.", From dc6b49cacbc24226f8f6f019674e105665923c0e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 15 May 2019 05:19:08 +0000 Subject: [PATCH 83/83] chore(deps): update dependency lint-staged to v8.1.7 --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index b8916c86b1..3f0f4e7c25 100644 --- a/install/package.json +++ b/install/package.json @@ -142,7 +142,7 @@ "grunt-contrib-watch": "1.1.0", "husky": "2.3.0", "jsdom": "15.1.0", - "lint-staged": "8.1.6", + "lint-staged": "8.1.7", "mocha": "6.1.4", "mocha-lcov-reporter": "1.3.0", "nyc": "14.1.1",