From a1a87c7ca123091301f8126420b0e0bbd33e8411 Mon Sep 17 00:00:00 2001 From: Andrew Rodrigues Date: Sun, 8 Oct 2017 00:04:13 -0400 Subject: [PATCH 01/44] closes #5969 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 19984ac8f6..43045ca080 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "nodebb-plugin-spam-be-gone": "0.5.1", "nodebb-rewards-essentials": "0.0.9", "nodebb-theme-lavender": "4.1.0", - "nodebb-theme-persona": "6.1.0", + "nodebb-theme-persona": "6.1.1", "nodebb-theme-slick": "1.1.1", "nodebb-theme-vanilla": "7.1.0", "nodebb-widget-essentials": "3.0.6", From cd6dcff38b79a4d63fc9ef7eab3fa7bd4d9e0a63 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 12 Oct 2017 13:38:27 -0400 Subject: [PATCH 02/44] Split up customJS into customHTML and customJS for better organisation (#5981) * WIP * fixed customJS not actually working in footer * Moving scripts to footer, #5980 * Added upgrade scripts for #5980 --- .../en-GB/admin/appearance/customise.json | 6 ++- public/less/admin/appearance/customise.less | 2 +- public/src/admin/appearance/customise.js | 11 ++++++ src/middleware/header.js | 28 ++++++++------ src/upgrades/1.7.0/generate-custom-html.js | 37 +++++++++++++++++++ src/views/admin/appearance/customise.tpl | 29 ++++++++++++--- 6 files changed, 95 insertions(+), 18 deletions(-) create mode 100644 src/upgrades/1.7.0/generate-custom-html.js diff --git a/public/language/en-GB/admin/appearance/customise.json b/public/language/en-GB/admin/appearance/customise.json index 5095f7a937..a1220ec96d 100644 --- a/public/language/en-GB/admin/appearance/customise.json +++ b/public/language/en-GB/admin/appearance/customise.json @@ -3,8 +3,12 @@ "custom-css.description": "Enter your own CSS declarations here, which will be applied after all other styles.", "custom-css.enable": "Enable Custom CSS", + "custom-js": "Custom Javascript", + "custom-js.description": "Enter your own javascript here. It will be executed after the page is loaded completely.", + "custom-js.enable": "Enable Custom Javascript", + "custom-header": "Custom Header", - "custom-header.description": "Enter custom HTML here (ex. JavaScript, Meta Tags, etc.), which will be appended to the <head> section of your forum's markup.", + "custom-header.description": "Enter custom HTML here (ex. Meta Tags, etc.), which will be appended to the <head> section of your forum's markup. Script tags are allowed, but are discouraged, as the Custom Javascript tab is available.", "custom-header.enable": "Enable Custom Header", "custom-css.livereload": "Enable Live Reload", diff --git a/public/less/admin/appearance/customise.less b/public/less/admin/appearance/customise.less index 093230c7c6..3bef7fa560 100644 --- a/public/less/admin/appearance/customise.less +++ b/public/less/admin/appearance/customise.less @@ -1,4 +1,4 @@ -#customCSS, #customHTML, #email-editor { +#customCSS, #customJS, #customHTML, #email-editor { width: 100%; height: 450px; display: block; diff --git a/public/src/admin/appearance/customise.js b/public/src/admin/appearance/customise.js index e95ea5ba30..b9abf899c2 100644 --- a/public/src/admin/appearance/customise.js +++ b/public/src/admin/appearance/customise.js @@ -6,9 +6,11 @@ define('admin/appearance/customise', ['admin/settings', 'ace/ace'], function (Se Customise.init = function () { Settings.prepare(function () { $('#customCSS').text($('#customCSS-holder').val()); + $('#customJS').text($('#customJS-holder').val()); $('#customHTML').text($('#customHTML-holder').val()); var customCSS = ace.edit('customCSS'); + var customJS = ace.edit('customJS'); var customHTML = ace.edit('customHTML'); customCSS.setTheme('ace/theme/twilight'); @@ -20,6 +22,15 @@ define('admin/appearance/customise', ['admin/settings', 'ace/ace'], function (Se $('#customCSS-holder').val(customCSS.getValue()); }); + customJS.setTheme('ace/theme/twilight'); + customJS.getSession().setMode('ace/mode/js'); + + customJS.on('change', function () { + app.flags = app.flags || {}; + app.flags._unsaved = true; + $('#customJS-holder').val(customJS.getValue()); + }); + customHTML.setTheme('ace/theme/twilight'); customHTML.getSession().setMode('ace/mode/html'); diff --git a/src/middleware/header.js b/src/middleware/header.js index e35cc0e333..ec454936e0 100644 --- a/src/middleware/header.js +++ b/src/middleware/header.js @@ -65,9 +65,6 @@ module.exports = function (middleware) { async.waterfall([ function (next) { async.parallel({ - scripts: function (next) { - plugins.fireHook('filter:scripts.get', [], next); - }, isAdmin: function (next) { user.isAdministrator(req.uid, next); }, @@ -143,8 +140,8 @@ module.exports = function (middleware) { templateValues.userJSON = JSON.stringify(results.user); templateValues.useCustomCSS = parseInt(meta.config.useCustomCSS, 10) === 1 && meta.config.customCSS; templateValues.customCSS = templateValues.useCustomCSS ? (meta.config.renderedCustomCSS || '') : ''; - templateValues.useCustomJS = parseInt(meta.config.useCustomJS, 10) === 1; - templateValues.customJS = templateValues.useCustomJS ? meta.config.customJS : ''; + templateValues.useCustomHTML = parseInt(meta.config.useCustomHTML, 10) === 1; + templateValues.customHTML = templateValues.useCustomHTML ? meta.config.customHTML : ''; templateValues.maintenanceHeader = parseInt(meta.config.maintenanceMode, 10) === 1 && !results.isAdmin; templateValues.defaultLang = meta.config.defaultLang || 'en-GB'; templateValues.userLang = res.locals.config.userLang; @@ -155,12 +152,6 @@ module.exports = function (middleware) { templateValues.template = { name: res.locals.template }; templateValues.template[res.locals.template] = true; - templateValues.scripts = results.scripts.map(function (script) { - return { src: script }; - }); - - addTimeagoLocaleScript(templateValues.scripts, res.locals.config.userLang); - if (req.route && req.route.path === '/') { modifyTitle(templateValues); } @@ -192,6 +183,21 @@ module.exports = function (middleware) { }, next); }, function (data, next) { + async.parallel({ + scripts: async.apply(plugins.fireHook, 'filter:scripts.get', []), + }, function (err, results) { + next(err, data, results); + }); + }, + function (data, results, next) { + data.templateValues.scripts = results.scripts.map(function (script) { + return { src: script }; + }); + addTimeagoLocaleScript(data.templateValues.scripts, res.locals.config.userLang); + + data.templateValues.useCustomJS = parseInt(meta.config.useCustomJS, 10) === 1; + data.templateValues.customJS = data.templateValues.useCustomJS ? meta.config.customJS : ''; + req.app.render('footer', data.templateValues, next); }, ], callback); diff --git a/src/upgrades/1.7.0/generate-custom-html.js b/src/upgrades/1.7.0/generate-custom-html.js new file mode 100644 index 0000000000..5de0238920 --- /dev/null +++ b/src/upgrades/1.7.0/generate-custom-html.js @@ -0,0 +1,37 @@ +'use strict'; + +var meta = require('../../meta'); + +module.exports = { + name: 'Generate customHTML block from old customJS setting', + timestamp: Date.UTC(2017, 9, 12), + method: function (callback) { + var newHTML = meta.config.customJS; + var newJS = []; + + // Forgive me for parsing HTML with regex... + var scriptMatch = /^([\s\S]+?)<\/script>/m; + var match = scriptMatch.exec(newHTML); + + while (match) { + if (match[1]) { + // Append to newJS array + newJS.push(match[1].trim()); + + // Remove the match from the existing value + newHTML = ((match.index > 0 ? newHTML.slice(0, match.index) : '') + newHTML.slice(match.index + match[0].length)).trim(); + } + + match = scriptMatch.exec(newHTML); + } + + // Combine newJS array + newJS = newJS.join('\n\n'); + + // Write both values to config + meta.configs.setMultiple({ + customHTML: newHTML, + customJS: newJS, + }, callback); + }, +}; diff --git a/src/views/admin/appearance/customise.tpl b/src/views/admin/appearance/customise.tpl index b2d1307b80..1c8a76b2f4 100644 --- a/src/views/admin/appearance/customise.tpl +++ b/src/views/admin/appearance/customise.tpl @@ -1,6 +1,7 @@ -
+

- [[admin/appearance/customise:custom-header.description]] + [[admin/appearance/customise:custom-js.description]]

- -
- +
+
+
+
+
+ +
+

+ [[admin/appearance/customise:custom-header.description]] +

+ +
+ + +
+
+
+
From cfacc4f133aa00ffcf62eba81b328e32118e8cf1 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 12 Oct 2017 17:01:01 -0400 Subject: [PATCH 03/44] potential fix for #5980 --- public/src/ajaxify.js | 2 -- public/src/client/footer.js | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/public/src/ajaxify.js b/public/src/ajaxify.js index c18922485b..14b2ab0ad1 100644 --- a/public/src/ajaxify.js +++ b/public/src/ajaxify.js @@ -424,6 +424,4 @@ $(document).ready(function () { // Progressive Enhancement, ajaxify available only to modern browsers ajaxifyAnchors(); } - - app.load(); }); diff --git a/public/src/client/footer.js b/public/src/client/footer.js index 7dcdade78b..872104976b 100644 --- a/public/src/client/footer.js +++ b/public/src/client/footer.js @@ -98,4 +98,5 @@ define('forum/footer', ['notifications', 'chat', 'components', 'translator'], fu socket.on('event:unread.updateChatCount', updateUnreadChatCount); initUnreadTopics(); + app.load(); }); From ae261e073bd7ee885520db4a9b5e5d492263d897 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 13 Oct 2017 09:58:26 -0400 Subject: [PATCH 04/44] updating markdown and moving app.load back into ajaxify.end --- package.json | 2 +- public/src/ajaxify.js | 2 ++ public/src/client/footer.js | 1 - 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 89456f495d..671b7626c9 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "nodebb-plugin-dbsearch": "2.0.6", "nodebb-plugin-emoji-extended": "1.1.1", "nodebb-plugin-emoji-one": "1.2.1", - "nodebb-plugin-markdown": "8.1.0", + "nodebb-plugin-markdown": "8.2.0", "nodebb-plugin-mentions": "2.1.6", "nodebb-plugin-soundpack-default": "1.0.0", "nodebb-plugin-spam-be-gone": "0.5.1", diff --git a/public/src/ajaxify.js b/public/src/ajaxify.js index 14b2ab0ad1..c18922485b 100644 --- a/public/src/ajaxify.js +++ b/public/src/ajaxify.js @@ -424,4 +424,6 @@ $(document).ready(function () { // Progressive Enhancement, ajaxify available only to modern browsers ajaxifyAnchors(); } + + app.load(); }); diff --git a/public/src/client/footer.js b/public/src/client/footer.js index 872104976b..7dcdade78b 100644 --- a/public/src/client/footer.js +++ b/public/src/client/footer.js @@ -98,5 +98,4 @@ define('forum/footer', ['notifications', 'chat', 'components', 'translator'], fu socket.on('event:unread.updateChatCount', updateUnreadChatCount); initUnreadTopics(); - app.load(); }); From 8741f7c63c6395df8b5b9c8538577276ef633714 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 13 Oct 2017 12:20:48 -0400 Subject: [PATCH 05/44] updated ACP menu label --- public/language/en-GB/admin/menu.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/language/en-GB/admin/menu.json b/public/language/en-GB/admin/menu.json index 3ec4ad41c4..3ff123c2ee 100644 --- a/public/language/en-GB/admin/menu.json +++ b/public/language/en-GB/admin/menu.json @@ -39,7 +39,7 @@ "section-appearance": "Appearance", "appearance/themes": "Themes", "appearance/skins": "Skins", - "appearance/customise": "Custom HTML & CSS", + "appearance/customise": "Custom Content (HTML/JS/CSS)", "section-extend": "Extend", "extend/plugins": "Plugins", From f9a1951ec5039f03b94eb5ba749bdc312d73ff5b Mon Sep 17 00:00:00 2001 From: Peter Jaszkowiak Date: Fri, 13 Oct 2017 10:53:02 -0600 Subject: [PATCH 06/44] Enable running multiple upgrades at once --- app.js | 9 ++++----- src/upgrade.js | 18 +++++++----------- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/app.js b/app.js index 686b355602..4ce28da224 100644 --- a/app.js +++ b/app.js @@ -219,14 +219,13 @@ function upgrade() { var meta = require('./src/meta'); var upgrade = require('./src/upgrade'); var build = require('./src/meta/build'); - var tasks = [db.init, meta.configs.init, upgrade.run, build.buildAll]; + var tasks = [db.init, meta.configs.init]; if (nconf.get('upgrade') !== true) { // Likely an upgrade script name passed in - tasks[2] = async.apply(upgrade.runSingle, nconf.get('upgrade')); - - // Skip build - tasks.pop(); + tasks.push(async.apply(upgrade.runParticular, nconf.get('upgrade').split(','))); + } else { + tasks.push(upgrade.run, build.buildAll); } // disable mongo timeouts during upgrade nconf.set('mongo:options:socketTimeoutMS', 0); diff --git a/src/upgrade.js b/src/upgrade.js index f1f5a016ad..97f5287bc6 100644 --- a/src/upgrade.js +++ b/src/upgrade.js @@ -87,23 +87,19 @@ Upgrade.run = function (callback) { }); }; -Upgrade.runSingle = function (query, callback) { +Upgrade.runParticular = function (names, callback) { process.stdout.write('\nParsing upgrade scripts... '); async.waterfall([ async.apply(file.walk, path.join(__dirname, './upgrades')), function (files, next) { - next(null, files.filter(function (file) { - return path.basename(file, '.js') === query; - })); - }, - ], function (err, files) { - if (err) { - return callback(err); - } + var upgrades = files.filter(function (file) { + return names.indexOf(path.basename(file, '.js')) !== -1; + }); - Upgrade.process(files, 0, callback); - }); + Upgrade.process(upgrades, 0, next); + }, + ], callback); }; Upgrade.process = function (files, skipCount, callback) { From 0efa403a688c3abc2326f1e6ee40b30c8f2f6737 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 13 Oct 2017 13:12:48 -0400 Subject: [PATCH 07/44] invoking the proper ACE Editor mode --- public/src/admin/appearance/customise.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/src/admin/appearance/customise.js b/public/src/admin/appearance/customise.js index b9abf899c2..86894f0d63 100644 --- a/public/src/admin/appearance/customise.js +++ b/public/src/admin/appearance/customise.js @@ -23,7 +23,7 @@ define('admin/appearance/customise', ['admin/settings', 'ace/ace'], function (Se }); customJS.setTheme('ace/theme/twilight'); - customJS.getSession().setMode('ace/mode/js'); + customJS.getSession().setMode('ace/mode/javascript'); customJS.on('change', function () { app.flags = app.flags || {}; From 46fafb20b9079e68155db3e0f233a8df8003c47c Mon Sep 17 00:00:00 2001 From: Peter Jaszkowiak Date: Fri, 13 Oct 2017 21:02:41 -0600 Subject: [PATCH 08/44] Remove string.js dependency --- package.json | 1 - public/src/modules/helpers.js | 10 +- public/src/modules/string.js | 3 - public/src/modules/translator.js | 35 ++-- public/src/utils.js | 313 +++++++++++++++++++++++++++- src/controllers/accounts/profile.js | 4 +- src/controllers/topics.js | 3 +- src/flags.js | 3 +- src/messaging.js | 3 +- src/messaging/data.js | 3 +- src/meta/js.js | 1 - src/notifications.js | 5 +- src/posts/parse.js | 5 +- src/posts/summary.js | 4 +- src/socket.io/helpers.js | 6 +- src/socket.io/posts/edit.js | 4 +- src/topics/create.js | 4 +- src/topics/follow.js | 4 +- src/topics/teaser.js | 4 +- src/user/notifications.js | 4 +- src/user/profile.js | 3 +- test/build.js | 1 - test/utils.js | 22 ++ 23 files changed, 383 insertions(+), 62 deletions(-) delete mode 100644 public/src/modules/string.js diff --git a/package.json b/package.json index 89456f495d..2d1318e5d2 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,6 @@ "socket.io-redis": "5.2.0", "socketio-wildcard": "2.0.0", "spdx-license-list": "^3.0.1", - "string": "^3.3.3", "toobusy-js": "^0.5.1", "uglify-js": "^3.1.3", "validator": "9.0.0", diff --git a/public/src/modules/helpers.js b/public/src/modules/helpers.js index 736926101d..77a060ed7a 100644 --- a/public/src/modules/helpers.js +++ b/public/src/modules/helpers.js @@ -3,13 +3,13 @@ (function (factory) { if (typeof module === 'object' && module.exports) { var relative_path = require('nconf').get('relative_path'); - module.exports = factory(require('../utils'), require('benchpressjs'), require('string'), relative_path); + module.exports = factory(require('../utils'), require('benchpressjs'), relative_path); } else if (typeof define === 'function' && define.amd) { - define('helpers', ['benchpress', 'string'], function (Benchpress, string) { - return factory(utils, Benchpress, string, config.relative_path); + define('helpers', ['benchpress'], function (Benchpress) { + return factory(utils, Benchpress, config.relative_path); }); } -}(function (utils, Benchpress, S, relative_path) { +}(function (utils, Benchpress, relative_path) { var helpers = { displayMenuItem: displayMenuItem, buildMetaTag: buildMetaTag, @@ -92,7 +92,7 @@ } function stripTags(str) { - return S(String(str)).stripTags().s; + return utils.stripHTMLTags(str); } function generateCategoryBackground(category) { diff --git a/public/src/modules/string.js b/public/src/modules/string.js deleted file mode 100644 index a06e1862f9..0000000000 --- a/public/src/modules/string.js +++ /dev/null @@ -1,3 +0,0 @@ -/* -string.js - Copyright (C) 2012-2013, JP Richardson -*/!function(){"use strict";function n(e,t){t!==null&&t!==undefined?typeof t=="string"?e.s=t:e.s=t.toString():e.s=t,e.orig=t,t!==null&&t!==undefined?e.__defineGetter__?e.__defineGetter__("length",function(){return e.s.length}):e.length=t.length:e.length=-1}function r(e){n(this,e)}function u(){for(var e in s)(function(e){var t=s[e];i.hasOwnProperty(e)||(o.push(e),i[e]=function(){return String.prototype.s=this,t.apply(this,arguments)})})(e)}function a(){for(var e=0;er?n.slice(s,i):"")},camelize:function(){var e=this.trim().s.replace(/(\-|_|\s)+(.)?/g,function(e,t,n){return n?n.toUpperCase():""});return new this.constructor(e)},capitalize:function(){return new this.constructor(this.s.substr(0,1).toUpperCase()+this.s.substring(1).toLowerCase())},charAt:function(e){return this.s.charAt(e)},chompLeft:function(e){var t=this.s;return t.indexOf(e)===0?(t=t.slice(e.length),new this.constructor(t)):this},chompRight:function(e){if(this.endsWith(e)){var t=this.s;return t=t.slice(0,t.length-e.length),new this.constructor(t)}return this},collapseWhitespace:function(){var e=this.s.replace(/[\s\xa0]+/g," ").replace(/^\s+|\s+$/g,"");return new this.constructor(e)},contains:function(e){return this.s.indexOf(e)>=0},count:function(e){var t=0,n=this.s.indexOf(e);while(n>=0)t+=1,n=this.s.indexOf(e,n+1);return t},dasherize:function(){var e=this.trim().s.replace(/[_\s]+/g,"-").replace(/([A-Z])/g,"-$1").replace(/-+/g,"-").toLowerCase();return new this.constructor(e)},decodeHtmlEntities:function(){var e=this.s;return e=e.replace(/&#(\d+);?/g,function(e,t){return String.fromCharCode(t)}).replace(/&#[xX]([A-Fa-f0-9]+);?/g,function(e,t){return String.fromCharCode(parseInt(t,16))}).replace(/&([^;\W]+;?)/g,function(e,n){var r=n.replace(/;$/,""),i=t[n]||n.match(/;$/)&&t[r];return typeof i=="number"?String.fromCharCode(i):typeof i=="string"?i:e}),new this.constructor(e)},endsWith:function(e){var t=this.s.length-e.length;return t>=0&&this.s.indexOf(e,t)===t},escapeHTML:function(){return new this.constructor(this.s.replace(/[&<>"']/g,function(e){return"&"+m[e]+";"}))},ensureLeft:function(e){var t=this.s;return t.indexOf(e)===0?this:new this.constructor(e+t)},ensureRight:function(e){var t=this.s;return this.endsWith(e)?this:new this.constructor(t+e)},humanize:function(){if(this.s===null||this.s===undefined)return new this.constructor("");var e=this.underscore().replace(/_id$/,"").replace(/_/g," ").trim().capitalize();return new this.constructor(e)},isAlpha:function(){return!/[^a-z\xC0-\xFF]/.test(this.s.toLowerCase())},isAlphaNumeric:function(){return!/[^0-9a-z\xC0-\xFF]/.test(this.s.toLowerCase())},isEmpty:function(){return this.s===null||this.s===undefined?!0:/^[\s\xa0]*$/.test(this.s)},isLower:function(){return this.isAlpha()&&this.s.toLowerCase()===this.s},isNumeric:function(){return!/[^0-9]/.test(this.s)},isUpper:function(){return this.isAlpha()&&this.s.toUpperCase()===this.s},left:function(e){if(e>=0){var t=this.s.substr(0,e);return new this.constructor(t)}return this.right(-e)},lines:function(){return this.replaceAll("\r\n","\n").s.split("\n")},pad:function(e,t){t==null&&(t=" ");if(this.s.length>=e)return new this.constructor(this.s);e-=this.s.length;var n=Array(Math.ceil(e/2)+1).join(t),r=Array(Math.floor(e/2)+1).join(t);return new this.constructor(n+this.s+r)},padLeft:function(e,t){return t==null&&(t=" "),this.s.length>=e?new this.constructor(this.s):new this.constructor(Array(e-this.s.length+1).join(t)+this.s)},padRight:function(e,t){return t==null&&(t=" "),this.s.length>=e?new this.constructor(this.s):new this.constructor(this.s+Array(e-this.s.length+1).join(t))},parseCSV:function(e,t,n,r){e=e||",",n=n||"\\",typeof t=="undefined"&&(t='"');var i=0,s=[],o=[],u=this.s.length,a=!1,f=this,l=function(e){return f.s.charAt(e)};if(typeof r!="undefined")var c=[];t||(a=!0);while(i=0){var t=this.s.substr(this.s.length-e,e);return new this.constructor(t)}return this.left(-e)},setValue:function(e){return n(this,e),this},slugify:function(){var e=(new r(this.s.replace(/[^\w\s-]/g,"").toLowerCase())).dasherize().s;return e.charAt(0)==="-"&&(e=e.substr(1)),new this.constructor(e)},startsWith:function(e){return this.s.lastIndexOf(e,0)===0},stripPunctuation:function(){return new this.constructor(this.s.replace(/[^\w\s]|_/g,"").replace(/\s+/g," "))},stripTags:function(){var e=this.s,t=arguments.length>0?arguments:[""];return d(t,function(t){e=e.replace(RegExp("]*>","gi"),"")}),new this.constructor(e)},template:function(e,t,n){var r=this.s,t=t||p.TMPL_OPEN,n=n||p.TMPL_CLOSE,i=t.replace(/[-[\]()*\s]/g,"\\$&").replace(/\$/g,"\\$"),s=n.replace(/[-[\]()*\s]/g,"\\$&").replace(/\$/g,"\\$"),o=new RegExp(i+"(.+?)"+s,"g"),u=r.match(o)||[];return u.forEach(function(i){var s=i.substring(t.length,i.length-n.length);typeof e[s]!="undefined"&&(r=r.replace(i,e[s]))}),new this.constructor(r)},times:function(e){return new this.constructor((new Array(e+1)).join(this.s))},toBoolean:function(){if(typeof this.orig=="string"){var e=this.s.toLowerCase();return e==="true"||e==="yes"||e==="on"}return this.orig===!0||this.orig===1},toFloat:function(e){var t=parseFloat(this.s);return e?parseFloat(t.toFixed(e)):t},toInt:function(){return/^\s*-?0x/i.test(this.s)?parseInt(this.s,16):parseInt(this.s,10)},trim:function(){var e;return typeof i.trim=="undefined"?e=this.s.replace(/(^\s*|\s*$)/g,""):e=this.s.trim(),new this.constructor(e)},trimLeft:function(){var e;return i.trimLeft?e=this.s.trimLeft():e=this.s.replace(/(^\s*)/g,""),new this.constructor(e)},trimRight:function(){var e;return i.trimRight?e=this.s.trimRight():e=this.s.replace(/\s+$/,""),new this.constructor(e)},truncate:function(e,t){var n=this.s;e=~~e,t=t||"...";if(n.length<=e)return new this.constructor(n);var i=function(e){return e.toUpperCase()!==e.toLowerCase()?"A":" "},s=n.slice(0,e+1).replace(/.(?=\W*\w*$)/g,i);return s.slice(s.length-2).match(/\w\w/)?s=s.replace(/\s*\S+$/,""):s=(new r(s.slice(0,s.length-1))).trimRight().s,(s+t).length>n.length?new r(n):new r(n.slice(0,s.length)+t)},toCSV:function(){function u(e){return e!==null&&e!==""}var e=",",t='"',n="\\",i=!0,s=!1,o=[];typeof arguments[0]=="object"?(e=arguments[0].delimiter||e,e=arguments[0].separator||e,t=arguments[0].qualifier||t,i=!!arguments[0].encloseNumbers,n=arguments[0].escape||n,s=!!arguments[0].keys):typeof arguments[0]=="string"&&(e=arguments[0]),typeof arguments[1]=="string"&&(t=arguments[1]),arguments[1]===null&&(t=null);if(this.orig instanceof Array)o=this.orig;else for(var a in this.orig)this.orig.hasOwnProperty(a)&&(s?o.push(a):o.push(this.orig[a]));var f=n+t,l=[];for(var c=0;c",quot:'"',apos:"'",amp:"&"},m={};for(var g in v)m[v[g]]=g;t={amp:"&",gt:">",lt:"<",quot:'"',apos:"'",AElig:198,Aacute:193,Acirc:194,Agrave:192,Aring:197,Atilde:195,Auml:196,Ccedil:199,ETH:208,Eacute:201,Ecirc:202,Egrave:200,Euml:203,Iacute:205,Icirc:206,Igrave:204,Iuml:207,Ntilde:209,Oacute:211,Ocirc:212,Ograve:210,Oslash:216,Otilde:213,Ouml:214,THORN:222,Uacute:218,Ucirc:219,Ugrave:217,Uuml:220,Yacute:221,aacute:225,acirc:226,aelig:230,agrave:224,aring:229,atilde:227,auml:228,ccedil:231,eacute:233,ecirc:234,egrave:232,eth:240,euml:235,iacute:237,icirc:238,igrave:236,iuml:239,ntilde:241,oacute:243,ocirc:244,ograve:242,oslash:248,otilde:245,ouml:246,szlig:223,thorn:254,uacute:250,ucirc:251,ugrave:249,uuml:252,yacute:253,yuml:255,copy:169,reg:174,nbsp:160,iexcl:161,cent:162,pound:163,curren:164,yen:165,brvbar:166,sect:167,uml:168,ordf:170,laquo:171,not:172,shy:173,macr:175,deg:176,plusmn:177,sup1:185,sup2:178,sup3:179,acute:180,micro:181,para:182,middot:183,cedil:184,ordm:186,raquo:187,frac14:188,frac12:189,frac34:190,iquest:191,times:215,divide:247,"OElig;":338,"oelig;":339,"Scaron;":352,"scaron;":353,"Yuml;":376,"fnof;":402,"circ;":710,"tilde;":732,"Alpha;":913,"Beta;":914,"Gamma;":915,"Delta;":916,"Epsilon;":917,"Zeta;":918,"Eta;":919,"Theta;":920,"Iota;":921,"Kappa;":922,"Lambda;":923,"Mu;":924,"Nu;":925,"Xi;":926,"Omicron;":927,"Pi;":928,"Rho;":929,"Sigma;":931,"Tau;":932,"Upsilon;":933,"Phi;":934,"Chi;":935,"Psi;":936,"Omega;":937,"alpha;":945,"beta;":946,"gamma;":947,"delta;":948,"epsilon;":949,"zeta;":950,"eta;":951,"theta;":952,"iota;":953,"kappa;":954,"lambda;":955,"mu;":956,"nu;":957,"xi;":958,"omicron;":959,"pi;":960,"rho;":961,"sigmaf;":962,"sigma;":963,"tau;":964,"upsilon;":965,"phi;":966,"chi;":967,"psi;":968,"omega;":969,"thetasym;":977,"upsih;":978,"piv;":982,"ensp;":8194,"emsp;":8195,"thinsp;":8201,"zwnj;":8204,"zwj;":8205,"lrm;":8206,"rlm;":8207,"ndash;":8211,"mdash;":8212,"lsquo;":8216,"rsquo;":8217,"sbquo;":8218,"ldquo;":8220,"rdquo;":8221,"bdquo;":8222,"dagger;":8224,"Dagger;":8225,"bull;":8226,"hellip;":8230,"permil;":8240,"prime;":8242,"Prime;":8243,"lsaquo;":8249,"rsaquo;":8250,"oline;":8254,"frasl;":8260,"euro;":8364,"image;":8465,"weierp;":8472,"real;":8476,"trade;":8482,"alefsym;":8501,"larr;":8592,"uarr;":8593,"rarr;":8594,"darr;":8595,"harr;":8596,"crarr;":8629,"lArr;":8656,"uArr;":8657,"rArr;":8658,"dArr;":8659,"hArr;":8660,"forall;":8704,"part;":8706,"exist;":8707,"empty;":8709,"nabla;":8711,"isin;":8712,"notin;":8713,"ni;":8715,"prod;":8719,"sum;":8721,"minus;":8722,"lowast;":8727,"radic;":8730,"prop;":8733,"infin;":8734,"ang;":8736,"and;":8743,"or;":8744,"cap;":8745,"cup;":8746,"int;":8747,"there4;":8756,"sim;":8764,"cong;":8773,"asymp;":8776,"ne;":8800,"equiv;":8801,"le;":8804,"ge;":8805,"sub;":8834,"sup;":8835,"nsub;":8836,"sube;":8838,"supe;":8839,"oplus;":8853,"otimes;":8855,"perp;":8869,"sdot;":8901,"lceil;":8968,"rceil;":8969,"lfloor;":8970,"rfloor;":8971,"lang;":9001,"rang;":9002,"loz;":9674,"spades;":9824,"clubs;":9827,"hearts;":9829,"diams;":9830}}.call(this); diff --git a/public/src/modules/translator.js b/public/src/modules/translator.js index 465a240e4e..cd0d3c75c1 100644 --- a/public/src/modules/translator.js +++ b/public/src/modules/translator.js @@ -10,8 +10,8 @@ } if (typeof define === 'function' && define.amd) { // AMD. Register as a named module - define('translator', ['string'], function (string) { - return factory(string, loadClient, warn); + define('translator', [], function () { + return factory(utils, loadClient, warn); }); } else if (typeof module === 'object' && module.exports) { // Node @@ -37,15 +37,23 @@ }); } - module.exports = factory(require('string'), loadServer, warn); + module.exports = factory(require('../utils'), loadServer, warn); }()); - } else { - window.translator = factory(window.string, loadClient, warn); } -}(function (string, load, warn) { +}(function (utils, load, warn) { var assign = Object.assign || jQuery.extend; function classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + function escapeHTML(str) { + return utils.decodeHTMLEntities( + String(str) + .replace(/[\s\xa0]+/g, ' ') + .replace(/^\s+|\s+$/g, '') + ).replace(/[<>]/g, function (c) { + return c === '<' ? '<' : '>'; + }); + } + var Translator = (function () { /** * Construct a new Translator object @@ -284,9 +292,7 @@ } var argsToTranslate = args.map(function (arg) { - return string(arg).collapseWhitespace().decodeHTMLEntities().escapeHTML().s.replace(/&/g, '&'); - }).map(function (arg) { - return self.translate(arg); + return self.translate(escapeHTML(arg)); }); return Promise.all(argsToTranslate).then(function (translatedArgs) { @@ -539,12 +545,13 @@ return cb(''); } - Translator.create(lang).translate(text).catch(function (err) { + return Translator.create(lang).translate(text).then(function (output) { + if (cb) { + setTimeout(cb, 0, output); + } + return output; + }, function (err) { warn('Translation failed: ' + err.stack); - }).then(function (output) { - cb(output); - }).catch(function (err) { - console.error(err); }); }, diff --git a/public/src/utils.js b/public/src/utils.js index 910082a430..328c73ebe0 100644 --- a/public/src/utils.js +++ b/public/src/utils.js @@ -25,6 +25,279 @@ window.utils = factory(window.XRegExp); } }(function (XRegExp) { + var freeze = Object.freeze || function (obj) { return obj; }; + + // add default escape function for escaping HTML entities + var escapeCharMap = freeze({ + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`', + '=': '=', + }); + function replaceChar(c) { + return escapeCharMap[c]; + } + var escapeChars = /[&<>"'`=]/g; + + var HTMLEntities = freeze({ + amp: '&', + gt: '>', + lt: '<', + quot: '"', + apos: "'", + AElig: 198, + Aacute: 193, + Acirc: 194, + Agrave: 192, + Aring: 197, + Atilde: 195, + Auml: 196, + Ccedil: 199, + ETH: 208, + Eacute: 201, + Ecirc: 202, + Egrave: 200, + Euml: 203, + Iacute: 205, + Icirc: 206, + Igrave: 204, + Iuml: 207, + Ntilde: 209, + Oacute: 211, + Ocirc: 212, + Ograve: 210, + Oslash: 216, + Otilde: 213, + Ouml: 214, + THORN: 222, + Uacute: 218, + Ucirc: 219, + Ugrave: 217, + Uuml: 220, + Yacute: 221, + aacute: 225, + acirc: 226, + aelig: 230, + agrave: 224, + aring: 229, + atilde: 227, + auml: 228, + ccedil: 231, + eacute: 233, + ecirc: 234, + egrave: 232, + eth: 240, + euml: 235, + iacute: 237, + icirc: 238, + igrave: 236, + iuml: 239, + ntilde: 241, + oacute: 243, + ocirc: 244, + ograve: 242, + oslash: 248, + otilde: 245, + ouml: 246, + szlig: 223, + thorn: 254, + uacute: 250, + ucirc: 251, + ugrave: 249, + uuml: 252, + yacute: 253, + yuml: 255, + copy: 169, + reg: 174, + nbsp: 160, + iexcl: 161, + cent: 162, + pound: 163, + curren: 164, + yen: 165, + brvbar: 166, + sect: 167, + uml: 168, + ordf: 170, + laquo: 171, + not: 172, + shy: 173, + macr: 175, + deg: 176, + plusmn: 177, + sup1: 185, + sup2: 178, + sup3: 179, + acute: 180, + micro: 181, + para: 182, + middot: 183, + cedil: 184, + ordm: 186, + raquo: 187, + frac14: 188, + frac12: 189, + frac34: 190, + iquest: 191, + times: 215, + divide: 247, + 'OElig;': 338, + 'oelig;': 339, + 'Scaron;': 352, + 'scaron;': 353, + 'Yuml;': 376, + 'fnof;': 402, + 'circ;': 710, + 'tilde;': 732, + 'Alpha;': 913, + 'Beta;': 914, + 'Gamma;': 915, + 'Delta;': 916, + 'Epsilon;': 917, + 'Zeta;': 918, + 'Eta;': 919, + 'Theta;': 920, + 'Iota;': 921, + 'Kappa;': 922, + 'Lambda;': 923, + 'Mu;': 924, + 'Nu;': 925, + 'Xi;': 926, + 'Omicron;': 927, + 'Pi;': 928, + 'Rho;': 929, + 'Sigma;': 931, + 'Tau;': 932, + 'Upsilon;': 933, + 'Phi;': 934, + 'Chi;': 935, + 'Psi;': 936, + 'Omega;': 937, + 'alpha;': 945, + 'beta;': 946, + 'gamma;': 947, + 'delta;': 948, + 'epsilon;': 949, + 'zeta;': 950, + 'eta;': 951, + 'theta;': 952, + 'iota;': 953, + 'kappa;': 954, + 'lambda;': 955, + 'mu;': 956, + 'nu;': 957, + 'xi;': 958, + 'omicron;': 959, + 'pi;': 960, + 'rho;': 961, + 'sigmaf;': 962, + 'sigma;': 963, + 'tau;': 964, + 'upsilon;': 965, + 'phi;': 966, + 'chi;': 967, + 'psi;': 968, + 'omega;': 969, + 'thetasym;': 977, + 'upsih;': 978, + 'piv;': 982, + 'ensp;': 8194, + 'emsp;': 8195, + 'thinsp;': 8201, + 'zwnj;': 8204, + 'zwj;': 8205, + 'lrm;': 8206, + 'rlm;': 8207, + 'ndash;': 8211, + 'mdash;': 8212, + 'lsquo;': 8216, + 'rsquo;': 8217, + 'sbquo;': 8218, + 'ldquo;': 8220, + 'rdquo;': 8221, + 'bdquo;': 8222, + 'dagger;': 8224, + 'Dagger;': 8225, + 'bull;': 8226, + 'hellip;': 8230, + 'permil;': 8240, + 'prime;': 8242, + 'Prime;': 8243, + 'lsaquo;': 8249, + 'rsaquo;': 8250, + 'oline;': 8254, + 'frasl;': 8260, + 'euro;': 8364, + 'image;': 8465, + 'weierp;': 8472, + 'real;': 8476, + 'trade;': 8482, + 'alefsym;': 8501, + 'larr;': 8592, + 'uarr;': 8593, + 'rarr;': 8594, + 'darr;': 8595, + 'harr;': 8596, + 'crarr;': 8629, + 'lArr;': 8656, + 'uArr;': 8657, + 'rArr;': 8658, + 'dArr;': 8659, + 'hArr;': 8660, + 'forall;': 8704, + 'part;': 8706, + 'exist;': 8707, + 'empty;': 8709, + 'nabla;': 8711, + 'isin;': 8712, + 'notin;': 8713, + 'ni;': 8715, + 'prod;': 8719, + 'sum;': 8721, + 'minus;': 8722, + 'lowast;': 8727, + 'radic;': 8730, + 'prop;': 8733, + 'infin;': 8734, + 'ang;': 8736, + 'and;': 8743, + 'or;': 8744, + 'cap;': 8745, + 'cup;': 8746, + 'int;': 8747, + 'there4;': 8756, + 'sim;': 8764, + 'cong;': 8773, + 'asymp;': 8776, + 'ne;': 8800, + 'equiv;': 8801, + 'le;': 8804, + 'ge;': 8805, + 'sub;': 8834, + 'sup;': 8835, + 'nsub;': 8836, + 'sube;': 8838, + 'supe;': 8839, + 'oplus;': 8853, + 'otimes;': 8855, + 'perp;': 8869, + 'sdot;': 8901, + 'lceil;': 8968, + 'rceil;': 8969, + 'lfloor;': 8970, + 'rfloor;': 8971, + 'lang;': 9001, + 'rang;': 9002, + 'loz;': 9674, + 'spades;': 9824, + 'clubs;': 9827, + 'hearts;': 9829, + 'diams;': 9830, + }); + var utils = { generateUUID: function () { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { @@ -33,6 +306,35 @@ return v.toString(16); }); }, + // https://github.com/substack/node-ent/blob/master/index.js + decodeHTMLEntities: function (html) { + return String(html) + .replace(/&#(\d+);?/g, function (_, code) { + return String.fromCharCode(code); + }) + .replace(/&#[xX]([A-Fa-f0-9]+);?/g, function (_, hex) { + return String.fromCharCode(parseInt(hex, 16)); + }) + .replace(/&([^;\W]+;?)/g, function (m, e) { + var ee = e.replace(/;$/, ''); + var target = HTMLEntities[e] || (e.match(/;$/) && HTMLEntities[ee]); + + if (typeof target === 'number') { + return String.fromCharCode(target); + } else if (typeof target === 'string') { + return target; + } + + return m; + }); + }, + // https://github.com/jprichardson/string.js/blob/master/lib/string.js + stripHTMLTags: function (str, tags) { + var pattern = (tags || ['']).map(function (tag) { + return utils.escapeRegexChars(tag); + }).join('|'); + return String(str).replace(new RegExp(']*>', 'gi'), ''); + }, invalidUnicodeChars: XRegExp('[^\\p{L}\\s\\d\\-_]', 'g'), invalidLatinChars: /[^\w\s\d\-_]/g, @@ -232,8 +534,15 @@ return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); }, - escapeHTML: function (raw) { - return raw.replace(/&/gm, '&').replace(//gm, '>'); + escapeHTML: function (str) { + if (str == null) { + return ''; + } + if (!str) { + return String(str); + } + + return str.toString().replace(escapeChars, replaceChar); }, isAndroidBrowser: function () { diff --git a/src/controllers/accounts/profile.js b/src/controllers/accounts/profile.js index e067ed3ef5..fc9f9cb5b4 100644 --- a/src/controllers/accounts/profile.js +++ b/src/controllers/accounts/profile.js @@ -2,7 +2,6 @@ var nconf = require('nconf'); var async = require('async'); -var S = require('string'); var user = require('../../user'); var posts = require('../../posts'); @@ -13,6 +12,7 @@ var helpers = require('../helpers'); var pagination = require('../../pagination'); var messaging = require('../../messaging'); var translator = require('../../translator'); +var utils = require('../../utils'); var profileController = module.exports; @@ -87,7 +87,7 @@ profileController.get = function (req, res, callback) { userData.profileviews = 1; } - var plainAboutMe = userData.aboutme ? S(userData.aboutme).decodeHTMLEntities().stripTags().s : ''; + var plainAboutMe = userData.aboutme ? utils.stripHTMLTags(utils.decodeHTMLEntities(userData.aboutme)) : ''; res.locals.metaTags = [ { diff --git a/src/controllers/topics.js b/src/controllers/topics.js index d3a4846390..c75f5c3602 100644 --- a/src/controllers/topics.js +++ b/src/controllers/topics.js @@ -2,7 +2,6 @@ var async = require('async'); -var S = require('string'); var nconf = require('nconf'); var user = require('../user'); @@ -217,7 +216,7 @@ function addTags(topicData, req, res) { var postAtIndex = findPost(Math.max(0, req.params.post_index - 1)); if (postAtIndex && postAtIndex.content) { - description = S(postAtIndex.content).decodeHTMLEntities().stripTags().s; + description = utils.stripHTMLTags(utils.decodeHTMLEntities(postAtIndex.content)); } if (description.length > 255) { diff --git a/src/flags.js b/src/flags.js index 749878db33..a578accf18 100644 --- a/src/flags.js +++ b/src/flags.js @@ -2,7 +2,6 @@ var async = require('async'); var _ = require('lodash'); -var S = require('string'); var winston = require('winston'); var validator = require('validator'); @@ -660,7 +659,7 @@ Flags.notify = function (flagObj, uid, callback) { return callback(err); } - var title = S(results.title).decodeHTMLEntities().s; + var title = utils.decodeHTMLEntities(results.title); var titleEscaped = title.replace(/%/g, '%').replace(/,/g, ','); notifications.create({ diff --git a/src/messaging.js b/src/messaging.js index 9a53f327ce..a90c36c2c5 100644 --- a/src/messaging.js +++ b/src/messaging.js @@ -2,7 +2,6 @@ var async = require('async'); -var S = require('string'); var validator = require('validator'); var db = require('./database'); @@ -215,7 +214,7 @@ Messaging.getTeaser = function (uid, roomId, callback) { return callback(); } if (teaser.content) { - teaser.content = S(teaser.content).stripTags().decodeHTMLEntities().s; + teaser.content = utils.stripHTMLTags(utils.decodeHTMLEntities(teaser.content)); teaser.content = validator.escape(String(teaser.content)); } diff --git a/src/messaging/data.js b/src/messaging/data.js index b3a2ba58dd..88b6683a11 100644 --- a/src/messaging/data.js +++ b/src/messaging/data.js @@ -1,7 +1,6 @@ 'use strict'; var async = require('async'); -var S = require('string'); var db = require('../database'); var user = require('../user'); @@ -73,7 +72,7 @@ module.exports = function (Messaging) { return next(err); } message.content = result; - message.cleanedContent = S(result).stripTags().decodeHTMLEntities().s; + message.cleanedContent = utils.stripHTMLTags(utils.decodeHTMLEntities(result)); next(null, message); }); }, next); diff --git a/src/meta/js.js b/src/meta/js.js index 8082be2412..28c5255db0 100644 --- a/src/meta/js.js +++ b/src/meta/js.js @@ -72,7 +72,6 @@ JS.scripts = { 'public/src/modules/alerts.js', 'public/src/modules/taskbar.js', 'public/src/modules/helpers.js', - 'public/src/modules/string.js', 'public/src/modules/flags.js', 'public/src/modules/storage.js', ], diff --git a/src/notifications.js b/src/notifications.js index 098efe5d9f..919d5a22e4 100644 --- a/src/notifications.js +++ b/src/notifications.js @@ -4,7 +4,6 @@ var async = require('async'); var winston = require('winston'); var cron = require('cron').CronJob; var nconf = require('nconf'); -var S = require('string'); var _ = require('lodash'); var db = require('./database'); @@ -56,7 +55,7 @@ Notifications.getMultiple = function (nids, callback) { notification.datetimeISO = utils.toISOString(notification.datetime); if (notification.bodyLong) { - notification.bodyLong = S(notification.bodyLong).escapeHTML().s; + notification.bodyLong = utils.escapeHTML(notification.bodyLong); } notification.user = usersData[index]; @@ -470,7 +469,7 @@ Notifications.merge = function (notifications, callback) { }); var numUsers = usernames.length; - var title = S(notifications[modifyIndex].topicTitle || '').decodeHTMLEntities().s; + var title = utils.decodeHTMLEntities(notifications[modifyIndex].topicTitle || ''); var titleEscaped = title.replace(/%/g, '%').replace(/,/g, ','); titleEscaped = titleEscaped ? (', ' + titleEscaped) : ''; diff --git a/src/posts/parse.js b/src/posts/parse.js index d46eaa800d..d6f7165f19 100644 --- a/src/posts/parse.js +++ b/src/posts/parse.js @@ -4,12 +4,12 @@ var async = require('async'); var nconf = require('nconf'); var url = require('url'); var winston = require('winston'); -var S = require('string'); var meta = require('../meta'); var cache = require('./cache'); var plugins = require('../plugins'); var translator = require('../translator'); +var utils = require('../utils'); module.exports = function (Posts) { Posts.urlRegex = { @@ -82,7 +82,6 @@ module.exports = function (Posts) { function sanitizeSignature(signature) { signature = translator.escape(signature); - var string = S(signature); var tagsToStrip = []; if (parseInt(meta.config['signatures:disableLinks'], 10) === 1) { @@ -93,6 +92,6 @@ module.exports = function (Posts) { tagsToStrip.push('img'); } - return tagsToStrip.length ? string.stripTags.apply(string, tagsToStrip).s : signature; + return utils.stripHTMLTags(signature, tagsToStrip); } }; diff --git a/src/posts/summary.js b/src/posts/summary.js index 6c1b6d1958..902a003445 100644 --- a/src/posts/summary.js +++ b/src/posts/summary.js @@ -3,7 +3,6 @@ var async = require('async'); var validator = require('validator'); -var S = require('string'); var _ = require('lodash'); var topics = require('../topics'); @@ -144,8 +143,7 @@ module.exports = function (Posts) { function stripTags(content) { if (content) { - var s = S(content); - return s.stripTags.apply(s, utils.stripTags).s; + return utils.stripHTMLTags(content, utils.stripTags); } return content; } diff --git a/src/socket.io/helpers.js b/src/socket.io/helpers.js index 0f158cd080..cbc01aff60 100644 --- a/src/socket.io/helpers.js +++ b/src/socket.io/helpers.js @@ -2,7 +2,6 @@ var async = require('async'); var winston = require('winston'); -var S = require('string'); var db = require('../database'); var websockets = require('./index'); @@ -12,6 +11,7 @@ var topics = require('../topics'); var privileges = require('../privileges'); var notifications = require('../notifications'); var plugins = require('../plugins'); +var utils = require('../utils'); var SocketHelpers = {}; @@ -105,7 +105,7 @@ SocketHelpers.sendNotificationToPostOwner = function (pid, fromuid, command, not }, next); }, function (results, next) { - var title = S(results.topicTitle).decodeHTMLEntities().s; + var title = utils.decodeHTMLEntities(results.topicTitle); var titleEscaped = title.replace(/%/g, '%').replace(/,/g, ','); notifications.create({ @@ -151,7 +151,7 @@ SocketHelpers.sendNotificationToTopicOwner = function (tid, fromuid, command, no return; } ownerUid = results.topicData.uid; - var title = S(results.topicData.title).decodeHTMLEntities().s; + var title = utils.decodeHTMLEntities(results.topicData.title); var titleEscaped = title.replace(/%/g, '%').replace(/,/g, ','); notifications.create({ diff --git a/src/socket.io/posts/edit.js b/src/socket.io/posts/edit.js index 00ae540496..48f750c2ce 100644 --- a/src/socket.io/posts/edit.js +++ b/src/socket.io/posts/edit.js @@ -3,12 +3,12 @@ var async = require('async'); var validator = require('validator'); var _ = require('lodash'); -var S = require('string'); var posts = require('../../posts'); var groups = require('../../groups'); var events = require('../../events'); var meta = require('../../meta'); +var utils = require('../../utils'); var websockets = require('../index'); module.exports = function (SocketPosts) { @@ -20,7 +20,7 @@ module.exports = function (SocketPosts) { } // Trim and remove HTML (latter for composers that send in HTML, like redactor) - var contentLen = S(data.content).stripTags().s.trim().length; + var contentLen = utils.stripHTMLTags(data.content).trim().length; if (data.title && data.title.length < parseInt(meta.config.minimumTitleLength, 10)) { return callback(new Error('[[error:title-too-short, ' + meta.config.minimumTitleLength + ']]')); diff --git a/src/topics/create.js b/src/topics/create.js index f5a51e7e77..edb1f1b84d 100644 --- a/src/topics/create.js +++ b/src/topics/create.js @@ -4,7 +4,7 @@ var async = require('async'); var _ = require('lodash'); var validator = require('validator'); -var S = require('string'); + var db = require('../database'); var utils = require('../utils'); var plugins = require('../plugins'); @@ -343,7 +343,7 @@ module.exports = function (Topics) { function check(item, min, max, minError, maxError, callback) { // Trim and remove HTML (latter for composers that send in HTML, like redactor) if (typeof item === 'string') { - item = S(item).stripTags().s.trim(); + item = utils.stripHTMLTags(item).trim(); } if (item === null || item === undefined || item.length < parseInt(min, 10)) { diff --git a/src/topics/follow.js b/src/topics/follow.js index f1981766a2..f1bad3ccf3 100644 --- a/src/topics/follow.js +++ b/src/topics/follow.js @@ -2,7 +2,6 @@ 'use strict'; var async = require('async'); -var S = require('string'); var winston = require('winston'); var db = require('../database'); @@ -13,6 +12,7 @@ var privileges = require('../privileges'); var meta = require('../meta'); var emailer = require('../emailer'); var plugins = require('../plugins'); +var utils = require('../utils'); module.exports = function (Topics) { Topics.toggleFollow = function (tid, uid, callback) { @@ -214,7 +214,7 @@ module.exports = function (Topics) { title = postData.topic.title; if (title) { - title = S(title).decodeHTMLEntities().s; + title = utils.decodeHTMLEntities(title); titleEscaped = title.replace(/%/g, '%').replace(/,/g, ','); } diff --git a/src/topics/teaser.js b/src/topics/teaser.js index 09d4d048ae..2827e74d41 100644 --- a/src/topics/teaser.js +++ b/src/topics/teaser.js @@ -3,7 +3,6 @@ var async = require('async'); var _ = require('lodash'); -var S = require('string'); var winston = require('winston'); var meta = require('../meta'); @@ -91,8 +90,7 @@ module.exports = function (Topics) { if (tidToPost[topic.tid]) { tidToPost[topic.tid].index = meta.config.teaserPost === 'first' ? 1 : counts[index]; if (tidToPost[topic.tid].content) { - var s = S(tidToPost[topic.tid].content); - tidToPost[topic.tid].content = s.stripTags.apply(s, utils.stripTags).s; + tidToPost[topic.tid].content = utils.stripHTMLTags(tidToPost[topic.tid].content, utils.stripTags); } } return tidToPost[topic.tid]; diff --git a/src/user/notifications.js b/src/user/notifications.js index 4e2dcba7e8..a446a9a822 100644 --- a/src/user/notifications.js +++ b/src/user/notifications.js @@ -3,12 +3,12 @@ var async = require('async'); var winston = require('winston'); -var S = require('string'); var db = require('../database'); var meta = require('../meta'); var notifications = require('../notifications'); var privileges = require('../privileges'); +var utils = require('../utils'); var UserNotifications = module.exports; @@ -281,7 +281,7 @@ UserNotifications.sendTopicNotificationToFollowers = function (uid, topicData, p var title = topicData.title; if (title) { - title = S(title).decodeHTMLEntities().s; + title = utils.decodeHTMLEntities(title); } notifications.create({ diff --git a/src/user/profile.js b/src/user/profile.js index dbdcbcba85..70dffeebe6 100644 --- a/src/user/profile.js +++ b/src/user/profile.js @@ -2,7 +2,6 @@ 'use strict'; var async = require('async'); -var S = require('string'); var utils = require('../utils'); var meta = require('../meta'); @@ -61,7 +60,7 @@ module.exports = function (User) { } else if (field === 'fullname') { return updateFullname(updateUid, data.fullname, next); } else if (field === 'signature') { - data[field] = S(data[field]).stripTags().s; + data[field] = utils.stripHTMLTags(data[field]); } User.setUserField(updateUid, field, data[field], next); diff --git a/test/build.js b/test/build.js index 1c346ad621..35471d0fd6 100644 --- a/test/build.js +++ b/test/build.js @@ -1,6 +1,5 @@ 'use strict'; -var string = require('string'); var path = require('path'); var fs = require('fs'); var assert = require('assert'); diff --git a/test/utils.js b/test/utils.js index d6821d9d4b..e76c1b9bff 100644 --- a/test/utils.js +++ b/test/utils.js @@ -16,6 +16,28 @@ describe('Utility Methods', function () { var $ = global.$; global.window = window; + // https://github.com/jprichardson/string.js/blob/master/test/string.test.js + it('should decode HTML entities', function (done) { + assert.strictEqual( + utils.decodeHTMLEntities('Ken Thompson & Dennis Ritchie'), + 'Ken Thompson & Dennis Ritchie' + ); + assert.strictEqual( + utils.decodeHTMLEntities('3 < 4'), + '3 < 4' + ); + assert.strictEqual( + utils.decodeHTMLEntities('http://'), + 'http://' + ); + done(); + }); + it('should strip HTML tags', function (done) { + assert.strictEqual(utils.stripHTMLTags('

just some text

'), 'just some text'); + assert.strictEqual(utils.stripHTMLTags('

just some text

', ['p']), 'just some text'); + done(); + }); + it('should preserve case if requested', function (done) { var slug = utils.slugify('UPPER CASE', true); assert.equal(slug, 'UPPER-CASE'); From 190eea5691ac5a4a8f89154d5ef7a1b77c7c32fa Mon Sep 17 00:00:00 2001 From: Peter Jaszkowiak Date: Fri, 13 Oct 2017 21:17:57 -0600 Subject: [PATCH 09/44] Remove this useless check --- public/src/modules/translator.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/public/src/modules/translator.js b/public/src/modules/translator.js index cd0d3c75c1..18a42e4e8f 100644 --- a/public/src/modules/translator.js +++ b/public/src/modules/translator.js @@ -42,7 +42,6 @@ } }(function (utils, load, warn) { var assign = Object.assign || jQuery.extend; - function classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } function escapeHTML(str) { return utils.decodeHTMLEntities( @@ -62,7 +61,6 @@ */ function Translator(language) { var self = this; - classCallCheck(self, Translator); if (!language) { throw new TypeError('Parameter `language` must be a language string. Received ' + language + (language === '' ? '(empty string)' : '')); From 189008af7533ca6518d376aecc6d66ec46c1eee4 Mon Sep 17 00:00:00 2001 From: Peter Jaszkowiak Date: Sat, 14 Oct 2017 13:47:05 -0600 Subject: [PATCH 10/44] Optimize translator - Use `slice` less - Skip iterations with `indexOf` --- public/src/modules/translator.js | 198 ++++++++++++++++--------------- 1 file changed, 100 insertions(+), 98 deletions(-) diff --git a/public/src/modules/translator.js b/public/src/modules/translator.js index 18a42e4e8f..b98ad68abe 100644 --- a/public/src/modules/translator.js +++ b/public/src/modules/translator.js @@ -117,10 +117,10 @@ var level = 0; while (i + 2 <= len) { - if (text.slice(i, i + 2) === '[[') { + if (text[i] === '[' && text[i + 1] === '[') { level += 1; i += 1; - } else if (text.slice(i, i + 2) === ']]') { + } else if (text[i] === ']' && text[i + 1] === ']') { level -= 1; i += 1; } else if (level === 0 && text[i] === ',' && text[i - 1] !== '\\') { @@ -134,111 +134,113 @@ return arr; } + // move to the first [[ + cursor = str.indexOf('[[', cursor); + // the loooop, we'll go to where the cursor // is equal to the length of the string since // slice doesn't include the ending index - while (cursor + 2 <= len) { - // if the current position in the string looks - // like the beginning of a translation string - if (str.slice(cursor, cursor + 2) === '[[') { - // split the string from the last break - // to the character before the cursor - // add that to the result array - toTranslate.push(str.slice(lastBreak, cursor)); - // set the cursor position past the beginning - // brackets of the translation string - cursor += 2; - // set the last break to our current - // spot since we just broke the string - lastBreak = cursor; - // we're in a token now - inToken = true; + while (cursor + 2 <= len && cursor !== -1) { + // split the string from the last break + // to the character before the cursor + // add that to the result array + toTranslate.push(str.slice(lastBreak, cursor)); + // set the cursor position past the beginning + // brackets of the translation string + cursor += 2; + // set the last break to our current + // spot since we just broke the string + lastBreak = cursor; + // we're in a token now + inToken = true; - // the current level of nesting of the translation strings - var level = 0; - var sliced; - // validating the current string is actually a translation - var textBeforeColonFound = false; - var colonFound = false; - var textAfterColonFound = false; - var commaAfterNameFound = false; + // the current level of nesting of the translation strings + var level = 0; + var char0; + var char1; + // validating the current string is actually a translation + var textBeforeColonFound = false; + var colonFound = false; + var textAfterColonFound = false; + var commaAfterNameFound = false; - while (cursor + 2 <= len) { - sliced = str.slice(cursor, cursor + 2); - // found some text after the double bracket, - // so this is probably a translation string - if (!textBeforeColonFound && validTextRegex.test(sliced[0])) { - textBeforeColonFound = true; - cursor += 1; - // found a colon, so this is probably a translation string - } else if (textBeforeColonFound && !colonFound && sliced[0] === ':') { - colonFound = true; - cursor += 1; - // found some text after the colon, - // so this is probably a translation string - } else if (colonFound && !textAfterColonFound && validTextRegex.test(sliced[0])) { - textAfterColonFound = true; - cursor += 1; - } else if (textAfterColonFound && !commaAfterNameFound && sliced[0] === ',') { - commaAfterNameFound = true; - cursor += 1; - // a space or comma was found before the name - // this isn't a translation string, so back out - } else if (!(textBeforeColonFound && colonFound && textAfterColonFound && commaAfterNameFound) && - invalidTextRegex.test(sliced[0])) { - cursor += 1; - lastBreak -= 2; - // no longer in a token - inToken = false; - if (level > 0) { - level -= 1; - } else { - break; - } - // if we're at the beginning of another translation string, - // we're nested, so add to our level - } else if (sliced === '[[') { - level += 1; - cursor += 2; - // if we're at the end of a translation string - } else if (sliced === ']]') { - // if we're at the base level, then this is the end - if (level === 0) { - // so grab the name and args - var currentSlice = str.slice(lastBreak, cursor); - var result = split(currentSlice); - var name = result[0]; - var args = result.slice(1); - - // make a backup based on the raw string of the token - // if there are arguments to the token - var backup = ''; - if (args && args.length) { - backup = this.translate(currentSlice); - } - // add the translation promise to the array - toTranslate.push(this.translateKey(name, args, backup)); - // skip past the ending brackets - cursor += 2; - // set this as our last break - lastBreak = cursor; - // and we're no longer in a translation string, - // so continue with the main loop - inToken = false; - break; - } - // otherwise we lower the level + while (cursor + 2 <= len) { + char0 = str[cursor]; + char1 = str[cursor + 1]; + // found some text after the double bracket, + // so this is probably a translation string + if (!textBeforeColonFound && validTextRegex.test(char0)) { + textBeforeColonFound = true; + cursor += 1; + // found a colon, so this is probably a translation string + } else if (textBeforeColonFound && !colonFound && char0 === ':') { + colonFound = true; + cursor += 1; + // found some text after the colon, + // so this is probably a translation string + } else if (colonFound && !textAfterColonFound && validTextRegex.test(char0)) { + textAfterColonFound = true; + cursor += 1; + } else if (textAfterColonFound && !commaAfterNameFound && char0 === ',') { + commaAfterNameFound = true; + cursor += 1; + // a space or comma was found before the name + // this isn't a translation string, so back out + } else if (!(textBeforeColonFound && colonFound && textAfterColonFound && commaAfterNameFound) && + invalidTextRegex.test(char0)) { + cursor += 1; + lastBreak -= 2; + // no longer in a token + inToken = false; + if (level > 0) { level -= 1; - // and skip past the ending brackets - cursor += 2; } else { - // otherwise just move to the next character - cursor += 1; + break; } + // if we're at the beginning of another translation string, + // we're nested, so add to our level + } else if (char0 === '[' && char1 === '[') { + level += 1; + cursor += 2; + // if we're at the end of a translation string + } else if (char0 === ']' && char1 === ']') { + // if we're at the base level, then this is the end + if (level === 0) { + // so grab the name and args + var currentSlice = str.slice(lastBreak, cursor); + var result = split(currentSlice); + var name = result[0]; + var args = result.slice(1); + + // make a backup based on the raw string of the token + // if there are arguments to the token + var backup = ''; + if (args && args.length) { + backup = this.translate(currentSlice); + } + // add the translation promise to the array + toTranslate.push(this.translateKey(name, args, backup)); + // skip past the ending brackets + cursor += 2; + // set this as our last break + lastBreak = cursor; + // and we're no longer in a translation string, + // so continue with the main loop + inToken = false; + break; + } + // otherwise we lower the level + level -= 1; + // and skip past the ending brackets + cursor += 2; + } else { + // otherwise just move to the next character + cursor += 1; } } - // move to the next character - cursor += 1; + + // skip to the next [[ + cursor = str.indexOf('[[', cursor); } // ending string of source @@ -308,7 +310,7 @@ * Load translation file (or use a cached version), and optionally return the translation of a certain key * @param {string} namespace - The file name of the translation namespace * @param {string} [key] - The key of the specific translation to getJSON - * @returns {Promise<{ [key: string]: string }>|Promise} + * @returns {Promise<{ [key: string]: string } | string>} */ Translator.prototype.getTranslation = function getTranslation(namespace, key) { var translation; From 6a6dc7ef061d1085a1d88d9c854958bab3174ffe Mon Sep 17 00:00:00 2001 From: Baris Usakli Date: Mon, 16 Oct 2017 15:35:46 -0400 Subject: [PATCH 11/44] closes #5990 --- public/src/client/topic/move.js | 8 ++++++-- src/socket.io/topics/move.js | 6 ++++-- src/topics/tools.js | 14 +++++++------- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/public/src/client/topic/move.js b/public/src/client/topic/move.js index 0b969ef6b9..b29ae964e0 100644 --- a/public/src/client/topic/move.js +++ b/public/src/client/topic/move.js @@ -63,11 +63,15 @@ define('forum/topic/move', ['categorySelector'], function (categorySelector) { } function moveTopics() { - socket.emit(Move.moveAll ? 'topics.moveAll' : 'topics.move', { + var data = { tids: Move.tids, cid: selectedCategory.cid, currentCid: Move.currentCid, - }, function (err) { + }; + + $(window).trigger('action:topic.move', data); + + socket.emit(Move.moveAll ? 'topics.moveAll' : 'topics.move', data, function (err) { modal.modal('hide'); if (err) { diff --git a/src/socket.io/topics/move.js b/src/socket.io/topics/move.js index efd6562d18..21d7543fb8 100644 --- a/src/socket.io/topics/move.js +++ b/src/socket.io/topics/move.js @@ -28,7 +28,8 @@ module.exports = function (SocketTopics) { function (_topicData, next) { topicData = _topicData; topicData.tid = tid; - topics.tools.move(tid, data.cid, socket.uid, next); + data.uid = socket.uid; + topics.tools.move(tid, data, next); }, function (next) { socketHelpers.emitToTopicAndCategory('event:topic_moved', topicData); @@ -59,8 +60,9 @@ module.exports = function (SocketTopics) { categories.getAllTopicIds(data.currentCid, 0, -1, next); }, function (tids, next) { + data.uid = socket.uid; async.eachLimit(tids, 50, function (tid, next) { - topics.tools.move(tid, data.cid, socket.uid, next); + topics.tools.move(tid, data, next); }, next); }, ], callback); diff --git a/src/topics/tools.js b/src/topics/tools.js index 743aa9d38d..bcd0b537e0 100644 --- a/src/topics/tools.js +++ b/src/topics/tools.js @@ -243,9 +243,10 @@ module.exports = function (Topics) { ], callback); }; - topicTools.move = function (tid, cid, uid, callback) { + topicTools.move = function (tid, data, callback) { var topic; var oldCid; + var cid = data.cid; async.waterfall([ function (next) { Topics.exists(tid, next); @@ -311,12 +312,11 @@ module.exports = function (Topics) { }); }, function (next) { - plugins.fireHook('action:topic.move', { - tid: tid, - fromCid: oldCid, - toCid: cid, - uid: uid, - }); + var hookData = _.clone(data); + hookData.fromCid = oldCid; + hookData.toCid = cid; + hookData.tid = tid; + plugins.fireHook('action:topic.move', hookData); next(); }, ], callback); From 3c45b3edb61d8528b30390dbabb62c5946579b0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Tue, 31 Oct 2017 09:04:07 -0400 Subject: [PATCH 12/44] string is removed on develop --- src/messaging.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/messaging.js b/src/messaging.js index 51bd78e77a..9ceda65b7d 100644 --- a/src/messaging.js +++ b/src/messaging.js @@ -72,7 +72,7 @@ function canGet(hook, callerUid, uid, callback) { } Messaging.parse = function (message, fromuid, uid, roomId, isNew, callback) { - message = S(message).stripTags().decodeHTMLEntities().s; + message = utils.decodeHTMLEntities(utils.stripHTMLTags(message)); message = validator.escape(String(message)); plugins.fireHook('filter:parse.raw', message, function (err, parsed) { From 2b99fb0c38352ae0c30a79397fa9f54c0690d6e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ch=E1=BA=BF=20Ti=E1=BB=87p=20Ch=C3=A2n=20Khoa?= Date: Wed, 1 Nov 2017 19:20:04 +0700 Subject: [PATCH 13/44] update node version requirement on README (#6025) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7a2fc06c55..5af55c3d9d 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,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 4 or greater ([installation/upgrade instructions](https://github.com/nodesource/distributions)) +* A version of Node.js at least 6 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 c9465403f5b2dad6896c5c788c353bce7f3cf9ea Mon Sep 17 00:00:00 2001 From: Baris Usakli Date: Wed, 1 Nov 2017 12:05:06 -0400 Subject: [PATCH 14/44] closes #6023 --- public/src/utils.js | 2 +- test/utils.js | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/public/src/utils.js b/public/src/utils.js index 328c73ebe0..0e300d2772 100644 --- a/public/src/utils.js +++ b/public/src/utils.js @@ -333,7 +333,7 @@ var pattern = (tags || ['']).map(function (tag) { return utils.escapeRegexChars(tag); }).join('|'); - return String(str).replace(new RegExp(']*>', 'gi'), ''); + return String(str).replace(new RegExp('<(\\/)?(' + (pattern || '[^\\s>]+') + ')(\\s+[^<>]*?)?\\s*(\\/)?>', 'gi'), ''); }, invalidUnicodeChars: XRegExp('[^\\p{L}\\s\\d\\-_]', 'g'), diff --git a/test/utils.js b/test/utils.js index e76c1b9bff..4c69b235e0 100644 --- a/test/utils.js +++ b/test/utils.js @@ -35,6 +35,8 @@ describe('Utility Methods', function () { it('should strip HTML tags', function (done) { assert.strictEqual(utils.stripHTMLTags('

just some text

'), 'just some text'); assert.strictEqual(utils.stripHTMLTags('

just some text

', ['p']), 'just some text'); + assert.strictEqual(utils.stripHTMLTags('just some text', ['i']), 'just some text'); + assert.strictEqual(utils.stripHTMLTags('just some
text
', ['i', 'div']), 'just some text'); done(); }); From e3a764929053352a59dcaf60c9b8d2cac66ef842 Mon Sep 17 00:00:00 2001 From: Baris Usakli Date: Wed, 1 Nov 2017 12:31:15 -0400 Subject: [PATCH 15/44] closes #6027 --- src/views/emails/notif_post.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/emails/notif_post.tpl b/src/views/emails/notif_post.tpl index 3f0d8ad3a6..168743512f 100644 --- a/src/views/emails/notif_post.tpl +++ b/src/views/emails/notif_post.tpl @@ -31,7 +31,7 @@ From b7cda028304d61b93165f12b166c676b7ad70595 Mon Sep 17 00:00:00 2001 From: Andrew Rodrigues Date: Wed, 1 Nov 2017 15:02:56 -0400 Subject: [PATCH 16/44] added security email --- .github/ISSUE_TEMPLATE.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index ede6d5ee5c..3fc954feb4 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,6 +1,7 @@ From ec38b18e34cbb210b9b721291fd8df9b11392979 Mon Sep 17 00:00:00 2001 From: Peter Jaszkowiak Date: Wed, 1 Nov 2017 18:57:52 -0600 Subject: [PATCH 17/44] Always compare password with a hash Prevents quick response when user / email doesn't exist --- src/password.js | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/src/password.js b/src/password.js index 6cc1e1776a..439c0592d7 100644 --- a/src/password.js +++ b/src/password.js @@ -4,16 +4,39 @@ var path = require('path'); var fork = require('./meta/debugFork'); -exports.hash = function (rounds, password, callback) { +function hash(rounds, password, callback) { forkChild({ type: 'hash', rounds: rounds, password: password }, callback); -}; +} -exports.compare = function (password, hash, callback) { - if (!hash || !password) { - return setImmediate(callback, null, false); +exports.hash = hash; + +var fakeHashCache; +function getFakeHash(callback) { + if (fakeHashCache) { + return callback(null, fakeHashCache); } - forkChild({ type: 'compare', password: password, hash: hash }, callback); -}; + + hash(12, Math.random().toString(), function (err, hash) { + if (err) { + return callback(err); + } + + fakeHashCache = hash; + callback(null, fakeHashCache); + }); +} + +function compare(password, hash, callback) { + getFakeHash(function (err, fakeHash) { + if (err) { + return callback(err); + } + + forkChild({ type: 'compare', password: password, hash: hash || fakeHash }, callback); + }); +} + +exports.compare = compare; function forkChild(message, callback) { var child = fork(path.join(__dirname, 'bcrypt')); From e609e497b3f6a9fe556147727731ea6a4ffe2bf7 Mon Sep 17 00:00:00 2001 From: Peter Jaszkowiak Date: Wed, 1 Nov 2017 18:58:44 -0600 Subject: [PATCH 18/44] Provide more error information to logs Provides full stack instead of just message --- app.js | 8 +++++--- loader.js | 9 +++++---- nodebb | 23 +++++++++++++---------- src/analytics.js | 2 +- src/database/mongo.js | 4 ++-- src/database/redis.js | 4 ++-- src/events.js | 5 +++-- src/flags.js | 2 +- src/groups/membership.js | 2 +- src/install.js | 2 +- src/logger.js | 2 +- src/meta/build.js | 4 ++-- src/meta/cacheBuster.js | 2 +- src/meta/languages.js | 9 +-------- src/middleware/render.js | 2 +- src/notifications.js | 2 +- src/plugins.js | 6 +++--- src/plugins/data.js | 2 +- src/reset.js | 8 ++++---- src/user/digest.js | 2 +- src/webserver.js | 19 +++++++++---------- 21 files changed, 59 insertions(+), 60 deletions(-) diff --git a/app.js b/app.js index 7a222b930c..d1bf1c7c08 100644 --- a/app.js +++ b/app.js @@ -192,7 +192,8 @@ function setup() { process.stdout.write('\n' + separator + '\n\n'); if (err) { - winston.error('There was a problem completing NodeBB setup: ', err.message); + winston.error('There was a problem completing NodeBB setup', err); + throw err; } else { if (data.hasOwnProperty('password')) { process.stdout.write('An administrative user was automatically created for you:\n'); @@ -270,9 +271,10 @@ function activate() { }, ], function (err) { if (err) { - winston.error(err.message); + winston.error('An error occurred during plugin activation', err); + throw err; } - process.exit(err ? 1 : 0); + process.exit(0); }); } diff --git a/loader.js b/loader.js index a2df1b33b7..434e2cce5c 100644 --- a/loader.js +++ b/loader.js @@ -158,8 +158,8 @@ Loader.restart = function () { fs.readFile(pathToConfig, { encoding: 'utf-8' }, function (err, configFile) { if (err) { - console.log('Error reading config : ' + err.message); - process.exit(); + console.error('Error reading config'); + throw err; } var conf = JSON.parse(configFile); @@ -240,11 +240,12 @@ fs.open(path.join(__dirname, 'config.json'), 'r', function (err) { Loader.start, ], function (err) { if (err) { - console.log('[loader] Error during startup: ' + err.message); + console.error('[loader] Error during startup'); + throw err; } }); } else { // No config detected, kickstart web installer - require('child_process').fork('app'); + fork('app'); } }); diff --git a/nodebb b/nodebb index c0edb6e39c..d745bb1c6c 100755 --- a/nodebb +++ b/nodebb @@ -451,7 +451,8 @@ var commands = { return upgradeProc.on('close', function (err) { if (err) { - process.stdout.write('\nError'.red + ': ' + err.message + '\n'); + process.stdout.write('Error occurred during upgrade'); + throw err; } }); } @@ -472,19 +473,21 @@ var commands = { var upgradeProc = fork(arr); upgradeProc.on('close', next); + upgradeProc.on('error', next); }, ], function (err) { if (err) { - process.stdout.write('\nError'.red + ': ' + err.message + '\n'); - } else { - var message = 'NodeBB Upgrade Complete!'; - // some consoles will return undefined/zero columns, so just use 2 spaces in upgrade script if we can't get our column count - var columns = process.stdout.columns; - var spaces = columns ? new Array(Math.floor(columns / 2) - (message.length / 2) + 1).join(' ') : ' '; - - process.stdout.write('OK\n'.green); - process.stdout.write('\n' + spaces + message.green.bold + '\n\n'.reset); + process.stdout.write('Error occurred during upgrade'); + throw err; } + + var message = 'NodeBB Upgrade Complete!'; + // some consoles will return undefined/zero columns, so just use 2 spaces in upgrade script if we can't get our column count + var columns = process.stdout.columns; + var spaces = columns ? new Array(Math.floor(columns / 2) - (message.length / 2) + 1).join(' ') : ' '; + + process.stdout.write('OK\n'.green); + process.stdout.write('\n' + spaces + message.green.bold + '\n\n'.reset); }); }, }, diff --git a/src/analytics.js b/src/analytics.js index b4922cf184..1f98beb476 100644 --- a/src/analytics.js +++ b/src/analytics.js @@ -100,7 +100,7 @@ Analytics.writeData = function (callback) { async.parallel(dbQueue, function (err) { if (err) { - winston.error('[analytics] Encountered error while writing analytics to data store: ' + err.message); + winston.error('[analytics] Encountered error while writing analytics to data store', err); } callback(err); }); diff --git a/src/database/mongo.js b/src/database/mongo.js index fbe4b38a03..04addc07d5 100644 --- a/src/database/mongo.js +++ b/src/database/mongo.js @@ -104,7 +104,7 @@ mongoModule.init = function (callback) { mongoClient.connect(connString, connOptions, function (err, _db) { if (err) { - winston.error('NodeBB could not connect to your Mongo database. Mongo returned the following error: ' + err.message); + winston.error('NodeBB could not connect to your Mongo database. Mongo returned the following error', err); return callback(err); } @@ -164,7 +164,7 @@ mongoModule.createIndices = function (callback) { async.apply(createIndex, 'objects', { expireAt: 1 }, { expireAfterSeconds: 0, background: true }), ], function (err) { if (err) { - winston.error('Error creating index ' + err.message); + winston.error('Error creating index', err); return callback(err); } winston.info('[database] Checking database indices done!'); diff --git a/src/database/redis.js b/src/database/redis.js index 13d87c27bd..e45f8f0ef8 100644 --- a/src/database/redis.js +++ b/src/database/redis.js @@ -99,8 +99,8 @@ redisModule.connect = function (options) { if (dbIdx >= 0) { cxn.select(dbIdx, function (err) { if (err) { - winston.error('NodeBB could not connect to your Redis database. Redis returned the following error: ' + err.message); - process.exit(); + winston.error('NodeBB could not connect to your Redis database. Redis returned the following error', err); + throw err; } }); } diff --git a/src/events.js b/src/events.js index ffce83beb4..65a2c36ad8 100644 --- a/src/events.js +++ b/src/events.js @@ -3,6 +3,7 @@ var async = require('async'); var validator = require('validator'); +var winston = require('winston'); var db = require('./database'); var batch = require('./batch'); @@ -143,8 +144,8 @@ events.output = function () { process.stdout.write('\nDisplaying last ten administrative events...\n'.bold); events.getEvents(0, 9, function (err, events) { if (err) { - process.stdout.write(' Error '.red + String(err.message).reset); - process.exit(1); + winston.error('Error fetching events', err); + throw err; } events.forEach(function (event) { diff --git a/src/flags.js b/src/flags.js index a578accf18..209a5166d5 100644 --- a/src/flags.js +++ b/src/flags.js @@ -64,7 +64,7 @@ Flags.init = function (callback) { }, }, function (err, data) { if (err) { - winston.error('[flags/init] Could not retrieve filters (error: ' + err.message + ')'); + winston.error('[flags/init] Could not retrieve filters', err); data.filters = {}; } diff --git a/src/groups/membership.js b/src/groups/membership.js index 42c3932805..93dedc57c2 100644 --- a/src/groups/membership.js +++ b/src/groups/membership.js @@ -52,7 +52,7 @@ module.exports = function (Groups) { hidden: 1, }, function (err) { if (err && err.message !== '[[error:group-already-exists]]') { - winston.error('[groups.join] Could not create new hidden group: ' + err.message); + winston.error('[groups.join] Could not create new hidden group', err); return callback(err); } next(); diff --git a/src/install.js b/src/install.js index aa862f5338..3a69595599 100644 --- a/src/install.js +++ b/src/install.js @@ -542,7 +542,7 @@ install.save = function (server_conf, callback) { fs.writeFile(serverConfigPath, JSON.stringify(server_conf, null, 4), function (err) { if (err) { - winston.error('Error saving server configuration! ' + err.message); + winston.error('Error saving server configuration!', err); return callback(err); } diff --git a/src/logger.js b/src/logger.js index d00886b718..632c9b84ca 100644 --- a/src/logger.js +++ b/src/logger.js @@ -88,7 +88,7 @@ Logger.open = function (value) { if (stream) { stream.on('error', function (err) { - winston.error(err.message); + winston.error(err); }); } } else { diff --git a/src/meta/build.js b/src/meta/build.js index 26bec8b5e8..b01a92cb86 100644 --- a/src/meta/build.js +++ b/src/meta/build.js @@ -103,7 +103,7 @@ function beforeBuild(targets, callback) { async.apply(plugins.prepareForBuild, targets), ], function (err) { if (err) { - winston.error('[build] Encountered error preparing for build: ' + err.message); + winston.error('[build] Encountered error preparing for build', err); return callback(err); } @@ -203,7 +203,7 @@ function build(targets, callback) { }, ], function (err) { if (err) { - winston.error('[build] Encountered error during build step: ' + err.message); + winston.error('[build] Encountered error during build step', err); return callback(err); } diff --git a/src/meta/cacheBuster.js b/src/meta/cacheBuster.js index d402fe16f7..f88cebb680 100644 --- a/src/meta/cacheBuster.js +++ b/src/meta/cacheBuster.js @@ -33,7 +33,7 @@ exports.read = function read(callback) { fs.readFile(filePath, function (err, buffer) { if (err) { - winston.warn('[cache-buster] could not read cache buster: ' + err.message); + winston.warn('[cache-buster] could not read cache buster', err); return callback(null, generate()); } diff --git a/src/meta/languages.js b/src/meta/languages.js index 3cf1359f4a..3b9f3c3a9e 100644 --- a/src/meta/languages.js +++ b/src/meta/languages.js @@ -1,6 +1,5 @@ 'use strict'; -var winston = require('winston'); var path = require('path'); var async = require('async'); var fs = require('fs'); @@ -182,11 +181,5 @@ exports.build = function buildLanguages(callback) { }, getTranslationTree, writeLanguageFiles, - ], function (err) { - if (err) { - winston.error('[build] Language build failed: ' + err.message); - throw err; - } - callback(); - }); + ], callback); }; diff --git a/src/middleware/render.js b/src/middleware/render.js index bf3cb03638..851ee1f85f 100644 --- a/src/middleware/render.js +++ b/src/middleware/render.js @@ -132,7 +132,7 @@ module.exports = function (middleware) { try { p = decodeURIComponent(p); } catch (err) { - winston.error(err.message); + winston.error(err); p = ''; } p = validator.escape(String(p)); diff --git a/src/notifications.js b/src/notifications.js index 919d5a22e4..cbc58dae8e 100644 --- a/src/notifications.js +++ b/src/notifications.js @@ -396,7 +396,7 @@ Notifications.prune = function (callback) { }, ], function (err) { if (err) { - winston.error('Encountered error pruning notifications: ' + err.message); + winston.error('Encountered error pruning notifications', err); } callback(err); }); diff --git a/src/plugins.js b/src/plugins.js index 10db23eb65..cc15650357 100644 --- a/src/plugins.js +++ b/src/plugins.js @@ -63,7 +63,7 @@ Plugins.init = function (nbbApp, nbbMiddleware, callback) { Plugins.reload(function (err) { if (err) { - winston.error('[plugins] NodeBB encountered a problem while loading plugins', err.message); + winston.error('[plugins] NodeBB encountered a problem while loading plugins', err); return callback(err); } @@ -132,7 +132,7 @@ Plugins.reloadRoutes = function (callback) { var controllers = require('./controllers'); Plugins.fireHook('static:app.load', { app: app, router: router, middleware: middleware, controllers: controllers }, function (err) { if (err) { - winston.error('[plugins] Encountered error while executing post-router plugins hooks: ' + err.message); + winston.error('[plugins] Encountered error while executing post-router plugins hooks', err); return callback(err); } @@ -218,7 +218,7 @@ Plugins.list = function (matching, callback) { json: true, }, function (err, res, body) { if (err) { - winston.error('Error parsing plugins : ' + err.message); + winston.error('Error parsing plugins', err); return callback(err); } diff --git a/src/plugins/data.js b/src/plugins/data.js index 1fe4b2e861..b793a365d0 100644 --- a/src/plugins/data.js +++ b/src/plugins/data.js @@ -69,7 +69,7 @@ function loadPluginInfo(pluginPath, callback) { } catch (err) { var pluginDir = path.basename(pluginPath); - winston.error('[plugins/' + pluginDir + '] Error in plugin.json or package.json! ' + err.message); + winston.error('[plugins/' + pluginDir + '] Error in plugin.json or package.json!', err); return callback(new Error('[[error:parse-error]]')); } diff --git a/src/reset.js b/src/reset.js index 3d2fab2e0f..d45c48deb5 100644 --- a/src/reset.js +++ b/src/reset.js @@ -13,8 +13,8 @@ var Reset = {}; Reset.reset = function (callback) { db.init(function (err) { if (err) { - winston.error(err.message); - process.exit(1); + winston.error(err); + throw err; } if (nconf.get('t')) { @@ -50,7 +50,7 @@ Reset.reset = function (callback) { if (!err) { winston.info('[reset] Reset complete.'); } else { - winston.error('[reset] Errors were encountered while resetting your forum settings: %s', err.message); + winston.error('[reset] Errors were encountered while resetting your forum settings: %s', err); } callback(); @@ -141,7 +141,7 @@ function resetPlugin(pluginId, callback) { }, ], function (err) { if (err) { - winston.error('[reset] Could not disable plugin: %s encountered error %s', pluginId, err.message); + winston.error('[reset] Could not disable plugin: %s encountered error %s', pluginId, err); } else if (active) { winston.info('[reset] Plugin `%s` disabled', pluginId); } else { diff --git a/src/user/digest.js b/src/user/digest.js index ffd4f9031e..9a6a81cfcb 100644 --- a/src/user/digest.js +++ b/src/user/digest.js @@ -45,7 +45,7 @@ Digest.execute = function (payload, callback) { }, ], function (err, count) { if (err) { - winston.error('[user/jobs] Could not send digests (' + payload.interval + '): ' + err.message); + winston.error('[user/jobs] Could not send digests (' + payload.interval + ')', err); } else { winston.info('[user/jobs] Digest (' + payload.interval + ') scheduling completed. ' + count + ' email(s) sent.'); } diff --git a/src/webserver.js b/src/webserver.js index bfc472b8ea..dc7c70770c 100644 --- a/src/webserver.js +++ b/src/webserver.js @@ -43,13 +43,13 @@ if (nconf.get('ssl')) { module.exports.server = server; server.on('error', function (err) { - winston.error(err); if (err.code === 'EADDRINUSE') { - winston.error('NodeBB address in use, exiting...'); - process.exit(1); + winston.error('NodeBB address in use, exiting...', err); } else { - throw err; + winston.error(err); } + + throw err; }); module.exports.listen = function (callback) { @@ -301,13 +301,12 @@ function listen(callback) { if (isSocket) { oldUmask = process.umask('0000'); module.exports.testSocket(socketPath, function (err) { - if (!err) { - server.listen.apply(server, args); - } else { - winston.error('[startup] NodeBB was unable to secure domain socket access (' + socketPath + ')'); - winston.error('[startup] ' + err.message); - process.exit(); + if (err) { + winston.error('[startup] NodeBB was unable to secure domain socket access (' + socketPath + ')', err); + throw err; } + + server.listen.apply(server, args); }); } else { server.listen.apply(server, args); From 3853c741d3a191e4788c61b6bb4e18be35820741 Mon Sep 17 00:00:00 2001 From: "Misty (Bot)" Date: Thu, 2 Nov 2017 09:25:12 +0000 Subject: [PATCH 19/44] Latest translations and fallbacks --- public/language/ar/admin/manage/post-queue.json | 3 ++- public/language/ar/admin/menu.json | 2 +- public/language/ar/admin/settings/pagination.json | 2 ++ public/language/ar/error.json | 3 ++- public/language/ar/flags.json | 6 +++++- public/language/ar/pages.json | 1 + public/language/ar/unread.json | 4 +++- public/language/ar/user.json | 3 +++ public/language/bg/admin/manage/post-queue.json | 3 ++- public/language/bg/admin/menu.json | 2 +- public/language/bg/admin/settings/pagination.json | 2 ++ public/language/bg/error.json | 3 ++- public/language/bg/flags.json | 6 +++++- public/language/bg/pages.json | 1 + public/language/bg/unread.json | 4 +++- public/language/bg/user.json | 3 +++ public/language/bn/admin/manage/post-queue.json | 3 ++- public/language/bn/admin/menu.json | 2 +- public/language/bn/admin/settings/pagination.json | 2 ++ public/language/bn/error.json | 3 ++- public/language/bn/flags.json | 6 +++++- public/language/bn/pages.json | 1 + public/language/bn/unread.json | 4 +++- public/language/bn/user.json | 3 +++ public/language/cs/admin/manage/post-queue.json | 3 ++- public/language/cs/admin/menu.json | 2 +- public/language/cs/admin/settings/pagination.json | 2 ++ public/language/cs/error.json | 3 ++- public/language/cs/flags.json | 6 +++++- public/language/cs/pages.json | 1 + public/language/cs/unread.json | 4 +++- public/language/cs/user.json | 3 +++ public/language/da/admin/manage/post-queue.json | 3 ++- public/language/da/admin/menu.json | 2 +- public/language/da/admin/settings/pagination.json | 2 ++ public/language/da/error.json | 3 ++- public/language/da/flags.json | 6 +++++- public/language/da/pages.json | 1 + public/language/da/unread.json | 4 +++- public/language/da/user.json | 3 +++ public/language/de/admin/manage/post-queue.json | 3 ++- public/language/de/admin/menu.json | 2 +- public/language/de/admin/settings/pagination.json | 2 ++ public/language/de/error.json | 3 ++- public/language/de/flags.json | 6 +++++- public/language/de/pages.json | 1 + public/language/de/unread.json | 4 +++- public/language/de/user.json | 3 +++ public/language/el/admin/manage/post-queue.json | 3 ++- public/language/el/admin/menu.json | 2 +- public/language/el/admin/settings/pagination.json | 2 ++ public/language/el/error.json | 3 ++- public/language/el/flags.json | 6 +++++- public/language/el/pages.json | 1 + public/language/el/unread.json | 4 +++- public/language/el/user.json | 3 +++ public/language/en-US/admin/manage/post-queue.json | 3 ++- public/language/en-US/admin/menu.json | 2 +- public/language/en-US/admin/settings/pagination.json | 2 ++ public/language/en-US/error.json | 3 ++- public/language/en-US/flags.json | 6 +++++- public/language/en-US/pages.json | 1 + public/language/en-US/unread.json | 4 +++- public/language/en-US/user.json | 3 +++ public/language/en-x-pirate/admin/manage/post-queue.json | 3 ++- public/language/en-x-pirate/admin/menu.json | 2 +- public/language/en-x-pirate/admin/settings/pagination.json | 2 ++ public/language/en-x-pirate/error.json | 3 ++- public/language/en-x-pirate/flags.json | 6 +++++- public/language/en-x-pirate/pages.json | 1 + public/language/en-x-pirate/unread.json | 4 +++- public/language/en-x-pirate/user.json | 3 +++ public/language/es/admin/manage/post-queue.json | 3 ++- public/language/es/admin/menu.json | 2 +- public/language/es/admin/settings/pagination.json | 2 ++ public/language/es/error.json | 3 ++- public/language/es/flags.json | 6 +++++- public/language/es/pages.json | 1 + public/language/es/unread.json | 4 +++- public/language/es/user.json | 3 +++ public/language/et/admin/manage/post-queue.json | 3 ++- public/language/et/admin/menu.json | 2 +- public/language/et/admin/settings/pagination.json | 2 ++ public/language/et/error.json | 3 ++- public/language/et/flags.json | 6 +++++- public/language/et/pages.json | 1 + public/language/et/unread.json | 4 +++- public/language/et/user.json | 3 +++ public/language/fa-IR/admin/manage/post-queue.json | 3 ++- public/language/fa-IR/admin/menu.json | 2 +- public/language/fa-IR/admin/settings/pagination.json | 2 ++ public/language/fa-IR/error.json | 3 ++- public/language/fa-IR/flags.json | 6 +++++- public/language/fa-IR/pages.json | 1 + public/language/fa-IR/unread.json | 4 +++- public/language/fa-IR/user.json | 3 +++ public/language/fi/admin/manage/post-queue.json | 3 ++- public/language/fi/admin/menu.json | 2 +- public/language/fi/admin/settings/pagination.json | 2 ++ public/language/fi/error.json | 3 ++- public/language/fi/flags.json | 6 +++++- public/language/fi/pages.json | 1 + public/language/fi/unread.json | 4 +++- public/language/fi/user.json | 3 +++ public/language/fr/admin/manage/post-queue.json | 3 ++- public/language/fr/admin/menu.json | 2 +- public/language/fr/admin/settings/pagination.json | 2 ++ public/language/fr/error.json | 3 ++- public/language/fr/flags.json | 6 +++++- public/language/fr/pages.json | 1 + public/language/fr/unread.json | 4 +++- public/language/fr/user.json | 3 +++ public/language/gl/admin/manage/post-queue.json | 3 ++- public/language/gl/admin/menu.json | 2 +- public/language/gl/admin/settings/pagination.json | 2 ++ public/language/gl/error.json | 3 ++- public/language/gl/flags.json | 6 +++++- public/language/gl/pages.json | 1 + public/language/gl/unread.json | 4 +++- public/language/gl/user.json | 3 +++ public/language/he/admin/manage/post-queue.json | 3 ++- public/language/he/admin/menu.json | 2 +- public/language/he/admin/settings/pagination.json | 2 ++ public/language/he/error.json | 3 ++- public/language/he/flags.json | 6 +++++- public/language/he/pages.json | 1 + public/language/he/unread.json | 4 +++- public/language/he/user.json | 3 +++ public/language/hr/admin/manage/post-queue.json | 3 ++- public/language/hr/admin/menu.json | 2 +- public/language/hr/admin/settings/pagination.json | 2 ++ public/language/hr/error.json | 3 ++- public/language/hr/flags.json | 6 +++++- public/language/hr/pages.json | 1 + public/language/hr/unread.json | 4 +++- public/language/hr/user.json | 3 +++ public/language/hu/admin/manage/post-queue.json | 3 ++- public/language/hu/admin/menu.json | 2 +- public/language/hu/admin/settings/pagination.json | 2 ++ public/language/hu/error.json | 3 ++- public/language/hu/flags.json | 6 +++++- public/language/hu/pages.json | 1 + public/language/hu/unread.json | 4 +++- public/language/hu/user.json | 3 +++ public/language/id/admin/manage/post-queue.json | 3 ++- public/language/id/admin/menu.json | 2 +- public/language/id/admin/settings/pagination.json | 2 ++ public/language/id/error.json | 3 ++- public/language/id/flags.json | 6 +++++- public/language/id/pages.json | 1 + public/language/id/unread.json | 4 +++- public/language/id/user.json | 3 +++ public/language/it/admin/manage/post-queue.json | 3 ++- public/language/it/admin/menu.json | 2 +- public/language/it/admin/settings/pagination.json | 2 ++ public/language/it/error.json | 3 ++- public/language/it/flags.json | 6 +++++- public/language/it/pages.json | 1 + public/language/it/unread.json | 4 +++- public/language/it/user.json | 3 +++ public/language/ja/admin/manage/post-queue.json | 3 ++- public/language/ja/admin/menu.json | 2 +- public/language/ja/admin/settings/pagination.json | 2 ++ public/language/ja/error.json | 3 ++- public/language/ja/flags.json | 6 +++++- public/language/ja/pages.json | 1 + public/language/ja/unread.json | 4 +++- public/language/ja/user.json | 3 +++ public/language/ko/admin/manage/post-queue.json | 3 ++- public/language/ko/admin/menu.json | 2 +- public/language/ko/admin/settings/pagination.json | 2 ++ public/language/ko/error.json | 3 ++- public/language/ko/flags.json | 6 +++++- public/language/ko/pages.json | 1 + public/language/ko/unread.json | 4 +++- public/language/ko/user.json | 3 +++ public/language/lt/admin/manage/post-queue.json | 3 ++- public/language/lt/admin/menu.json | 2 +- public/language/lt/admin/settings/pagination.json | 2 ++ public/language/lt/error.json | 3 ++- public/language/lt/flags.json | 6 +++++- public/language/lt/pages.json | 1 + public/language/lt/unread.json | 4 +++- public/language/lt/user.json | 3 +++ public/language/ms/admin/manage/post-queue.json | 3 ++- public/language/ms/admin/menu.json | 2 +- public/language/ms/admin/settings/pagination.json | 2 ++ public/language/ms/error.json | 3 ++- public/language/ms/flags.json | 6 +++++- public/language/ms/pages.json | 1 + public/language/ms/unread.json | 4 +++- public/language/ms/user.json | 3 +++ public/language/nb/admin/manage/post-queue.json | 3 ++- public/language/nb/admin/menu.json | 2 +- public/language/nb/admin/settings/pagination.json | 2 ++ public/language/nb/error.json | 3 ++- public/language/nb/flags.json | 6 +++++- public/language/nb/pages.json | 1 + public/language/nb/unread.json | 4 +++- public/language/nb/user.json | 3 +++ public/language/nl/admin/manage/post-queue.json | 3 ++- public/language/nl/admin/menu.json | 2 +- public/language/nl/admin/settings/pagination.json | 2 ++ public/language/nl/error.json | 3 ++- public/language/nl/flags.json | 6 +++++- public/language/nl/pages.json | 1 + public/language/nl/unread.json | 4 +++- public/language/nl/user.json | 3 +++ public/language/pl/admin/manage/post-queue.json | 3 ++- public/language/pl/admin/menu.json | 2 +- public/language/pl/admin/settings/pagination.json | 2 ++ public/language/pl/error.json | 3 ++- public/language/pl/flags.json | 6 +++++- public/language/pl/pages.json | 1 + public/language/pl/unread.json | 4 +++- public/language/pl/user.json | 3 +++ public/language/pt-BR/admin/manage/post-queue.json | 3 ++- public/language/pt-BR/admin/menu.json | 2 +- public/language/pt-BR/admin/settings/pagination.json | 2 ++ public/language/pt-BR/error.json | 3 ++- public/language/pt-BR/flags.json | 6 +++++- public/language/pt-BR/pages.json | 1 + public/language/pt-BR/unread.json | 4 +++- public/language/pt-BR/user.json | 3 +++ public/language/pt-PT/admin/manage/post-queue.json | 3 ++- public/language/pt-PT/admin/menu.json | 2 +- public/language/pt-PT/admin/settings/pagination.json | 2 ++ public/language/pt-PT/error.json | 3 ++- public/language/pt-PT/flags.json | 6 +++++- public/language/pt-PT/pages.json | 1 + public/language/pt-PT/unread.json | 4 +++- public/language/pt-PT/user.json | 3 +++ public/language/ro/admin/manage/post-queue.json | 3 ++- public/language/ro/admin/menu.json | 2 +- public/language/ro/admin/settings/pagination.json | 2 ++ public/language/ro/error.json | 3 ++- public/language/ro/flags.json | 6 +++++- public/language/ro/pages.json | 1 + public/language/ro/unread.json | 4 +++- public/language/ro/user.json | 3 +++ public/language/ru/admin/manage/post-queue.json | 3 ++- public/language/ru/admin/menu.json | 2 +- public/language/ru/admin/settings/pagination.json | 2 ++ public/language/ru/error.json | 3 ++- public/language/ru/flags.json | 6 +++++- public/language/ru/pages.json | 1 + public/language/ru/unread.json | 4 +++- public/language/ru/user.json | 3 +++ public/language/rw/admin/manage/post-queue.json | 3 ++- public/language/rw/admin/menu.json | 2 +- public/language/rw/admin/settings/pagination.json | 2 ++ public/language/rw/error.json | 3 ++- public/language/rw/flags.json | 6 +++++- public/language/rw/pages.json | 1 + public/language/rw/unread.json | 4 +++- public/language/rw/user.json | 3 +++ public/language/sc/admin/manage/post-queue.json | 3 ++- public/language/sc/admin/menu.json | 2 +- public/language/sc/admin/settings/pagination.json | 2 ++ public/language/sc/error.json | 3 ++- public/language/sc/flags.json | 6 +++++- public/language/sc/pages.json | 1 + public/language/sc/unread.json | 4 +++- public/language/sc/user.json | 3 +++ public/language/sk/admin/manage/post-queue.json | 3 ++- public/language/sk/admin/menu.json | 2 +- public/language/sk/admin/settings/pagination.json | 2 ++ public/language/sk/error.json | 3 ++- public/language/sk/flags.json | 6 +++++- public/language/sk/pages.json | 1 + public/language/sk/unread.json | 4 +++- public/language/sk/user.json | 3 +++ public/language/sl/admin/manage/post-queue.json | 3 ++- public/language/sl/admin/menu.json | 2 +- public/language/sl/admin/settings/pagination.json | 2 ++ public/language/sl/error.json | 3 ++- public/language/sl/flags.json | 6 +++++- public/language/sl/pages.json | 1 + public/language/sl/unread.json | 4 +++- public/language/sl/user.json | 3 +++ public/language/sr/admin/manage/post-queue.json | 3 ++- public/language/sr/admin/menu.json | 2 +- public/language/sr/admin/settings/pagination.json | 2 ++ public/language/sr/error.json | 3 ++- public/language/sr/flags.json | 6 +++++- public/language/sr/pages.json | 1 + public/language/sr/unread.json | 4 +++- public/language/sr/user.json | 3 +++ public/language/sv/admin/manage/post-queue.json | 3 ++- public/language/sv/admin/menu.json | 2 +- public/language/sv/admin/settings/pagination.json | 2 ++ public/language/sv/error.json | 3 ++- public/language/sv/flags.json | 6 +++++- public/language/sv/pages.json | 1 + public/language/sv/unread.json | 4 +++- public/language/sv/user.json | 3 +++ public/language/th/admin/manage/post-queue.json | 3 ++- public/language/th/admin/menu.json | 2 +- public/language/th/admin/settings/pagination.json | 2 ++ public/language/th/error.json | 3 ++- public/language/th/flags.json | 6 +++++- public/language/th/pages.json | 1 + public/language/th/unread.json | 4 +++- public/language/th/user.json | 3 +++ public/language/tr/admin/manage/post-queue.json | 3 ++- public/language/tr/admin/menu.json | 2 +- public/language/tr/admin/settings/pagination.json | 2 ++ public/language/tr/error.json | 3 ++- public/language/tr/flags.json | 6 +++++- public/language/tr/pages.json | 1 + public/language/tr/unread.json | 4 +++- public/language/tr/user.json | 3 +++ public/language/uk/admin/manage/post-queue.json | 3 ++- public/language/uk/admin/menu.json | 2 +- public/language/uk/admin/settings/pagination.json | 2 ++ public/language/uk/error.json | 3 ++- public/language/uk/pages.json | 1 + public/language/uk/unread.json | 4 +++- public/language/uk/user.json | 3 +++ public/language/vi/admin/manage/post-queue.json | 3 ++- public/language/vi/admin/menu.json | 2 +- public/language/vi/admin/settings/pagination.json | 2 ++ public/language/vi/error.json | 3 ++- public/language/vi/flags.json | 6 +++++- public/language/vi/pages.json | 1 + public/language/vi/unread.json | 4 +++- public/language/vi/user.json | 3 +++ public/language/zh-CN/admin/manage/post-queue.json | 3 ++- public/language/zh-CN/admin/menu.json | 2 +- public/language/zh-CN/admin/settings/pagination.json | 2 ++ public/language/zh-CN/error.json | 3 ++- public/language/zh-CN/flags.json | 6 +++++- public/language/zh-CN/pages.json | 1 + public/language/zh-CN/unread.json | 4 +++- public/language/zh-CN/user.json | 3 +++ public/language/zh-TW/admin/manage/post-queue.json | 3 ++- public/language/zh-TW/admin/menu.json | 2 +- public/language/zh-TW/admin/settings/pagination.json | 2 ++ public/language/zh-TW/error.json | 3 ++- public/language/zh-TW/flags.json | 6 +++++- public/language/zh-TW/pages.json | 1 + public/language/zh-TW/unread.json | 4 +++- public/language/zh-TW/user.json | 3 +++ 343 files changed, 812 insertions(+), 214 deletions(-) diff --git a/public/language/ar/admin/manage/post-queue.json b/public/language/ar/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/ar/admin/manage/post-queue.json +++ b/public/language/ar/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/ar/admin/menu.json b/public/language/ar/admin/menu.json index 3ec4ad41c4..d42af99bce 100644 --- a/public/language/ar/admin/menu.json +++ b/public/language/ar/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/ar/admin/settings/pagination.json b/public/language/ar/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/ar/admin/settings/pagination.json +++ b/public/language/ar/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/ar/error.json b/public/language/ar/error.json index eda629fd3e..75f6a0ee07 100644 --- a/public/language/ar/error.json +++ b/public/language/ar/error.json @@ -11,7 +11,7 @@ "invalid-uid": "مستخدم غير موجود", "invalid-username": "اسم المستخدم غير مقبول", "invalid-email": "البريد الاكتروني غير مقبول", - "invalid-title": "عنوان غير صحيح", + "invalid-title": "Invalid title", "invalid-user-data": "بيانات المستخدم غير صحيحة", "invalid-password": "كلمة السر غير مقبولة", "invalid-login-credentials": "Invalid login credentials", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "لايمكن حظر مدبر نظام آخر.", "cant-remove-last-admin": "رجاءًا ، أضف مدير أخر قبل حذف صلاحيات الإدارة من حسابك.", "cant-delete-admin": "رجاءًا أزل صلاحيات الإدارة قبل حذف الحساب. ", + "invalid-image": "Invalid image", "invalid-image-type": "نوع الصورة غير مدعوم. الأنواع المدعومة هي : %1", "invalid-image-extension": "امتداد الصورة غير مدعوم.", "invalid-file-type": "صيغة الملف غير مدعومة. الأنواع المدعومة هي: %1", diff --git a/public/language/ar/flags.json b/public/language/ar/flags.json index c4bfed6f23..d05a5b25a8 100644 --- a/public/language/ar/flags.json +++ b/public/language/ar/flags.json @@ -54,7 +54,11 @@ "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Reason for reporting this content...", "modal-submit": "Submit Report", - "modal-submit-success": "Content has been flagged for moderation." + "modal-submit-success": "Content has been flagged for moderation.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/ar/pages.json b/public/language/ar/pages.json index 07d435c625..d13e3758f8 100644 --- a/public/language/ar/pages.json +++ b/public/language/ar/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1's Bookmarked Posts", "account/settings": "خيارات المستخدم", "account/watched": "Topics watched by %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Posts upvoted by %1", "account/downvoted": "Posts downvoted by %1", "account/best": "Best posts made by %1", diff --git a/public/language/ar/unread.json b/public/language/ar/unread.json index 2d139f5e75..54471cd600 100644 --- a/public/language/ar/unread.json +++ b/public/language/ar/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "تم تحديد المواضيع على أنها مقروءة!", "all-topics": "كل المواضيع", "new-topics": "مواضيع جديدة", - "watched-topics": "المواضيع المتابعة" + "watched-topics": "المواضيع المتابعة", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/ar/user.json b/public/language/ar/user.json index 92841dfd93..6436c70082 100644 --- a/public/language/ar/user.json +++ b/public/language/ar/user.json @@ -25,6 +25,7 @@ "reputation": "السمعة", "bookmarks": "Bookmarks", "watched": "متابع", + "ignored": "Ignored", "followers": "المتابعون", "following": "يتابع", "aboutme": "معلومة عنك او السيرة الذاتية", @@ -86,6 +87,7 @@ "has_no_posts": "This user hasn't posted anything yet.", "has_no_topics": "This user hasn't posted any topics yet.", "has_no_watched_topics": "This user hasn't watched any topics yet.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "This user hasn't upvoted any posts yet.", "has_no_downvoted_posts": "This user hasn't downvoted any posts yet.", "has_no_voted_posts": "This user has no voted posts", @@ -94,6 +96,7 @@ "paginate_description": "Paginate topics and posts instead of using infinite scroll", "topics_per_page": "المواضيع في كل صفحة", "posts_per_page": "الردود في كل صفحة", + "max_items_per_page": "Maximum %1", "notification_sounds": "تشغيل صوت عند تلقي تنبيه", "notifications_and_sounds": "Notifications & Sounds", "incoming-message-sound": "Incoming message sound", diff --git a/public/language/bg/admin/manage/post-queue.json b/public/language/bg/admin/manage/post-queue.json index 7d9b6a7527..a03685fa13 100644 --- a/public/language/bg/admin/manage/post-queue.json +++ b/public/language/bg/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Заглавие", "content": "Съдържание", "posted": "Публикувано", - "reply-to": "Отговор на „%1“" + "reply-to": "Отговор на „%1“", + "content-editable": "Можете да щракнете върху всеки от текстовете, за да ги редактирате преди публикуване." } \ No newline at end of file diff --git a/public/language/bg/admin/menu.json b/public/language/bg/admin/menu.json index ed1ca5b5c1..cd521781a7 100644 --- a/public/language/bg/admin/menu.json +++ b/public/language/bg/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Изход", "view-forum": "Преглед на форума", - "search.placeholder": "Търсене…", + "search.placeholder": "Търсене на настройки", "search.no-results": "Няма резултати…", "search.search-forum": "Търсене във форума за ", "search.keep-typing": "Продължете да пишете, за да видите още резултати…", diff --git a/public/language/bg/admin/settings/pagination.json b/public/language/bg/admin/settings/pagination.json index d6895c8e40..06654639f6 100644 --- a/public/language/bg/admin/settings/pagination.json +++ b/public/language/bg/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Разделяне на темите и публикациите на страници, вместо да се превърта безкрайно.", "topics": "Странициране в темите", "posts-per-page": "Публикации на страница", + "max-posts-per-page": "Максимален брой публикации на страница", "categories": "Странициране на категориите", "topics-per-page": "Теми на страница", + "max-topics-per-page": "Максимален брой теми на страница", "initial-num-load": "Начален брой теми, които да бъдат заредени за „непрочетени“, „скорошни“ и „популярни“" } \ No newline at end of file diff --git a/public/language/bg/error.json b/public/language/bg/error.json index a338b3a062..a8c2bb52ee 100644 --- a/public/language/bg/error.json +++ b/public/language/bg/error.json @@ -11,7 +11,7 @@ "invalid-uid": "Грешен идентификатор на потребител", "invalid-username": "Грешно потребителско име", "invalid-email": "Грешна е-поща", - "invalid-title": "Грешно заглавие!", + "invalid-title": "Грешно заглавие", "invalid-user-data": "Грешни потребителски данни", "invalid-password": "Грешна парола", "invalid-login-credentials": "Неправилни данни за удостоверяване", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Не можете да блокирате другите администратори!", "cant-remove-last-admin": "Вие сте единственият администратор. Добавете друг потребител като администратор, преди да премахнете себе си като администратор", "cant-delete-admin": "Премахнете администраторските права от този акаунт, преди да го изтриете.", + "invalid-image": "Грешно изображение", "invalid-image-type": "Грешен тип на изображение. Позволените типове са: %1", "invalid-image-extension": "Грешно разширение на изображението", "invalid-file-type": "Грешен тип на файл. Позволените типове са: %1", diff --git a/public/language/bg/flags.json b/public/language/bg/flags.json index 138feac5c5..c509fd338b 100644 --- a/public/language/bg/flags.json +++ b/public/language/bg/flags.json @@ -54,7 +54,11 @@ "modal-body": "Моля, посочете причината за докладването на %1 %2 за преглед. Или използвайте някой от бутоните за бързо докладване, ако са приложими.", "modal-reason-spam": "Спам", "modal-reason-offensive": "Обидно", + "modal-reason-other": "Друго (опишете по-долу)", "modal-reason-custom": "Причина за докладването на това съдържание…", "modal-submit": "Изпращане на доклада", - "modal-submit-success": "Съдържанието беше докладвано на модераторите." + "modal-submit-success": "Съдържанието беше докладвано на модераторите.", + "modal-submit-confirm": "Потвърждаване на докладването", + "modal-submit-confirm-text": "Вече сте описали специалната си причина. Наистина ли искате да изпратите доклада си по бързата процедура?", + "modal-submit-confirm-text-help": "Изпращането на доклад по бързата процедура ще премахне описаната от Вас специалната причина." } \ No newline at end of file diff --git a/public/language/bg/pages.json b/public/language/bg/pages.json index 566c7139a8..118f5e35bf 100644 --- a/public/language/bg/pages.json +++ b/public/language/bg/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "Отметнатите публикации на %1", "account/settings": "Потребителски настройки", "account/watched": "Теми, следени от %1", + "account/ignored": "Теми, пренебрегвани от %1", "account/upvoted": "Публикации, получили положителен глас от %1", "account/downvoted": "Публикации, получили отрицателен глас от %1", "account/best": "Най-добрите публикации от %1", diff --git a/public/language/bg/unread.json b/public/language/bg/unread.json index 6734415693..56aa07a052 100644 --- a/public/language/bg/unread.json +++ b/public/language/bg/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Темите бяха отбелязани като прочетени!", "all-topics": "Всички теми", "new-topics": "Нови теми", - "watched-topics": "Следени теми" + "watched-topics": "Следени теми", + "unreplied-topics": "Теми без отговор", + "multiple-categories-selected": "Избрани са няколко" } \ No newline at end of file diff --git a/public/language/bg/user.json b/public/language/bg/user.json index ac0249f530..453d45c0a5 100644 --- a/public/language/bg/user.json +++ b/public/language/bg/user.json @@ -25,6 +25,7 @@ "reputation": "Репутация", "bookmarks": "Отметки", "watched": "Следени", + "ignored": "Пренебрегвани", "followers": "Последователи", "following": "Следва", "aboutme": "За мен", @@ -86,6 +87,7 @@ "has_no_posts": "Този потребител не е публикувал нищо досега.", "has_no_topics": "Този потребител не е създавал теми досега.", "has_no_watched_topics": "Този потребител не е следил нито една тема досега.", + "has_no_ignored_topics": "Този потребител не е пренебрегнали нито една тема досега.", "has_no_upvoted_posts": "Този потребител не е гласувал положително досега.", "has_no_downvoted_posts": "Този потребител не е гласувал отрицателно досега.", "has_no_voted_posts": "Този потребител не е гласувал досега.", @@ -94,6 +96,7 @@ "paginate_description": "Разделяне на темите и публикациите на страници, вместо да се превърта безкрайно", "topics_per_page": "Теми на страница", "posts_per_page": "Публикации на страница", + "max_items_per_page": "Най-много %1", "notification_sounds": "Изпълняване на звук, когато получите известие", "notifications_and_sounds": "Известия и звуци", "incoming-message-sound": "Звук за входящо съобщение", diff --git a/public/language/bn/admin/manage/post-queue.json b/public/language/bn/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/bn/admin/manage/post-queue.json +++ b/public/language/bn/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/bn/admin/menu.json b/public/language/bn/admin/menu.json index 3ec4ad41c4..d42af99bce 100644 --- a/public/language/bn/admin/menu.json +++ b/public/language/bn/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/bn/admin/settings/pagination.json b/public/language/bn/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/bn/admin/settings/pagination.json +++ b/public/language/bn/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/bn/error.json b/public/language/bn/error.json index 4c7d4958a1..c63665943f 100644 --- a/public/language/bn/error.json +++ b/public/language/bn/error.json @@ -11,7 +11,7 @@ "invalid-uid": "ভুল ব্যবহারকারী নাম্বার", "invalid-username": "ভুল ইউজারনেম", "invalid-email": "ভুল ইমেইল", - "invalid-title": "ভুল শিরোনাম", + "invalid-title": "Invalid title", "invalid-user-data": "ভুল ব্যবহারকারী তথ্য", "invalid-password": "ভুল পাসওয়ার্ড", "invalid-login-credentials": "Invalid login credentials", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "আপনি অন্য এ্যাডমিনদের নিষিদ্ধ করতে পারেন না!", "cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin", "cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.", + "invalid-image": "Invalid image", "invalid-image-type": "Invalid image type. Allowed types are: %1", "invalid-image-extension": "Invalid image extension", "invalid-file-type": "Invalid file type. Allowed types are: %1", diff --git a/public/language/bn/flags.json b/public/language/bn/flags.json index c4bfed6f23..d05a5b25a8 100644 --- a/public/language/bn/flags.json +++ b/public/language/bn/flags.json @@ -54,7 +54,11 @@ "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Reason for reporting this content...", "modal-submit": "Submit Report", - "modal-submit-success": "Content has been flagged for moderation." + "modal-submit-success": "Content has been flagged for moderation.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/bn/pages.json b/public/language/bn/pages.json index 04ed29d13f..d1f23db6de 100644 --- a/public/language/bn/pages.json +++ b/public/language/bn/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1's Bookmarked Posts", "account/settings": "User Settings", "account/watched": "Topics watched by %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Posts upvoted by %1", "account/downvoted": "Posts downvoted by %1", "account/best": "Best posts made by %1", diff --git a/public/language/bn/unread.json b/public/language/bn/unread.json index 578e246f3b..96d8b7b4c1 100644 --- a/public/language/bn/unread.json +++ b/public/language/bn/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "পঠিত হিসেবে চিহ্নিত টপিকসমূহ", "all-topics": "All Topics", "new-topics": "New Topics", - "watched-topics": "Watched Topics" + "watched-topics": "Watched Topics", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/bn/user.json b/public/language/bn/user.json index 765d2d9b60..a9688ce532 100644 --- a/public/language/bn/user.json +++ b/public/language/bn/user.json @@ -25,6 +25,7 @@ "reputation": "সন্মাননা", "bookmarks": "Bookmarks", "watched": "দেখা হয়েছে", + "ignored": "Ignored", "followers": "যাদের অনুসরণ করছেন", "following": "যারা আপনাকে অনুসরণ করছে", "aboutme": "আমার সম্পর্কে: ", @@ -86,6 +87,7 @@ "has_no_posts": "এই সদস্য এখন পর্যন্ত কোন পোস্ট করেন নি", "has_no_topics": "এই সদস্য এখনো কোন টপিক করেন নি", "has_no_watched_topics": "এই সদস্য এখনো কোন টপিক দেখেন নি", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "This user hasn't upvoted any posts yet.", "has_no_downvoted_posts": "This user hasn't downvoted any posts yet.", "has_no_voted_posts": "This user has no voted posts", @@ -94,6 +96,7 @@ "paginate_description": "ইনফাইনাইট স্ক্রলের বদলে টপিক ও পোস্টের জন্য পেজিনেশন ব্যাবহার করা হোক", "topics_per_page": "প্রতি পেজে কতগুলো টপিক থাকবে", "posts_per_page": "প্রতি পেইজে কতগুলো পোষ্ট থাকবে", + "max_items_per_page": "Maximum %1", "notification_sounds": "নোটিফিকেশনের জন্য নোটিফিকেশন সাউন্ড এনাবল করুন", "notifications_and_sounds": "Notifications & Sounds", "incoming-message-sound": "Incoming message sound", diff --git a/public/language/cs/admin/manage/post-queue.json b/public/language/cs/admin/manage/post-queue.json index 106d290340..57fe1f8ab7 100644 --- a/public/language/cs/admin/manage/post-queue.json +++ b/public/language/cs/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Název", "content": "Obsah", "posted": "Přidáno", - "reply-to": "Odpovědět na \"%1\"" + "reply-to": "Odpovědět na \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/cs/admin/menu.json b/public/language/cs/admin/menu.json index f0ff8082bf..edc5afd806 100644 --- a/public/language/cs/admin/menu.json +++ b/public/language/cs/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Odhlásit", "view-forum": "Zobrazit fórum", - "search.placeholder": "Hledat...", + "search.placeholder": "Search for settings", "search.no-results": "Žádné výsledky…", "search.search-forum": "Prohledat fórum pro ", "search.keep-typing": "Pište dále pro zobrazení výsledků…", diff --git a/public/language/cs/admin/settings/pagination.json b/public/language/cs/admin/settings/pagination.json index c14a17e694..dc1faf68da 100644 --- a/public/language/cs/admin/settings/pagination.json +++ b/public/language/cs/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Stránkovat témata a příspěvky namísto nekonečného posouvání", "topics": "Stránkování témat", "posts-per-page": "Příspěvků na stránku", + "max-posts-per-page": "Maximum posts per page", "categories": "Stránkování kategorii", "topics-per-page": "Témat na stránku", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Počáteční počet témat pro načtení u nepřečtených, posledních a polulárních" } \ No newline at end of file diff --git a/public/language/cs/error.json b/public/language/cs/error.json index 8dc3ec28c6..465ada0755 100644 --- a/public/language/cs/error.json +++ b/public/language/cs/error.json @@ -11,7 +11,7 @@ "invalid-uid": "Neplatné ID uživatele", "invalid-username": "Neplatné uživatelské jméno", "invalid-email": "Neplatný e-mail", - "invalid-title": "Neplatný titulek.", + "invalid-title": "Invalid title", "invalid-user-data": "Neplatná uživatelská data", "invalid-password": "Neplatné heslo", "invalid-login-credentials": "Neplatné přihlašovací údaje", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Nemůžete zablokovat jiné správce.", "cant-remove-last-admin": "Jste jediným správcem. Před vlastním odebráním oprávnění správce nejdříve přidejte jiného uživatele jako správce", "cant-delete-admin": "Před odstraněním účtu mu nejprve odeberte oprávnění správce.", + "invalid-image": "Invalid image", "invalid-image-type": "Neplatný typ obrázku. Povolené typy jsou: %1", "invalid-image-extension": "Neplatná přípona obrázku", "invalid-file-type": "Neplatný typ souboru. Povolené typy jsou: %1", diff --git a/public/language/cs/flags.json b/public/language/cs/flags.json index 78d15bf1e7..e221f6965b 100644 --- a/public/language/cs/flags.json +++ b/public/language/cs/flags.json @@ -54,7 +54,11 @@ "modal-body": "Zadejte váš důvod k označení %1 %2 pro kontrolu. Nebo použijte tlačítko je-li dostupné.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Urážlivé", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Důvod ohlášení tohoto obsahu…", "modal-submit": "Předat hlášení", - "modal-submit-success": "Obsah byl označen pro moderaci." + "modal-submit-success": "Obsah byl označen pro moderaci.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/cs/pages.json b/public/language/cs/pages.json index a8eda5a6b7..8a0270a9db 100644 --- a/public/language/cs/pages.json +++ b/public/language/cs/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1's zazáložkované příspěvky", "account/settings": "Uživatelské nastavení", "account/watched": "Témata sledovaná uživatelem %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Souhlasí s příspěvkem %1", "account/downvoted": "Nesouhlasí s příspěvkem %1", "account/best": "Nejlepší příspěvky od %1", diff --git a/public/language/cs/unread.json b/public/language/cs/unread.json index 569af1e577..60381d5efd 100644 --- a/public/language/cs/unread.json +++ b/public/language/cs/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Téma bylo označeno jako přečtené.", "all-topics": "Všechna témata", "new-topics": "Nová témata", - "watched-topics": "Sledovaná témata" + "watched-topics": "Sledovaná témata", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/cs/user.json b/public/language/cs/user.json index ed167ff50e..1dbf2cd49e 100644 --- a/public/language/cs/user.json +++ b/public/language/cs/user.json @@ -25,6 +25,7 @@ "reputation": "Reputace", "bookmarks": "Záložky", "watched": "Sledován", + "ignored": "Ignored", "followers": "Sledují ho", "following": "Sleduje", "aboutme": "O mně", @@ -86,6 +87,7 @@ "has_no_posts": "Tento uživatel ještě nic nenapsal.", "has_no_topics": "Tento uživatel ještě nezaložil žádné téma.", "has_no_watched_topics": "Tento uživatel zatím nesleduje žádná témata.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "Tento uživatel zatím nevyjádřil souhlas u žádného příspěvku.", "has_no_downvoted_posts": "Tento uživatel zatím nevyjádřil nesouhlas u žádného příspěvku.", "has_no_voted_posts": "Tento uživatel nemá žádné hlasovací příspěvky", @@ -94,6 +96,7 @@ "paginate_description": "Stránkovat témata a příspěvky místo použití nekonečného posunování", "topics_per_page": "Témat na stránce", "posts_per_page": "Příspěvků na stránce", + "max_items_per_page": "Maximum %1", "notification_sounds": "Přehrát zvuk, obdržíte-li oznámení", "notifications_and_sounds": "Upozornění a zvuky", "incoming-message-sound": "Zvuk příchozí zprávy", diff --git a/public/language/da/admin/manage/post-queue.json b/public/language/da/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/da/admin/manage/post-queue.json +++ b/public/language/da/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/da/admin/menu.json b/public/language/da/admin/menu.json index 3ec4ad41c4..d42af99bce 100644 --- a/public/language/da/admin/menu.json +++ b/public/language/da/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/da/admin/settings/pagination.json b/public/language/da/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/da/admin/settings/pagination.json +++ b/public/language/da/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/da/error.json b/public/language/da/error.json index da00cf499f..2165cad861 100644 --- a/public/language/da/error.json +++ b/public/language/da/error.json @@ -11,7 +11,7 @@ "invalid-uid": "Ugyldig Bruger ID", "invalid-username": "Ugyldig Brugernavn", "invalid-email": "Ugyldig Email", - "invalid-title": "Ugylidt titel", + "invalid-title": "Invalid title", "invalid-user-data": "Ugyldig Bruger Data", "invalid-password": "Ugyldig Adgangskode", "invalid-login-credentials": "Invalid login credentials", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Du kan ikke udlukke andre administatrorer!", "cant-remove-last-admin": "Du er den eneste administrator. Tilføj en anden bruger som administrator før du fjerner dig selv som administrator", "cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.", + "invalid-image": "Invalid image", "invalid-image-type": "Invalid billed type. De tilladte typer er: %1", "invalid-image-extension": "Forkert billede filnavnsendelse", "invalid-file-type": "Invalid fil type. Tilladte typer er: %1", diff --git a/public/language/da/flags.json b/public/language/da/flags.json index c4bfed6f23..d05a5b25a8 100644 --- a/public/language/da/flags.json +++ b/public/language/da/flags.json @@ -54,7 +54,11 @@ "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Reason for reporting this content...", "modal-submit": "Submit Report", - "modal-submit-success": "Content has been flagged for moderation." + "modal-submit-success": "Content has been flagged for moderation.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/da/pages.json b/public/language/da/pages.json index 46254d4757..b09a0764bc 100644 --- a/public/language/da/pages.json +++ b/public/language/da/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1's Bookmarked Posts", "account/settings": "Bruger instillinger", "account/watched": "Tråde fulgt af %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Indlæg syntes godt om af %1", "account/downvoted": "Indlæg syntes ikke godt om af %1", "account/best": "Bedste indlæg skrevet af %1", diff --git a/public/language/da/unread.json b/public/language/da/unread.json index d6f483f7e8..c06180cdff 100644 --- a/public/language/da/unread.json +++ b/public/language/da/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Emner markeret som læst!", "all-topics": "Alle Emner", "new-topics": "Nyt Emner", - "watched-topics": "Watched Topics" + "watched-topics": "Watched Topics", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/da/user.json b/public/language/da/user.json index efe3d846f8..9e87553d30 100644 --- a/public/language/da/user.json +++ b/public/language/da/user.json @@ -25,6 +25,7 @@ "reputation": "Omdømme", "bookmarks": "Bogmærker", "watched": "Set", + "ignored": "Ignored", "followers": "Followers", "following": "Følger", "aboutme": "Om mig", @@ -86,6 +87,7 @@ "has_no_posts": "Denne bruger har ikke skrevet noget endnu.", "has_no_topics": "Denne bruger har ikke skrævet nogle tråde endnu.", "has_no_watched_topics": "Denne bruger har ikke fulgt nogle tråde endnu.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "Denne bruger har ikke syntes godt om nogle indlæg endnu.", "has_no_downvoted_posts": "Denne bruger har ikke, syntes ikke godt om nogle indlæg endnu.", "has_no_voted_posts": "Denne bruger har ingen stemte indlæg", @@ -94,6 +96,7 @@ "paginate_description": "Sideinddel emner og indlæg istedet for uendeligt rul", "topics_per_page": "Emner per side", "posts_per_page": "Indlæg per side", + "max_items_per_page": "Maximum %1", "notification_sounds": "Afspil en lyd når du modtager en notifikation", "notifications_and_sounds": "Underretninger & Lyde", "incoming-message-sound": "Indgående besked lyd", diff --git a/public/language/de/admin/manage/post-queue.json b/public/language/de/admin/manage/post-queue.json index 0d6e597b0a..4c6686e57d 100644 --- a/public/language/de/admin/manage/post-queue.json +++ b/public/language/de/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Titel", "content": "Inhalt", "posted": "Gepostet", - "reply-to": "Auf \"%1\" antworten" + "reply-to": "Auf \"%1\" antworten", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/de/admin/menu.json b/public/language/de/admin/menu.json index 4bb3d2a47c..228ae81121 100644 --- a/public/language/de/admin/menu.json +++ b/public/language/de/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Abmelden", "view-forum": "Forum anzeigen", - "search.placeholder": "Suchen...", + "search.placeholder": "Search for settings", "search.no-results": "Keine Ergebnisse...", "search.search-forum": "Suche im Forum nach ", "search.keep-typing": "Gib mehr ein, um die Ergebnisse zu sehen...", diff --git a/public/language/de/admin/settings/pagination.json b/public/language/de/admin/settings/pagination.json index cf2e6456f1..960cf3d0be 100644 --- a/public/language/de/admin/settings/pagination.json +++ b/public/language/de/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Themen in Seiten einteilen anstatt endlos zu scrollen", "topics": "Themen Seitennummerierung", "posts-per-page": "Beiträge pro Seite", + "max-posts-per-page": "Maximum posts per page", "categories": "Kategorie Seitennummerierung", "topics-per-page": "Themen pro Seite", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Ursprüngliche Anzahl an Themen, die bei ungelesen, aktuell und beliebt geladen werden sollen" } \ No newline at end of file diff --git a/public/language/de/error.json b/public/language/de/error.json index d4e2fd96db..8aa2b0eb3c 100644 --- a/public/language/de/error.json +++ b/public/language/de/error.json @@ -11,7 +11,7 @@ "invalid-uid": "Ungültige Benutzer-ID", "invalid-username": "Ungültiger Benutzername", "invalid-email": "Ungültige E-Mail-Adresse", - "invalid-title": "Ungültiger Titel", + "invalid-title": "Invalid title", "invalid-user-data": "Ungültige Benutzerdaten", "invalid-password": "Ungültiges Passwort", "invalid-login-credentials": "Ungültige Zugangsdaten", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Du kannst andere Administratoren nicht sperren!", "cant-remove-last-admin": "Du bist der einzige Administrator. Füge zuerst einen anderen Administrator hinzu, bevor du dich selbst als Administrator entfernst", "cant-delete-admin": "Bevor du versuchst dieses Konto zu löschen, entferne die zugehörigen Administratorrechte.", + "invalid-image": "Invalid image", "invalid-image-type": "Falsche Bildart. Erlaubte Arten sind: %1", "invalid-image-extension": "Ungültige Dateinamenerweiterung", "invalid-file-type": "Ungültiger Dateityp. Erlaubte Typen sind: %1", diff --git a/public/language/de/flags.json b/public/language/de/flags.json index 974ba725ff..78ac4b540d 100644 --- a/public/language/de/flags.json +++ b/public/language/de/flags.json @@ -54,7 +54,11 @@ "modal-body": "Bitte geben Sie den Grund an, weshalb Sie %1 %2 melden wollen. Alternativ können Sie einen der Schnell-Meldungs-Knöpfe verwenden, wenn anwendbar.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Beleidigend", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Grund für die Meldung dieses Inhalts...", "modal-submit": "Meldung abschicken", - "modal-submit-success": "Der Inhalt wurde gemeldet." + "modal-submit-success": "Der Inhalt wurde gemeldet.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/de/pages.json b/public/language/de/pages.json index ec482338f8..0a30df43ac 100644 --- a/public/language/de/pages.json +++ b/public/language/de/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "Lesezeichen von %1", "account/settings": "Benutzer-Einstellungen", "account/watched": "Von %1 beobachtete Themen", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Von %1 positiv bewertete Beiträge", "account/downvoted": "Von %1 negativ bewertete Beiträge", "account/best": "Bestbewertete Beiträge von %1", diff --git a/public/language/de/unread.json b/public/language/de/unread.json index 3c7cabe4ae..4c2de5984c 100644 --- a/public/language/de/unread.json +++ b/public/language/de/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Themen als gelesen markiert!", "all-topics": "Alle Themen", "new-topics": "Neue Themen", - "watched-topics": "Beobachtete Themen" + "watched-topics": "Beobachtete Themen", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/de/user.json b/public/language/de/user.json index ad947ed31d..d6dcbd6753 100644 --- a/public/language/de/user.json +++ b/public/language/de/user.json @@ -25,6 +25,7 @@ "reputation": "Ansehen", "bookmarks": "Lesezeichen", "watched": "Beobachtet", + "ignored": "Ignored", "followers": "Follower", "following": "Folge ich", "aboutme": "Über mich", @@ -86,6 +87,7 @@ "has_no_posts": "Dieser Benutzer hat noch nichts geschrieben.", "has_no_topics": "Dieser Benutzer hat noch keine Themen erstellt.", "has_no_watched_topics": "Dieser Benutzer beobachtet keine Themen.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "Dieser Benutzer hat bisher keine Beiträge positiv bewertet.", "has_no_downvoted_posts": "Dieser Benutzer hat bisher keine Beiträge negativ bewertet.", "has_no_voted_posts": "Dieser Benutzer hat keine bewerteten Beiträge.", @@ -94,6 +96,7 @@ "paginate_description": "Themen und Beiträge in Seiten aufteilen, anstatt unendlich zu scrollen", "topics_per_page": "Themen pro Seite", "posts_per_page": "Beiträge pro Seite", + "max_items_per_page": "Maximum %1", "notification_sounds": "Ton abspielen, wenn du eine Benachrichtigung erhältst", "notifications_and_sounds": "Benachrichtigungen & Klänge", "incoming-message-sound": "Ton bei empfangener Nachricht", diff --git a/public/language/el/admin/manage/post-queue.json b/public/language/el/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/el/admin/manage/post-queue.json +++ b/public/language/el/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/el/admin/menu.json b/public/language/el/admin/menu.json index 3ec4ad41c4..d42af99bce 100644 --- a/public/language/el/admin/menu.json +++ b/public/language/el/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/el/admin/settings/pagination.json b/public/language/el/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/el/admin/settings/pagination.json +++ b/public/language/el/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/el/error.json b/public/language/el/error.json index d67598bea8..39862021c4 100644 --- a/public/language/el/error.json +++ b/public/language/el/error.json @@ -11,7 +11,7 @@ "invalid-uid": "Άκυρο ID Χρήστη", "invalid-username": "Άκυρο Όνομα Χρήστη", "invalid-email": "Άκυρο Email", - "invalid-title": "Άκυρος Τίτλος!", + "invalid-title": "Invalid title", "invalid-user-data": "Άκυρα Δεδομένα Χρήστη", "invalid-password": "Άκυρος Κωδικός", "invalid-login-credentials": "Invalid login credentials", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Δεν μπορείς να αποκλείσεις άλλους διαχειριστές!", "cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin", "cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.", + "invalid-image": "Invalid image", "invalid-image-type": "Invalid image type. Allowed types are: %1", "invalid-image-extension": "Invalid image extension", "invalid-file-type": "Invalid file type. Allowed types are: %1", diff --git a/public/language/el/flags.json b/public/language/el/flags.json index c4bfed6f23..d05a5b25a8 100644 --- a/public/language/el/flags.json +++ b/public/language/el/flags.json @@ -54,7 +54,11 @@ "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Reason for reporting this content...", "modal-submit": "Submit Report", - "modal-submit-success": "Content has been flagged for moderation." + "modal-submit-success": "Content has been flagged for moderation.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/el/pages.json b/public/language/el/pages.json index 8134b09086..f61401c453 100644 --- a/public/language/el/pages.json +++ b/public/language/el/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1's Bookmarked Posts", "account/settings": "Επιλογές Χρήστη", "account/watched": "Topics watched by %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Posts upvoted by %1", "account/downvoted": "Posts downvoted by %1", "account/best": "Best posts made by %1", diff --git a/public/language/el/unread.json b/public/language/el/unread.json index 9d5af4e5a2..3b94a4e306 100644 --- a/public/language/el/unread.json +++ b/public/language/el/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Τα θέματα σημειώθηκαν ως αναγνωσμένα!", "all-topics": "Όλα τα θέματα", "new-topics": "Νέα Θέματα", - "watched-topics": "Watched Topics" + "watched-topics": "Watched Topics", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/el/user.json b/public/language/el/user.json index dd17f88ac4..04c306f982 100644 --- a/public/language/el/user.json +++ b/public/language/el/user.json @@ -25,6 +25,7 @@ "reputation": "Φήμη", "bookmarks": "Bookmarks", "watched": "Watched", + "ignored": "Ignored", "followers": "Ακόλουθοι", "following": "Ακολουθά", "aboutme": "About me", @@ -86,6 +87,7 @@ "has_no_posts": "This user hasn't posted anything yet.", "has_no_topics": "This user hasn't posted any topics yet.", "has_no_watched_topics": "This user hasn't watched any topics yet.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "This user hasn't upvoted any posts yet.", "has_no_downvoted_posts": "This user hasn't downvoted any posts yet.", "has_no_voted_posts": "This user has no voted posts", @@ -94,6 +96,7 @@ "paginate_description": "Paginate topics and posts instead of using infinite scroll", "topics_per_page": "Θέματα ανά σελίδα", "posts_per_page": "Δημοσιεύσεις ανά σελίδα", + "max_items_per_page": "Maximum %1", "notification_sounds": "Play a sound when you receive a notification", "notifications_and_sounds": "Notifications & Sounds", "incoming-message-sound": "Incoming message sound", diff --git a/public/language/en-US/admin/manage/post-queue.json b/public/language/en-US/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/en-US/admin/manage/post-queue.json +++ b/public/language/en-US/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/en-US/admin/menu.json b/public/language/en-US/admin/menu.json index 3ec4ad41c4..d42af99bce 100644 --- a/public/language/en-US/admin/menu.json +++ b/public/language/en-US/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/en-US/admin/settings/pagination.json b/public/language/en-US/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/en-US/admin/settings/pagination.json +++ b/public/language/en-US/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/en-US/error.json b/public/language/en-US/error.json index 85f56efaaa..82d34b5e05 100644 --- a/public/language/en-US/error.json +++ b/public/language/en-US/error.json @@ -11,7 +11,7 @@ "invalid-uid": "Invalid User ID", "invalid-username": "Invalid Username", "invalid-email": "Invalid Email", - "invalid-title": "Invalid title!", + "invalid-title": "Invalid title", "invalid-user-data": "Invalid User Data", "invalid-password": "Invalid Password", "invalid-login-credentials": "Invalid login credentials", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "You can't ban other admins!", "cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin", "cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.", + "invalid-image": "Invalid image", "invalid-image-type": "Invalid image type. Allowed types are: %1", "invalid-image-extension": "Invalid image extension", "invalid-file-type": "Invalid file type. Allowed types are: %1", diff --git a/public/language/en-US/flags.json b/public/language/en-US/flags.json index c4bfed6f23..d05a5b25a8 100644 --- a/public/language/en-US/flags.json +++ b/public/language/en-US/flags.json @@ -54,7 +54,11 @@ "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Reason for reporting this content...", "modal-submit": "Submit Report", - "modal-submit-success": "Content has been flagged for moderation." + "modal-submit-success": "Content has been flagged for moderation.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/en-US/pages.json b/public/language/en-US/pages.json index ddc7317e17..395c403cbb 100644 --- a/public/language/en-US/pages.json +++ b/public/language/en-US/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1's Bookmarked Posts", "account/settings": "User Settings", "account/watched": "Topics watched by %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Posts upvoted by %1", "account/downvoted": "Posts downvoted by %1", "account/best": "Best posts made by %1", diff --git a/public/language/en-US/unread.json b/public/language/en-US/unread.json index c3050ba93e..e7aff0b4aa 100644 --- a/public/language/en-US/unread.json +++ b/public/language/en-US/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Topics marked as read!", "all-topics": "All Topics", "new-topics": "New Topics", - "watched-topics": "Watched Topics" + "watched-topics": "Watched Topics", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/en-US/user.json b/public/language/en-US/user.json index 19f71e5e6a..fb7fda5945 100644 --- a/public/language/en-US/user.json +++ b/public/language/en-US/user.json @@ -25,6 +25,7 @@ "reputation": "Reputation", "bookmarks": "Bookmarks", "watched": "Watched", + "ignored": "Ignored", "followers": "Followers", "following": "Following", "aboutme": "About me", @@ -86,6 +87,7 @@ "has_no_posts": "This user hasn't posted anything yet.", "has_no_topics": "This user hasn't posted any topics yet.", "has_no_watched_topics": "This user hasn't watched any topics yet.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "This user hasn't upvoted any posts yet.", "has_no_downvoted_posts": "This user hasn't downvoted any posts yet.", "has_no_voted_posts": "This user has no voted posts", @@ -94,6 +96,7 @@ "paginate_description": "Paginate topics and posts instead of using infinite scroll", "topics_per_page": "Topics per Page", "posts_per_page": "Posts per Page", + "max_items_per_page": "Maximum %1", "notification_sounds": "Play a sound when you receive a notification", "notifications_and_sounds": "Notifications & Sounds", "incoming-message-sound": "Incoming message sound", diff --git a/public/language/en-x-pirate/admin/manage/post-queue.json b/public/language/en-x-pirate/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/en-x-pirate/admin/manage/post-queue.json +++ b/public/language/en-x-pirate/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/en-x-pirate/admin/menu.json b/public/language/en-x-pirate/admin/menu.json index 3ec4ad41c4..d42af99bce 100644 --- a/public/language/en-x-pirate/admin/menu.json +++ b/public/language/en-x-pirate/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/en-x-pirate/admin/settings/pagination.json b/public/language/en-x-pirate/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/en-x-pirate/admin/settings/pagination.json +++ b/public/language/en-x-pirate/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/en-x-pirate/error.json b/public/language/en-x-pirate/error.json index 85f56efaaa..82d34b5e05 100644 --- a/public/language/en-x-pirate/error.json +++ b/public/language/en-x-pirate/error.json @@ -11,7 +11,7 @@ "invalid-uid": "Invalid User ID", "invalid-username": "Invalid Username", "invalid-email": "Invalid Email", - "invalid-title": "Invalid title!", + "invalid-title": "Invalid title", "invalid-user-data": "Invalid User Data", "invalid-password": "Invalid Password", "invalid-login-credentials": "Invalid login credentials", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "You can't ban other admins!", "cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin", "cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.", + "invalid-image": "Invalid image", "invalid-image-type": "Invalid image type. Allowed types are: %1", "invalid-image-extension": "Invalid image extension", "invalid-file-type": "Invalid file type. Allowed types are: %1", diff --git a/public/language/en-x-pirate/flags.json b/public/language/en-x-pirate/flags.json index c4bfed6f23..d05a5b25a8 100644 --- a/public/language/en-x-pirate/flags.json +++ b/public/language/en-x-pirate/flags.json @@ -54,7 +54,11 @@ "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Reason for reporting this content...", "modal-submit": "Submit Report", - "modal-submit-success": "Content has been flagged for moderation." + "modal-submit-success": "Content has been flagged for moderation.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/en-x-pirate/pages.json b/public/language/en-x-pirate/pages.json index ddc7317e17..395c403cbb 100644 --- a/public/language/en-x-pirate/pages.json +++ b/public/language/en-x-pirate/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1's Bookmarked Posts", "account/settings": "User Settings", "account/watched": "Topics watched by %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Posts upvoted by %1", "account/downvoted": "Posts downvoted by %1", "account/best": "Best posts made by %1", diff --git a/public/language/en-x-pirate/unread.json b/public/language/en-x-pirate/unread.json index 37133f87ef..8f28de6b68 100644 --- a/public/language/en-x-pirate/unread.json +++ b/public/language/en-x-pirate/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Topics marked as read!", "all-topics": "All Topics", "new-topics": "New Topics", - "watched-topics": "Watched Topics" + "watched-topics": "Watched Topics", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/en-x-pirate/user.json b/public/language/en-x-pirate/user.json index b28bcd5ffe..d60f568fa9 100644 --- a/public/language/en-x-pirate/user.json +++ b/public/language/en-x-pirate/user.json @@ -25,6 +25,7 @@ "reputation": "Reputation", "bookmarks": "Bookmarks", "watched": "Watched", + "ignored": "Ignored", "followers": "Followers", "following": "Following", "aboutme": "About me", @@ -86,6 +87,7 @@ "has_no_posts": "This user hasn't posted anything yet.", "has_no_topics": "This user hasn't posted any topics yet.", "has_no_watched_topics": "This user hasn't watched any topics yet.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "This user hasn't upvoted any posts yet.", "has_no_downvoted_posts": "This user hasn't downvoted any posts yet.", "has_no_voted_posts": "This user has no voted posts", @@ -94,6 +96,7 @@ "paginate_description": "Paginate topics and posts instead of using infinite scroll", "topics_per_page": "Topics per Page", "posts_per_page": "Posts per Page", + "max_items_per_page": "Maximum %1", "notification_sounds": "Play a sound when you receive a notification", "notifications_and_sounds": "Notifications & Sounds", "incoming-message-sound": "Incoming message sound", diff --git a/public/language/es/admin/manage/post-queue.json b/public/language/es/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/es/admin/manage/post-queue.json +++ b/public/language/es/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/es/admin/menu.json b/public/language/es/admin/menu.json index edbd662ff7..d4e0428127 100644 --- a/public/language/es/admin/menu.json +++ b/public/language/es/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Cerrar sesión", "view-forum": "Ver foro", - "search.placeholder": "Buscar...", + "search.placeholder": "Search for settings", "search.no-results": "Sin resultados...", "search.search-forum": "Buscar en el foro ", "search.keep-typing": "Escribe más para ver resultados...", diff --git a/public/language/es/admin/settings/pagination.json b/public/language/es/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/es/admin/settings/pagination.json +++ b/public/language/es/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/es/error.json b/public/language/es/error.json index f818bce61a..da31813650 100644 --- a/public/language/es/error.json +++ b/public/language/es/error.json @@ -11,7 +11,7 @@ "invalid-uid": "Identificador de usuario no válido", "invalid-username": "Nombre de usuario no válido", "invalid-email": "Correo electrónico no válido", - "invalid-title": "¡Título no válido!", + "invalid-title": "Invalid title", "invalid-user-data": "Datos de usuario no válidos", "invalid-password": "Contraseña no válida", "invalid-login-credentials": "Datos de acceso no válidos", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "¡No puedes expulsar a otros administradores!", "cant-remove-last-admin": "Tu eres el unico administrador. Añade otro usuario como administrador antes de eliminarte a ti mismo.", "cant-delete-admin": "Quitar privilegios de administrador de ésta cuenta antes de intentar borrarla", + "invalid-image": "Invalid image", "invalid-image-type": "Tipo de imagen inválido. Los tipos permitidos son: %1", "invalid-image-extension": "Extensión de imagen inválida", "invalid-file-type": "Tipo de fichero inválido. Los tipos permitidos son: %1", diff --git a/public/language/es/flags.json b/public/language/es/flags.json index 24e723a0f4..9a6e3e97b2 100644 --- a/public/language/es/flags.json +++ b/public/language/es/flags.json @@ -54,7 +54,11 @@ "modal-body": "Por favor especifica tu razón para marcar %1 %2 para revisar. Alternativamente, usa una de los botones de reporte rápido si corresponde.", "modal-reason-spam": "Correo no deseado", "modal-reason-offensive": "Ofensivo", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Razón para reportar este contenido...", "modal-submit": "Enviar reporte", - "modal-submit-success": "El contenido se ha reportado para moderación." + "modal-submit-success": "El contenido se ha reportado para moderación.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/es/pages.json b/public/language/es/pages.json index dd1f40f2d8..4b9e71f258 100644 --- a/public/language/es/pages.json +++ b/public/language/es/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1's Mensajes marcados", "account/settings": "Preferencias", "account/watched": "Temas seguidos por %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Publicaciones votadas positivamente %1", "account/downvoted": "Publicaciones votadas negativamente %1", "account/best": "Mejores publicaciones hechas por %1", diff --git a/public/language/es/unread.json b/public/language/es/unread.json index a451185530..96a4b03748 100644 --- a/public/language/es/unread.json +++ b/public/language/es/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "¡Temas marcados como leídos!", "all-topics": "Todos los Temas", "new-topics": "Temas Nuevos", - "watched-topics": "Temas Suscritos" + "watched-topics": "Temas Suscritos", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/es/user.json b/public/language/es/user.json index 79a81acb3e..a46d95d741 100644 --- a/public/language/es/user.json +++ b/public/language/es/user.json @@ -25,6 +25,7 @@ "reputation": "Reputación", "bookmarks": "Marcadores", "watched": "Suscritos", + "ignored": "Ignored", "followers": "Seguidores", "following": "Siguiendo", "aboutme": "Sobre mí", @@ -86,6 +87,7 @@ "has_no_posts": "Este usuario no ha publicado nada aún.", "has_no_topics": "Este usuario no ha publicado ninguna tema todavía.", "has_no_watched_topics": "Este usuario no esta suscrito a ningún tema aún.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "Este usuario todavía no ha votado ninguna publicación positivamente.", "has_no_downvoted_posts": "Este usuario todavía no ha votado ninguna publicación negativamente.", "has_no_voted_posts": "Este usuario no ha votado ninguna publicación", @@ -94,6 +96,7 @@ "paginate_description": "Paginar hilos y mensajes en lugar de usar desplazamiento infinito", "topics_per_page": "Temas por página", "posts_per_page": "Post por página", + "max_items_per_page": "Maximum %1", "notification_sounds": "Reproducir un sonido al recibir una notificación", "notifications_and_sounds": "Notificaciones y Sonidos", "incoming-message-sound": "Sonido del mensaje entrante", diff --git a/public/language/et/admin/manage/post-queue.json b/public/language/et/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/et/admin/manage/post-queue.json +++ b/public/language/et/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/et/admin/menu.json b/public/language/et/admin/menu.json index 3ec4ad41c4..d42af99bce 100644 --- a/public/language/et/admin/menu.json +++ b/public/language/et/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/et/admin/settings/pagination.json b/public/language/et/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/et/admin/settings/pagination.json +++ b/public/language/et/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/et/error.json b/public/language/et/error.json index 3c60b22caf..6d31ddc060 100644 --- a/public/language/et/error.json +++ b/public/language/et/error.json @@ -11,7 +11,7 @@ "invalid-uid": "Vigane kasutaja ID", "invalid-username": "Vigane kasutajanimi", "invalid-email": "Vigane emaili aadress", - "invalid-title": "Vigane pealkiri!", + "invalid-title": "Invalid title", "invalid-user-data": "Vigased kasutaja andmed", "invalid-password": "Vigane parool", "invalid-login-credentials": "Invalid login credentials", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Sa ei saa bannida teisi administraatoreid!", "cant-remove-last-admin": "Te olete ainus administraator. Lisage keegi teine administraatoriks, enne kui eemaldate endalt administraatori.", "cant-delete-admin": "Eemalda sellelt kasutajalt administraatori õigused enne selle kustutamist", + "invalid-image": "Invalid image", "invalid-image-type": "Vigane pildi formaat. Lubatud formaadid on: %1", "invalid-image-extension": "Vigane pildi formaat", "invalid-file-type": "Vigane faili formaat. Lubatud formaadid on: %1", diff --git a/public/language/et/flags.json b/public/language/et/flags.json index c4bfed6f23..d05a5b25a8 100644 --- a/public/language/et/flags.json +++ b/public/language/et/flags.json @@ -54,7 +54,11 @@ "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Reason for reporting this content...", "modal-submit": "Submit Report", - "modal-submit-success": "Content has been flagged for moderation." + "modal-submit-success": "Content has been flagged for moderation.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/et/pages.json b/public/language/et/pages.json index a5469ae585..41da13de94 100644 --- a/public/language/et/pages.json +++ b/public/language/et/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1's Bookmarked Posts", "account/settings": "Kasutaja sätted", "account/watched": "Teemasid jälgib %1 kasutajat", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Postitused %1 poolt heaks kiidetud", "account/downvoted": "Postitused %1 poolt vastu hääletatud", "account/best": "Parimad postitused %1 poolt", diff --git a/public/language/et/unread.json b/public/language/et/unread.json index 169806bdb0..037f49ea6d 100644 --- a/public/language/et/unread.json +++ b/public/language/et/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Teemad märgitud loetuks!", "all-topics": "Kõik teemad", "new-topics": "Uued teemad", - "watched-topics": "Vaadatud teemad" + "watched-topics": "Vaadatud teemad", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/et/user.json b/public/language/et/user.json index ee6f98ef5b..94acd29c19 100644 --- a/public/language/et/user.json +++ b/public/language/et/user.json @@ -25,6 +25,7 @@ "reputation": "Reputatsioon", "bookmarks": "Bookmarks", "watched": "Vaadatud", + "ignored": "Ignored", "followers": "Jälgijad", "following": "Jälgimised", "aboutme": "Minust", @@ -86,6 +87,7 @@ "has_no_posts": "Antud kasutaja pole veel midagi postitanud.", "has_no_topics": "Antud kasutaja pole veel ühtegi teemat postitanud.", "has_no_watched_topics": "Antud kasutaja pole veel ühtegi teemat vaadanud.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "Antud kasutaja pole veel ühtegi postitust kiitnud.", "has_no_downvoted_posts": "Antud kasutaja pole veel ühtegi postitust laitnud.", "has_no_voted_posts": "Antud kasutaja pole veel ühtegi postitust hinnanud.", @@ -94,6 +96,7 @@ "paginate_description": "Nummerda leheküljed ja postitused ning ära kasuta lõputut kerimist", "topics_per_page": "Teemasi ühe lehekülje kohta", "posts_per_page": "Postitusi ühe lehekülje kohta", + "max_items_per_page": "Maximum %1", "notification_sounds": "Mängi heli, kui teade saabub.", "notifications_and_sounds": "Notifications & Sounds", "incoming-message-sound": "Incoming message sound", diff --git a/public/language/fa-IR/admin/manage/post-queue.json b/public/language/fa-IR/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/fa-IR/admin/manage/post-queue.json +++ b/public/language/fa-IR/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/fa-IR/admin/menu.json b/public/language/fa-IR/admin/menu.json index 3ec4ad41c4..d42af99bce 100644 --- a/public/language/fa-IR/admin/menu.json +++ b/public/language/fa-IR/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/fa-IR/admin/settings/pagination.json b/public/language/fa-IR/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/fa-IR/admin/settings/pagination.json +++ b/public/language/fa-IR/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/fa-IR/error.json b/public/language/fa-IR/error.json index cbbe49586f..567037c821 100644 --- a/public/language/fa-IR/error.json +++ b/public/language/fa-IR/error.json @@ -11,7 +11,7 @@ "invalid-uid": "شناسه کاربر نامعتبر است.", "invalid-username": "نام کاربری نامعتبر است.", "invalid-email": "ایمیل نامعتبر است.", - "invalid-title": "عنوان نامعتبر است!", + "invalid-title": "Invalid title", "invalid-user-data": "داده‌های کاربر نامعتبر است.", "invalid-password": "کلمه عبور نامعتبر است.", "invalid-login-credentials": "Invalid login credentials", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "شما نمی‌توانید دیگر مدیران را محروم کنید!", "cant-remove-last-admin": "شما تنها مدیر می باشید . شما باید قبل از عزل خود از مدیریت یک کاربر دیگر را مدیر کنید", "cant-delete-admin": "قبل از حذف این کاربر دسترسی های مدیریت را از وی بگیرید.", + "invalid-image": "Invalid image", "invalid-image-type": "نوع تصویر نامعتبر است. نوعهای قابل قبول اینها هستند: %1", "invalid-image-extension": "پسوند عکس نامعتبر است", "invalid-file-type": "نوع پرونده نامعتبر است. نوعهای قابل قبول اینها هستند: %1", diff --git a/public/language/fa-IR/flags.json b/public/language/fa-IR/flags.json index c4bfed6f23..d05a5b25a8 100644 --- a/public/language/fa-IR/flags.json +++ b/public/language/fa-IR/flags.json @@ -54,7 +54,11 @@ "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Reason for reporting this content...", "modal-submit": "Submit Report", - "modal-submit-success": "Content has been flagged for moderation." + "modal-submit-success": "Content has been flagged for moderation.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/fa-IR/pages.json b/public/language/fa-IR/pages.json index 1d4c7983de..869528a829 100644 --- a/public/language/fa-IR/pages.json +++ b/public/language/fa-IR/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1 پست نشانک گذاری شده است", "account/settings": "تنظیمات کاربر", "account/watched": "موضوع های دیده شده توسط \"%1\"", + "account/ignored": "Topics ignored by %1", "account/upvoted": "رای مثبت داده شده به پست ها توسط %1", "account/downvoted": "رای منفی داده شده به پست ها توسط %1", "account/best": "بهترین پست های ارسال شده توسط %1", diff --git a/public/language/fa-IR/unread.json b/public/language/fa-IR/unread.json index b99597020c..fef5f5580c 100644 --- a/public/language/fa-IR/unread.json +++ b/public/language/fa-IR/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "همه موضوع ها خوانده شدند", "all-topics": "همه موضوع ها", "new-topics": "موضوع های جدید", - "watched-topics": "موضوع های پیگیری شده" + "watched-topics": "موضوع های پیگیری شده", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/fa-IR/user.json b/public/language/fa-IR/user.json index 99526d6ed0..d54f3ad029 100644 --- a/public/language/fa-IR/user.json +++ b/public/language/fa-IR/user.json @@ -25,6 +25,7 @@ "reputation": "اعتبار", "bookmarks": "نشانک‌ها", "watched": "پیگیری شده", + "ignored": "Ignored", "followers": "دنبال‌کننده‌ها", "following": "دنبال‌شونده‌ها", "aboutme": "درباره ی من", @@ -86,6 +87,7 @@ "has_no_posts": "این کاربر تا به حال هیچ چیزی ارسال نکرده است.", "has_no_topics": "این کاربر تا به حال هیچ موضوعی ارسال نکرده است", "has_no_watched_topics": "این کاربر تا به حال هیچ موضوعی را پیگیری نکرده است", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "این کاربر به هیچ پستی امتیاز نداده است.", "has_no_downvoted_posts": "این کاربر به هیچ پستی رای منفی نداده است.", "has_no_voted_posts": "این کاربر به پست رای نداده است", @@ -94,6 +96,7 @@ "paginate_description": "صفحه بندی و نمایش موضوع ها و پست‌ها به جای نمایش بر اساس اسکرول موس", "topics_per_page": "شمار موضوع ها در هر برگه", "posts_per_page": "شمار پست‌ها در هر برگه", + "max_items_per_page": "Maximum %1", "notification_sounds": "پخش صدا زمانی که یک اطلاعیه دریافت میکنید", "notifications_and_sounds": "آگاه‌سازی‌ها و صدا‌ها", "incoming-message-sound": "صدای پیام دریافتی", diff --git a/public/language/fi/admin/manage/post-queue.json b/public/language/fi/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/fi/admin/manage/post-queue.json +++ b/public/language/fi/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/fi/admin/menu.json b/public/language/fi/admin/menu.json index 3ec4ad41c4..d42af99bce 100644 --- a/public/language/fi/admin/menu.json +++ b/public/language/fi/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/fi/admin/settings/pagination.json b/public/language/fi/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/fi/admin/settings/pagination.json +++ b/public/language/fi/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/fi/error.json b/public/language/fi/error.json index 16ac9b5b47..8e73db4c3f 100644 --- a/public/language/fi/error.json +++ b/public/language/fi/error.json @@ -11,7 +11,7 @@ "invalid-uid": "Virheellinen käyttäjän ID", "invalid-username": "Virheellinen käyttäjänimi", "invalid-email": "Virheellinen sähköpostiosoite", - "invalid-title": "Virheellinen otsikko!", + "invalid-title": "Invalid title", "invalid-user-data": "Virheellinen käyttäjätieto", "invalid-password": "Virheellinen salasana", "invalid-login-credentials": "Invalid login credentials", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Et voi estää muita ylläpitäjiä!", "cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin", "cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.", + "invalid-image": "Invalid image", "invalid-image-type": "Invalid image type. Allowed types are: %1", "invalid-image-extension": "Invalid image extension", "invalid-file-type": "Invalid file type. Allowed types are: %1", diff --git a/public/language/fi/flags.json b/public/language/fi/flags.json index c4bfed6f23..d05a5b25a8 100644 --- a/public/language/fi/flags.json +++ b/public/language/fi/flags.json @@ -54,7 +54,11 @@ "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Reason for reporting this content...", "modal-submit": "Submit Report", - "modal-submit-success": "Content has been flagged for moderation." + "modal-submit-success": "Content has been flagged for moderation.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/fi/pages.json b/public/language/fi/pages.json index 37cbf96c00..7432d9ce17 100644 --- a/public/language/fi/pages.json +++ b/public/language/fi/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1's Bookmarked Posts", "account/settings": "User Settings", "account/watched": "Topics watched by %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Posts upvoted by %1", "account/downvoted": "Posts downvoted by %1", "account/best": "Best posts made by %1", diff --git a/public/language/fi/unread.json b/public/language/fi/unread.json index e7296b4cf8..ab7ffbf7eb 100644 --- a/public/language/fi/unread.json +++ b/public/language/fi/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Aihe merkitty luetuksi!", "all-topics": "All Topics", "new-topics": "New Topics", - "watched-topics": "Watched Topics" + "watched-topics": "Watched Topics", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/fi/user.json b/public/language/fi/user.json index 3651e69e04..9f5d8010a6 100644 --- a/public/language/fi/user.json +++ b/public/language/fi/user.json @@ -25,6 +25,7 @@ "reputation": "Maine", "bookmarks": "Bookmarks", "watched": "Seurattu", + "ignored": "Ignored", "followers": "Seuraajat", "following": "Seuratut", "aboutme": "About me", @@ -86,6 +87,7 @@ "has_no_posts": "This user hasn't posted anything yet.", "has_no_topics": "This user hasn't posted any topics yet.", "has_no_watched_topics": "This user hasn't watched any topics yet.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "This user hasn't upvoted any posts yet.", "has_no_downvoted_posts": "This user hasn't downvoted any posts yet.", "has_no_voted_posts": "This user has no voted posts", @@ -94,6 +96,7 @@ "paginate_description": "Paginate topics and posts instead of using infinite scroll", "topics_per_page": "Aihetta per sivu", "posts_per_page": "Viestiä per sivu", + "max_items_per_page": "Maximum %1", "notification_sounds": "Play a sound when you receive a notification", "notifications_and_sounds": "Notifications & Sounds", "incoming-message-sound": "Incoming message sound", diff --git a/public/language/fr/admin/manage/post-queue.json b/public/language/fr/admin/manage/post-queue.json index 90f33a6126..ed8f9b71d1 100644 --- a/public/language/fr/admin/manage/post-queue.json +++ b/public/language/fr/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Titre", "content": "Contenu", "posted": "Posté", - "reply-to": "Répondre à \"%1\"" + "reply-to": "Répondre à \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/fr/admin/menu.json b/public/language/fr/admin/menu.json index 59ae32cf25..07a2473bc5 100644 --- a/public/language/fr/admin/menu.json +++ b/public/language/fr/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Déconnexion ", "view-forum": "Voir le forum", - "search.placeholder": "Rechercher…", + "search.placeholder": "Search for settings", "search.no-results": "Aucun résultat…", "search.search-forum": "Rechercher dans le forum", "search.keep-typing": "Continuez de taper pour afficher les résultats…", diff --git a/public/language/fr/admin/settings/pagination.json b/public/language/fr/admin/settings/pagination.json index c84f40fadc..455694e84f 100644 --- a/public/language/fr/admin/settings/pagination.json +++ b/public/language/fr/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Utiliser la pagination des sujets et messages au lieu du défilement infini", "topics": "Pagination des sujets", "posts-per-page": "Messages par page", + "max-posts-per-page": "Maximum posts per page", "categories": "Pagination des categories", "topics-per-page": "Sujets par page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Nombre initial de sujets à charger dans Non lus, Récents et Populaires" } \ No newline at end of file diff --git a/public/language/fr/error.json b/public/language/fr/error.json index f0989ca856..a992ed875e 100644 --- a/public/language/fr/error.json +++ b/public/language/fr/error.json @@ -11,7 +11,7 @@ "invalid-uid": "ID utilisateur invalide", "invalid-username": "Nom d'utilisateur invalide", "invalid-email": "Email invalide", - "invalid-title": "Titre invalide !", + "invalid-title": "Invalid title", "invalid-user-data": "Données utilisateur invalides", "invalid-password": "Mot de passe invalide", "invalid-login-credentials": "Certificat d'identification invalide", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Vous ne pouvez pas bannir les autres administrateurs !", "cant-remove-last-admin": "Vous seul êtes administrateur. Ajouter un autre utilisateur en tant qu'administrateur avant de vous en retirer.", "cant-delete-admin": "Veuillez retirer les droits d'administration de ce compte avant de tenter de le supprimer.", + "invalid-image": "Invalid image", "invalid-image-type": "Type d'image invalide. Les types autorisés sont: %1", "invalid-image-extension": "Extension d'image invalide", "invalid-file-type": "Type de fichier non valide. Les types autorisés sont : %1", diff --git a/public/language/fr/flags.json b/public/language/fr/flags.json index c4d031cca4..0631354adf 100644 --- a/public/language/fr/flags.json +++ b/public/language/fr/flags.json @@ -54,7 +54,11 @@ "modal-body": "Veuillez spécifier votre raison de signaler %1 %2 pour une révision. Vous pouvez utiliser un des boutons de report rapide si c'est plus approprié", "modal-reason-spam": "Spam", "modal-reason-offensive": "Choquant", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Motif du signalement...", "modal-submit": "Soumettre le signalement", - "modal-submit-success": "Le contenu a été soumis pour examen." + "modal-submit-success": "Le contenu a été soumis pour examen.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/fr/pages.json b/public/language/fr/pages.json index 820f197157..50967383a6 100644 --- a/public/language/fr/pages.json +++ b/public/language/fr/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "Marques-pages de %1", "account/settings": "Paramètres d'utilisateur", "account/watched": "Sujets auxquels %1 est abonné", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Messages pour lesquels %1 a voté", "account/downvoted": "Messages contre lesquels %1 a voté", "account/best": "Meilleurs messages postés par %1", diff --git a/public/language/fr/unread.json b/public/language/fr/unread.json index dae04c99b9..ba4fe50469 100644 --- a/public/language/fr/unread.json +++ b/public/language/fr/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Sujets marqués comme lus !", "all-topics": "Tous les sujets", "new-topics": "Nouveau sujet", - "watched-topics": "Abonnements" + "watched-topics": "Abonnements", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/fr/user.json b/public/language/fr/user.json index d8b53361b3..8b27a0f0af 100644 --- a/public/language/fr/user.json +++ b/public/language/fr/user.json @@ -25,6 +25,7 @@ "reputation": "Réputation", "bookmarks": "Marque-pages", "watched": "Abonnements", + "ignored": "Ignored", "followers": "Abonnés", "following": "Abonnements", "aboutme": "À propos de moi", @@ -86,6 +87,7 @@ "has_no_posts": "Cet utilisateur n'a encore rien posté.", "has_no_topics": "Cet utilisateur n'a encore créé aucun sujet.", "has_no_watched_topics": "Cet utilisateur ne s'est encore abonné à aucun sujet.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "Cet utilisateur n'a voté pour aucun message", "has_no_downvoted_posts": "Cet utilisateur n'a voté contre aucun message", "has_no_voted_posts": "Personne n'a voté pour des messages de cet utilisateur", @@ -94,6 +96,7 @@ "paginate_description": "Utiliser la pagination des sujets et des messages à la place du défilement infini", "topics_per_page": "Sujets par page", "posts_per_page": "Messages par page", + "max_items_per_page": "Maximum %1", "notification_sounds": "Émettre un son lors de la réception de notifications", "notifications_and_sounds": "Notifications & Sons", "incoming-message-sound": "Son pour les messages entrants", diff --git a/public/language/gl/admin/manage/post-queue.json b/public/language/gl/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/gl/admin/manage/post-queue.json +++ b/public/language/gl/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/gl/admin/menu.json b/public/language/gl/admin/menu.json index 3ec4ad41c4..d42af99bce 100644 --- a/public/language/gl/admin/menu.json +++ b/public/language/gl/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/gl/admin/settings/pagination.json b/public/language/gl/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/gl/admin/settings/pagination.json +++ b/public/language/gl/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/gl/error.json b/public/language/gl/error.json index 0701681e7c..8756006b92 100644 --- a/public/language/gl/error.json +++ b/public/language/gl/error.json @@ -11,7 +11,7 @@ "invalid-uid": "Identificador de Usuario Inválido", "invalid-username": "Nome de Usuario Inválido", "invalid-email": "Enderezo electrónico inválido", - "invalid-title": "Título inválido!", + "invalid-title": "Invalid title", "invalid-user-data": "Datos de Usuario Inválidos", "invalid-password": "Contrasinal Inválido", "invalid-login-credentials": "Invalid login credentials", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Non podes botar outros administradores!", "cant-remove-last-admin": "Eres o único administrador. Engade outros administradores antes de quitarte a ti mesmo como administrador.", "cant-delete-admin": "Retirar privilexios de administrador desta conta antes de intentar borrala", + "invalid-image": "Invalid image", "invalid-image-type": "Tipo de imaxe inválida. Tipos admitidos: %1", "invalid-image-extension": "Extensión de imaxe inválida", "invalid-file-type": "Tipo de arquivo inválido. Tipos admitidos: %1", diff --git a/public/language/gl/flags.json b/public/language/gl/flags.json index 0fda38ff5a..fb3bb17a39 100644 --- a/public/language/gl/flags.json +++ b/public/language/gl/flags.json @@ -54,7 +54,11 @@ "modal-body": "Por favor, especifique o seu motivo para marcar %1 %2 para revisión. Alternativamente, empregue un dos botóns de reporte rápido se fose pertinente.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Ofensivo", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Motivo para reportar este contido...", "modal-submit": "Enviar Reporte", - "modal-submit-success": "Contido marcado para moderación" + "modal-submit-success": "Contido marcado para moderación", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/gl/pages.json b/public/language/gl/pages.json index b453e6798e..4a98b6c2dc 100644 --- a/public/language/gl/pages.json +++ b/public/language/gl/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1's Mensaxes marcadas", "account/settings": "Opcións de Usuario", "account/watched": "Temas vistos por %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Mensaxes votadas positivamente por %1", "account/downvoted": "Mensaxes votadas negativamente por %1", "account/best": "Mellores mensaxes escritas por %1", diff --git a/public/language/gl/unread.json b/public/language/gl/unread.json index bb0975ec26..60179e9afa 100644 --- a/public/language/gl/unread.json +++ b/public/language/gl/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Temas marcados como lidos", "all-topics": "Tódolos Temas", "new-topics": "Temas Novos", - "watched-topics": "Temas Suscritos" + "watched-topics": "Temas Suscritos", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/gl/user.json b/public/language/gl/user.json index 4019fabb5c..79833e3a40 100644 --- a/public/language/gl/user.json +++ b/public/language/gl/user.json @@ -25,6 +25,7 @@ "reputation": "Reputación", "bookmarks": "Marcadores", "watched": "Visto", + "ignored": "Ignored", "followers": "Seguidores", "following": "Seguindo", "aboutme": "Sobre min", @@ -86,6 +87,7 @@ "has_no_posts": "Este usuario aínda non posteu.", "has_no_topics": "Este usuario aínda non publicou ningún tema.", "has_no_watched_topics": "Este usuario aínda non viu ningún tema.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "Este usuario aínda non votou positivamente ningunha mensaxe.", "has_no_downvoted_posts": "Este usuario aínda non votou negativamente ninguna mensaxe.", "has_no_voted_posts": "Este usuario non votou ninguna mensaxe", @@ -94,6 +96,7 @@ "paginate_description": "Paxinar temas e publicacións no canto de usar scroll infinito", "topics_per_page": "Temas por páxina", "posts_per_page": "Mensaxes por páxina", + "max_items_per_page": "Maximum %1", "notification_sounds": "Reproducir un son cando recibes unha notificación.", "notifications_and_sounds": "Notificacións e Sons", "incoming-message-sound": "Son da mensaxe entrante", diff --git a/public/language/he/admin/manage/post-queue.json b/public/language/he/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/he/admin/manage/post-queue.json +++ b/public/language/he/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/he/admin/menu.json b/public/language/he/admin/menu.json index 51c439d66b..311666c5f7 100644 --- a/public/language/he/admin/menu.json +++ b/public/language/he/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/he/admin/settings/pagination.json b/public/language/he/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/he/admin/settings/pagination.json +++ b/public/language/he/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/he/error.json b/public/language/he/error.json index ecf75c2ed2..a0ff49b481 100644 --- a/public/language/he/error.json +++ b/public/language/he/error.json @@ -11,7 +11,7 @@ "invalid-uid": "זהוי משתמש שגוי", "invalid-username": "שם משתמש שגוי", "invalid-email": "אימייל שגוי", - "invalid-title": "כותרת שגויה", + "invalid-title": "Invalid title", "invalid-user-data": "מידע משתמש שגוי", "invalid-password": "סיסמא שגויה", "invalid-login-credentials": "פרטי ההתחברות שגויים", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "אינך יכול לחסום מנהלים אחרים!", "cant-remove-last-admin": "אתה המנהל היחיד. הוסף משתמש אחר לניהול לפני שאתה מוריד את עצמך מניהול", "cant-delete-admin": "משתמש זה מוגדר כמנהל. על מנת למחוק את המשתמש, עליך להסיר קודם את גישותיו.", + "invalid-image": "Invalid image", "invalid-image-type": "פורמט תמונה לא תקין. הפורמטים המורשים הם: %1", "invalid-image-extension": "פורמט תמונה לא תקין", "invalid-file-type": "פורמט הקובץ לא תקין. הפורמטים המורשים הם: %1", diff --git a/public/language/he/flags.json b/public/language/he/flags.json index c4bfed6f23..d05a5b25a8 100644 --- a/public/language/he/flags.json +++ b/public/language/he/flags.json @@ -54,7 +54,11 @@ "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Reason for reporting this content...", "modal-submit": "Submit Report", - "modal-submit-success": "Content has been flagged for moderation." + "modal-submit-success": "Content has been flagged for moderation.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/he/pages.json b/public/language/he/pages.json index 617bd93223..6af8df5219 100644 --- a/public/language/he/pages.json +++ b/public/language/he/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "הפוסטים השמורים של %1", "account/settings": "הגדרות משתמש", "account/watched": "נושאים שנצפו על ידי %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": "פוסטים שהוצבעו לטובה על ידי %1", "account/downvoted": "פוסטים שהוצבעו לרעה על ידי %1", "account/best": "הפוסטים הטובים ביותר שנוצרו על ידי %1", diff --git a/public/language/he/unread.json b/public/language/he/unread.json index 3f869f734a..9174abcd4a 100644 --- a/public/language/he/unread.json +++ b/public/language/he/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "נושאים שמסומנים כנקרא!", "all-topics": "כל הנושאים", "new-topics": "נושאים חדשים", - "watched-topics": "נושאים שאתה עוקב אחריהם" + "watched-topics": "נושאים שאתה עוקב אחריהם", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/he/user.json b/public/language/he/user.json index bcb69d4c57..4b46bc93ef 100644 --- a/public/language/he/user.json +++ b/public/language/he/user.json @@ -25,6 +25,7 @@ "reputation": "מוניטין", "bookmarks": "מועדפים", "watched": "נצפה", + "ignored": "Ignored", "followers": "עוקבים", "following": "עוקב אחרי", "aboutme": "עליי", @@ -86,6 +87,7 @@ "has_no_posts": "המשתמש טרם יצר פוסטים כלשהם.", "has_no_topics": "המשתמש טרם יצר נושאים כלשהם.", "has_no_watched_topics": "המשתמש טרם צפה בנושאים כלשהם.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "המשתמש טרם הצביע בעד פוסטים כלשהם.", "has_no_downvoted_posts": "המשתמש טרם הצביע נגד פוסטים כלשהם.", "has_no_voted_posts": "למשתמש אין פוסטים שהוצבעו", @@ -94,6 +96,7 @@ "paginate_description": "הצג נושאים ופוסטים כדפים במקום כרשימת גלילה אין-סופית", "topics_per_page": "כמות נושאים בעמוד", "posts_per_page": "כמות פוסטים בעמוד", + "max_items_per_page": "Maximum %1", "notification_sounds": "נגן סאונד כשמתקבלת התראה", "notifications_and_sounds": "התראות וצלילים", "incoming-message-sound": "צליל הודעה נכנסת", diff --git a/public/language/hr/admin/manage/post-queue.json b/public/language/hr/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/hr/admin/manage/post-queue.json +++ b/public/language/hr/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/hr/admin/menu.json b/public/language/hr/admin/menu.json index e87fcc7ec8..ae682e4f6b 100644 --- a/public/language/hr/admin/menu.json +++ b/public/language/hr/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Odjava", "view-forum": "Pogledaj forum", - "search.placeholder": "Pretraga...", + "search.placeholder": "Search for settings", "search.no-results": "Nema rezultata ...", "search.search-forum": "Pretraži forum za ", "search.keep-typing": "Upiši više da vidiš rezultate ...", diff --git a/public/language/hr/admin/settings/pagination.json b/public/language/hr/admin/settings/pagination.json index 3a38d2bfe9..c92407cbf5 100644 --- a/public/language/hr/admin/settings/pagination.json +++ b/public/language/hr/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Numeriraj teme i objave umjesto beskrajnog skrolanja.", "topics": "Numeriranje tema", "posts-per-page": "Objava po stranici ", + "max-posts-per-page": "Maximum posts per page", "categories": "Numeriranje kategorija", "topics-per-page": "Tema po stranici", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Početni broj tema za učitati u sekcijama nepročitano,nedavno i popularno." } \ No newline at end of file diff --git a/public/language/hr/error.json b/public/language/hr/error.json index 741504dfda..7c4bdb5b79 100644 --- a/public/language/hr/error.json +++ b/public/language/hr/error.json @@ -11,7 +11,7 @@ "invalid-uid": "Netočan ID korisnika", "invalid-username": "Netočno korisničko ime", "invalid-email": "Netočan email", - "invalid-title": "Netočan naslov!", + "invalid-title": "Invalid title", "invalid-user-data": "Netočni korisnički podatci", "invalid-password": "Netočna lozinka", "invalid-login-credentials": "Invalid login credentials", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Nemožete blokirati ostale administratore!", "cant-remove-last-admin": "Vi ste jedini administrator. Dodajte korisnika kao administratora prije nego sebe odjavite kao administratora.", "cant-delete-admin": "Ukloni administratorske privilegije sa ovog računa prije brisanja.", + "invalid-image": "Invalid image", "invalid-image-type": "Pogrešan format slike. Dozvoljeni formati: %1", "invalid-image-extension": "Kriva ekstezija slike", "invalid-file-type": "Netočan tip datoteke. Dozvoljeni formati su: %1", diff --git a/public/language/hr/flags.json b/public/language/hr/flags.json index f86d22916c..7087bc6d64 100644 --- a/public/language/hr/flags.json +++ b/public/language/hr/flags.json @@ -54,7 +54,11 @@ "modal-body": "Navedite razlog označavanja zastavom %1 %2 .U suprotnom koristite jedan od dugmića za brzo prijavljivanje.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Uvredljivo", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Razlog prijavljivanja ovog sadržaja", "modal-submit": "Podnesi izvještaj", - "modal-submit-success": "Ovaj sadržaj je označen zastavom u svrhu moderiranja," + "modal-submit-success": "Ovaj sadržaj je označen zastavom u svrhu moderiranja,", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/hr/pages.json b/public/language/hr/pages.json index 7c9ec35170..13cecdd415 100644 --- a/public/language/hr/pages.json +++ b/public/language/hr/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1 zabilježene objave", "account/settings": "Korisničke postavke", "account/watched": "Teme prati %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": "%1 glasao za", "account/downvoted": "%1 glasao protiv", "account/best": "Najbolje objave od %1", diff --git a/public/language/hr/unread.json b/public/language/hr/unread.json index 2d8bd2128a..331fceb25c 100644 --- a/public/language/hr/unread.json +++ b/public/language/hr/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Teme označene kao pročitane!", "all-topics": "Sve teme", "new-topics": "Nove teme", - "watched-topics": "Praćene teme" + "watched-topics": "Praćene teme", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/hr/user.json b/public/language/hr/user.json index 20ad62ec30..b93a75c577 100644 --- a/public/language/hr/user.json +++ b/public/language/hr/user.json @@ -25,6 +25,7 @@ "reputation": "Reputacija", "bookmarks": "Zabilješke", "watched": "Gledano", + "ignored": "Ignored", "followers": "Pratitelji", "following": "Prati", "aboutme": "O meni", @@ -86,6 +87,7 @@ "has_no_posts": "Ovaj korisnik nema objava.", "has_no_topics": "Ovaj korisnik nema objavljenih tema.", "has_no_watched_topics": "Ovaj korisnik ne prati teme.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "Ovaj korisnik nije glasao za na objavama.", "has_no_downvoted_posts": "Ovaj korisnik nije glasao protiv na objavama.", "has_no_voted_posts": "Ovaj korisnik nema glasanih objava", @@ -94,6 +96,7 @@ "paginate_description": "Numeriraj teme i objave umjesto scrollanja", "topics_per_page": "Teme po stranici", "posts_per_page": "Objave po stranici", + "max_items_per_page": "Maximum %1", "notification_sounds": "Sviraj zvuk kada primim obavijest", "notifications_and_sounds": "Obavijesti i zvukovi", "incoming-message-sound": "Zvuk nadolazećih poruka", diff --git a/public/language/hu/admin/manage/post-queue.json b/public/language/hu/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/hu/admin/manage/post-queue.json +++ b/public/language/hu/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/hu/admin/menu.json b/public/language/hu/admin/menu.json index 3ec4ad41c4..d42af99bce 100644 --- a/public/language/hu/admin/menu.json +++ b/public/language/hu/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/hu/admin/settings/pagination.json b/public/language/hu/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/hu/admin/settings/pagination.json +++ b/public/language/hu/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/hu/error.json b/public/language/hu/error.json index 5d9ee430c4..09f5e7a15f 100644 --- a/public/language/hu/error.json +++ b/public/language/hu/error.json @@ -11,7 +11,7 @@ "invalid-uid": "Érvénytelen felhasználó azonosíó", "invalid-username": "Érvénytelen felhasználónév", "invalid-email": "Érvénytelen e-mail cím", - "invalid-title": "Érvénytelen cím!", + "invalid-title": "Invalid title", "invalid-user-data": "Érvénytelen felhasználói adatok", "invalid-password": "Érvénytelen jelszó", "invalid-login-credentials": "Invalid login credentials", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Nem tilthatsz ki másik adminisztrátort!", "cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin", "cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.", + "invalid-image": "Invalid image", "invalid-image-type": "Érvénytelen a kép típusa. Engedett kiterjesztések: %1", "invalid-image-extension": "Érvénytelen a kép kiterjesztése", "invalid-file-type": "Érvénytelen a fájl típusa. Engedélyezett kiterjesztések: %1", diff --git a/public/language/hu/flags.json b/public/language/hu/flags.json index c4bfed6f23..d05a5b25a8 100644 --- a/public/language/hu/flags.json +++ b/public/language/hu/flags.json @@ -54,7 +54,11 @@ "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Reason for reporting this content...", "modal-submit": "Submit Report", - "modal-submit-success": "Content has been flagged for moderation." + "modal-submit-success": "Content has been flagged for moderation.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/hu/pages.json b/public/language/hu/pages.json index 172383eac8..309503b036 100644 --- a/public/language/hu/pages.json +++ b/public/language/hu/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1's Bookmarked Posts", "account/settings": "User Settings", "account/watched": "Topics watched by %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Posts upvoted by %1", "account/downvoted": "Posts downvoted by %1", "account/best": "Best posts made by %1", diff --git a/public/language/hu/unread.json b/public/language/hu/unread.json index 35b797c482..b0bf1171c5 100644 --- a/public/language/hu/unread.json +++ b/public/language/hu/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Témakör olvasottnak jelölve!", "all-topics": "Minden témakör", "new-topics": "Új témakör", - "watched-topics": "Figyelt témakör" + "watched-topics": "Figyelt témakör", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/hu/user.json b/public/language/hu/user.json index c1e48843a5..cc0b0a70a7 100644 --- a/public/language/hu/user.json +++ b/public/language/hu/user.json @@ -25,6 +25,7 @@ "reputation": "Hírnév", "bookmarks": "Könyvjelzők", "watched": "Megtekintve", + "ignored": "Ignored", "followers": "Követők", "following": "Követve", "aboutme": "Rólam", @@ -86,6 +87,7 @@ "has_no_posts": "A felhasználó még nem szólt hozzá semmihez.", "has_no_topics": "A felhasználó még nem szólt hozzá egyik témakörhöz sem.", "has_no_watched_topics": "A felhasználó még nem nézett meg egy témakört sem.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "A felhasználó még egy hozzászólást sem kedvelt.", "has_no_downvoted_posts": "A felhasználó még egy hozzászólást sem utált.", "has_no_voted_posts": "A felhasználó még nem szavazott hozzászólásra.", @@ -94,6 +96,7 @@ "paginate_description": "Témakörök és hosszászólasok lapozása a végtelen görgetés helyett.", "topics_per_page": "Téma oldalanként", "posts_per_page": "Hozzászólás oldalanként", + "max_items_per_page": "Maximum %1", "notification_sounds": "Hang lejátszása, mikor értesítést kapsz", "notifications_and_sounds": "Értesítések és hangok", "incoming-message-sound": "Beérkező üzenet hangja", diff --git a/public/language/id/admin/manage/post-queue.json b/public/language/id/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/id/admin/manage/post-queue.json +++ b/public/language/id/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/id/admin/menu.json b/public/language/id/admin/menu.json index 3ec4ad41c4..d42af99bce 100644 --- a/public/language/id/admin/menu.json +++ b/public/language/id/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/id/admin/settings/pagination.json b/public/language/id/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/id/admin/settings/pagination.json +++ b/public/language/id/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/id/error.json b/public/language/id/error.json index a351c3ea6e..8fed86543e 100644 --- a/public/language/id/error.json +++ b/public/language/id/error.json @@ -11,7 +11,7 @@ "invalid-uid": "ID User Salah", "invalid-username": "Username Salah", "invalid-email": "Email Salah", - "invalid-title": "Judul Salah", + "invalid-title": "Invalid title", "invalid-user-data": "Data Pengguna Salah", "invalid-password": "Password Salah", "invalid-login-credentials": "Invalid login credentials", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Kamu tidak dapat ban admin lainnya!", "cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin", "cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.", + "invalid-image": "Invalid image", "invalid-image-type": "Invalid image type. Allowed types are: %1", "invalid-image-extension": "Invalid image extension", "invalid-file-type": "Invalid file type. Allowed types are: %1", diff --git a/public/language/id/flags.json b/public/language/id/flags.json index c4bfed6f23..d05a5b25a8 100644 --- a/public/language/id/flags.json +++ b/public/language/id/flags.json @@ -54,7 +54,11 @@ "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Reason for reporting this content...", "modal-submit": "Submit Report", - "modal-submit-success": "Content has been flagged for moderation." + "modal-submit-success": "Content has been flagged for moderation.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/id/pages.json b/public/language/id/pages.json index 8aa3c230b0..de62235dfa 100644 --- a/public/language/id/pages.json +++ b/public/language/id/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1's Bookmarked Posts", "account/settings": "User Settings", "account/watched": "Topics watched by %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Posts upvoted by %1", "account/downvoted": "Posts downvoted by %1", "account/best": "Best posts made by %1", diff --git a/public/language/id/unread.json b/public/language/id/unread.json index f7bc4cf56b..f89483c163 100644 --- a/public/language/id/unread.json +++ b/public/language/id/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Topik ditandai sudah dibaca!", "all-topics": "All Topics", "new-topics": "New Topics", - "watched-topics": "Watched Topics" + "watched-topics": "Watched Topics", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/id/user.json b/public/language/id/user.json index 60cbd283fe..b2f67b1298 100644 --- a/public/language/id/user.json +++ b/public/language/id/user.json @@ -25,6 +25,7 @@ "reputation": "Reputasi", "bookmarks": "Bookmarks", "watched": "Watched", + "ignored": "Ignored", "followers": "Pengikut", "following": "Mengikuti", "aboutme": "About me", @@ -86,6 +87,7 @@ "has_no_posts": "This user hasn't posted anything yet.", "has_no_topics": "This user hasn't posted any topics yet.", "has_no_watched_topics": "This user hasn't watched any topics yet.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "This user hasn't upvoted any posts yet.", "has_no_downvoted_posts": "This user hasn't downvoted any posts yet.", "has_no_voted_posts": "This user has no voted posts", @@ -94,6 +96,7 @@ "paginate_description": "Paginate topics and posts instead of using infinite scroll", "topics_per_page": "Topik per Halaman", "posts_per_page": "Posting per Halaman", + "max_items_per_page": "Maximum %1", "notification_sounds": "Play a sound when you receive a notification", "notifications_and_sounds": "Notifications & Sounds", "incoming-message-sound": "Incoming message sound", diff --git a/public/language/it/admin/manage/post-queue.json b/public/language/it/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/it/admin/manage/post-queue.json +++ b/public/language/it/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/it/admin/menu.json b/public/language/it/admin/menu.json index 3ec4ad41c4..d42af99bce 100644 --- a/public/language/it/admin/menu.json +++ b/public/language/it/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/it/admin/settings/pagination.json b/public/language/it/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/it/admin/settings/pagination.json +++ b/public/language/it/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/it/error.json b/public/language/it/error.json index f31c43fc5d..4484e91246 100644 --- a/public/language/it/error.json +++ b/public/language/it/error.json @@ -11,7 +11,7 @@ "invalid-uid": "ID Utente non valido", "invalid-username": "Nome utente non valido", "invalid-email": "Email non valida", - "invalid-title": "Titolo non valido", + "invalid-title": "Invalid title", "invalid-user-data": "Dati Utente non validi", "invalid-password": "Password non valida", "invalid-login-credentials": "Invalid login credentials", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Non puoi bannare altri amministratori!", "cant-remove-last-admin": "Sei l'unico Amministratore. Aggiungi un altro amministratore prima di rimuovere il tuo ruolo", "cant-delete-admin": "Togli i privilegi amministrativi da questo account prima di provare ad eliminarlo.", + "invalid-image": "Invalid image", "invalid-image-type": "Tipo dell'immagine non valido. I tipi permessi sono: %1", "invalid-image-extension": "Estensione immagine non valida", "invalid-file-type": "Tipo di file non valido. I formati consentiti sono: %1", diff --git a/public/language/it/flags.json b/public/language/it/flags.json index c4bfed6f23..d05a5b25a8 100644 --- a/public/language/it/flags.json +++ b/public/language/it/flags.json @@ -54,7 +54,11 @@ "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Reason for reporting this content...", "modal-submit": "Submit Report", - "modal-submit-success": "Content has been flagged for moderation." + "modal-submit-success": "Content has been flagged for moderation.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/it/pages.json b/public/language/it/pages.json index 6f7fd11c08..0b1be5dc1e 100644 --- a/public/language/it/pages.json +++ b/public/language/it/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1 Post tra i favoriti", "account/settings": "Impostazioni Utente", "account/watched": "Discussioni osservate da %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Post apprezzati da %1", "account/downvoted": "Post votati negativamente da %1", "account/best": "I migliori post di %1", diff --git a/public/language/it/unread.json b/public/language/it/unread.json index f03f876183..470c0e4c41 100644 --- a/public/language/it/unread.json +++ b/public/language/it/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Discussione marcata come letta!", "all-topics": "Tutte le Discussioni", "new-topics": "Nuova Discussione", - "watched-topics": "Discussioni seguite" + "watched-topics": "Discussioni seguite", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/it/user.json b/public/language/it/user.json index 8bbe9c5ea3..9eea1dccfc 100644 --- a/public/language/it/user.json +++ b/public/language/it/user.json @@ -25,6 +25,7 @@ "reputation": "Reputazione", "bookmarks": "Favoriti", "watched": "Osservati", + "ignored": "Ignored", "followers": "Da chi è seguito", "following": "Chi segue", "aboutme": "Su di me", @@ -86,6 +87,7 @@ "has_no_posts": "Questo utente non ha ancora scritto niente.", "has_no_topics": "Questo utente non ha ancora avviato discussioni.", "has_no_watched_topics": "Questo utente non sta osservando discussioni.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "Questo utente non ha ancora apprezzato nessun post.", "has_no_downvoted_posts": "Questo utente non ha ancora votato negativamente alcun post", "has_no_voted_posts": "Questo utente non ha post votati", @@ -94,6 +96,7 @@ "paginate_description": "Non utilizzare lo scroll infinito per discussioni e messaggi", "topics_per_page": "Discussioni per Pagina", "posts_per_page": "Post per Pagina", + "max_items_per_page": "Maximum %1", "notification_sounds": "Riproduci un suono quando si riceve una notifica", "notifications_and_sounds": "Notifiche e Suoni", "incoming-message-sound": "Suono messaggio in entrata", diff --git a/public/language/ja/admin/manage/post-queue.json b/public/language/ja/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/ja/admin/manage/post-queue.json +++ b/public/language/ja/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/ja/admin/menu.json b/public/language/ja/admin/menu.json index 7b15649258..d64271ea7d 100644 --- a/public/language/ja/admin/menu.json +++ b/public/language/ja/admin/menu.json @@ -65,7 +65,7 @@ "logout": "ログアウト", "view-forum": "フォーラムを表示", - "search.placeholder": "検索...", + "search.placeholder": "Search for settings", "search.no-results": "結果がありません...", "search.search-forum": "フォーラムでを検索", "search.keep-typing": "結果を見るにはもっと入力してください...", diff --git a/public/language/ja/admin/settings/pagination.json b/public/language/ja/admin/settings/pagination.json index 8cafd8490d..dc33c07c6c 100644 --- a/public/language/ja/admin/settings/pagination.json +++ b/public/language/ja/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "スクロールでのページ自動ロードはしない", "topics": "スレッドページ", "posts-per-page": "ページごとの投稿数", + "max-posts-per-page": "Maximum posts per page", "categories": "カテゴリページ", "topics-per-page": "ページごとのスレッド数", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "未読、最近、および人気に読み込むスレッドの初期数" } \ No newline at end of file diff --git a/public/language/ja/error.json b/public/language/ja/error.json index 35f5d57e27..ea59517924 100644 --- a/public/language/ja/error.json +++ b/public/language/ja/error.json @@ -11,7 +11,7 @@ "invalid-uid": "無効なユーザーID", "invalid-username": "無効なユーザー名", "invalid-email": "無効なメール", - "invalid-title": "無効なタイトル!", + "invalid-title": "Invalid title", "invalid-user-data": "無効なユーザーデータ", "invalid-password": "無効なパスワード", "invalid-login-credentials": "ログイン資格情報が無効です", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "ほかの管理者を停止することはできません!", "cant-remove-last-admin": "あなたが唯一の管理者です。管理者としてあなた自身を削除する前に、管理者として別のユーザーを追加します。", "cant-delete-admin": "削除する前に、このアカウントから管理者権限を削除してください。", + "invalid-image": "Invalid image", "invalid-image-type": "無効なイメージタイプです。許可された種類は: %1", "invalid-image-extension": "無効なイメージのエクステンション", "invalid-file-type": "無効なファイルタイプです。許可された種類は: %1", diff --git a/public/language/ja/flags.json b/public/language/ja/flags.json index 90a2d96569..97c4936ece 100644 --- a/public/language/ja/flags.json +++ b/public/language/ja/flags.json @@ -54,7 +54,11 @@ "modal-body": "レビューのために%1 %2 にフラグを付ける理由を指定してください。または必要に応じてクイックレポートボタンの1つを使用します。", "modal-reason-spam": "スパム", "modal-reason-offensive": "攻撃", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "このコンテンツを報告する理由...", "modal-submit": "レポートを提出", - "modal-submit-success": "コンテンツはモデレーションにフラグ付けされています。" + "modal-submit-success": "コンテンツはモデレーションにフラグ付けされています。", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/ja/pages.json b/public/language/ja/pages.json index 28d615dda9..fd0fa29e8c 100644 --- a/public/language/ja/pages.json +++ b/public/language/ja/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1のブックマークされた投稿", "account/settings": "ユーザー設定", "account/watched": " %1がスレッドを見ました。", + "account/ignored": "Topics ignored by %1", "account/upvoted": "%1が投稿を高評価しました", "account/downvoted": "%1が投稿を低評価しました", "account/best": "%1のベストな投稿", diff --git a/public/language/ja/unread.json b/public/language/ja/unread.json index feaef7879f..638db95f74 100644 --- a/public/language/ja/unread.json +++ b/public/language/ja/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "すべてのスレッドを既読にしました。", "all-topics": "すべてのスレッド", "new-topics": "新しいスレッド", - "watched-topics": "スレッドをウォッチしました" + "watched-topics": "スレッドをウォッチしました", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/ja/user.json b/public/language/ja/user.json index adf6dd8cc3..552c6c944f 100644 --- a/public/language/ja/user.json +++ b/public/language/ja/user.json @@ -25,6 +25,7 @@ "reputation": "評価", "bookmarks": "ブックマーク", "watched": "Watched", + "ignored": "Ignored", "followers": "フォロワー", "following": "フォロー中", "aboutme": "About me", @@ -86,6 +87,7 @@ "has_no_posts": "このユーザーはまだ一つも投稿していません", "has_no_topics": "このユーザーはまだ一つもスレッドを作っていません", "has_no_watched_topics": "このユーザーはまだ一つもスレッドをウォッチしていません", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "このユーザーはまだ一つも投稿に高評価を付けていません。", "has_no_downvoted_posts": "このユーザーはまだ一つも投稿に低評価を付けていません。", "has_no_voted_posts": "このユーザーは投稿を評価していません。", @@ -94,6 +96,7 @@ "paginate_description": "無限スクロールの代わりに、投稿やスレッドをページ別で切り替える。", "topics_per_page": "ページごとのスレッド数", "posts_per_page": "ページごとの投稿数", + "max_items_per_page": "Maximum %1", "notification_sounds": "通知の時に音を鳴らします", "notifications_and_sounds": "通知 & サウンド", "incoming-message-sound": "受信メッセージの音", diff --git a/public/language/ko/admin/manage/post-queue.json b/public/language/ko/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/ko/admin/manage/post-queue.json +++ b/public/language/ko/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/ko/admin/menu.json b/public/language/ko/admin/menu.json index 1f7051b424..4312e0a704 100644 --- a/public/language/ko/admin/menu.json +++ b/public/language/ko/admin/menu.json @@ -65,7 +65,7 @@ "logout": "로그아웃", "view-forum": "포럼 보기", - "search.placeholder": "검색...", + "search.placeholder": "Search for settings", "search.no-results": "검색 결과가 없습니다...", "search.search-forum": "포럼에서 를 검색하세요", "search.keep-typing": "검색 결과를 보기 위해 더 입력하세요...", diff --git a/public/language/ko/admin/settings/pagination.json b/public/language/ko/admin/settings/pagination.json index 19ae2f326c..5a5ef4fdab 100644 --- a/public/language/ko/admin/settings/pagination.json +++ b/public/language/ko/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "무한 스크롤 대신 페이지로 주제와 포스트 보여주기", "topics": "주제 페이지", "posts-per-page": "페이지 당 포스트", + "max-posts-per-page": "Maximum posts per page", "categories": "카테고리 페이지", "topics-per-page": "페이지 당 주제 수", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "읽지 않은 글, 최근 작성 글, 인기 글 게시판에서 처음 보여줄 게시글 개수" } \ No newline at end of file diff --git a/public/language/ko/error.json b/public/language/ko/error.json index 4f85de5933..40af6bfcd7 100644 --- a/public/language/ko/error.json +++ b/public/language/ko/error.json @@ -11,7 +11,7 @@ "invalid-uid": "올바르지 않은 사용자 ID입니다.", "invalid-username": "올바르지 않은 사용자명 입니다.", "invalid-email": "올바르지 않은 이메일입니다.", - "invalid-title": "올바르지 않은 제목입니다.", + "invalid-title": "Invalid title", "invalid-user-data": "올바르지 않은 사용자 정보입니다.", "invalid-password": "올바르지 않은 비밀번호입니다.", "invalid-login-credentials": "올바르지 않은 로그인 정보입니다.", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "다른 관리자를 차단할 수 없습니다.", "cant-remove-last-admin": "귀하는 유일한 관리자입니다. 관리자를 그만두시기 전에 다른 사용자를 관리자로 임명하세요.", "cant-delete-admin": "해당 계정을 삭제하기 전에 관리자 권한을 해제 해주십시오.", + "invalid-image": "Invalid image", "invalid-image-type": "올바르지 않은 이미지입니다. 사용가능한 유형: %1", "invalid-image-extension": "올바르지 않은 이미지 확장자입니다.", "invalid-file-type": "올바르지 않은 파일 유형입니다. 사용가능한 유형: %1", diff --git a/public/language/ko/flags.json b/public/language/ko/flags.json index 8693130936..eabf86033e 100644 --- a/public/language/ko/flags.json +++ b/public/language/ko/flags.json @@ -54,7 +54,11 @@ "modal-body": "%1 %2 에 대한 신고 사유를 적어주시거나, 빠른 신고 버튼 중 하나를 사용해 주세요.", "modal-reason-spam": "스팸", "modal-reason-offensive": "부적절한 글", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "신고 사유", "modal-submit": "리포트 제출", - "modal-submit-success": "이 컨텐츠는 신고되었습니다." + "modal-submit-success": "이 컨텐츠는 신고되었습니다.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/ko/pages.json b/public/language/ko/pages.json index 66e0744fbc..9c033946ee 100644 --- a/public/language/ko/pages.json +++ b/public/language/ko/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1 님이 즐겨찾기 한 포스트", "account/settings": "사용자 설정", "account/watched": "%1 님이 관심 가진 게시물", + "account/ignored": "Topics ignored by %1", "account/upvoted": "%1 님이 추천한 포스트", "account/downvoted": "%1 님에 비추천한 포스트", "account/best": "%1 님 최고의 포스트", diff --git a/public/language/ko/unread.json b/public/language/ko/unread.json index 362d75cbe9..d508cae95c 100644 --- a/public/language/ko/unread.json +++ b/public/language/ko/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "게시물들을 읽음으로 표시했습니다.", "all-topics": "모든 게시물", "new-topics": "새 게시물", - "watched-topics": "관심있는 게시물" + "watched-topics": "관심있는 게시물", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/ko/user.json b/public/language/ko/user.json index 7ae2e74f74..60050414b5 100644 --- a/public/language/ko/user.json +++ b/public/language/ko/user.json @@ -25,6 +25,7 @@ "reputation": "등급", "bookmarks": "즐겨찾기", "watched": "관심있는 게시물", + "ignored": "Ignored", "followers": "팔로워", "following": "팔로잉", "aboutme": "자기소개", @@ -86,6 +87,7 @@ "has_no_posts": "이 사용자가 작성한 포스트가 없습니다.", "has_no_topics": "이 사용자가 작성한 게시물이 없습니다.", "has_no_watched_topics": "이 사용자가 관심 목록에 추가한 게시물이 없습니다.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "이 사용자가 추천한 포스트가 없습니다.", "has_no_downvoted_posts": "이 사용자가 비추천한 포스트가 없습니다.", "has_no_voted_posts": "평가받은 게시물이 없습니다.", @@ -94,6 +96,7 @@ "paginate_description": "주제와 게시물을 페이지로 정리", "topics_per_page": "페이지 당 게시물 수", "posts_per_page": "페이지 당 포스트 수", + "max_items_per_page": "Maximum %1", "notification_sounds": "알림 수신시 소리로 알려주기", "notifications_and_sounds": "알림 / 알림음 설정", "incoming-message-sound": "수신 메시지 알림음", diff --git a/public/language/lt/admin/manage/post-queue.json b/public/language/lt/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/lt/admin/manage/post-queue.json +++ b/public/language/lt/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/lt/admin/menu.json b/public/language/lt/admin/menu.json index 3ec4ad41c4..d42af99bce 100644 --- a/public/language/lt/admin/menu.json +++ b/public/language/lt/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/lt/admin/settings/pagination.json b/public/language/lt/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/lt/admin/settings/pagination.json +++ b/public/language/lt/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/lt/error.json b/public/language/lt/error.json index fd1b8b2c14..ab2b25b580 100644 --- a/public/language/lt/error.json +++ b/public/language/lt/error.json @@ -11,7 +11,7 @@ "invalid-uid": "Klaidingas vartotojo ID", "invalid-username": "Klaidingas vartotojo vardas", "invalid-email": "Klaidingas el. pašto adresas", - "invalid-title": "Neteisingas pavadinimas!", + "invalid-title": "Invalid title", "invalid-user-data": "Klaidingi vartotojo duomenys", "invalid-password": "Klaidingas slaptažodis", "invalid-login-credentials": "Invalid login credentials", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Jūs negalite užblokuoti kitų administratorių!", "cant-remove-last-admin": "Jūs esate vienintelis administratorius. Pridėkite kitą vartotoja kaip administratorių prieš pašalindamas save", "cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.", + "invalid-image": "Invalid image", "invalid-image-type": "Neteisingas vaizdo tipas. Leidžiami tipai :%1", "invalid-image-extension": "Neteisingas vaizdo plėtinys", "invalid-file-type": "Neteisingas failo tipas. Leidžiami tipai: %1", diff --git a/public/language/lt/flags.json b/public/language/lt/flags.json index c4bfed6f23..d05a5b25a8 100644 --- a/public/language/lt/flags.json +++ b/public/language/lt/flags.json @@ -54,7 +54,11 @@ "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Reason for reporting this content...", "modal-submit": "Submit Report", - "modal-submit-success": "Content has been flagged for moderation." + "modal-submit-success": "Content has been flagged for moderation.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/lt/pages.json b/public/language/lt/pages.json index fbbb765fe5..8f4822919d 100644 --- a/public/language/lt/pages.json +++ b/public/language/lt/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1's Bookmarked Posts", "account/settings": "User Settings", "account/watched": "Topics watched by %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Posts upvoted by %1", "account/downvoted": "Posts downvoted by %1", "account/best": "Best posts made by %1", diff --git a/public/language/lt/unread.json b/public/language/lt/unread.json index 88b8b1464f..6d81e19dd7 100644 --- a/public/language/lt/unread.json +++ b/public/language/lt/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Temos pažymėtos kaip perskaitytos.", "all-topics": "All Topics", "new-topics": "New Topics", - "watched-topics": "Watched Topics" + "watched-topics": "Watched Topics", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/lt/user.json b/public/language/lt/user.json index b02ecfbf0e..0f4ecf0164 100644 --- a/public/language/lt/user.json +++ b/public/language/lt/user.json @@ -25,6 +25,7 @@ "reputation": "Reputacija", "bookmarks": "Bookmarks", "watched": "Peržiūrėjo", + "ignored": "Ignored", "followers": "Sekėjai", "following": "Seka", "aboutme": "Apie mane", @@ -86,6 +87,7 @@ "has_no_posts": "Šis vartotojas pakolkas neparašė jokių pranešimų", "has_no_topics": "Šis vartotojas pakolkas nesukūrė jokių temų", "has_no_watched_topics": "Šis vartotojas pakolkas nestebėjo jokių temų", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "Šis narys dar neturi teigiamai įvertintų pranešimų.", "has_no_downvoted_posts": "Šis narys dar neturi neigiamai įvertintų pranešimų.", "has_no_voted_posts": "Šis narys dar neturi įvertintų pranešimų.", @@ -94,6 +96,7 @@ "paginate_description": "Puslapiavimas temų ir pranešimų, vietoj kad naudoti judėjimą su pelytė į viršų ir į apačia", "topics_per_page": "Temų puslapyje", "posts_per_page": "Pranešimų puslapyje", + "max_items_per_page": "Maximum %1", "notification_sounds": "Paleisti garsą kai jūs gaunate pranešimą", "notifications_and_sounds": "Pranešimai ir garsai", "incoming-message-sound": "Gaunamos žinutės garsas", diff --git a/public/language/ms/admin/manage/post-queue.json b/public/language/ms/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/ms/admin/manage/post-queue.json +++ b/public/language/ms/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/ms/admin/menu.json b/public/language/ms/admin/menu.json index 3ec4ad41c4..d42af99bce 100644 --- a/public/language/ms/admin/menu.json +++ b/public/language/ms/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/ms/admin/settings/pagination.json b/public/language/ms/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/ms/admin/settings/pagination.json +++ b/public/language/ms/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/ms/error.json b/public/language/ms/error.json index cd907cac52..bbef66b65a 100644 --- a/public/language/ms/error.json +++ b/public/language/ms/error.json @@ -11,7 +11,7 @@ "invalid-uid": "ID Pengguna Tak Sah", "invalid-username": "Nama Pengguna Tak Sah", "invalid-email": "Emel Tak Sah", - "invalid-title": "Tajuk Tak Sah!", + "invalid-title": "Invalid title", "invalid-user-data": "Data Pengguna Tak Sah", "invalid-password": "Kata laluan salah!", "invalid-login-credentials": "Invalid login credentials", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Anda tidak boleh haramkan admin / pentadbir!", "cant-remove-last-admin": "Anda satu-satunya pentadbir. Tambah pentadbir lain sebelum membuang diri anda sebagai pentadbir", "cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.", + "invalid-image": "Invalid image", "invalid-image-type": "Jenis imej tak sah. Jenis yang dibenarkan ialah: %1", "invalid-image-extension": "Sambungan imej tak sah", "invalid-file-type": "Jenis fail tak sah. Jenis fail yang dibenarkan ialah: %1", diff --git a/public/language/ms/flags.json b/public/language/ms/flags.json index c4bfed6f23..d05a5b25a8 100644 --- a/public/language/ms/flags.json +++ b/public/language/ms/flags.json @@ -54,7 +54,11 @@ "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Reason for reporting this content...", "modal-submit": "Submit Report", - "modal-submit-success": "Content has been flagged for moderation." + "modal-submit-success": "Content has been flagged for moderation.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/ms/pages.json b/public/language/ms/pages.json index e647af11bc..cbac1c6d7e 100644 --- a/public/language/ms/pages.json +++ b/public/language/ms/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1's Bookmarked Posts", "account/settings": "Tetapan Pengguna", "account/watched": "Topik Diperhati Oleh %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Kiriman diundi naik oleh %1", "account/downvoted": "Kiriman dibuang undi oleh %1", "account/best": "Kiriman Terbaik Oleh %1", diff --git a/public/language/ms/unread.json b/public/language/ms/unread.json index 3e132e6f2c..aa6f5b08d6 100644 --- a/public/language/ms/unread.json +++ b/public/language/ms/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Topik ditandakan sebagai sudah dibaca", "all-topics": "All Topics", "new-topics": "New Topics", - "watched-topics": "Watched Topics" + "watched-topics": "Watched Topics", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/ms/user.json b/public/language/ms/user.json index bc1074bc5e..43eb03be3c 100644 --- a/public/language/ms/user.json +++ b/public/language/ms/user.json @@ -25,6 +25,7 @@ "reputation": "Reputasi", "bookmarks": "Bookmarks", "watched": "Melihat", + "ignored": "Ignored", "followers": "Pengikut", "following": "Mengikuti", "aboutme": "Tentang saya", @@ -86,6 +87,7 @@ "has_no_posts": "Pengguna ini belum menulis sebarang kiriman lagi.", "has_no_topics": "Pengguna ini belum menulis sebarang topik lagi.", "has_no_watched_topics": "Pengguna ini belum melanggan sebarang topik lagi.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "This user hasn't upvoted any posts yet.", "has_no_downvoted_posts": "This user hasn't downvoted any posts yet.", "has_no_voted_posts": "This user has no voted posts", @@ -94,6 +96,7 @@ "paginate_description": "Gunakan muka surat untuk topik dan kiriman daripada penggunaan skroll infiniti", "topics_per_page": "Topik setiap muka", "posts_per_page": "Kiriman setiap muka", + "max_items_per_page": "Maximum %1", "notification_sounds": "Mainkan bunyi apabila anda mendapat pemberitahuan", "notifications_and_sounds": "Notifications & Sounds", "incoming-message-sound": "Incoming message sound", diff --git a/public/language/nb/admin/manage/post-queue.json b/public/language/nb/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/nb/admin/manage/post-queue.json +++ b/public/language/nb/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/nb/admin/menu.json b/public/language/nb/admin/menu.json index 3ec4ad41c4..d42af99bce 100644 --- a/public/language/nb/admin/menu.json +++ b/public/language/nb/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/nb/admin/settings/pagination.json b/public/language/nb/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/nb/admin/settings/pagination.json +++ b/public/language/nb/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/nb/error.json b/public/language/nb/error.json index c169080cc5..37c81b0a5d 100644 --- a/public/language/nb/error.json +++ b/public/language/nb/error.json @@ -11,7 +11,7 @@ "invalid-uid": "Ugyldig bruker-ID", "invalid-username": "Ugyldig brukernavn", "invalid-email": "Ugyldig e-post", - "invalid-title": "Ugyldig tittel!", + "invalid-title": "Invalid title", "invalid-user-data": "Ugyldig brukerdata", "invalid-password": "Ugyldig passord", "invalid-login-credentials": "Invalid login credentials", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Du kan ikke utestenge andre administratorer!", "cant-remove-last-admin": "Du er den eneste administratoren. Legg til en annen bruker som administrator før du fjerner deg selv.", "cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.", + "invalid-image": "Invalid image", "invalid-image-type": "Ugyldig bildetype. Tilatte typer er: %1", "invalid-image-extension": "Ugyldig bildefiltype", "invalid-file-type": "Ugyldig filtype. Tillatte typer er: %1", diff --git a/public/language/nb/flags.json b/public/language/nb/flags.json index c4bfed6f23..d05a5b25a8 100644 --- a/public/language/nb/flags.json +++ b/public/language/nb/flags.json @@ -54,7 +54,11 @@ "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Reason for reporting this content...", "modal-submit": "Submit Report", - "modal-submit-success": "Content has been flagged for moderation." + "modal-submit-success": "Content has been flagged for moderation.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/nb/pages.json b/public/language/nb/pages.json index 44b9d0e5ea..bc90df31d1 100644 --- a/public/language/nb/pages.json +++ b/public/language/nb/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1's Bookmarked Posts", "account/settings": "Brukerinnstillinger", "account/watched": "Innlegg overvåket av %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Posts upvoted by %1", "account/downvoted": "Posts downvoted by %1", "account/best": "Best posts made by %1", diff --git a/public/language/nb/unread.json b/public/language/nb/unread.json index c22af54291..ba4cb60942 100644 --- a/public/language/nb/unread.json +++ b/public/language/nb/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Emner merket som lest!", "all-topics": "All Topics", "new-topics": "New Topics", - "watched-topics": "Watched Topics" + "watched-topics": "Watched Topics", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/nb/user.json b/public/language/nb/user.json index 5a71bd8a5e..a89d0f54ab 100644 --- a/public/language/nb/user.json +++ b/public/language/nb/user.json @@ -25,6 +25,7 @@ "reputation": "Rykte", "bookmarks": "Bookmarks", "watched": "Overvåkede", + "ignored": "Ignored", "followers": "Følgere", "following": "Følger", "aboutme": "Om meg", @@ -86,6 +87,7 @@ "has_no_posts": "Denne brukeren har ikke skrevet noe enda.", "has_no_topics": "Denne brukeren har ikke skrevet noen emner enda.", "has_no_watched_topics": "Denne brukeren har ikke overvåket noen emner enda.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "This user hasn't upvoted any posts yet.", "has_no_downvoted_posts": "This user hasn't downvoted any posts yet.", "has_no_voted_posts": "This user has no voted posts", @@ -94,6 +96,7 @@ "paginate_description": "Bruk sidevelger for emner og innlegg istedet for uendelig scrolling", "topics_per_page": "Tråd per side", "posts_per_page": "Innlegg per side", + "max_items_per_page": "Maximum %1", "notification_sounds": "Spill en lyd når du mottar et varsel", "notifications_and_sounds": "Notifications & Sounds", "incoming-message-sound": "Incoming message sound", diff --git a/public/language/nl/admin/manage/post-queue.json b/public/language/nl/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/nl/admin/manage/post-queue.json +++ b/public/language/nl/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/nl/admin/menu.json b/public/language/nl/admin/menu.json index 3ec4ad41c4..d42af99bce 100644 --- a/public/language/nl/admin/menu.json +++ b/public/language/nl/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/nl/admin/settings/pagination.json b/public/language/nl/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/nl/admin/settings/pagination.json +++ b/public/language/nl/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/nl/error.json b/public/language/nl/error.json index 3b8da127a2..a365454a0c 100644 --- a/public/language/nl/error.json +++ b/public/language/nl/error.json @@ -11,7 +11,7 @@ "invalid-uid": "Ongeldig gebruikerskenmerk", "invalid-username": "Ongeldige gebruikersnaam", "invalid-email": "Ongeldig e-mailadres", - "invalid-title": "Ongeldige titel!", + "invalid-title": "Invalid title", "invalid-user-data": "Ongeldige gebruikersgegevens", "invalid-password": "Ongeldig wachtwoord", "invalid-login-credentials": "Ongeldige aanmeldingsreferenties", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Het is niet toegestaan andere beheerders te verbannen!", "cant-remove-last-admin": "Je bent de enige beheerder. Stel eerst een andere gebruiker als beheerder in voordat je jezelf geen beheerder meer maakt.", "cant-delete-admin": "Verwijder administratieve rechten van dit account voordat je probeert deze te verwijderen", + "invalid-image": "Invalid image", "invalid-image-type": "Ongeldig bestandstype afbeelding. Deze afbeelding is van een bestandstype dat niet ondersteund wordt. Toegestane bestandstypes voor afbeeldingsbestanden zijn: %1", "invalid-image-extension": "Ongeldig bestandstype afbeelding", "invalid-file-type": "Dit bestandstype wordt niet ondersteund. Toegestane bestandstypen zijn: %1", diff --git a/public/language/nl/flags.json b/public/language/nl/flags.json index c4bfed6f23..d05a5b25a8 100644 --- a/public/language/nl/flags.json +++ b/public/language/nl/flags.json @@ -54,7 +54,11 @@ "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Reason for reporting this content...", "modal-submit": "Submit Report", - "modal-submit-success": "Content has been flagged for moderation." + "modal-submit-success": "Content has been flagged for moderation.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/nl/pages.json b/public/language/nl/pages.json index c47f4e202d..77754ba3cd 100644 --- a/public/language/nl/pages.json +++ b/public/language/nl/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1's Favoriete Berichten", "account/settings": "Gebruikersinstellingen", "account/watched": "Berichten die door %1 bekeken worden", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Berichten omhoog gestemd door %1", "account/downvoted": "Berichten omlaag gestemd door %1", "account/best": "Beste berichten geplaast door %1", diff --git a/public/language/nl/unread.json b/public/language/nl/unread.json index d5bed309e4..67101c10a9 100644 --- a/public/language/nl/unread.json +++ b/public/language/nl/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Onderwerp gemarkeerd als gelezen!", "all-topics": "Alle onderwerpen", "new-topics": "Nieuwe onderwerpen", - "watched-topics": "Bekeken onderwerpen" + "watched-topics": "Bekeken onderwerpen", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/nl/user.json b/public/language/nl/user.json index 216a26f855..41366c1733 100644 --- a/public/language/nl/user.json +++ b/public/language/nl/user.json @@ -25,6 +25,7 @@ "reputation": "Reputatie", "bookmarks": "Favorieten", "watched": "Bekeken", + "ignored": "Ignored", "followers": "Volgers", "following": "Volgend", "aboutme": "Over mij", @@ -86,6 +87,7 @@ "has_no_posts": "Deze gebruiker heeft nog geen berichten geplaatst", "has_no_topics": "Deze gebruiker heeft nog geen onderwerpen gestart.", "has_no_watched_topics": "Deze gebruiker heeft nog geen onderwerpen gevolgd.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "Deze gebruiker heeft nog geen berichten omhoog gestemd.", "has_no_downvoted_posts": "Deze gebruiker heeft nog geen berichten omlaag gestemd.", "has_no_voted_posts": "Deze gebruiker heeft nog niet op berichten gestemd", @@ -94,6 +96,7 @@ "paginate_description": "Blader door onderwerpen en berichten in plaats van oneindig scrollen.", "topics_per_page": "Onderwerpen per pagina", "posts_per_page": "Berichten per pagina", + "max_items_per_page": "Maximum %1", "notification_sounds": "Speel een geluid af wanneer ik een notificatie ontvang", "notifications_and_sounds": "Notificaties & Geluiden", "incoming-message-sound": "Inkomend bericht geluid", diff --git a/public/language/pl/admin/manage/post-queue.json b/public/language/pl/admin/manage/post-queue.json index 82947b6085..2b2a64b0d6 100644 --- a/public/language/pl/admin/manage/post-queue.json +++ b/public/language/pl/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Tytuł", "content": "Zawartość", "posted": "Napisano", - "reply-to": "Odpowiedz do \"%1\"" + "reply-to": "Odpowiedz do \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/pl/admin/menu.json b/public/language/pl/admin/menu.json index 5e153bce76..e5830c32ce 100644 --- a/public/language/pl/admin/menu.json +++ b/public/language/pl/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Wyloguj się", "view-forum": "Zobacz forum", - "search.placeholder": "Szukaj...", + "search.placeholder": "Search for settings", "search.no-results": "Brak wyników...", "search.search-forum": "Szukaj w forum ", "search.keep-typing": "Wpisz więcej, aby zobaczyć wyniki ...", diff --git a/public/language/pl/admin/settings/pagination.json b/public/language/pl/admin/settings/pagination.json index 78de8e2b29..37200ef559 100644 --- a/public/language/pl/admin/settings/pagination.json +++ b/public/language/pl/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginuj tematy oraz posty zamiast używać nieskończonego przewijania", "topics": "Paginacja tematów", "posts-per-page": "Postów na stronie", + "max-posts-per-page": "Maximum posts per page", "categories": "Paginacja kategorii", "topics-per-page": "Tematów na stronę", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Początkowa liczba pozycji do załadowania w Nieprzeczytanych, Ostatnich oraz Popularnych tematów" } \ No newline at end of file diff --git a/public/language/pl/error.json b/public/language/pl/error.json index 2fb786d466..644b83c6b0 100644 --- a/public/language/pl/error.json +++ b/public/language/pl/error.json @@ -11,7 +11,7 @@ "invalid-uid": "Błędne ID użytkownika", "invalid-username": "Błędny Login", "invalid-email": "Błędny Email", - "invalid-title": "Błędny tytuł!", + "invalid-title": "Invalid title", "invalid-user-data": "Błędne Dane Użytkownika", "invalid-password": "Błędne Hasło", "invalid-login-credentials": "Niewłaściwe dane logowania", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Nie możesz zbanować innych adminów!", "cant-remove-last-admin": "Jesteś jedynym administratorem. Dodaj innego użytkownika jako administratora przed usunięciem siebie z tej grupy", "cant-delete-admin": "Usuń uprawnienia administratora z tego konta przed próbą jego usunięcia.", + "invalid-image": "Invalid image", "invalid-image-type": "Błędny typ obrazka. Dozwolone typy to: %1", "invalid-image-extension": "Błędne rozszerzenie pliku", "invalid-file-type": "Błędny typ pliku. Dozwolone typy to: %1", diff --git a/public/language/pl/flags.json b/public/language/pl/flags.json index 0749ce4e6e..cbd13653dc 100644 --- a/public/language/pl/flags.json +++ b/public/language/pl/flags.json @@ -54,7 +54,11 @@ "modal-body": "Prosimy o opisanie powodu oflagowania %1 %2 do przeglądów. Alternatywnie, jeśli to możliwe użyj jednego z przycisków szybkiego raportowania.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Obraźliwy", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Powód raportowania tej zawartości.", "modal-submit": "Wyślij raport", - "modal-submit-success": "Zawartość została oflagowana do moderacji." + "modal-submit-success": "Zawartość została oflagowana do moderacji.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/pl/pages.json b/public/language/pl/pages.json index e8d7be8ef3..fbdffce138 100644 --- a/public/language/pl/pages.json +++ b/public/language/pl/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "Posty w zakładkach %1", "account/settings": "Ustawienia użytkownika", "account/watched": "Tematy obserwowane przez %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Posty za głosowane za przez %1", "account/downvoted": "Posty za głosowane przeciw przez %1", "account/best": "Najlepsze posty od %1", diff --git a/public/language/pl/unread.json b/public/language/pl/unread.json index 872ae755d1..392bc03530 100644 --- a/public/language/pl/unread.json +++ b/public/language/pl/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Tematy zostały oznaczone jako przeczytane!", "all-topics": "Wszystkie tematy", "new-topics": "Nowe tematy", - "watched-topics": "Obserwowane tematy" + "watched-topics": "Obserwowane tematy", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/pl/user.json b/public/language/pl/user.json index 7777c2686c..831e94cc04 100644 --- a/public/language/pl/user.json +++ b/public/language/pl/user.json @@ -25,6 +25,7 @@ "reputation": "Reputacja", "bookmarks": "Zakładki", "watched": "Obserwowane", + "ignored": "Ignored", "followers": "Śledzących", "following": "Śledzonych", "aboutme": "O mnie", @@ -86,6 +87,7 @@ "has_no_posts": "Ten użytkownik nic jeszcze nie napisał.", "has_no_topics": "Ten użytkownik nie stworzył jeszcze żadnych tematów.", "has_no_watched_topics": "Ten użytkownik nie obserwuje jeszcze żadnych tematów.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "Ten użytkownik jeszcze nie głosował za w żadnym temacie", "has_no_downvoted_posts": "Ten użytkownik jeszcze nie głosował przeciw w żadnym temacie.", "has_no_voted_posts": "Ten użytkownik nie ma jeszcze ocenionych postów", @@ -94,6 +96,7 @@ "paginate_description": "Dziel tematy i posty na strony zamiast używać nieskończonego przewijania", "topics_per_page": "Tematów na stronę", "posts_per_page": "Postów na stronę", + "max_items_per_page": "Maximum %1", "notification_sounds": "Odtwarzaj dźwięk, gdy otrzymujesz powiadomienie", "notifications_and_sounds": "Powiadomienia i dźwięki", "incoming-message-sound": "Dźwięk przychodzącej wiadomości", diff --git a/public/language/pt-BR/admin/manage/post-queue.json b/public/language/pt-BR/admin/manage/post-queue.json index 9d83642f32..3e48609165 100644 --- a/public/language/pt-BR/admin/manage/post-queue.json +++ b/public/language/pt-BR/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Título", "content": "Conteúdo", "posted": "Postado", - "reply-to": "Resposta para \"%1\"" + "reply-to": "Resposta para \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ 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 b97836f043..81972b21d6 100644 --- a/public/language/pt-BR/admin/menu.json +++ b/public/language/pt-BR/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Sair da Conta", "view-forum": "Ver Fórum", - "search.placeholder": "Pesquisar...", + "search.placeholder": "Search for settings", "search.no-results": "Sem resultados...", "search.search-forum": "Pesquisar o fórum por ", "search.keep-typing": "Digite para ver mais resultados...", diff --git a/public/language/pt-BR/admin/settings/pagination.json b/public/language/pt-BR/admin/settings/pagination.json index 25c96b28c8..6ef49262d9 100644 --- a/public/language/pt-BR/admin/settings/pagination.json +++ b/public/language/pt-BR/admin/settings/pagination.json @@ -3,7 +3,9 @@ "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", "categories": "Paginação de Categorias", "topics-per-page": "Tópicos por Página", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Número Inicial de Tópicos paa Carregar em Não-lidos, Recentes, e Populares" } \ No newline at end of file diff --git a/public/language/pt-BR/error.json b/public/language/pt-BR/error.json index fd4b1914cb..8a69b5cd5f 100644 --- a/public/language/pt-BR/error.json +++ b/public/language/pt-BR/error.json @@ -11,7 +11,7 @@ "invalid-uid": "ID de Usuário Inválido", "invalid-username": "Nome de Usuário Inválido", "invalid-email": "Email Inválido", - "invalid-title": "Título inválido!", + "invalid-title": "Invalid title", "invalid-user-data": "Dados de Usuário Inválidos", "invalid-password": "Senha Inválida", "invalid-login-credentials": "Credenciais de login inválidas", @@ -81,6 +81,7 @@ "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.", + "invalid-image": "Invalid image", "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", diff --git a/public/language/pt-BR/flags.json b/public/language/pt-BR/flags.json index 802b042fa3..407f6958ad 100644 --- a/public/language/pt-BR/flags.json +++ b/public/language/pt-BR/flags.json @@ -54,7 +54,11 @@ "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-reason-spam": "Spam", "modal-reason-offensive": "Ofensivo", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Motivo para reportar este conteúdo...", "modal-submit": "Enviar Reportagem", - "modal-submit-success": "O conteúdo foi sinalizado para moderação." + "modal-submit-success": "O conteúdo foi sinalizado para moderação.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/pt-BR/pages.json b/public/language/pt-BR/pages.json index d9d1bd7083..2112195497 100644 --- a/public/language/pt-BR/pages.json +++ b/public/language/pt-BR/pages.json @@ -44,6 +44,7 @@ "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/upvoted": "Posts votados positivamente por %1", "account/downvoted": "Posts votados negativamente por %1", "account/best": "Melhores posts de %1", diff --git a/public/language/pt-BR/unread.json b/public/language/pt-BR/unread.json index 2ee62fbb68..5f75048653 100644 --- a/public/language/pt-BR/unread.json +++ b/public/language/pt-BR/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Tópicos marcados como lidos!", "all-topics": "Todos os Tópicos", "new-topics": "Novos Tópicos", - "watched-topics": "Topicos Acompanhados" + "watched-topics": "Topicos Acompanhados", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/pt-BR/user.json b/public/language/pt-BR/user.json index 9b3ff880e8..344e578fce 100644 --- a/public/language/pt-BR/user.json +++ b/public/language/pt-BR/user.json @@ -25,6 +25,7 @@ "reputation": "Reputação", "bookmarks": "Favoritos", "watched": "Acompanhado", + "ignored": "Ignored", "followers": "Seguidores", "following": "Seguindo", "aboutme": "Sobre mim", @@ -86,6 +87,7 @@ "has_no_posts": "Esse usuário ainda não postou nada.", "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": "This user hasn't ignored any topics yet.", "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_voted_posts": "Este usuário não tem posts votados", @@ -94,6 +96,7 @@ "paginate_description": "Paginar tópicos ao invés de utilizar em vez de usar rolagem infinita.", "topics_per_page": "Tópicos por Página", "posts_per_page": "Posts por Página", + "max_items_per_page": "Maximum %1", "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", diff --git a/public/language/pt-PT/admin/manage/post-queue.json b/public/language/pt-PT/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/pt-PT/admin/manage/post-queue.json +++ b/public/language/pt-PT/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/pt-PT/admin/menu.json b/public/language/pt-PT/admin/menu.json index 3ec4ad41c4..d42af99bce 100644 --- a/public/language/pt-PT/admin/menu.json +++ b/public/language/pt-PT/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/pt-PT/admin/settings/pagination.json b/public/language/pt-PT/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/pt-PT/admin/settings/pagination.json +++ b/public/language/pt-PT/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/pt-PT/error.json b/public/language/pt-PT/error.json index 05d5056c96..f61987ca2c 100644 --- a/public/language/pt-PT/error.json +++ b/public/language/pt-PT/error.json @@ -11,7 +11,7 @@ "invalid-uid": "ID de utilizador inválido", "invalid-username": "Utilizador inválido", "invalid-email": "Email inválido", - "invalid-title": "Título inválido!", + "invalid-title": "Invalid title", "invalid-user-data": "Dados de utilizador inválidos", "invalid-password": "Senha inválida", "invalid-login-credentials": "Invalid login credentials", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Não podes banir outros administradores!", "cant-remove-last-admin": "És o único administrador. Adicionar outro utilizador como administrador antes de te removeres como administrador.", "cant-delete-admin": "Remove os privilégios de administrador desta conta antes de tentares apagá-la.", + "invalid-image": "Invalid image", "invalid-image-type": "Tipo de imagem inválida. Os tipos válidos são: %1", "invalid-image-extension": "Extensão de imagem inválida", "invalid-file-type": "Tipo de ficheiro inválido. Os tipos válidos são: %1", diff --git a/public/language/pt-PT/flags.json b/public/language/pt-PT/flags.json index 8d1d58cbf4..d32ae53f56 100644 --- a/public/language/pt-PT/flags.json +++ b/public/language/pt-PT/flags.json @@ -54,7 +54,11 @@ "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Ofensivo", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Motivo para reportar este conteúdo...", "modal-submit": "Submeter Relatório", - "modal-submit-success": "Conteúdo sinalizado para moderação." + "modal-submit-success": "Conteúdo sinalizado para moderação.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/pt-PT/pages.json b/public/language/pt-PT/pages.json index 1c838dfdf1..5d27f5c674 100644 --- a/public/language/pt-PT/pages.json +++ b/public/language/pt-PT/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "Publicações marcadas de %1", "account/settings": "Definições de utilizador", "account/watched": "Tópicos vistos por %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Publicações votadas favoravelmente por %1", "account/downvoted": "Publicações votadas negativamente por %1", "account/best": "Melhores publicações feitas por %1", diff --git a/public/language/pt-PT/unread.json b/public/language/pt-PT/unread.json index 60b5b3b792..964fb74478 100644 --- a/public/language/pt-PT/unread.json +++ b/public/language/pt-PT/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Tópicos marcados como lidos!", "all-topics": "Todos os tópicos", "new-topics": "Novos tópicos", - "watched-topics": "Tópicos vistos" + "watched-topics": "Tópicos vistos", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/pt-PT/user.json b/public/language/pt-PT/user.json index 6e5b6981b3..1f03ab13ca 100644 --- a/public/language/pt-PT/user.json +++ b/public/language/pt-PT/user.json @@ -25,6 +25,7 @@ "reputation": "Reputação", "bookmarks": "Marcadores", "watched": "Visto ", + "ignored": "Ignored", "followers": "Seguidores", "following": "Seguindo", "aboutme": "Sobre mim", @@ -86,6 +87,7 @@ "has_no_posts": "Este utilizador ainda não publicou nada.", "has_no_topics": "Este utilizar ainda não publicou nenhum tópico.", "has_no_watched_topics": "Este utilizador ainda não visualizou qualquer tópico até ao momento.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "Este utilizador ainda não votou favoravelmente em nenhuma publicação.", "has_no_downvoted_posts": "Este utilizador ainda não votou negativamente em nenhuma publicação.", "has_no_voted_posts": "Este utilizador ainda não tem nenhuma publicação com votos", @@ -94,6 +96,7 @@ "paginate_description": "Paginar os tópicos e publicações em vez de usar o scroll infinito", "topics_per_page": "Tópicos por página", "posts_per_page": "Publicações por página", + "max_items_per_page": "Maximum %1", "notification_sounds": "Tocar um som quando uma notificação for recebida", "notifications_and_sounds": "Notificações & Sons", "incoming-message-sound": "Som de mensagem recebida", diff --git a/public/language/ro/admin/manage/post-queue.json b/public/language/ro/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/ro/admin/manage/post-queue.json +++ b/public/language/ro/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/ro/admin/menu.json b/public/language/ro/admin/menu.json index 3ec4ad41c4..d42af99bce 100644 --- a/public/language/ro/admin/menu.json +++ b/public/language/ro/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/ro/admin/settings/pagination.json b/public/language/ro/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/ro/admin/settings/pagination.json +++ b/public/language/ro/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/ro/error.json b/public/language/ro/error.json index dc71dbc43f..beb63b29a6 100644 --- a/public/language/ro/error.json +++ b/public/language/ro/error.json @@ -11,7 +11,7 @@ "invalid-uid": "ID Utilizator Invalid", "invalid-username": "Utilizator Invalid", "invalid-email": "Email Invalid", - "invalid-title": "Titlu invalid!", + "invalid-title": "Invalid title", "invalid-user-data": "Date utilizator invalide", "invalid-password": "Parolă Invalidă", "invalid-login-credentials": "Invalid login credentials", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Nu poți bana alți administratori!", "cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin", "cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.", + "invalid-image": "Invalid image", "invalid-image-type": "Invalid image type. Allowed types are: %1", "invalid-image-extension": "Invalid image extension", "invalid-file-type": "Invalid file type. Allowed types are: %1", diff --git a/public/language/ro/flags.json b/public/language/ro/flags.json index c4bfed6f23..d05a5b25a8 100644 --- a/public/language/ro/flags.json +++ b/public/language/ro/flags.json @@ -54,7 +54,11 @@ "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Reason for reporting this content...", "modal-submit": "Submit Report", - "modal-submit-success": "Content has been flagged for moderation." + "modal-submit-success": "Content has been flagged for moderation.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/ro/pages.json b/public/language/ro/pages.json index b21b222a3e..a85a6ddbd7 100644 --- a/public/language/ro/pages.json +++ b/public/language/ro/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1's Bookmarked Posts", "account/settings": "User Settings", "account/watched": "Topics watched by %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Posts upvoted by %1", "account/downvoted": "Posts downvoted by %1", "account/best": "Best posts made by %1", diff --git a/public/language/ro/unread.json b/public/language/ro/unread.json index a5b6c46e7e..43e6a60d67 100644 --- a/public/language/ro/unread.json +++ b/public/language/ro/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Subiectele au fost marcate ca citite!", "all-topics": "Toate subiectele", "new-topics": "Subiecte noi", - "watched-topics": "Subiecte urmărite" + "watched-topics": "Subiecte urmărite", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/ro/user.json b/public/language/ro/user.json index 205c7bfdbf..c9415ea2a8 100644 --- a/public/language/ro/user.json +++ b/public/language/ro/user.json @@ -25,6 +25,7 @@ "reputation": "Reputație", "bookmarks": "Bookmarks", "watched": "Watched", + "ignored": "Ignored", "followers": "Urmărit de", "following": "Îi urmărește pe", "aboutme": "About me", @@ -86,6 +87,7 @@ "has_no_posts": "This user hasn't posted anything yet.", "has_no_topics": "This user hasn't posted any topics yet.", "has_no_watched_topics": "This user hasn't watched any topics yet.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "This user hasn't upvoted any posts yet.", "has_no_downvoted_posts": "This user hasn't downvoted any posts yet.", "has_no_voted_posts": "This user has no voted posts", @@ -94,6 +96,7 @@ "paginate_description": "Paginate topics and posts instead of using infinite scroll", "topics_per_page": "Subiecte pe pagină", "posts_per_page": "Mesaje pe pagină", + "max_items_per_page": "Maximum %1", "notification_sounds": "Play a sound when you receive a notification", "notifications_and_sounds": "Notifications & Sounds", "incoming-message-sound": "Incoming message sound", diff --git a/public/language/ru/admin/manage/post-queue.json b/public/language/ru/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/ru/admin/manage/post-queue.json +++ b/public/language/ru/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/ru/admin/menu.json b/public/language/ru/admin/menu.json index c80fcb6820..200bdaa3b7 100644 --- a/public/language/ru/admin/menu.json +++ b/public/language/ru/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Выйти", "view-forum": "View Forum", - "search.placeholder": "Поиск...", + "search.placeholder": "Search for settings", "search.no-results": "Нет результата...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/ru/admin/settings/pagination.json b/public/language/ru/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/ru/admin/settings/pagination.json +++ b/public/language/ru/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/ru/error.json b/public/language/ru/error.json index 69fdd526b7..f8f2c2d9e7 100644 --- a/public/language/ru/error.json +++ b/public/language/ru/error.json @@ -11,7 +11,7 @@ "invalid-uid": "Неверный идентификатор пользователя", "invalid-username": "Неверное имя пользователя", "invalid-email": "Неверный адрес электронной почты", - "invalid-title": "Неверный заголовок", + "invalid-title": "Invalid title", "invalid-user-data": "Неверные пользовательские данные", "invalid-password": "Неверный пароль", "invalid-login-credentials": "Invalid login credentials", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Вы не можете забанить других администраторов", "cant-remove-last-admin": "Вы единственный администратор в этом сообществе. Чтобы отказаться от своих полномочий, пожалуйста, назначьте администратором другого участника.", "cant-delete-admin": "Чтобы удалить эту учётную запись, сначала надо снять с неё полнмочия администратора.", + "invalid-image": "Invalid image", "invalid-image-type": "Этот формат изображения не поддерживается. Загрузите изображение в одном из следующих форматов: %1", "invalid-image-extension": "Недопустимое расширение файла", "invalid-file-type": "Этот формат файла не поддерживается. Загрузите файл в одном из следующих форматов: %1", diff --git a/public/language/ru/flags.json b/public/language/ru/flags.json index 6a5776a4f2..ad87949c79 100644 --- a/public/language/ru/flags.json +++ b/public/language/ru/flags.json @@ -54,7 +54,11 @@ "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Спам", "modal-reason-offensive": "Offensive", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Reason for reporting this content...", "modal-submit": "Представить отчет", - "modal-submit-success": "Content has been flagged for moderation." + "modal-submit-success": "Content has been flagged for moderation.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/ru/pages.json b/public/language/ru/pages.json index c29cb0e084..3cf542ead3 100644 --- a/public/language/ru/pages.json +++ b/public/language/ru/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1 сообщений в закладках", "account/settings": "Настройки учётной записи", "account/watched": "Тему просмотрели %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Рейтинг записей поднят %1", "account/downvoted": "Рейтинг записей снижен %1", "account/best": "Лучшие записи участника %1", diff --git a/public/language/ru/unread.json b/public/language/ru/unread.json index dbf1d8a310..1658c72740 100644 --- a/public/language/ru/unread.json +++ b/public/language/ru/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Все темы помечены как прочитанные", "all-topics": "Все темы", "new-topics": "Новые темы", - "watched-topics": "Подписанные темы" + "watched-topics": "Подписанные темы", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/ru/user.json b/public/language/ru/user.json index 40dad39d80..4d311a0b85 100644 --- a/public/language/ru/user.json +++ b/public/language/ru/user.json @@ -25,6 +25,7 @@ "reputation": "Репутация", "bookmarks": "Закладки", "watched": "Подписка", + "ignored": "Ignored", "followers": "Подписчиков", "following": "Подписок", "aboutme": "Обо мне", @@ -86,6 +87,7 @@ "has_no_posts": "Участник пока не создал ни одной записи", "has_no_topics": "Участник пока не создал ни одной темы", "has_no_watched_topics": "Участник пока не посмотрел ни одной темы", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "Участник пока не голосовал положительно ни за одну запись", "has_no_downvoted_posts": "Участник пока не голосовал против ни одной записи", "has_no_voted_posts": "Участник пока не голосовал ни за одну запись", @@ -94,6 +96,7 @@ "paginate_description": "Разбить на страницы, а не выводить бесконечным списком", "topics_per_page": "Тем на странице", "posts_per_page": "Записей на странице", + "max_items_per_page": "Maximum %1", "notification_sounds": "Воспроизводить звук во время получения уведомления", "notifications_and_sounds": "Уведомления и звуки", "incoming-message-sound": "Звук входящего сообщения", diff --git a/public/language/rw/admin/manage/post-queue.json b/public/language/rw/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/rw/admin/manage/post-queue.json +++ b/public/language/rw/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/rw/admin/menu.json b/public/language/rw/admin/menu.json index 3ec4ad41c4..d42af99bce 100644 --- a/public/language/rw/admin/menu.json +++ b/public/language/rw/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/rw/admin/settings/pagination.json b/public/language/rw/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/rw/admin/settings/pagination.json +++ b/public/language/rw/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/rw/error.json b/public/language/rw/error.json index 62a86b55fb..d36cc5e802 100644 --- a/public/language/rw/error.json +++ b/public/language/rw/error.json @@ -11,7 +11,7 @@ "invalid-uid": "Nimero y'Umuntu Ntiyemewe", "invalid-username": "Izina Ntiryemewe", "invalid-email": "Email Ntiyemewe", - "invalid-title": "Umutwe utemewe!", + "invalid-title": "Invalid title", "invalid-user-data": "Ibyatanzwe Ntibyemewe!", "invalid-password": "Ijambobanga Ntiryemewe", "invalid-login-credentials": "Invalid login credentials", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Ntabwo wakwirukana abandi bayobozi!", "cant-remove-last-admin": "Ni wowe muyobozi wenyine. Ongeramo undi muntu nk'umuyobozi mbere y'uko wikura ku buyobozi", "cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.", + "invalid-image": "Invalid image", "invalid-image-type": "Ubwoko bw'ifoto wahisemo ntibwemewe. Hemewe gusa: %1", "invalid-image-extension": "Impera itemewe igaragaza foruma y'ifoto", "invalid-file-type": "Ubwoko bw'ifayilo ntibwemewe. Hemewe gusa: %1", diff --git a/public/language/rw/flags.json b/public/language/rw/flags.json index c4bfed6f23..d05a5b25a8 100644 --- a/public/language/rw/flags.json +++ b/public/language/rw/flags.json @@ -54,7 +54,11 @@ "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Reason for reporting this content...", "modal-submit": "Submit Report", - "modal-submit-success": "Content has been flagged for moderation." + "modal-submit-success": "Content has been flagged for moderation.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/rw/pages.json b/public/language/rw/pages.json index c7a225c80b..70346071b5 100644 --- a/public/language/rw/pages.json +++ b/public/language/rw/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1's Bookmarked Posts", "account/settings": "Itunganya", "account/watched": "Ibiganiro bikurikirwa na %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Ibiganiro byakunzwe na %1", "account/downvoted": "Ibiganiro byanzwe na %1", "account/best": "Ibihebuje byashyizweho na %1", diff --git a/public/language/rw/unread.json b/public/language/rw/unread.json index 07c6e6c04c..9946c9a5fa 100644 --- a/public/language/rw/unread.json +++ b/public/language/rw/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Ibiganiro byamaze kugaragazwa nk'ibyasomwe!", "all-topics": "All Topics", "new-topics": "New Topics", - "watched-topics": "Watched Topics" + "watched-topics": "Watched Topics", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/rw/user.json b/public/language/rw/user.json index 96bc2e84f9..ed0b275bdf 100644 --- a/public/language/rw/user.json +++ b/public/language/rw/user.json @@ -25,6 +25,7 @@ "reputation": "Amanota", "bookmarks": "Bookmarks", "watched": "Ibikurikiranwa", + "ignored": "Ignored", "followers": "Abamukurikira", "following": "Akurikira", "aboutme": "Inshamake y'Ubuzima", @@ -86,6 +87,7 @@ "has_no_posts": "Uyu muntu nta kintu arashyiraho. ", "has_no_topics": "Uyu muntu nta kiganiro aratangiza na kimwe. ", "has_no_watched_topics": "Uyu muntu ntabwo arakurikira ikiganiro na kimwe.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "Uyu muntu ntabwo arashima icyashyizweho na kimwe.", "has_no_downvoted_posts": "Uyu muntu ntabwo aragaya icyashizweho na kimwe. ", "has_no_voted_posts": "Uyu muntu ntabwo aragira ikintu yashimiwe gushyiraho", @@ -94,6 +96,7 @@ "paginate_description": "Gabanya ibiganiro n'ibyashyizweho mu ma paji aho kugirango umuntu ajye amanuka ubudahagarara ", "topics_per_page": "Ibiganiro kuri Buri Paji", "posts_per_page": "Ibyashyizweho kuri Buri Paji", + "max_items_per_page": "Maximum %1", "notification_sounds": "Hajye humvikana ijwi rikumenyesha ko haje itangazo rishya", "notifications_and_sounds": "Notifications & Sounds", "incoming-message-sound": "Incoming message sound", diff --git a/public/language/sc/admin/manage/post-queue.json b/public/language/sc/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/sc/admin/manage/post-queue.json +++ b/public/language/sc/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/sc/admin/menu.json b/public/language/sc/admin/menu.json index 3ec4ad41c4..d42af99bce 100644 --- a/public/language/sc/admin/menu.json +++ b/public/language/sc/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/sc/admin/settings/pagination.json b/public/language/sc/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/sc/admin/settings/pagination.json +++ b/public/language/sc/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/sc/error.json b/public/language/sc/error.json index 85f56efaaa..82d34b5e05 100644 --- a/public/language/sc/error.json +++ b/public/language/sc/error.json @@ -11,7 +11,7 @@ "invalid-uid": "Invalid User ID", "invalid-username": "Invalid Username", "invalid-email": "Invalid Email", - "invalid-title": "Invalid title!", + "invalid-title": "Invalid title", "invalid-user-data": "Invalid User Data", "invalid-password": "Invalid Password", "invalid-login-credentials": "Invalid login credentials", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "You can't ban other admins!", "cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin", "cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.", + "invalid-image": "Invalid image", "invalid-image-type": "Invalid image type. Allowed types are: %1", "invalid-image-extension": "Invalid image extension", "invalid-file-type": "Invalid file type. Allowed types are: %1", diff --git a/public/language/sc/flags.json b/public/language/sc/flags.json index c4bfed6f23..d05a5b25a8 100644 --- a/public/language/sc/flags.json +++ b/public/language/sc/flags.json @@ -54,7 +54,11 @@ "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Reason for reporting this content...", "modal-submit": "Submit Report", - "modal-submit-success": "Content has been flagged for moderation." + "modal-submit-success": "Content has been flagged for moderation.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/sc/pages.json b/public/language/sc/pages.json index 19ce20a0a4..a1c9b475ee 100644 --- a/public/language/sc/pages.json +++ b/public/language/sc/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1's Bookmarked Posts", "account/settings": "User Settings", "account/watched": "Topics watched by %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Posts upvoted by %1", "account/downvoted": "Posts downvoted by %1", "account/best": "Best posts made by %1", diff --git a/public/language/sc/unread.json b/public/language/sc/unread.json index 3039d0fa6e..c3a876f0c0 100644 --- a/public/language/sc/unread.json +++ b/public/language/sc/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Topics marked as read!", "all-topics": "All Topics", "new-topics": "New Topics", - "watched-topics": "Watched Topics" + "watched-topics": "Watched Topics", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/sc/user.json b/public/language/sc/user.json index b72ed9f9c2..601342a8b1 100644 --- a/public/language/sc/user.json +++ b/public/language/sc/user.json @@ -25,6 +25,7 @@ "reputation": "Nodidos", "bookmarks": "Bookmarks", "watched": "Watched", + "ignored": "Ignored", "followers": "Sighidores", "following": "Sighende", "aboutme": "About me", @@ -86,6 +87,7 @@ "has_no_posts": "This user hasn't posted anything yet.", "has_no_topics": "This user hasn't posted any topics yet.", "has_no_watched_topics": "This user hasn't watched any topics yet.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "This user hasn't upvoted any posts yet.", "has_no_downvoted_posts": "This user hasn't downvoted any posts yet.", "has_no_voted_posts": "This user has no voted posts", @@ -94,6 +96,7 @@ "paginate_description": "Paginate topics and posts instead of using infinite scroll", "topics_per_page": "Arresonadas pro Pàgina", "posts_per_page": "Arresonos pro Pàgina", + "max_items_per_page": "Maximum %1", "notification_sounds": "Play a sound when you receive a notification", "notifications_and_sounds": "Notifications & Sounds", "incoming-message-sound": "Incoming message sound", diff --git a/public/language/sk/admin/manage/post-queue.json b/public/language/sk/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/sk/admin/manage/post-queue.json +++ b/public/language/sk/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/sk/admin/menu.json b/public/language/sk/admin/menu.json index 4306da86f7..64648aedc7 100644 --- a/public/language/sk/admin/menu.json +++ b/public/language/sk/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/sk/admin/settings/pagination.json b/public/language/sk/admin/settings/pagination.json index 776160734f..959ee8c27c 100644 --- a/public/language/sk/admin/settings/pagination.json +++ b/public/language/sk/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/sk/error.json b/public/language/sk/error.json index 2a8e43c39a..544c3d8ea9 100644 --- a/public/language/sk/error.json +++ b/public/language/sk/error.json @@ -11,7 +11,7 @@ "invalid-uid": "Nesprávne ID užívateľa", "invalid-username": "Nesprávne užívateľské meno", "invalid-email": "Nesprávny e-mail", - "invalid-title": "Nesprávny nadpis!", + "invalid-title": "Invalid title", "invalid-user-data": "Neplatné užívateľské údaje", "invalid-password": "Nesprávne heslo", "invalid-login-credentials": "Neplatné prihlasovacie údaje", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Nemôžte zablokovať iných správcov.", "cant-remove-last-admin": "Momentálne ste jediný správca. Najskôr pridajte ďalšieho užívateľa za správcu predtým, ako zrušíte svoje výsady správcu", "cant-delete-admin": "Odobrať oprávnenie správcu z tohto účtu pred pokusom ho odstrániť.", + "invalid-image": "Invalid image", "invalid-image-type": "Neplatný typ obrázku. Povolené typy sú: %1", "invalid-image-extension": "Neplatná prípona obrázku", "invalid-file-type": "Neplatný typ súboru. Povolené typy sú: %1", diff --git a/public/language/sk/flags.json b/public/language/sk/flags.json index f1a5e7ea39..58d0f5a9cf 100644 --- a/public/language/sk/flags.json +++ b/public/language/sk/flags.json @@ -54,7 +54,11 @@ "modal-body": "Zadajte dôvod, pre ktorý chcete označiť% 1% 2 na kontrolu. Prípadne použite jedno z tlačidiel rýchleho hlásenia, ak je to vhodné.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Urážlivý", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Dôvod oznamovania tohto obsahu...", "modal-submit": "Odoslať správu", - "modal-submit-success": "Obsah bol označený na moderovanie." + "modal-submit-success": "Obsah bol označený na moderovanie.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/sk/pages.json b/public/language/sk/pages.json index 6951e6dcdd..4a0417e2a8 100644 --- a/public/language/sk/pages.json +++ b/public/language/sk/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1 príspevky v záložkach", "account/settings": "Užívateľské nastavenia", "account/watched": "Témy sledovalo %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Príspevky, ktorým užívateľ %1 dal hlas", "account/downvoted": "Príspevky, ktorým užívateľ %1 odobral hlas", "account/best": "Najlepšie príspevky vytvorené užívateľom %1", diff --git a/public/language/sk/unread.json b/public/language/sk/unread.json index 37c78f7c15..292bf03dbe 100644 --- a/public/language/sk/unread.json +++ b/public/language/sk/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Témy boli označené ako prečítané!", "all-topics": "Všetky témy", "new-topics": "Nové témy", - "watched-topics": "Sledované témy" + "watched-topics": "Sledované témy", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/sk/user.json b/public/language/sk/user.json index 974c85e63c..e6224d0d86 100644 --- a/public/language/sk/user.json +++ b/public/language/sk/user.json @@ -25,6 +25,7 @@ "reputation": "Reputácia", "bookmarks": "Záložky", "watched": "Sledované", + "ignored": "Ignored", "followers": "Nasledovatelia", "following": "Nasleduje", "aboutme": "O mne", @@ -86,6 +87,7 @@ "has_no_posts": "Tento užívateľ doteraz nič nezverejnil.", "has_no_topics": "Tento užívateľ doteraz nezverejnil žiadne témy.", "has_no_watched_topics": "Tento užívateľ zatiaľ nesleduje žiadne témy.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "Tento užívateľ doteraz nedal hlas žiadnemu príspevku.", "has_no_downvoted_posts": "Tento užívateľ doteraz neodobral hlas žiadnemu príspevku.", "has_no_voted_posts": "Tento užívateľ nemá žiadne príspevky s hlasmi", @@ -94,6 +96,7 @@ "paginate_description": "Očíslovať témy a príspevky namiesto používania nekonečného rolovania", "topics_per_page": "Témy na stranu", "posts_per_page": "Príspevkov na stranu", + "max_items_per_page": "Maximum %1", "notification_sounds": "Prehrať zvuk ak obdržíte oznámenie", "notifications_and_sounds": "Oznámenia & Zvuky", "incoming-message-sound": "Prichádzajúci zvuk správy", diff --git a/public/language/sl/admin/manage/post-queue.json b/public/language/sl/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/sl/admin/manage/post-queue.json +++ b/public/language/sl/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/sl/admin/menu.json b/public/language/sl/admin/menu.json index 3ec4ad41c4..d42af99bce 100644 --- a/public/language/sl/admin/menu.json +++ b/public/language/sl/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/sl/admin/settings/pagination.json b/public/language/sl/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/sl/admin/settings/pagination.json +++ b/public/language/sl/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/sl/error.json b/public/language/sl/error.json index f1a8f6f938..a33f7a3c7b 100644 --- a/public/language/sl/error.json +++ b/public/language/sl/error.json @@ -11,7 +11,7 @@ "invalid-uid": "Napačen ID uporabnika", "invalid-username": "Napačno uporabniško ime", "invalid-email": "Napačen elektronski naslov", - "invalid-title": "Napačen naslov", + "invalid-title": "Invalid title", "invalid-user-data": "Napačni podatki o uporabniku", "invalid-password": "Napačno geslo", "invalid-login-credentials": "Invalid login credentials", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Ne morete izločati drugih skrbnikov!", "cant-remove-last-admin": "Ste edini skrbnik. Preden se odstranite, dodajte novega skrbnika.", "cant-delete-admin": "Pred brisanjem tega računa morate odstraniti skrbniške pravice.", + "invalid-image": "Invalid image", "invalid-image-type": "Nedovoljen format slike. Dovoljeni formati: %1.", "invalid-image-extension": "Nedovoljena pripona slike.", "invalid-file-type": "Nedovoljena vrsta datoteke. Dovoljene vrste: %1.", diff --git a/public/language/sl/flags.json b/public/language/sl/flags.json index c4bfed6f23..d05a5b25a8 100644 --- a/public/language/sl/flags.json +++ b/public/language/sl/flags.json @@ -54,7 +54,11 @@ "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Reason for reporting this content...", "modal-submit": "Submit Report", - "modal-submit-success": "Content has been flagged for moderation." + "modal-submit-success": "Content has been flagged for moderation.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/sl/pages.json b/public/language/sl/pages.json index b077f9d54d..3f86e4e4f6 100644 --- a/public/language/sl/pages.json +++ b/public/language/sl/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1's Bookmarked Posts", "account/settings": "Uporabniške nastavitve", "account/watched": "Teme, ki jih spremlja %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": " Objave uporabnika %1 z glasovi za", "account/downvoted": "Objave uporabnika %1 z glasovi proti", "account/best": "Najboljše objave uporabnika %1", diff --git a/public/language/sl/unread.json b/public/language/sl/unread.json index 623463a299..3179be8951 100644 --- a/public/language/sl/unread.json +++ b/public/language/sl/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Teme označene kot prebrane!", "all-topics": "Vse teme", "new-topics": "Nove teme", - "watched-topics": "Spremljane teme" + "watched-topics": "Spremljane teme", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/sl/user.json b/public/language/sl/user.json index bdb0cba806..417b556497 100644 --- a/public/language/sl/user.json +++ b/public/language/sl/user.json @@ -25,6 +25,7 @@ "reputation": "Naziv", "bookmarks": "Bookmarks", "watched": "Spremljano", + "ignored": "Ignored", "followers": "Spremljevalci", "following": "Spremljano", "aboutme": "O meni", @@ -86,6 +87,7 @@ "has_no_posts": "Uporabnik še ni nič objavil.", "has_no_topics": "Uporabnik še ni objavil nobene teme.", "has_no_watched_topics": "Uporabnik še ne spremlja nobene teme.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "Uporabnik še ni glasoval za nobeno objavo.", "has_no_downvoted_posts": "Uporabnik še ni glasoval proti nobeni objavi.", "has_no_voted_posts": "Uporabnik nima glasovanih objav", @@ -94,6 +96,7 @@ "paginate_description": "Uporabi oštevilčenje strani namesto neskončnega drsenja", "topics_per_page": "Število tem na stran", "posts_per_page": "Število objav na stran", + "max_items_per_page": "Maximum %1", "notification_sounds": "Zvočno me opozori, ko prejmem obvestilo", "notifications_and_sounds": "Obvestila in zvoki", "incoming-message-sound": "Zvok za prejeto sporočilo", diff --git a/public/language/sr/admin/manage/post-queue.json b/public/language/sr/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/sr/admin/manage/post-queue.json +++ b/public/language/sr/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/sr/admin/menu.json b/public/language/sr/admin/menu.json index 7851c1f0a4..56e84faf21 100644 --- a/public/language/sr/admin/menu.json +++ b/public/language/sr/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Izloguj se", "view-forum": "Pogledaj Forum", - "search.placeholder": "Pretraga...", + "search.placeholder": "Search for settings", "search.no-results": "Nema rezultata...", "search.search-forum": "Pretraži forum za ", "search.keep-typing": "Ukucaj više da vidiš rezultate", diff --git a/public/language/sr/admin/settings/pagination.json b/public/language/sr/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/sr/admin/settings/pagination.json +++ b/public/language/sr/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/sr/error.json b/public/language/sr/error.json index 52e393ae6b..fcb8a49c5f 100644 --- a/public/language/sr/error.json +++ b/public/language/sr/error.json @@ -11,7 +11,7 @@ "invalid-uid": "Неисправан ИД корисника", "invalid-username": "Неисправно корисничко име", "invalid-email": "Неисправна е-пошта", - "invalid-title": "Неисправан наслов!", + "invalid-title": "Invalid title", "invalid-user-data": "Неисправни кориснички подаци", "invalid-password": "Неисправна лозинка", "invalid-login-credentials": "Неважећи акредитиви за пријављивање", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Не можете забранити друге администраторе!", "cant-remove-last-admin": "Ви сте једини администратор. Додајте другог корисника као администратора пре него што уклоните себе као администратора.", "cant-delete-admin": "Уклоните администраторске привилегије овом налогу пре него што покушате да га избришете.", + "invalid-image": "Invalid image", "invalid-image-type": "Неважећи тип слике. Дозвољени типови су: %1", "invalid-image-extension": "Неважећи тип слике", "invalid-file-type": "Неважећи тип датотеке. Дозвољени типови су: %1", diff --git a/public/language/sr/flags.json b/public/language/sr/flags.json index e60225af70..a4db18cb5c 100644 --- a/public/language/sr/flags.json +++ b/public/language/sr/flags.json @@ -54,7 +54,11 @@ "modal-body": "Наведите разлог за означавање %1 %2 за проверу. Алтернативно, користите један од тастера за брзу пријаву ко је применљиво.", "modal-reason-spam": "Непожељно", "modal-reason-offensive": "Увредљиво", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Разлог за пријаву овог садржаја...", "modal-submit": "Пошаљи извештај", - "modal-submit-success": "Садржај је означен за модерацију." + "modal-submit-success": "Садржај је означен за модерацију.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/sr/pages.json b/public/language/sr/pages.json index 44f39483ea..6f062d90f5 100644 --- a/public/language/sr/pages.json +++ b/public/language/sr/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "Омиљене поруке корисника $1", "account/settings": "Корисничка подешавања", "account/watched": "Теме које %1 надгледа", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Поруке које је позитивно гласао %1", "account/downvoted": "Поруке које је негативно гласао %1", "account/best": "Најбоље поруке од %1", diff --git a/public/language/sr/unread.json b/public/language/sr/unread.json index f556585f60..b6ade2e345 100644 --- a/public/language/sr/unread.json +++ b/public/language/sr/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Теме су означене као прочитане!", "all-topics": "Све теме", "new-topics": "Нове теме", - "watched-topics": "Надгледане теме" + "watched-topics": "Надгледане теме", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/sr/user.json b/public/language/sr/user.json index 7b7442001e..318106790e 100644 --- a/public/language/sr/user.json +++ b/public/language/sr/user.json @@ -25,6 +25,7 @@ "reputation": "Репутација", "bookmarks": " Обележивачи", "watched": "Надгледано", + "ignored": "Ignored", "followers": "Пратиоци", "following": "Праћења", "aboutme": "О мени", @@ -86,6 +87,7 @@ "has_no_posts": "Овај корисник још ништа није објавио. ", "has_no_topics": "Овај корисник још није покренуо ниједну тему.", "has_no_watched_topics": "Овај корисник још не надгледа ниједну тему.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "Овај корисник још увек није позитивно гласао за неку поруку.", "has_no_downvoted_posts": "Овај корисник још увек није негативно гласао за неку поруку.", "has_no_voted_posts": "Овај корисник нема објаве за које се гласало.", @@ -94,6 +96,7 @@ "paginate_description": "Нумериши теме и странице уместо бесконачног скроловања", "topics_per_page": "Тема по страници", "posts_per_page": "Порука по страници", + "max_items_per_page": "Maximum %1", "notification_sounds": "Репродукуј звук приликом примања обавештења", "notifications_and_sounds": "Обавештења и звуци", "incoming-message-sound": "Звук долазне поруке", diff --git a/public/language/sv/admin/manage/post-queue.json b/public/language/sv/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/sv/admin/manage/post-queue.json +++ b/public/language/sv/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/sv/admin/menu.json b/public/language/sv/admin/menu.json index 3ec4ad41c4..d42af99bce 100644 --- a/public/language/sv/admin/menu.json +++ b/public/language/sv/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/sv/admin/settings/pagination.json b/public/language/sv/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/sv/admin/settings/pagination.json +++ b/public/language/sv/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/sv/error.json b/public/language/sv/error.json index 2818e0442a..ee35a84906 100644 --- a/public/language/sv/error.json +++ b/public/language/sv/error.json @@ -11,7 +11,7 @@ "invalid-uid": "Ogiltigt id för användare", "invalid-username": "Ogiltigt användarnamn", "invalid-email": "Ogiltig epostadress", - "invalid-title": "Ogiltig rubrik!", + "invalid-title": "Invalid title", "invalid-user-data": "Ogiltig användardata", "invalid-password": "Ogiltigt lösenord", "invalid-login-credentials": "Invalid login credentials", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Du kan inte bannlysa andra administratörer!", "cant-remove-last-admin": "Du är den enda administratören. Lägg till en annan användare som administratör innan du tar bort dig själv.", "cant-delete-admin": "Ta bort administratörsbehörighet från detta konto innan du försöker ta bort den.", + "invalid-image": "Invalid image", "invalid-image-type": "Ogiltig bildtyp. Tillåtna typer är: % 1", "invalid-image-extension": "Ogiltigt bildformat", "invalid-file-type": "Ogiltig filtyp. Tillåtna typer är: % 1", diff --git a/public/language/sv/flags.json b/public/language/sv/flags.json index c4bfed6f23..d05a5b25a8 100644 --- a/public/language/sv/flags.json +++ b/public/language/sv/flags.json @@ -54,7 +54,11 @@ "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Reason for reporting this content...", "modal-submit": "Submit Report", - "modal-submit-success": "Content has been flagged for moderation." + "modal-submit-success": "Content has been flagged for moderation.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/sv/pages.json b/public/language/sv/pages.json index 38eed36013..0a88550f33 100644 --- a/public/language/sv/pages.json +++ b/public/language/sv/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1'st bokmärkta inlägg", "account/settings": "Avnändarinställningar", "account/watched": "Ämnen som bevakas av %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Inlägg som röstats upp av %1", "account/downvoted": "Inlägg som röstats ned av %1", "account/best": "Bästa inläggen skapade av %1", diff --git a/public/language/sv/unread.json b/public/language/sv/unread.json index 06ae0bbe92..aa01180c97 100644 --- a/public/language/sv/unread.json +++ b/public/language/sv/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Ämnet markerat som läst.", "all-topics": "Alla ämnen", "new-topics": "Nya ämnen", - "watched-topics": "Bevakade ämnen" + "watched-topics": "Bevakade ämnen", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/sv/user.json b/public/language/sv/user.json index 2c5494af3b..9b1749b9b3 100644 --- a/public/language/sv/user.json +++ b/public/language/sv/user.json @@ -25,6 +25,7 @@ "reputation": "Rykte", "bookmarks": "Bokmärken", "watched": "Bevakad", + "ignored": "Ignored", "followers": "Följare", "following": "Följer", "aboutme": "Om mig", @@ -86,6 +87,7 @@ "has_no_posts": "Användaren har inte skrivit några inlägg ännu.", "has_no_topics": "Användaren har inte postat några ämnen ännu.", "has_no_watched_topics": "Användaren har inte bevakat några ämnen ännu.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "Den här användaren har inte röstat upp några inlägg än.", "has_no_downvoted_posts": "Den här användaren har inte röstat ned några inlägg än.", "has_no_voted_posts": "Den här användaren har inga inlägg med röster", @@ -94,6 +96,7 @@ "paginate_description": "Gör så att ämnen och inlägg visas som sidor istället för oändlig skroll", "topics_per_page": "Ämnen per sida", "posts_per_page": "Inlägg per sida", + "max_items_per_page": "Maximum %1", "notification_sounds": "Spela ett ljud när du får en notis", "notifications_and_sounds": "Meddelanden och ljud", "incoming-message-sound": "Inkommande meddelande ljud", diff --git a/public/language/th/admin/manage/post-queue.json b/public/language/th/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/th/admin/manage/post-queue.json +++ b/public/language/th/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/th/admin/menu.json b/public/language/th/admin/menu.json index 3ec4ad41c4..d42af99bce 100644 --- a/public/language/th/admin/menu.json +++ b/public/language/th/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/th/admin/settings/pagination.json b/public/language/th/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/th/admin/settings/pagination.json +++ b/public/language/th/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/th/error.json b/public/language/th/error.json index 0960ffd360..1d740b7b0b 100644 --- a/public/language/th/error.json +++ b/public/language/th/error.json @@ -11,7 +11,7 @@ "invalid-uid": "User ID ไม่ถูกต้อง", "invalid-username": "ชื่อผู้ใช้ไม่ถูกต้อง", "invalid-email": "อีเมลไม่ถูกต้อง", - "invalid-title": "คำนำหน้าชื่อไม่ถูกต้อง", + "invalid-title": "Invalid title", "invalid-user-data": "User Data ไม่ถูกต้อง", "invalid-password": "รหัสผ่านไม่ถูกต้อง", "invalid-login-credentials": "session login หมดอายุ", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "คุณแบนแอดมินไม่ได้!!!", "cant-remove-last-admin": "คุณเป็นแอดมินเพียงคนเดียว กรุณาเพิ่มผู้ใช้คนอื่นเป็นแอดมิน ก่อนการลบตัวเองออกจากแอดมิน", "cant-delete-admin": "ลบสิทธิพิเศษของแอดมินจากบัญชีผู้ใช้นี้ ก่อนทำการลบ", + "invalid-image": "Invalid image", "invalid-image-type": "ประเภทรูปภาพไม่ถูกต้อง ประเภทที่ได้รับการอนุญาติคือ : %1", "invalid-image-extension": "นามสกุลรูปภาพไม่ถูกต้อง", "invalid-file-type": "ประเภทไฟล์ไม่ถูกต้อง ประเภทที่ได้รับการอนุญาติคือ : %1", diff --git a/public/language/th/flags.json b/public/language/th/flags.json index 7d33e77739..dfe39fde54 100644 --- a/public/language/th/flags.json +++ b/public/language/th/flags.json @@ -54,7 +54,11 @@ "modal-body": "กรุณาระเหตุผลสำหรับการปักธง %1 %2 สำหรับการรีวิว หรือไม่ก็ใช้หนึ่งในปุ่มกดรายงานด่วนถ้าเป็นไปได้", "modal-reason-spam": "สแปม", "modal-reason-offensive": "น่ารังเกียจ", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "เหตุผลว่าทำไมถึงรายงานเนื้อหานี้...", "modal-submit": "ส่งรายงาน", - "modal-submit-success": "เนื้อหาถูกรายงานตามความเหมาะสมแล้ว" + "modal-submit-success": "เนื้อหาถูกรายงานตามความเหมาะสมแล้ว", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/th/pages.json b/public/language/th/pages.json index 9706c2b715..97cb383004 100644 --- a/public/language/th/pages.json +++ b/public/language/th/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "บุ๊กมาร์คโพสต์ของ %1", "account/settings": "การตั้งค่าผู้ใช้", "account/watched": "กระทู้ที่ถูกดูโดย %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": "โพสต์ที่ถูกโหวตขึ้นโดย %1", "account/downvoted": "โพสต์ที่โหวตลงโดย %1", "account/best": "โพสต์ดีที่สุดที่ถูกสร้างโดย %1", diff --git a/public/language/th/unread.json b/public/language/th/unread.json index 10d0de6c3e..6dd0f60287 100644 --- a/public/language/th/unread.json +++ b/public/language/th/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Topic ถูกทำเครื่องหมายว่าอ่านแล้วเรียบร้อย", "all-topics": "กระทู้ทั้งหมด", "new-topics": "ตั้งกระทู้ใหม่", - "watched-topics": "กระทู้ที่ดูแล้ว" + "watched-topics": "กระทู้ที่ดูแล้ว", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/th/user.json b/public/language/th/user.json index 850e87fba3..b4cb257cf5 100644 --- a/public/language/th/user.json +++ b/public/language/th/user.json @@ -25,6 +25,7 @@ "reputation": "ชื่อเสียง", "bookmarks": "ที่คั่นหน้า", "watched": "ดูแล้ว", + "ignored": "Ignored", "followers": "คนติดตาม", "following": "ติดตาม", "aboutme": "เกี่ยวกับฉัน", @@ -86,6 +87,7 @@ "has_no_posts": "ผู้ใช้นี้ไม่ได้โพสต์ข้อความใดๆ", "has_no_topics": "ผู้ใช้นี้ยังไม่เคยตั้งกระทู้ใดๆ", "has_no_watched_topics": "ผู้ใช้นี้ไม่ได้ติดตามกระทู้ใดๆ", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "ผู้ใช้นี้ไม่ได้โหวตขึ้นให้ข้อความใดๆ", "has_no_downvoted_posts": "ผู้ใช้นี้ไม่ได้โหวตลงให้ข้อความใดๆ", "has_no_voted_posts": "ผู้ใช้นี้ไม่เคยโหวตข้อความ", @@ -94,6 +96,7 @@ "paginate_description": "ใช้การแบ่งหน้ากระทู้และข้อความแทนการเลื่อนต่อเรื่อยๆ", "topics_per_page": "จำนวนกระทู้ต่อหน้า", "posts_per_page": "จำนวนข้อความต่อหน้า", + "max_items_per_page": "Maximum %1", "notification_sounds": "เล่นเสียงเมื่อมีการแจ้งเตือน", "notifications_and_sounds": "เสียงและการแจ้งเตือน", "incoming-message-sound": "เสียงข้อความเข้า", diff --git a/public/language/tr/admin/manage/post-queue.json b/public/language/tr/admin/manage/post-queue.json index 37b9ffecce..af2fc9b9b1 100644 --- a/public/language/tr/admin/manage/post-queue.json +++ b/public/language/tr/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Başlık", "content": "İçerik", "posted": "Gönderildi", - "reply-to": "\"%1\"'e Cevap Ver" + "reply-to": "\"%1\"'e Cevap Ver", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/tr/admin/menu.json b/public/language/tr/admin/menu.json index 6d41bdca07..c6f2a706a5 100644 --- a/public/language/tr/admin/menu.json +++ b/public/language/tr/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Çıkış", "view-forum": "Forumu Görüntüle", - "search.placeholder": "Araştır...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/tr/admin/settings/pagination.json b/public/language/tr/admin/settings/pagination.json index b2c25bb858..60547cf4be 100644 --- a/public/language/tr/admin/settings/pagination.json +++ b/public/language/tr/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Başlık Sayfalama", "posts-per-page": "Sayfa başına İletiler", + "max-posts-per-page": "Maximum posts per page", "categories": "Kategori Sayfalama", "topics-per-page": "Sayfa başına Konular", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/tr/error.json b/public/language/tr/error.json index d40ea0c1b7..bee58ae855 100644 --- a/public/language/tr/error.json +++ b/public/language/tr/error.json @@ -11,7 +11,7 @@ "invalid-uid": "Geçersiz Kullanıcı ID", "invalid-username": "Geçersiz Kullanıcı İsmi", "invalid-email": "Geçersiz E-posta", - "invalid-title": "Geçersiz başlık!", + "invalid-title": "Invalid title", "invalid-user-data": "Geçersiz Kullancı Verisi", "invalid-password": "Geçersiz Şifre", "invalid-login-credentials": "Geçersiz kimlik bilgileri", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Başka yöneticileri yasaklayamazsınız!", "cant-remove-last-admin": "Tek yönetici sizsiniz. Kendinizi adminlikten çıkarmadan önce başka bir kullanıcıyı admin olarak ekleyiniz", "cant-delete-admin": "Öncelikle yönetici izinlerini kaldırman gerekiyor.", + "invalid-image": "Invalid image", "invalid-image-type": "Geçersiz resim uzantısı. Izin verilen uzantılar: %1", "invalid-image-extension": "Geçersiz resim uzantısı", "invalid-file-type": "Geçersiz dosya türü. İzin verilenler şunlar : %1", diff --git a/public/language/tr/flags.json b/public/language/tr/flags.json index 43f6fc7926..26bf025d62 100644 --- a/public/language/tr/flags.json +++ b/public/language/tr/flags.json @@ -54,7 +54,11 @@ "modal-body": "%1 %2 için bayraklama nedenini belirtin. Alternatif olarak hızlı rapor butonlarından birinini kullanabilirsin.", "modal-reason-spam": "Gereksiz", "modal-reason-offensive": "Saldırgan", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Bir içeriği bildirme nedeni...", "modal-submit": "Raporu Gönder", - "modal-submit-success": "İçerik, denetlemek için bayraklandı." + "modal-submit-success": "İçerik, denetlemek için bayraklandı.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/tr/pages.json b/public/language/tr/pages.json index 3a3a420a8b..978024cfc0 100644 --- a/public/language/tr/pages.json +++ b/public/language/tr/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1'in yer imine eklenmiş iletiler", "account/settings": "Kullanıcı Ayarları", "account/watched": "%1 tarafından izlenen konular", + "account/ignored": "Topics ignored by %1", "account/upvoted": "%1 tarafından artılanan gönderiler", "account/downvoted": "%1 tarafından eksilenen gönderiler", "account/best": "%1 tarafından en iyi gönderiler", diff --git a/public/language/tr/unread.json b/public/language/tr/unread.json index 4ef01109e7..e333d957cf 100644 --- a/public/language/tr/unread.json +++ b/public/language/tr/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Başlıklar okundu olarak işaretlendi!", "all-topics": "Tüm Başlıklar", "new-topics": "Yeni Başlıklar", - "watched-topics": "İzlenen Başlıklar" + "watched-topics": "İzlenen Başlıklar", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/tr/user.json b/public/language/tr/user.json index 05fc311518..d1456bfaca 100644 --- a/public/language/tr/user.json +++ b/public/language/tr/user.json @@ -25,6 +25,7 @@ "reputation": "Saygınlık", "bookmarks": "Yer İmleri", "watched": "İzlendi", + "ignored": "Ignored", "followers": "Takipçiler", "following": "Takip Ediyor", "aboutme": "Hakkımda", @@ -86,6 +87,7 @@ "has_no_posts": "Bu kullanıcı henüz herhangi bir ileti yazmamış.", "has_no_topics": "Bu kullanıcı henüz hiç bir başlık açmamış.", "has_no_watched_topics": "Bu kullanıcı henüz hiç bir başlık okumamış.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "Bu kullanıcı henüz hiç bir gönderiyi artılamamış.", "has_no_downvoted_posts": "Bu kullanıcı henüz hiç bir gönderiyi eksilememiş.", "has_no_voted_posts": "Bu kullanıcının hiç oylanmış gönderisi yok.", @@ -94,6 +96,7 @@ "paginate_description": "Sonsuz yükleme yerine konu ve iletileri sayfalara böl", "topics_per_page": "Sayfa başına Konular", "posts_per_page": "Sayfa başına İletiler", + "max_items_per_page": "Maximum %1", "notification_sounds": "Uyarı alındığında ses çal", "notifications_and_sounds": "Bildirimler & Sesler", "incoming-message-sound": "Gelen mesaj sesi", diff --git a/public/language/uk/admin/manage/post-queue.json b/public/language/uk/admin/manage/post-queue.json index b110eaf759..8d3eebeccf 100644 --- a/public/language/uk/admin/manage/post-queue.json +++ b/public/language/uk/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Заголовок", "content": "Зміст", "posted": "Опубліковано", - "reply-to": "Відповідь для \"%1\"" + "reply-to": "Відповідь для \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/uk/admin/menu.json b/public/language/uk/admin/menu.json index ca39d920e2..7c5599d12d 100644 --- a/public/language/uk/admin/menu.json +++ b/public/language/uk/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Вийти", "view-forum": "Переглянути форум", - "search.placeholder": "Пошук...", + "search.placeholder": "Search for settings", "search.no-results": "Без результатів...", "search.search-forum": "Шукати на форумі ", "search.keep-typing": "Для результатів, надрукуйте ще...", diff --git a/public/language/uk/admin/settings/pagination.json b/public/language/uk/admin/settings/pagination.json index 9efd986db3..4be8e3452a 100644 --- a/public/language/uk/admin/settings/pagination.json +++ b/public/language/uk/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Розбивати список тем та постів на сторінки замість нескінченної прокрутки", "topics": "Пагінація тем", "posts-per-page": "Постів на сторінку", + "max-posts-per-page": "Maximum posts per page", "categories": "Пагінація категорій", "topics-per-page": "Тем на сторінку", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Початкова кількість тем для завантаження в Непрочитаних, Недавніх та Популярних" } \ No newline at end of file diff --git a/public/language/uk/error.json b/public/language/uk/error.json index dbc187ba1b..08c5c91e75 100644 --- a/public/language/uk/error.json +++ b/public/language/uk/error.json @@ -11,7 +11,7 @@ "invalid-uid": "Невірний ID користувача", "invalid-username": "Невірне ім'я користувача", "invalid-email": "Невірна електронна адреса", - "invalid-title": "Невірний заголовок!", + "invalid-title": "Invalid title", "invalid-user-data": "Невірні користувацькі дані", "invalid-password": "Невірний пароль", "invalid-login-credentials": "Невірне ім'я користувача або пароль", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Ви не можете банити інших адмінів!", "cant-remove-last-admin": "Ви єдиний адміністратор. Додайте іншого користувача в якості адміністратора перш ніж знімати з себе ці обов'язки.", "cant-delete-admin": "Зніміть обов'язки адміністратора з цього акаунту перш ніж видаляти його.", + "invalid-image": "Invalid image", "invalid-image-type": "Невірний тип зображення. Дозволені типи: %1", "invalid-image-extension": "Невірне розширення зображення", "invalid-file-type": "Невірний тип файлу. Дозволені типи: %1", diff --git a/public/language/uk/pages.json b/public/language/uk/pages.json index b8f50f8cc9..6ad8bfbbe6 100644 --- a/public/language/uk/pages.json +++ b/public/language/uk/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "Закладки %1", "account/settings": "Налаштування користувача", "account/watched": "Теми за якими стежить %1", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Пости за які проголосував %1", "account/downvoted": "Пости проти яких проголосував %1", "account/best": "Найкращі пости %1", diff --git a/public/language/uk/unread.json b/public/language/uk/unread.json index 753fb83cca..8cd06c70a5 100644 --- a/public/language/uk/unread.json +++ b/public/language/uk/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Теми відмічені прочитаними!", "all-topics": "Всі теми", "new-topics": "Нові теми", - "watched-topics": "Переглянуті теми" + "watched-topics": "Переглянуті теми", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/uk/user.json b/public/language/uk/user.json index 20d3dfe51f..d483c8e14d 100644 --- a/public/language/uk/user.json +++ b/public/language/uk/user.json @@ -25,6 +25,7 @@ "reputation": "Репутація", "bookmarks": "Закладки", "watched": "Переглянуті", + "ignored": "Ignored", "followers": "Відстежувачі", "following": "Відстежувані", "aboutme": "Про мене", @@ -86,6 +87,7 @@ "has_no_posts": "Цей користувач ще ніколи нічого не постив.", "has_no_topics": "Цей користувач ще ніколи не створював нових тем.", "has_no_watched_topics": "Цей користувач ще ніколи не переглядав жодної теми.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "Цей користувач ще не голосував за жоден з постів.", "has_no_downvoted_posts": "Цей користувач ще не голосував проти жодного поста.", "has_no_voted_posts": "У цього користувача немає постів за котрі хтось голосував", @@ -94,6 +96,7 @@ "paginate_description": "Розбивати список тем та постів на сторінки замість нескінченної прокрутки", "topics_per_page": "Тем на сторінку", "posts_per_page": "Постів на сторінку", + "max_items_per_page": "Maximum %1", "notification_sounds": "Програвати звук, коли ви отримуєте сповіщення", "notifications_and_sounds": "Сповіщення та звуки", "incoming-message-sound": "Звук вхідного повідомлення", diff --git a/public/language/vi/admin/manage/post-queue.json b/public/language/vi/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/vi/admin/manage/post-queue.json +++ b/public/language/vi/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/vi/admin/menu.json b/public/language/vi/admin/menu.json index 3ec4ad41c4..d42af99bce 100644 --- a/public/language/vi/admin/menu.json +++ b/public/language/vi/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/vi/admin/settings/pagination.json b/public/language/vi/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/vi/admin/settings/pagination.json +++ b/public/language/vi/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/vi/error.json b/public/language/vi/error.json index 420851755a..5bdefda0a5 100644 --- a/public/language/vi/error.json +++ b/public/language/vi/error.json @@ -11,7 +11,7 @@ "invalid-uid": "ID tài khoản không hợp lệ", "invalid-username": "Tên đăng nhập không hợp lệ", "invalid-email": "Email không hợp lệ", - "invalid-title": "Tiêu đề không hợp lệ!", + "invalid-title": "Invalid title", "invalid-user-data": "Dữ liệu tài khoản không hợp lệ", "invalid-password": "Mật khẩu không hợp lệ", "invalid-login-credentials": "Invalid login credentials", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "Bạn không thể cấm được các quản trị viên khác", "cant-remove-last-admin": "Bạn là quản trị viên duy nhất. Hãy cho thành viên khác làm quản trị viên trước khi huỷ bỏ quyền quản trị của bạn.", "cant-delete-admin": "Hủy quyền quản trị của tài khoản này trước khi xóa", + "invalid-image": "Invalid image", "invalid-image-type": "Định dạng ảnh không hợp lệ. Những định dạng được cho phép là: %1", "invalid-image-extension": "Định dạng ảnh không hợp lệ", "invalid-file-type": "Định dạng file không hợp lệ. Những định dạng được cho phép là: %1", diff --git a/public/language/vi/flags.json b/public/language/vi/flags.json index c4bfed6f23..d05a5b25a8 100644 --- a/public/language/vi/flags.json +++ b/public/language/vi/flags.json @@ -54,7 +54,11 @@ "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Reason for reporting this content...", "modal-submit": "Submit Report", - "modal-submit-success": "Content has been flagged for moderation." + "modal-submit-success": "Content has been flagged for moderation.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/vi/pages.json b/public/language/vi/pages.json index aa970094c2..febfef2060 100644 --- a/public/language/vi/pages.json +++ b/public/language/vi/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "Đã bookmark %1's chủ đề", "account/settings": "Thiết lập", "account/watched": "Chủ đề %1 đang theo dõi", + "account/ignored": "Topics ignored by %1", "account/upvoted": "Bài viết %1 tán thành", "account/downvoted": "Bài viết %1 phản đối", "account/best": "Bài viết hay nhất của %1", diff --git a/public/language/vi/unread.json b/public/language/vi/unread.json index db616b77e7..e0609d5e04 100644 --- a/public/language/vi/unread.json +++ b/public/language/vi/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "Chủ đề được đánh dấu đã đọc", "all-topics": "Toàn bộ chủ đề", "new-topics": "Các chủ đề mới", - "watched-topics": "Các chủ đề đã xem" + "watched-topics": "Các chủ đề đã xem", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/vi/user.json b/public/language/vi/user.json index c369f3af56..eb0b34313f 100644 --- a/public/language/vi/user.json +++ b/public/language/vi/user.json @@ -25,6 +25,7 @@ "reputation": "Mức uy tín", "bookmarks": "Bookmarks", "watched": "Đã theo dõi", + "ignored": "Ignored", "followers": "Số người theo dõi", "following": "Đang theo dõi", "aboutme": "Giới thiệu bản thân", @@ -86,6 +87,7 @@ "has_no_posts": "Thành viên này chưa đăng bài viết nào cả.", "has_no_topics": "Thành viên này chưa đăng chủ đề nào cả.", "has_no_watched_topics": "Thành viên này chưa theo dõi chủ đề nào cả.", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "Thành viên này chưa tán thành bài viết nào cả.", "has_no_downvoted_posts": "Thành viên này chưa phản đối bài viết nào cả.", "has_no_voted_posts": "Thành viên này không có bài viết nào được tán thành.", @@ -94,6 +96,7 @@ "paginate_description": "Phân trang chủ đề và bài viết thay vì sử dụng cuộn vô hạn", "topics_per_page": "Số chủ đề trong một trang", "posts_per_page": "Số bài viết trong một trang", + "max_items_per_page": "Maximum %1", "notification_sounds": "Phát âm thanh khi bạn nhận được thông báo mới", "notifications_and_sounds": "Thông báo & Âm thanh", "incoming-message-sound": "Âm báo tin nhắn tới", diff --git a/public/language/zh-CN/admin/manage/post-queue.json b/public/language/zh-CN/admin/manage/post-queue.json index 63669c3ff8..c6fcea11d9 100644 --- a/public/language/zh-CN/admin/manage/post-queue.json +++ b/public/language/zh-CN/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "标题", "content": "内容", "posted": "发布", - "reply-to": "回复\"%1\"" + "reply-to": "回复\"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/zh-CN/admin/menu.json b/public/language/zh-CN/admin/menu.json index 2c48cc7e79..fabafd2253 100644 --- a/public/language/zh-CN/admin/menu.json +++ b/public/language/zh-CN/admin/menu.json @@ -65,7 +65,7 @@ "logout": "登出", "view-forum": "查看论坛", - "search.placeholder": "搜索", + "search.placeholder": "Search for settings", "search.no-results": "没有可用结果…", "search.search-forum": "搜索论坛为", "search.keep-typing": "输入更多以查看结果...", diff --git a/public/language/zh-CN/admin/settings/pagination.json b/public/language/zh-CN/admin/settings/pagination.json index b4e16d4f7f..c558a13a07 100644 --- a/public/language/zh-CN/admin/settings/pagination.json +++ b/public/language/zh-CN/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "在主题和帖子使用分页替代无限滚动浏览。", "topics": "话题分页", "posts-per-page": "每页帖子数", + "max-posts-per-page": "Maximum posts per page", "categories": "版块分页", "topics-per-page": "每页主题数", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "最初加载未读,最新,热门的话题" } \ No newline at end of file diff --git a/public/language/zh-CN/error.json b/public/language/zh-CN/error.json index b658f1e1b5..09dbf22e9a 100644 --- a/public/language/zh-CN/error.json +++ b/public/language/zh-CN/error.json @@ -11,7 +11,7 @@ "invalid-uid": "无效用户 ID", "invalid-username": "无效用户名", "invalid-email": "无效的电子邮箱", - "invalid-title": "无效标题!", + "invalid-title": "Invalid title", "invalid-user-data": "无效用户数据", "invalid-password": "无效密码", "invalid-login-credentials": "无效登录凭证", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "您不能封禁其他管理员!", "cant-remove-last-admin": "您是唯一的管理员。在删除您的管理员权限前,请添加另一个管理员。", "cant-delete-admin": "在删除之前请你先把管理员的权限从这个账号移除。", + "invalid-image": "Invalid image", "invalid-image-type": "无效的图像类型。允许的类型有:%1", "invalid-image-extension": "无效的图像扩展", "invalid-file-type": "无效文件格式,允许的格式有:%1", diff --git a/public/language/zh-CN/flags.json b/public/language/zh-CN/flags.json index 189330bdfd..591b9ec247 100644 --- a/public/language/zh-CN/flags.json +++ b/public/language/zh-CN/flags.json @@ -54,7 +54,11 @@ "modal-body": "请选择或者输入您举报 %1%2 的原因以便版主进行审核。", "modal-reason-spam": "垃圾信息", "modal-reason-offensive": "人身攻击", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "举报此内容的理由……", "modal-submit": "提交举报", - "modal-submit-success": "已举报此内容。" + "modal-submit-success": "已举报此内容。", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/zh-CN/pages.json b/public/language/zh-CN/pages.json index 6577c0326a..3264b8ae08 100644 --- a/public/language/zh-CN/pages.json +++ b/public/language/zh-CN/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1 收藏的帖子", "account/settings": "用户设置", "account/watched": "主题已被 %1 关注", + "account/ignored": "Topics ignored by %1", "account/upvoted": "帖子被 %1 顶过", "account/downvoted": "帖子被 %1 踩过", "account/best": "%1 发布的最佳帖子", diff --git a/public/language/zh-CN/unread.json b/public/language/zh-CN/unread.json index 1a71850e6f..0eacca6dd3 100644 --- a/public/language/zh-CN/unread.json +++ b/public/language/zh-CN/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "主题被标为已读!", "all-topics": "全部主题", "new-topics": "新建主题", - "watched-topics": "看过的主题" + "watched-topics": "看过的主题", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/zh-CN/user.json b/public/language/zh-CN/user.json index 7c43d425b3..6b2464e5fb 100644 --- a/public/language/zh-CN/user.json +++ b/public/language/zh-CN/user.json @@ -25,6 +25,7 @@ "reputation": "声望", "bookmarks": "书签", "watched": "已关注", + "ignored": "Ignored", "followers": "粉丝", "following": "关注", "aboutme": "关于我", @@ -86,6 +87,7 @@ "has_no_posts": "此用户从未发言。", "has_no_topics": "此用户还未发布任何主题。", "has_no_watched_topics": "此用户还未关注任何主题。", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "此用户还未顶过任何帖子。", "has_no_downvoted_posts": "此用户还未踩过任何帖子。", "has_no_voted_posts": "这个用户还未评价任何帖子", @@ -94,6 +96,7 @@ "paginate_description": "使用分页式版块浏览", "topics_per_page": "每页主题数", "posts_per_page": "每页帖子数", + "max_items_per_page": "Maximum %1", "notification_sounds": "收到通知时播放提示音", "notifications_and_sounds": "通知 & 提示音", "incoming-message-sound": "消息到达提示音", diff --git a/public/language/zh-TW/admin/manage/post-queue.json b/public/language/zh-TW/admin/manage/post-queue.json index f748fb0ee2..4de24c991b 100644 --- a/public/language/zh-TW/admin/manage/post-queue.json +++ b/public/language/zh-TW/admin/manage/post-queue.json @@ -6,5 +6,6 @@ "title": "Title", "content": "Content", "posted": "Posted", - "reply-to": "Reply to \"%1\"" + "reply-to": "Reply to \"%1\"", + "content-editable": "You can click on individual content to edit before posting." } \ No newline at end of file diff --git a/public/language/zh-TW/admin/menu.json b/public/language/zh-TW/admin/menu.json index 3ec4ad41c4..d42af99bce 100644 --- a/public/language/zh-TW/admin/menu.json +++ b/public/language/zh-TW/admin/menu.json @@ -65,7 +65,7 @@ "logout": "Log out", "view-forum": "View Forum", - "search.placeholder": "Search...", + "search.placeholder": "Search for settings", "search.no-results": "No results...", "search.search-forum": "Search the forum for ", "search.keep-typing": "Type more to see results...", diff --git a/public/language/zh-TW/admin/settings/pagination.json b/public/language/zh-TW/admin/settings/pagination.json index 27d71b4de5..d565e2d446 100644 --- a/public/language/zh-TW/admin/settings/pagination.json +++ b/public/language/zh-TW/admin/settings/pagination.json @@ -3,7 +3,9 @@ "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Topic Pagination", "posts-per-page": "Posts per Page", + "max-posts-per-page": "Maximum posts per page", "categories": "Category Pagination", "topics-per-page": "Topics per Page", + "max-topics-per-page": "Maximum topics per page", "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular" } \ No newline at end of file diff --git a/public/language/zh-TW/error.json b/public/language/zh-TW/error.json index 425600bdcd..4408dcb9ac 100644 --- a/public/language/zh-TW/error.json +++ b/public/language/zh-TW/error.json @@ -11,7 +11,7 @@ "invalid-uid": "無效的使用者 ID", "invalid-username": "無效的使用者名稱", "invalid-email": "無效的 Email 位址", - "invalid-title": "無效的主題!", + "invalid-title": "Invalid title", "invalid-user-data": "無效的使用者資料", "invalid-password": "無效的密碼", "invalid-login-credentials": "Invalid login credentials", @@ -81,6 +81,7 @@ "cant-ban-other-admins": "你無法封鎖其他的管理員!", "cant-remove-last-admin": "你是唯一的管理員。在你移除自己為管理員前,需要新增另一個使用者為管理員。", "cant-delete-admin": "在要刪除這個帳戶前,請先移除這個帳戶的管理員權限", + "invalid-image": "Invalid image", "invalid-image-type": "無效的圖像類型。允許的類型:%1", "invalid-image-extension": "無效的圖像擴充元件", "invalid-file-type": "無效的檔案類型。允許的類型:%1", diff --git a/public/language/zh-TW/flags.json b/public/language/zh-TW/flags.json index ff94526eac..a4d08944b7 100644 --- a/public/language/zh-TW/flags.json +++ b/public/language/zh-TW/flags.json @@ -54,7 +54,11 @@ "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "垃圾評論", "modal-reason-offensive": "惡意評論", + "modal-reason-other": "Other (specify below)", "modal-reason-custom": "Reason for reporting this content...", "modal-submit": "Submit Report", - "modal-submit-success": "Content has been flagged for moderation." + "modal-submit-success": "Content has been flagged for moderation.", + "modal-submit-confirm": "Confirm Submission", + "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." } \ No newline at end of file diff --git a/public/language/zh-TW/pages.json b/public/language/zh-TW/pages.json index a6c7130d88..168f76b180 100644 --- a/public/language/zh-TW/pages.json +++ b/public/language/zh-TW/pages.json @@ -44,6 +44,7 @@ "account/bookmarks": "%1's Bookmarked Posts", "account/settings": "使用者設定", "account/watched": "%1 所觀看的主題", + "account/ignored": "Topics ignored by %1", "account/upvoted": "%1 所正向投票的張貼", "account/downvoted": "%1 所負向投票的張貼", "account/best": "由 %1 建立的最佳張貼文", diff --git a/public/language/zh-TW/unread.json b/public/language/zh-TW/unread.json index b11d2ee762..627abafbf1 100644 --- a/public/language/zh-TW/unread.json +++ b/public/language/zh-TW/unread.json @@ -9,5 +9,7 @@ "topics_marked_as_read.success": "標記主題成已讀!", "all-topics": "所有主題", "new-topics": "新主題", - "watched-topics": "已觀看主題" + "watched-topics": "已觀看主題", + "unreplied-topics": "Unreplied Topics", + "multiple-categories-selected": "Multiple Selected" } \ No newline at end of file diff --git a/public/language/zh-TW/user.json b/public/language/zh-TW/user.json index cc6df85986..190ce21484 100644 --- a/public/language/zh-TW/user.json +++ b/public/language/zh-TW/user.json @@ -25,6 +25,7 @@ "reputation": "聲譽", "bookmarks": "Bookmarks", "watched": "觀看者", + "ignored": "Ignored", "followers": "跟隨者", "following": "正在關注", "aboutme": "關於我", @@ -86,6 +87,7 @@ "has_no_posts": "使用者還沒有發表任何張貼", "has_no_topics": "使用者還沒有發表任何主題", "has_no_watched_topics": "使用者還沒有觀看任何主題", + "has_no_ignored_topics": "This user hasn't ignored any topics yet.", "has_no_upvoted_posts": "使用者還沒有對任何主題投正向票", "has_no_downvoted_posts": "使用者還沒有對任何主題投負向票", "has_no_voted_posts": "這個使用者沒有投票的張貼", @@ -94,6 +96,7 @@ "paginate_description": "將主題與張貼用分頁來顯示,取代使用無盡的捲動方式。", "topics_per_page": "每頁的主題數", "posts_per_page": "每頁的文章數", + "max_items_per_page": "Maximum %1", "notification_sounds": "當你接收到通知時撥放音效", "notifications_and_sounds": "通知&音效", "incoming-message-sound": "收到訊息音效", From 43f9c3224fa8cc67c12e7bca909c87fdf9112234 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 2 Nov 2017 08:14:35 -0400 Subject: [PATCH 20/44] dont crash sortedSetIncryBy on redis if no callback is supplied --- src/database/mongo/helpers.js | 8 +++----- src/database/redis/helpers.js | 2 ++ src/database/redis/sorted.js | 1 + 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/database/mongo/helpers.js b/src/database/mongo/helpers.js index 7a791c9fca..29c83ea3b9 100644 --- a/src/database/mongo/helpers.js +++ b/src/database/mongo/helpers.js @@ -1,6 +1,8 @@ 'use strict'; -var helpers = {}; +var helpers = module.exports; + +helpers.noop = function () {}; helpers.toMap = function (data) { var map = {}; @@ -31,7 +33,3 @@ helpers.valueToString = function (value) { return value.toString(); }; - -helpers.noop = function () {}; - -module.exports = helpers; diff --git a/src/database/redis/helpers.js b/src/database/redis/helpers.js index b1c2a98092..bcf2b63e1c 100644 --- a/src/database/redis/helpers.js +++ b/src/database/redis/helpers.js @@ -2,6 +2,8 @@ var helpers = module.exports; +helpers.noop = function () {}; + helpers.multiKeys = function (redisClient, command, keys, callback) { callback = callback || function () {}; var multi = redisClient.multi(); diff --git a/src/database/redis/sorted.js b/src/database/redis/sorted.js index 282928da97..fe1ee3a3b5 100644 --- a/src/database/redis/sorted.js +++ b/src/database/redis/sorted.js @@ -180,6 +180,7 @@ module.exports = function (redisClient, module) { }; module.sortedSetIncrBy = function (key, increment, value, callback) { + callback = callback || helpers.noop; redisClient.zincrby(key, increment, value, function (err, newValue) { callback(err, !err ? parseFloat(newValue) : undefined); }); From 3dd83237b81c3db021f1afb0f999513447fd82b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 2 Nov 2017 08:58:51 -0400 Subject: [PATCH 21/44] add some debug for failed tests --- test/flags.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/flags.js b/test/flags.js index cf24e08d6b..062c2d5c9a 100644 --- a/test/flags.js +++ b/test/flags.js @@ -63,10 +63,10 @@ describe('Flags', function () { type: 'post', description: 'Test flag', }; - + assert(flagData); for (var key in compare) { if (compare.hasOwnProperty(key)) { - assert.ok(flagData[key]); + assert.ok(flagData[key], 'undefined key ' + key); assert.equal(flagData[key], compare[key]); } } @@ -140,10 +140,10 @@ describe('Flags', function () { description: 'Test flag', state: 'open', }; - + assert(flagData); for (var key in compare) { if (compare.hasOwnProperty(key)) { - assert.ok(flagData[key]); + assert.ok(flagData[key], 'undefined key ' + key); assert.equal(flagData[key], compare[key]); } } From 2123e2f74ceeabcdc7f0d903db80b37f463f445e Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 2 Nov 2017 12:28:36 -0400 Subject: [PATCH 22/44] updated tinycon lib --- public/vendor/tinycon/tinycon.js | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/public/vendor/tinycon/tinycon.js b/public/vendor/tinycon/tinycon.js index 3e3657cdf8..8c516bc2e4 100644 --- a/public/vendor/tinycon/tinycon.js +++ b/public/vendor/tinycon/tinycon.js @@ -3,7 +3,6 @@ * Tom Moor, http://tommoor.com * Copyright (c) 2015 Tom Moor * @license MIT Licensed - * @version 0.6.4 */ (function(){ @@ -14,7 +13,8 @@ var faviconImage = null; var canvas = null; var options = {}; - var r = window.devicePixelRatio || 1; + // Chrome browsers with nonstandard zoom report fractional devicePixelRatio. + var r = Math.ceil(window.devicePixelRatio) || 1; var size = 16 * r; var defaults = { width: 7, @@ -60,12 +60,11 @@ var removeFaviconTag = function(){ var links = document.getElementsByTagName('link'); - var head = document.getElementsByTagName('head')[0]; for(var i=0, len=links.length; i < len; i++) { var exists = (typeof(links[i]) !== 'undefined'); if (exists && (links[i].getAttribute('rel') || '').match(/\bicon\b/i)) { - head.removeChild(links[i]); + links[i].parentNode.removeChild(links[i]); } } }; @@ -192,16 +191,16 @@ // bubble context.beginPath(); - context.moveTo(left + radius, top); + context.moveTo(left + radius, top); context.quadraticCurveTo(left, top, left, top + radius); context.lineTo(left, bottom - radius); - context.quadraticCurveTo(left, bottom, left + radius, bottom); - context.lineTo(right - radius, bottom); - context.quadraticCurveTo(right, bottom, right, bottom - radius); - context.lineTo(right, top + radius); - context.quadraticCurveTo(right, top, right - radius, top); - context.closePath(); - context.fill(); + context.quadraticCurveTo(left, bottom, left + radius, bottom); + context.lineTo(right - radius, bottom); + context.quadraticCurveTo(right, bottom, right, bottom - radius); + context.lineTo(right, top + radius); + context.quadraticCurveTo(right, top, right - radius, top); + context.closePath(); + context.fill(); // bottom shadow context.beginPath(); From 54a84bf130b2172f51a8283857c7608b7daabf73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 2 Nov 2017 12:56:40 -0400 Subject: [PATCH 23/44] cache fixes --- src/database/mongo/hash.js | 20 +++++++++++++------- src/groups/membership.js | 29 +++++++++++++++++++++-------- 2 files changed, 34 insertions(+), 15 deletions(-) diff --git a/src/database/mongo/hash.js b/src/database/mongo/hash.js index becfb83a2f..aef54bf124 100644 --- a/src/database/mongo/hash.js +++ b/src/database/mongo/hash.js @@ -77,9 +77,10 @@ module.exports = function (db, module) { }; module.getObjects = function (keys, callback) { - function getFromCache(next) { - setImmediate(next, null, keys.map(function (key) { - return _.clone(cache.get(key)); + var cachedData = {}; + function getFromCache() { + process.nextTick(callback, null, keys.map(function (key) { + return _.clone(cachedData[key]); })); } @@ -88,7 +89,11 @@ module.exports = function (db, module) { } var nonCachedKeys = keys.filter(function (key) { - return cache.get(key) === undefined; + var data = cache.get(key); + if (data !== undefined) { + cachedData[key] = data; + } + return data === undefined; }); var hits = keys.length - nonCachedKeys.length; @@ -97,7 +102,7 @@ module.exports = function (db, module) { cache.misses += misses; if (!nonCachedKeys.length) { - return getFromCache(callback); + return getFromCache(); } db.collection('objects').find({ _key: { $in: nonCachedKeys } }, { _id: 0 }).toArray(function (err, data) { @@ -107,10 +112,11 @@ module.exports = function (db, module) { var map = helpers.toMap(data); nonCachedKeys.forEach(function (key) { - cache.set(key, map[key] || null); + cachedData[key] = map[key] || null; + cache.set(key, cachedData[key]); }); - getFromCache(callback); + getFromCache(); }); }; diff --git a/src/groups/membership.js b/src/groups/membership.js index 42c3932805..6777edfbc9 100644 --- a/src/groups/membership.js +++ b/src/groups/membership.js @@ -355,8 +355,9 @@ module.exports = function (Groups) { } var cacheKey = uid + ':' + groupName; - if (cache.has(cacheKey)) { - return setImmediate(callback, null, cache.get(cacheKey)); + var isMember = cache.get(cacheKey); + if (isMember !== undefined) { + return setImmediate(callback, null, isMember); } async.waterfall([ @@ -371,9 +372,10 @@ module.exports = function (Groups) { }; Groups.isMembers = function (uids, groupName, callback) { - function getFromCache(next) { - setImmediate(next, null, uids.map(function (uid) { - return cache.get(uid + ':' + groupName); + var cachedData = {}; + function getFromCache() { + setImmediate(callback, null, uids.map(function (uid) { + return cachedData[uid + ':' + groupName]; })); } @@ -382,7 +384,11 @@ module.exports = function (Groups) { } var nonCachedUids = uids.filter(function (uid) { - return !cache.get(uid + ':' + groupName); + var isMember = cache.get(uid + ':' + groupName); + if (isMember !== undefined) { + cachedData[uid + ':' + groupName] = isMember; + } + return isMember === undefined; }); if (!nonCachedUids.length) { @@ -395,6 +401,7 @@ module.exports = function (Groups) { }, function (isMembers, next) { nonCachedUids.forEach(function (uid, index) { + cachedData[uid + ':' + groupName] = isMembers[index]; cache.set(uid + ':' + groupName, isMembers[index]); }); @@ -404,9 +411,10 @@ module.exports = function (Groups) { }; Groups.isMemberOfGroups = function (uid, groups, callback) { + var cachedData = {}; function getFromCache(next) { setImmediate(next, null, groups.map(function (groupName) { - return cache.get(uid + ':' + groupName); + return cachedData[uid + ':' + groupName]; })); } @@ -415,7 +423,11 @@ module.exports = function (Groups) { } var nonCachedGroups = groups.filter(function (groupName) { - return !cache.get(uid + ':' + groupName); + var isMember = cache.get(uid + ':' + groupName); + if (isMember !== undefined) { + cachedData[uid + ':' + groupName] = isMember; + } + return isMember === undefined; }); if (!nonCachedGroups.length) { @@ -432,6 +444,7 @@ module.exports = function (Groups) { }, function (isMembers, next) { nonCachedGroups.forEach(function (groupName, index) { + cachedData[uid + ':' + groupName] = isMembers[index]; cache.set(uid + ':' + groupName, isMembers[index]); }); From 008f757a9b82d61f84705ea6022b273673504854 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 2 Nov 2017 13:16:07 -0400 Subject: [PATCH 24/44] closes #6030 --- public/src/admin/manage/group.js | 2 +- src/views/admin/partials/groups/memberlist.tpl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/public/src/admin/manage/group.js b/public/src/admin/manage/group.js index 14846f18a7..95e1751ff6 100644 --- a/public/src/admin/manage/group.js +++ b/public/src/admin/manage/group.js @@ -120,7 +120,7 @@ define('admin/manage/group', [ $('[component="groups/members"]').on('click', '[data-action]', function () { var btnEl = $(this); var userRow = btnEl.parents('[data-uid]'); - var ownerFlagEl = userRow.find('.member-name i'); + var ownerFlagEl = userRow.find('.member-name .user-owner-icon'); var isOwner = !ownerFlagEl.hasClass('invisible'); var uid = userRow.attr('data-uid'); var action = btnEl.attr('data-action'); diff --git a/src/views/admin/partials/groups/memberlist.tpl b/src/views/admin/partials/groups/memberlist.tpl index 0b20231739..f7456de2b5 100644 --- a/src/views/admin/partials/groups/memberlist.tpl +++ b/src/views/admin/partials/groups/memberlist.tpl @@ -17,7 +17,7 @@
- +     [[email:notif.post.cta]]     - {group.members.username} + {group.members.username}
From b74fe98dc42726bd42584e54db1ee7738fc02d54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 2 Nov 2017 13:35:49 -0400 Subject: [PATCH 25/44] closes #6031 --- public/src/ajaxify.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/public/src/ajaxify.js b/public/src/ajaxify.js index c18922485b..0be6453a88 100644 --- a/public/src/ajaxify.js +++ b/public/src/ajaxify.js @@ -368,10 +368,9 @@ $(document).ready(function () { window.open(this.href, '_blank'); e.preventDefault(); } else if (config.useOutgoingLinksPage) { - var safeUrls = config.outgoingLinksWhitelist.trim().split(/[\s,]+/g); + var safeUrls = config.outgoingLinksWhitelist.trim().split(/[\s,]+/g).filter(Boolean); var href = this.href; - - if (!safeUrls.some(function (url) { return href.indexOf(url) !== -1; })) { + if (!safeUrls.length || !safeUrls.some(function (url) { return href.indexOf(url) !== -1; })) { ajaxify.go('outgoing?url=' + encodeURIComponent(href)); e.preventDefault(); } From 6c6d177a31f062ebe32a0c9942d695ea4379527f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 2 Nov 2017 13:45:14 -0400 Subject: [PATCH 26/44] up themes --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index fd73ff01d7..ce98ed4ef7 100644 --- a/package.json +++ b/package.json @@ -67,9 +67,9 @@ "nodebb-plugin-spam-be-gone": "0.5.1", "nodebb-rewards-essentials": "0.0.9", "nodebb-theme-lavender": "4.1.1", - "nodebb-theme-persona": "6.1.7", + "nodebb-theme-persona": "6.1.8", "nodebb-theme-slick": "1.1.1", - "nodebb-theme-vanilla": "7.1.5", + "nodebb-theme-vanilla": "7.1.6", "nodebb-widget-essentials": "3.0.7", "nodemailer": "4.3.0", "passport": "^0.4.0", From dfad76120de02a99decf26708794159c9a5bf42a Mon Sep 17 00:00:00 2001 From: Peter Jaszkowiak Date: Thu, 2 Nov 2017 12:12:05 -0600 Subject: [PATCH 27/44] Support npm@5 and yarn (#6010) * Support npm@5 and yarn Use package.default.json Partial #6008 - Overwrite package.json with package.default.json values - `dependencies` field is merged with package.default.json version taking precidence - `./nodebb upgrade` automatically does those things and runs `git pull` - use `./nodebb upgrade --dev` to avoid the `git pull` * added logic to preserve extraneous plugins installed in node_modules/ * Don't automatically git pull * Simplify package-install, run it on upgrade just in case --- .gitignore | 1 + .travis.yml | 2 + nodebb | 18 +++++-- package.json => package.default.json | 0 src/meta/package-install.js | 72 ++++++++++++++++++++++++++++ src/plugins/install.js | 3 +- test/plugins.js | 8 ++++ 7 files changed, 98 insertions(+), 6 deletions(-) rename package.json => package.default.json (100%) create mode 100644 src/meta/package-install.js diff --git a/.gitignore b/.gitignore index b82cd9c314..68651e533d 100644 --- a/.gitignore +++ b/.gitignore @@ -65,3 +65,4 @@ build test/files/normalise.jpg.png test/files/normalise-resized.jpg package-lock.json +package.json diff --git a/.travis.yml b/.travis.yml index 7d7d1a3a4f..9a8a0fd66a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,6 +8,8 @@ before_install: - "sudo service mongod start" before_script: - sleep 15 # wait for mongodb to be ready + - cp package.default.json package.json + - npm install - sh -c "if [ '$DB' = 'mongodb' ]; then node app --setup=\"{\\\"url\\\":\\\"http://127.0.0.1:4567\\\",\\\"secret\\\":\\\"abcdef\\\",\\\"database\\\":\\\"mongo\\\",\\\"mongo:host\\\":\\\"127.0.0.1\\\",\\\"mongo:port\\\":27017,\\\"mongo:username\\\":\\\"\\\",\\\"mongo:password\\\":\\\"\\\",\\\"mongo:database\\\":0,\\\"redis:host\\\":\\\"127.0.0.1\\\",\\\"redis:port\\\":6379,\\\"redis:password\\\":\\\"\\\",\\\"redis:database\\\":0,\\\"admin:username\\\":\\\"admin\\\",\\\"admin:email\\\":\\\"test@example.org\\\",\\\"admin:password\\\":\\\"abcdef\\\",\\\"admin:password:confirm\\\":\\\"abcdef\\\"}\" --ci=\"{\\\"host\\\":\\\"127.0.0.1\\\",\\\"port\\\":27017,\\\"database\\\":0}\"; fi" - sh -c "if [ '$DB' = 'redis' ]; then node app --setup=\"{\\\"url\\\":\\\"http://127.0.0.1:4567\\\",\\\"secret\\\":\\\"abcdef\\\",\\\"database\\\":\\\"redis\\\",\\\"mongo:host\\\":\\\"127.0.0.1\\\",\\\"mongo:port\\\":27017,\\\"mongo:username\\\":\\\"\\\",\\\"mongo:password\\\":\\\"\\\",\\\"mongo:database\\\":0,\\\"redis:host\\\":\\\"127.0.0.1\\\",\\\"redis:port\\\":6379,\\\"redis:password\\\":\\\"\\\",\\\"redis:database\\\":0,\\\"admin:username\\\":\\\"admin\\\",\\\"admin:email\\\":\\\"test@example.org\\\",\\\"admin:password\\\":\\\"abcdef\\\",\\\"admin:password:confirm\\\":\\\"abcdef\\\"}\" --ci=\"{\\\"host\\\":\\\"127.0.0.1\\\",\\\"port\\\":6379,\\\"database\\\":0}\"; fi" after_success: diff --git a/nodebb b/nodebb index d745bb1c6c..c632c72df9 100755 --- a/nodebb +++ b/nodebb @@ -6,18 +6,20 @@ var fs = require('fs'); var path = require('path'); var cproc = require('child_process'); +var packageInstall = require('./src/meta/package-install'); + // check to make sure dependencies are installed try { + fs.readFileSync(path.join(__dirname, './package.json')); fs.readFileSync(path.join(__dirname, 'node_modules/async/package.json')); } catch (e) { if (e.code === 'ENOENT') { process.stdout.write('Dependencies not yet installed.\n'); process.stdout.write('Installing them now...\n\n'); - cproc.execSync('npm i --production', { - cwd: __dirname, - stdio: [0, 1, 2], - }); + packageInstall.updatePackageFile(); + packageInstall.preserveExtraneousPlugins(); + packageInstall.npmInstallProduction(); } else { throw e; } @@ -458,9 +460,15 @@ var commands = { } async.series([ + function (next) { + packageInstall.updatePackageFile(); + packageInstall.preserveExtraneousPlugins(); + next(); + }, function (next) { process.stdout.write('1. '.bold + 'Bringing base dependencies up to date... '.yellow); - cproc.exec('npm i --production', { cwd: __dirname, stdio: 'ignore' }, next); + packageInstall.npmInstallProduction(); + next(); }, function (next) { process.stdout.write('OK\n'.green); diff --git a/package.json b/package.default.json similarity index 100% rename from package.json rename to package.default.json diff --git a/src/meta/package-install.js b/src/meta/package-install.js new file mode 100644 index 0000000000..3fee4cb9e4 --- /dev/null +++ b/src/meta/package-install.js @@ -0,0 +1,72 @@ +'use strict'; + +var path = require('path'); +var fs = require('fs'); +var cproc = require('child_process'); + +var packageFilePath = path.join(__dirname, '../../package.json'); +var packageDefaultFilePath = path.join(__dirname, '../../package.default.json'); +var modulesPath = path.join(__dirname, '../../node_modules'); + +function updatePackageFile() { + var oldPackageContents = {}; + + try { + oldPackageContents = JSON.parse(fs.readFileSync(packageFilePath, 'utf8')); + } catch (e) { + if (e.code !== 'ENOENT') { + throw e; + } + } + + var defaultPackageContents = JSON.parse(fs.readFileSync(packageDefaultFilePath, 'utf8')); + var packageContents = Object.assign({}, oldPackageContents, defaultPackageContents, { + dependencies: Object.assign({}, oldPackageContents.dependencies, defaultPackageContents.dependencies), + }); + + fs.writeFileSync(packageFilePath, JSON.stringify(packageContents, null, 2)); +} + +exports.updatePackageFile = updatePackageFile; + +function npmInstallProduction() { + cproc.execSync('npm i --production', { + cwd: path.join(__dirname, '../../'), + stdio: [0, 1, 2], + }); +} + +exports.npmInstallProduction = npmInstallProduction; + +function preserveExtraneousPlugins() { + // Skip if `node_modules/` is not found or inaccessible + try { + fs.accessSync(modulesPath, fs.constants.R_OK); + } catch (e) { + return; + } + + var isPackage = /^nodebb-(plugin|theme|widget|reward)-\w+/; + var packages = fs.readdirSync(modulesPath).filter(function (pkgName) { + return isPackage.test(pkgName); + }); + var packageContents = JSON.parse(fs.readFileSync(packageFilePath, 'utf8')); + + var extraneous = packages + // only extraneous plugins (ones not in package.json) + .filter(function (pkgName) { + return !packageContents.dependencies.hasOwnProperty(pkgName); + }) + // reduce to a map of package names to package versions + .reduce(function (map, pkgName) { + var pkgConfig = JSON.parse(fs.readFileSync(path.join(modulesPath, pkgName, 'package.json'))); + map[pkgName] = pkgConfig.version; + return map; + }, {}); + + // Add those packages to package.json + Object.assign(packageContents.dependencies, extraneous); + fs.writeFileSync(packageFilePath, JSON.stringify(packageContents, null, 2)); +} + +exports.preserveExtraneousPlugins = preserveExtraneousPlugins; diff --git a/src/plugins/install.js b/src/plugins/install.js index ced9f800f8..7bd407ca08 100644 --- a/src/plugins/install.js +++ b/src/plugins/install.js @@ -6,6 +6,7 @@ var path = require('path'); var fs = require('fs'); var nconf = require('nconf'); var os = require('os'); +var cproc = require('child_process'); var db = require('../database'); var meta = require('../meta'); @@ -107,7 +108,7 @@ module.exports = function (Plugins) { } function runNpmCommand(command, pkgName, version, callback) { - require('child_process').execFile((process.platform === 'win32') ? 'npm.cmd' : 'npm', [command, pkgName + (command === 'install' ? '@' + version : ''), '--no-save'], function (err, stdout) { + cproc.execFile((process.platform === 'win32') ? 'npm.cmd' : 'npm', [command, pkgName + (command === 'install' ? '@' + version : ''), '--save'], function (err, stdout) { if (err) { return callback(err); } diff --git a/test/plugins.js b/test/plugins.js index 40c6c9c97f..e948cbb160 100644 --- a/test/plugins.js +++ b/test/plugins.js @@ -5,6 +5,7 @@ var assert = require('assert'); var path = require('path'); var nconf = require('nconf'); var request = require('request'); +var fs = require('fs'); var db = require('./mocks/databasemock'); var plugins = require('../src/plugins'); @@ -128,6 +129,9 @@ describe('Plugins', function () { assert.equal(pluginData.active, false); assert.equal(pluginData.installed, true); + var packageFile = JSON.parse(fs.readFileSync(path.join(__dirname, '../package.json'), 'utf8')); + assert(packageFile.dependencies[pluginName]); + done(); }); }); @@ -160,6 +164,10 @@ describe('Plugins', function () { assert.ifError(err); assert.equal(pluginData.installed, false); assert.equal(pluginData.active, false); + + var packageFile = JSON.parse(fs.readFileSync(path.join(__dirname, '../package.json'), 'utf8')); + assert(!packageFile.dependencies[pluginName]); + done(); }); }); From d998d53902bc9b547b7e9c86ec64ebce860041e0 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 2 Nov 2017 14:22:28 -0400 Subject: [PATCH 28/44] update themes for #5980 and 733 --- package.default.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.default.json b/package.default.json index a2eca1af85..dd315115ce 100644 --- a/package.default.json +++ b/package.default.json @@ -66,10 +66,10 @@ "nodebb-plugin-soundpack-default": "1.0.0", "nodebb-plugin-spam-be-gone": "0.5.1", "nodebb-rewards-essentials": "0.0.9", - "nodebb-theme-lavender": "4.1.1", - "nodebb-theme-persona": "6.1.8", + "nodebb-theme-lavender": "5.0.0", + "nodebb-theme-persona": "7.0.0", "nodebb-theme-slick": "1.1.1", - "nodebb-theme-vanilla": "7.1.6", + "nodebb-theme-vanilla": "8.0.0", "nodebb-widget-essentials": "3.0.7", "nodemailer": "4.3.0", "passport": "^0.4.0", From 8810f0f2a940d94b3a53c865c27c7f94904eaca3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 2 Nov 2017 14:55:05 -0400 Subject: [PATCH 29/44] remove dupe meta --- test/user.js | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/test/user.js b/test/user.js index c93917747b..d37e55e485 100644 --- a/test/user.js +++ b/test/user.js @@ -10,7 +10,6 @@ var db = require('./mocks/databasemock'); var User = require('../src/user'); var Topics = require('../src/topics'); var Categories = require('../src/categories'); -var Meta = require('../src/meta'); var Password = require('../src/password'); var groups = require('../src/groups'); var helpers = require('./helpers'); @@ -202,8 +201,8 @@ describe('User', function () { describe('.isReadyToPost()', function () { it('should error when a user makes two posts in quick succession', function (done) { - Meta.config = Meta.config || {}; - Meta.config.postDelay = '10'; + meta.config = meta.config || {}; + meta.config.postDelay = '10'; async.series([ async.apply(Topics.post, { @@ -239,8 +238,8 @@ describe('User', function () { }); it('should error when a new user posts if the last post time is 10 < 30 seconds', function (done) { - Meta.config.newbiePostDelay = 30; - Meta.config.newbiePostDelayThreshold = 3; + meta.config.newbiePostDelay = 30; + meta.config.newbiePostDelayThreshold = 3; User.setUserField(testUid, 'lastposttime', +new Date() - (20 * 1000), function () { Topics.post({ @@ -292,10 +291,10 @@ describe('User', function () { }); it('should error for guest', function (done) { - Meta.config.allowGuestUserSearching = 0; + meta.config.allowGuestUserSearching = 0; socketUser.search({ uid: 0 }, { query: 'john' }, function (err) { assert.equal(err.message, '[[error:not-logged-in]]'); - Meta.config.allowGuestUserSearching = 1; + meta.config.allowGuestUserSearching = 1; done(); }); }); @@ -1145,10 +1144,10 @@ describe('User', function () { }); it('should send email confirm', function (done) { - Meta.config.requireEmailConfirmation = 1; + meta.config.requireEmailConfirmation = 1; socketUser.emailConfirm({ uid: testUid }, {}, function (err) { assert.ifError(err); - Meta.config.requireEmailConfirmation = 0; + meta.config.requireEmailConfirmation = 0; done(); }); }); @@ -1258,8 +1257,8 @@ describe('User', function () { var oldRegistrationType; var adminUid; before(function (done) { - oldRegistrationType = Meta.config.registrationType; - Meta.config.registrationType = 'admin-approval'; + oldRegistrationType = meta.config.registrationType; + meta.config.registrationType = 'admin-approval'; User.create({ username: 'admin', password: '123456' }, function (err, uid) { assert.ifError(err); adminUid = uid; @@ -1268,7 +1267,7 @@ describe('User', function () { }); after(function (done) { - Meta.config.registrationType = oldRegistrationType; + meta.config.registrationType = oldRegistrationType; done(); }); From 662f92a4a82b8c49667f0b60ba1a92a7a73ae780 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 2 Nov 2017 18:21:25 -0400 Subject: [PATCH 30/44] supply callback to req.session.destroy --- src/controllers/authentication.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/controllers/authentication.js b/src/controllers/authentication.js index e8ea4ff5b5..73eb6be287 100644 --- a/src/controllers/authentication.js +++ b/src/controllers/authentication.js @@ -418,8 +418,11 @@ authenticationController.logout = function (req, res, next) { }, function (next) { req.logout(); - req.session.destroy(); - + req.session.destroy(function (err) { + next(err); + }); + }, + function (next) { user.setUserField(req.uid, 'lastonline', Date.now() - 300000, next); }, function (next) { From 845f01f297c12e471f78e799eb8e1c6070487b50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 2 Nov 2017 18:39:36 -0400 Subject: [PATCH 31/44] dont set meta.config to null --- src/meta/configs.js | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/src/meta/configs.js b/src/meta/configs.js index 5148a11a5e..cd3a17c985 100644 --- a/src/meta/configs.js +++ b/src/meta/configs.js @@ -15,23 +15,19 @@ var Configs = module.exports; Meta.config = {}; Configs.init = function (callback) { - Meta.config = null; - + var config; async.waterfall([ function (next) { Configs.list(next); }, - function (config, next) { - cacheBuster.read(function (err, buster) { - if (err) { - return next(err); - } - - config['cache-buster'] = 'v=' + (buster || Date.now()); - - Meta.config = config; - next(); - }); + function (_config, next) { + config = _config; + cacheBuster.read(next); + }, + function (buster, next) { + config['cache-buster'] = 'v=' + (buster || Date.now()); + Meta.config = config; + next(); }, ], callback); }; From 9fce645d80e6d1dbe0861359abe427608044358d Mon Sep 17 00:00:00 2001 From: "Misty (Bot)" Date: Fri, 3 Nov 2017 09:24:11 +0000 Subject: [PATCH 32/44] Latest translations and fallbacks --- public/language/sr/error.json | 4 ++-- public/language/sr/flags.json | 2 +- public/language/sr/pages.json | 4 ++-- public/language/sr/unread.json | 4 ++-- public/language/sr/user.json | 6 +++--- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/public/language/sr/error.json b/public/language/sr/error.json index fcb8a49c5f..08b1e81236 100644 --- a/public/language/sr/error.json +++ b/public/language/sr/error.json @@ -11,7 +11,7 @@ "invalid-uid": "Неисправан ИД корисника", "invalid-username": "Неисправно корисничко име", "invalid-email": "Неисправна е-пошта", - "invalid-title": "Invalid title", + "invalid-title": "Неисправан наслов", "invalid-user-data": "Неисправни кориснички подаци", "invalid-password": "Неисправна лозинка", "invalid-login-credentials": "Неважећи акредитиви за пријављивање", @@ -81,7 +81,7 @@ "cant-ban-other-admins": "Не можете забранити друге администраторе!", "cant-remove-last-admin": "Ви сте једини администратор. Додајте другог корисника као администратора пре него што уклоните себе као администратора.", "cant-delete-admin": "Уклоните администраторске привилегије овом налогу пре него што покушате да га избришете.", - "invalid-image": "Invalid image", + "invalid-image": "Неважећа слика", "invalid-image-type": "Неважећи тип слике. Дозвољени типови су: %1", "invalid-image-extension": "Неважећи тип слике", "invalid-file-type": "Неважећи тип датотеке. Дозвољени типови су: %1", diff --git a/public/language/sr/flags.json b/public/language/sr/flags.json index a4db18cb5c..b07a5f45be 100644 --- a/public/language/sr/flags.json +++ b/public/language/sr/flags.json @@ -54,7 +54,7 @@ "modal-body": "Наведите разлог за означавање %1 %2 за проверу. Алтернативно, користите један од тастера за брзу пријаву ко је применљиво.", "modal-reason-spam": "Непожељно", "modal-reason-offensive": "Увредљиво", - "modal-reason-other": "Other (specify below)", + "modal-reason-other": "Остало (наведите испод)", "modal-reason-custom": "Разлог за пријаву овог садржаја...", "modal-submit": "Пошаљи извештај", "modal-submit-success": "Садржај је означен за модерацију.", diff --git a/public/language/sr/pages.json b/public/language/sr/pages.json index 6f062d90f5..dde186d3ae 100644 --- a/public/language/sr/pages.json +++ b/public/language/sr/pages.json @@ -43,8 +43,8 @@ "account/groups": "Групе корисника %1", "account/bookmarks": "Омиљене поруке корисника $1", "account/settings": "Корисничка подешавања", - "account/watched": "Теме које %1 надгледа", - "account/ignored": "Topics ignored by %1", + "account/watched": "Теме које надгледа %1", + "account/ignored": "Теме које игнорише %1", "account/upvoted": "Поруке које је позитивно гласао %1", "account/downvoted": "Поруке које је негативно гласао %1", "account/best": "Најбоље поруке од %1", diff --git a/public/language/sr/unread.json b/public/language/sr/unread.json index b6ade2e345..b2788e1191 100644 --- a/public/language/sr/unread.json +++ b/public/language/sr/unread.json @@ -10,6 +10,6 @@ "all-topics": "Све теме", "new-topics": "Нове теме", "watched-topics": "Надгледане теме", - "unreplied-topics": "Unreplied Topics", - "multiple-categories-selected": "Multiple Selected" + "unreplied-topics": "Неодговорене теме", + "multiple-categories-selected": "Вишеструко изабране" } \ No newline at end of file diff --git a/public/language/sr/user.json b/public/language/sr/user.json index 318106790e..0e7b5ad6ab 100644 --- a/public/language/sr/user.json +++ b/public/language/sr/user.json @@ -25,7 +25,7 @@ "reputation": "Репутација", "bookmarks": " Обележивачи", "watched": "Надгледано", - "ignored": "Ignored", + "ignored": "Игнорисано", "followers": "Пратиоци", "following": "Праћења", "aboutme": "О мени", @@ -87,7 +87,7 @@ "has_no_posts": "Овај корисник још ништа није објавио. ", "has_no_topics": "Овај корисник још није покренуо ниједну тему.", "has_no_watched_topics": "Овај корисник још не надгледа ниједну тему.", - "has_no_ignored_topics": "This user hasn't ignored any topics yet.", + "has_no_ignored_topics": "Овај корисник још није игнорисао ниједну тему.", "has_no_upvoted_posts": "Овај корисник још увек није позитивно гласао за неку поруку.", "has_no_downvoted_posts": "Овај корисник још увек није негативно гласао за неку поруку.", "has_no_voted_posts": "Овај корисник нема објаве за које се гласало.", @@ -96,7 +96,7 @@ "paginate_description": "Нумериши теме и странице уместо бесконачног скроловања", "topics_per_page": "Тема по страници", "posts_per_page": "Порука по страници", - "max_items_per_page": "Maximum %1", + "max_items_per_page": "Највише %1", "notification_sounds": "Репродукуј звук приликом примања обавештења", "notifications_and_sounds": "Обавештења и звуци", "incoming-message-sound": "Звук долазне поруке", From 8edbb4f8f65b3926989f61efe05eac5d99dd531c Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 3 Nov 2017 11:18:35 -0400 Subject: [PATCH 33/44] update Dockerfile as per #6010 and #6008 --- Dockerfile | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index 7229e6be25..adce1f33ad 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,15 +1,20 @@ -# The base image is the latest 4.x node (LTS) on jessie (debian) -# -onbuild will install the node dependencies found in the project package.json -# and copy its content in /usr/src/app, its WORKDIR -FROM node:4-onbuild +# The base image is the latest 8.x node (LTS) +FROM node:8.9.0 + +RUN mkdir -p /usr/src/app +WORKDIR /usr/src/app + +ARG NODE_ENV +ENV NODE_ENV $NODE_ENV +COPY package.default.json /usr/src/app/package.json +RUN npm install && npm cache clean --force +COPY . /usr/src/app ENV NODE_ENV=production \ daemon=false \ silent=false -# nodebb setup will ask you for connection information to a redis (default), mongodb then run the forum -# nodebb upgrade is not included and might be desired -CMD node app --setup && npm start +CMD ./nodebb start # the default port for NodeBB is exposed outside the container -EXPOSE 4567 +EXPOSE 4567 \ No newline at end of file From 766f94745f122254c3e2e612b851b8ac3dcff056 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 3 Nov 2017 11:29:06 -0400 Subject: [PATCH 34/44] updated bootstrap and bootswatch css on installer template, closes #6033 --- src/views/install/index.tpl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/views/install/index.tpl b/src/views/install/index.tpl index b7971f23fd..5183debbb4 100644 --- a/src/views/install/index.tpl +++ b/src/views/install/index.tpl @@ -6,7 +6,7 @@ NodeBB Web Installer - + @@ -133,7 +133,7 @@
- + \ No newline at end of file From 4551ee47686d8c3d4e1ad6a59ad058a17fc9dd82 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 Nov 2017 13:25:39 -0400 Subject: [PATCH 35/44] some more tests --- src/controllers/index.js | 125 ++++++++++++++++++++------------------- test/controllers.js | 33 ++++++++++- 2 files changed, 96 insertions(+), 62 deletions(-) diff --git a/src/controllers/index.js b/src/controllers/index.js index 627107b920..059c11d5cb 100644 --- a/src/controllers/index.js +++ b/src/controllers/index.js @@ -38,72 +38,75 @@ Controllers.errors = require('./errors'); Controllers.home = function (req, res, next) { var route = meta.config.homePageRoute || (meta.config.homePageCustom || '').replace(/^\/+/, '') || 'categories'; - user.getSettings(req.uid, function (err, settings) { - if (err) { - return next(err); - } - if (parseInt(meta.config.allowUserHomePage, 10) === 1 && settings.homePageRoute !== 'undefined' && settings.homePageRoute !== 'none') { - route = settings.homePageRoute || route; - } - - var hook = 'action:homepage.get:' + route; - - if (plugins.hasListeners(hook)) { - return plugins.fireHook(hook, { - req: req, - res: res, - next: next, - }); - } - - if (route === 'categories' || route === '/') { - Controllers.categories.list(req, res, next); - } else if (route === 'unread') { - Controllers.unread.get(req, res, next); - } else if (route === 'recent') { - Controllers.recent.get(req, res, next); - } else if (route === 'popular') { - Controllers.popular.get(req, res, next); - } else { - var match = /^category\/(\d+)\/(.*)$/.exec(route); - - if (match) { - req.params.topic_index = '1'; - req.params.category_id = match[1]; - req.params.slug = match[2]; - Controllers.category.get(req, res, next); - } else { - res.redirect(route); + async.waterfall([ + function (next) { + user.getSettings(req.uid, next); + }, + function (settings, next) { + if (parseInt(meta.config.allowUserHomePage, 10) === 1 && settings.homePageRoute !== 'undefined' && settings.homePageRoute !== 'none') { + route = settings.homePageRoute || route; } - } - }); + + var hook = 'action:homepage.get:' + route; + + if (plugins.hasListeners(hook)) { + return plugins.fireHook(hook, { + req: req, + res: res, + next: next, + }); + } + + if (route === 'categories' || route === '/') { + Controllers.categories.list(req, res, next); + } else if (route === 'unread') { + Controllers.unread.get(req, res, next); + } else if (route === 'recent') { + Controllers.recent.get(req, res, next); + } else if (route === 'popular') { + Controllers.popular.get(req, res, next); + } else { + var match = /^category\/(\d+)\/(.*)$/.exec(route); + + if (match) { + req.params.topic_index = '1'; + req.params.category_id = match[1]; + req.params.slug = match[2]; + Controllers.category.get(req, res, next); + } else { + helpers.redirect(res, route); + } + } + }, + ], next); }; Controllers.reset = function (req, res, next) { if (req.params.code) { - user.reset.validate(req.params.code, function (err, valid) { - if (err) { - return next(err); - } - res.render('reset_code', { - valid: valid, - displayExpiryNotice: req.session.passwordExpired, - code: req.params.code, - minimumPasswordLength: parseInt(meta.config.minimumPasswordLength, 10), - breadcrumbs: helpers.buildBreadcrumbs([ - { - text: '[[reset_password:reset_password]]', - url: '/reset', - }, - { - text: '[[reset_password:update_password]]', - }, - ]), - title: '[[pages:reset]]', - }); - - delete req.session.passwordExpired; - }); + async.waterfall([ + function (next) { + user.reset.validate(req.params.code, next); + }, + function (valid) { + res.render('reset_code', { + valid: valid, + displayExpiryNotice: req.session.passwordExpired, + code: req.params.code, + minimumPasswordLength: parseInt(meta.config.minimumPasswordLength, 10), + breadcrumbs: helpers.buildBreadcrumbs([ + { + text: '[[reset_password:reset_password]]', + url: '/reset', + }, + { + text: '[[reset_password:update_password]]', + }, + ]), + title: '[[pages:reset]]', + }); + delete req.session.passwordExpired; + }, + ], next); } else { res.render('reset', { code: null, diff --git a/test/controllers.js b/test/controllers.js index a088543672..7cd359653d 100644 --- a/test/controllers.js +++ b/test/controllers.js @@ -14,6 +14,7 @@ var groups = require('../src/groups'); var meta = require('../src/meta'); var translator = require('../src/translator'); var privileges = require('../src/privileges'); +var plugins = require('../src/plugins'); var helpers = require('./helpers'); describe('Controllers', function () { @@ -107,6 +108,37 @@ describe('Controllers', function () { }); }); + it('should redirect to custom homepage', function (done) { + meta.config.homePageRoute = 'groups'; + request(nconf.get('url'), function (err, res, body) { + assert.ifError(err); + assert.equal(res.statusCode, 200); + assert(body); + done(); + }); + }); + + it('should render custom homepage with hook', function (done) { + function hookMethod(hookData) { + assert(hookData.req); + assert(hookData.res); + assert(hookData.next); + hookData.res.json('works'); + } + plugins.registerHook('myTestPlugin', { + hook: 'action:homepage.get:custom', + method: hookMethod, + }); + meta.config.homePageRoute = 'custom'; + request(nconf.get('url'), function (err, res, body) { + assert.ifError(err); + assert.equal(res.statusCode, 200); + assert.equal(body, '"works"'); + plugins.unregisterHook('myTestPlugin', 'action:homepage.get:custom', hookMethod); + done(); + }); + }); + it('should load /reset without code', function (done) { request(nconf.get('url') + '/reset', function (err, res, body) { assert.ifError(err); @@ -144,7 +176,6 @@ describe('Controllers', function () { }); it('should load /register/complete', function (done) { - var plugins = require('../src/plugins'); function hookMethod(data, next) { data.interstitials.push({ template: 'topic.tpl', data: {} }); next(null, data); From 2a97772aaee2312968c1ed9218354da4bc51fe3e Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 3 Nov 2017 14:05:00 -0400 Subject: [PATCH 36/44] up mentions --- package.default.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.default.json b/package.default.json index dd315115ce..c7ee5cc1db 100644 --- a/package.default.json +++ b/package.default.json @@ -62,7 +62,7 @@ "nodebb-plugin-emoji-extended": "1.1.1", "nodebb-plugin-emoji-one": "1.2.1", "nodebb-plugin-markdown": "8.2.0", - "nodebb-plugin-mentions": "2.1.7", + "nodebb-plugin-mentions": "2.2.0", "nodebb-plugin-soundpack-default": "1.0.0", "nodebb-plugin-spam-be-gone": "0.5.1", "nodebb-rewards-essentials": "0.0.9", From 760c061b1d9222ac1a645d2ab903479e3f650bfe 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 Nov 2017 14:23:34 -0400 Subject: [PATCH 37/44] closes #5993 --- src/controllers/index.js | 3 ++- test/controllers.js | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/controllers/index.js b/src/controllers/index.js index 059c11d5cb..847bbcedc6 100644 --- a/src/controllers/index.js +++ b/src/controllers/index.js @@ -3,6 +3,7 @@ var async = require('async'); var nconf = require('nconf'); var validator = require('validator'); +var request = require('request'); var meta = require('../meta'); var user = require('../user'); @@ -74,7 +75,7 @@ Controllers.home = function (req, res, next) { req.params.slug = match[2]; Controllers.category.get(req, res, next); } else { - helpers.redirect(res, route); + request.get(nconf.get('url') + '/' + route).pipe(res); } } }, diff --git a/test/controllers.js b/test/controllers.js index 7cd359653d..050c15aea4 100644 --- a/test/controllers.js +++ b/test/controllers.js @@ -118,6 +118,16 @@ describe('Controllers', function () { }); }); + it('should 404 if custom homepage does not exist', function (done) { + meta.config.homePageRoute = 'thisroutedoesnotexist'; + request(nconf.get('url'), function (err, res, body) { + assert.ifError(err); + assert.equal(res.statusCode, 404); + assert(body); + done(); + }); + }); + it('should render custom homepage with hook', function (done) { function hookMethod(hookData) { assert(hookData.req); From 80ecd4ba6db5a68709951c5c337811fe9308f479 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 Nov 2017 16:32:33 -0400 Subject: [PATCH 38/44] closes #6036 --- public/src/client/chats.js | 7 ++++--- public/src/modules/chat.js | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/public/src/client/chats.js b/public/src/client/chats.js index 932be20281..600331dc6f 100644 --- a/public/src/client/chats.js +++ b/public/src/client/chats.js @@ -75,7 +75,7 @@ define('forum/chats', [ Chats.addRenameHandler(ajaxify.data.roomId, $('[component="chat/room/name"]')); Chats.addScrollHandler(ajaxify.data.roomId, ajaxify.data.uid, $('.chat-content')); - Chats.addCharactersLeftHandler(components.get('chat/input')); + Chats.addCharactersLeftHandler($('[component="chat/main-wrapper"]')); }; Chats.addScrollHandler = function (roomId, uid, el) { @@ -116,9 +116,10 @@ define('forum/chats', [ }); }; - Chats.addCharactersLeftHandler = function (element) { + Chats.addCharactersLeftHandler = function (parent) { + var element = parent.find('[component="chat/input"]'); element.on('keyup', function () { - $('[component="chat/message/length"]').text(element.val().length); + parent.find('[component="chat/message/length"]').text(element.val().length); }); }; diff --git a/public/src/modules/chat.js b/public/src/modules/chat.js index 96b94dbf8b..9a2ca3e7c4 100644 --- a/public/src/modules/chat.js +++ b/public/src/modules/chat.js @@ -267,7 +267,7 @@ define('chat', [ Chats.addScrollHandler(chatModal.attr('data-roomid'), data.uid, chatModal.find('.chat-content')); - Chats.addCharactersLeftHandler(chatModal.find('[component="chat/input"]')); + Chats.addCharactersLeftHandler(chatModal); taskbar.push('chat', chatModal.attr('UUID'), { title: data.roomName || (data.users.length ? data.users[0].username : ''), From 9728b80c387281666ff046ac90f500c70bc6cb7d Mon Sep 17 00:00:00 2001 From: "Misty (Bot)" Date: Sat, 4 Nov 2017 09:24:51 +0000 Subject: [PATCH 39/44] Latest translations and fallbacks --- public/language/tr/unread.json | 4 ++-- public/language/tr/user.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/public/language/tr/unread.json b/public/language/tr/unread.json index e333d957cf..d45c31e8f9 100644 --- a/public/language/tr/unread.json +++ b/public/language/tr/unread.json @@ -10,6 +10,6 @@ "all-topics": "Tüm Başlıklar", "new-topics": "Yeni Başlıklar", "watched-topics": "İzlenen Başlıklar", - "unreplied-topics": "Unreplied Topics", - "multiple-categories-selected": "Multiple Selected" + "unreplied-topics": "Okunmamış Başlıklar", + "multiple-categories-selected": "Çoklu Seçildi" } \ No newline at end of file diff --git a/public/language/tr/user.json b/public/language/tr/user.json index d1456bfaca..809bb2ba47 100644 --- a/public/language/tr/user.json +++ b/public/language/tr/user.json @@ -25,7 +25,7 @@ "reputation": "Saygınlık", "bookmarks": "Yer İmleri", "watched": "İzlendi", - "ignored": "Ignored", + "ignored": "Susturuldu", "followers": "Takipçiler", "following": "Takip Ediyor", "aboutme": "Hakkımda", @@ -96,7 +96,7 @@ "paginate_description": "Sonsuz yükleme yerine konu ve iletileri sayfalara böl", "topics_per_page": "Sayfa başına Konular", "posts_per_page": "Sayfa başına İletiler", - "max_items_per_page": "Maximum %1", + "max_items_per_page": "Maksimum %1", "notification_sounds": "Uyarı alındığında ses çal", "notifications_and_sounds": "Bildirimler & Sesler", "incoming-message-sound": "Gelen mesaj sesi", From bbdc55cb3a8e3e5e412235ed5d65f6158397a574 Mon Sep 17 00:00:00 2001 From: Peter Jaszkowiak Date: Sat, 4 Nov 2017 08:51:44 -0600 Subject: [PATCH 40/44] Better fix for #5993 (#6034) * Better fix for #5993 Also a nice newline so the line doesn't get overwritten when running `./nodebb upgrade` * Optimizations for custom homepage Move it into a separate module --- nodebb | 2 +- src/controllers/home.js | 62 +++++++++++++++++++++++++++ src/controllers/index.js | 48 +-------------------- src/meta/configs.js | 6 +-- src/routes/index.js | 5 ++- test/controllers.js | 93 ++++++++++++++++++++++++---------------- 6 files changed, 125 insertions(+), 91 deletions(-) create mode 100644 src/controllers/home.js diff --git a/nodebb b/nodebb index c632c72df9..adedd30826 100755 --- a/nodebb +++ b/nodebb @@ -466,7 +466,7 @@ var commands = { next(); }, function (next) { - process.stdout.write('1. '.bold + 'Bringing base dependencies up to date... '.yellow); + process.stdout.write('1. '.bold + 'Bringing base dependencies up to date... \n'.yellow); packageInstall.npmInstallProduction(); next(); }, diff --git a/src/controllers/home.js b/src/controllers/home.js new file mode 100644 index 0000000000..d5a8c30050 --- /dev/null +++ b/src/controllers/home.js @@ -0,0 +1,62 @@ +'use strict'; + +var plugins = require('../plugins'); +var meta = require('../meta'); +var user = require('../user'); +var pubsub = require('../pubsub'); + +var adminHomePageRoute; +var getRoute; + +function configUpdated() { + adminHomePageRoute = (meta.config.homePageRoute || meta.config.homePageCustom || '').replace(/^\/+/, '') || 'categories'; + getRoute = parseInt(meta.config.allowUserHomePage, 10) ? getRouteAllowUserHomePage : getRouteDisableUserHomePage; +} + +function getRouteDisableUserHomePage(uid, next) { + next(null, adminHomePageRoute); +} + +function getRouteAllowUserHomePage(uid, next) { + user.getSettings(uid, function (err, settings) { + if (err) { + return next(err); + } + + var route = adminHomePageRoute; + + if (settings.homePageRoute !== 'undefined' && settings.homePageRoute !== 'none') { + route = settings.homePageRoute || route; + } + + next(null, route); + }); +} + +pubsub.on('config:update', configUpdated); +configUpdated(); + +module.exports = function (req, res, next) { + if (req.path !== '/' && req.path !== '/api/') { + return next(); + } + + getRoute(req.uid, function (err, route) { + if (err) { + return next(err); + } + + var hook = 'action:homepage.get:' + route; + + if (plugins.hasListeners(hook)) { + return plugins.fireHook(hook, { + req: req, + res: res, + next: next, + }); + } + + req.url = req.path + route; + next(); + }); +}; diff --git a/src/controllers/index.js b/src/controllers/index.js index 847bbcedc6..7144f1a740 100644 --- a/src/controllers/index.js +++ b/src/controllers/index.js @@ -3,7 +3,6 @@ var async = require('async'); var nconf = require('nconf'); var validator = require('validator'); -var request = require('request'); var meta = require('../meta'); var user = require('../user'); @@ -13,6 +12,7 @@ var helpers = require('./helpers'); var Controllers = module.exports; +Controllers.home = require('./home'); Controllers.topics = require('./topics'); Controllers.posts = require('./posts'); Controllers.categories = require('./categories'); @@ -36,52 +36,6 @@ Controllers.osd = require('./osd'); Controllers['404'] = require('./404'); Controllers.errors = require('./errors'); -Controllers.home = function (req, res, next) { - var route = meta.config.homePageRoute || (meta.config.homePageCustom || '').replace(/^\/+/, '') || 'categories'; - - async.waterfall([ - function (next) { - user.getSettings(req.uid, next); - }, - function (settings, next) { - if (parseInt(meta.config.allowUserHomePage, 10) === 1 && settings.homePageRoute !== 'undefined' && settings.homePageRoute !== 'none') { - route = settings.homePageRoute || route; - } - - var hook = 'action:homepage.get:' + route; - - if (plugins.hasListeners(hook)) { - return plugins.fireHook(hook, { - req: req, - res: res, - next: next, - }); - } - - if (route === 'categories' || route === '/') { - Controllers.categories.list(req, res, next); - } else if (route === 'unread') { - Controllers.unread.get(req, res, next); - } else if (route === 'recent') { - Controllers.recent.get(req, res, next); - } else if (route === 'popular') { - Controllers.popular.get(req, res, next); - } else { - var match = /^category\/(\d+)\/(.*)$/.exec(route); - - if (match) { - req.params.topic_index = '1'; - req.params.category_id = match[1]; - req.params.slug = match[2]; - Controllers.category.get(req, res, next); - } else { - request.get(nconf.get('url') + '/' + route).pipe(res); - } - } - }, - ], next); -}; - Controllers.reset = function (req, res, next) { if (req.params.code) { async.waterfall([ diff --git a/src/meta/configs.js b/src/meta/configs.js index cd3a17c985..12553d5a50 100644 --- a/src/meta/configs.js +++ b/src/meta/configs.js @@ -121,11 +121,7 @@ function updateConfig(config) { } function updateLocalConfig(config) { - for (var field in config) { - if (config.hasOwnProperty(field)) { - Meta.config[field] = config[field]; - } - } + Object.assign(Meta.config, config); } pubsub.on('config:update', function onConfigReceived(config) { diff --git a/src/routes/index.js b/src/routes/index.js index 06121c60d6..e2afb836ab 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -22,8 +22,6 @@ var helpers = require('./helpers'); var setupPageRoute = helpers.setupPageRoute; function mainRoutes(app, middleware, controllers) { - setupPageRoute(app, '/', middleware, [], controllers.home); - var loginRegisterMiddleware = [middleware.redirectToAccountIfLoggedIn]; setupPageRoute(app, '/login', middleware, loginRegisterMiddleware, controllers.login); @@ -123,6 +121,9 @@ module.exports = function (app, middleware, hotswapIds, callback) { app.use(middleware.stripLeadingSlashes); + // handle custom homepage routes + app.use(relativePath, controllers.home); + adminRoutes(router, middleware, controllers); metaRoutes(router, middleware, controllers); apiRoutes(router, middleware, controllers); diff --git a/test/controllers.js b/test/controllers.js index 050c15aea4..fb3fda8830 100644 --- a/test/controllers.js +++ b/test/controllers.js @@ -69,62 +69,80 @@ describe('Controllers', function () { }); it('should load unread as home route', function (done) { - meta.config.homePageRoute = 'unread'; - request(nconf.get('url'), function (err, res, body) { + meta.configs.set('homePageRoute', 'unread', function (err) { assert.ifError(err); - assert.equal(res.statusCode, 200); - assert(body); - done(); + + request(nconf.get('url'), function (err, res, body) { + assert.ifError(err); + assert.equal(res.statusCode, 200); + assert(body); + done(); + }); }); }); it('should load recent as home route', function (done) { - meta.config.homePageRoute = 'recent'; - request(nconf.get('url'), function (err, res, body) { + meta.configs.set('homePageRoute', 'recent', function (err) { assert.ifError(err); - assert.equal(res.statusCode, 200); - assert(body); - done(); + + request(nconf.get('url'), function (err, res, body) { + assert.ifError(err); + assert.equal(res.statusCode, 200); + assert(body); + done(); + }); }); }); it('should load popular as home route', function (done) { - meta.config.homePageRoute = 'popular'; - request(nconf.get('url'), function (err, res, body) { + meta.configs.set('homePageRoute', 'popular', function (err) { assert.ifError(err); - assert.equal(res.statusCode, 200); - assert(body); - done(); + + request(nconf.get('url'), function (err, res, body) { + assert.ifError(err); + assert.equal(res.statusCode, 200); + assert(body); + done(); + }); }); }); it('should load category as home route', function (done) { - meta.config.homePageRoute = 'category/1/test-category'; - request(nconf.get('url'), function (err, res, body) { + meta.configs.set('homePageRoute', 'category/1/test-category', function (err) { assert.ifError(err); - assert.equal(res.statusCode, 200); - assert(body); - done(); + + request(nconf.get('url'), function (err, res, body) { + assert.ifError(err); + assert.equal(res.statusCode, 200); + assert(body); + done(); + }); }); }); it('should redirect to custom homepage', function (done) { - meta.config.homePageRoute = 'groups'; - request(nconf.get('url'), function (err, res, body) { + meta.configs.set('homePageRoute', 'groups', function (err) { assert.ifError(err); - assert.equal(res.statusCode, 200); - assert(body); - done(); + + request(nconf.get('url'), function (err, res, body) { + assert.ifError(err); + assert.equal(res.statusCode, 200); + assert(body); + done(); + }); }); }); it('should 404 if custom homepage does not exist', function (done) { - meta.config.homePageRoute = 'thisroutedoesnotexist'; - request(nconf.get('url'), function (err, res, body) { + meta.configs.set('homePageRoute', 'this-route-does-not-exist', function (err) { assert.ifError(err); - assert.equal(res.statusCode, 404); - assert(body); - done(); + + request(nconf.get('url'), function (err, res, body) { + assert.ifError(err); + assert.equal(res.statusCode, 404); + assert(body); + done(); + }); }); }); @@ -139,13 +157,16 @@ describe('Controllers', function () { hook: 'action:homepage.get:custom', method: hookMethod, }); - meta.config.homePageRoute = 'custom'; - request(nconf.get('url'), function (err, res, body) { + meta.configs.set('homePageRoute', 'custom', function (err) { assert.ifError(err); - assert.equal(res.statusCode, 200); - assert.equal(body, '"works"'); - plugins.unregisterHook('myTestPlugin', 'action:homepage.get:custom', hookMethod); - done(); + + request(nconf.get('url'), function (err, res, body) { + assert.ifError(err); + assert.equal(res.statusCode, 200); + assert.equal(body, '"works"'); + plugins.unregisterHook('myTestPlugin', 'action:homepage.get:custom', hookMethod); + done(); + }); }); }); From 6958ec1f1f4742ec8ec9d12190965ca9fa53b2d1 Mon Sep 17 00:00:00 2001 From: "Misty (Bot)" Date: Sun, 5 Nov 2017 09:25:31 +0000 Subject: [PATCH 41/44] Latest translations and fallbacks --- .../language/fa-IR/admin/extend/plugins.json | 54 +++++++++---------- .../fa-IR/admin/general/languages.json | 6 +-- public/language/fa-IR/admin/menu.json | 34 ++++++------ .../language/fa-IR/admin/settings/chat.json | 6 +-- public/language/fa-IR/error.json | 6 +-- public/language/fa-IR/groups.json | 4 +- public/language/fa-IR/notifications.json | 8 +-- public/language/fa-IR/user.json | 12 ++--- public/language/nl/error.json | 4 +- public/language/nl/pages.json | 4 +- public/language/nl/unread.json | 4 +- public/language/nl/user.json | 6 +-- .../zh-CN/admin/manage/post-queue.json | 2 +- public/language/zh-CN/admin/menu.json | 2 +- .../zh-CN/admin/settings/pagination.json | 4 +- public/language/zh-CN/error.json | 4 +- public/language/zh-CN/flags.json | 8 +-- public/language/zh-CN/pages.json | 2 +- public/language/zh-CN/unread.json | 4 +- public/language/zh-CN/user.json | 6 +-- 20 files changed, 90 insertions(+), 90 deletions(-) diff --git a/public/language/fa-IR/admin/extend/plugins.json b/public/language/fa-IR/admin/extend/plugins.json index 7515f72590..25814b0a71 100644 --- a/public/language/fa-IR/admin/extend/plugins.json +++ b/public/language/fa-IR/admin/extend/plugins.json @@ -1,14 +1,14 @@ { - "installed": "Installed", - "active": "Active", - "inactive": "Inactive", + "installed": "نصب شده", + "active": "فعال", + "inactive": "غیرفعال", "out-of-date": "Out of Date", - "none-found": "No plugins found.", + "none-found": "هیچ پلاگینی یافت نشد.", "none-active": "No Active Plugins", - "find-plugins": "Find Plugins", + "find-plugins": "پیدا کردن پلاگین ها", - "plugin-search": "Plugin Search", - "plugin-search-placeholder": "Search for plugin...", + "plugin-search": "جستجوی پلاگین", + "plugin-search-placeholder": "جستجو برای پلاگین", "reorder-plugins": "Re-order Plugins", "order-active": "Order Active Plugins", "dev-interested": "Interested in writing plugins for NodeBB?", @@ -17,35 +17,35 @@ "order.description": "Certain plugins work ideally when they are initialised before/after other plugins.", "order.explanation": "Plugins load in the order specified here, from top to bottom", - "plugin-item.themes": "Themes", - "plugin-item.deactivate": "Deactivate", - "plugin-item.activate": "Activate", - "plugin-item.install": "Install", - "plugin-item.uninstall": "Uninstall", - "plugin-item.settings": "Settings", - "plugin-item.installed": "Installed", - "plugin-item.latest": "Latest", - "plugin-item.upgrade": "Upgrade", - "plugin-item.more-info": "For more information:", - "plugin-item.unknown": "Unknown", + "plugin-item.themes": "پوسته", + "plugin-item.deactivate": "غیر فعال کردن", + "plugin-item.activate": "فعال کردن", + "plugin-item.install": "نصب کردن", + "plugin-item.uninstall": "حذف کردن", + "plugin-item.settings": "تنظیمات", + "plugin-item.installed": "نصب شده", + "plugin-item.latest": "آخرین", + "plugin-item.upgrade": "ارتقاء", + "plugin-item.more-info": "برای اطلاعات بیشتر:", + "plugin-item.unknown": "ناشناخته", "plugin-item.unknown-explanation": "The state of this plugin could not be determined, possibly due to a misconfiguration error.", - "alert.enabled": "Plugin Enabled", - "alert.disabled": "Plugin Disabled", - "alert.upgraded": "Plugin Upgraded", - "alert.installed": "Plugin Installed", - "alert.uninstalled": "Plugin Uninstalled", + "alert.enabled": "پلاگین فعال شد", + "alert.disabled": "پلاگین غیرفعال شد", + "alert.upgraded": "پلاگین ارتقاء یافت", + "alert.installed": "پلاگین نصب شد", + "alert.uninstalled": "پلاگین حذف شد", "alert.activate-success": "Please restart your NodeBB to fully activate this plugin", - "alert.deactivate-success": "Plugin successfully deactivated", + "alert.deactivate-success": "پلاگین با موفقیت غیر فعال شد", "alert.upgrade-success": "Please reload your NodeBB to fully upgrade this plugin", - "alert.install-success": "Plugin successfully installed, please activate the plugin.", - "alert.uninstall-success": "The plugin has been successfully deactivated and uninstalled.", + "alert.install-success": "پلاگین با موفقیت نصب شد، لطفا پلاگین را فعال کنید", + "alert.uninstall-success": "پلاگین با موفقیت غیرفعال و حذف شده است", "alert.suggest-error": "

NodeBB could not reach the package manager, proceed with installation of latest version?

Server returned (%1): %2
", "alert.package-manager-unreachable": "

NodeBB could not reach the package manager, an upgrade is not suggested at this time.

", "alert.incompatible": "

Your version of NodeBB (v%1) is only cleared to upgrade to v%2 of this plugin. Please update your NodeBB if you wish to install a newer version of this plugin.

", "alert.possibly-incompatible": "

No Compatibility Information Found

This plugin did not specify a specific version for installation given your NodeBB version. Full compatibility cannot be guaranteed, and may cause your NodeBB to no longer start properly.

In the event that NodeBB cannot boot properly:

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

Continue installation of latest version of this plugin?

", - "license.title": "Plugin License Information", + "license.title": "اطلاعات مجوز پلاگین ", "license.intro": "The plugin %1 is licensed under the %2. Please read and understand the license terms prior to activating this plugin.", "license.cta": "Do you wish to continue with activating this plugin?" } diff --git a/public/language/fa-IR/admin/general/languages.json b/public/language/fa-IR/admin/general/languages.json index bdd57849b3..bd1b49274d 100644 --- a/public/language/fa-IR/admin/general/languages.json +++ b/public/language/fa-IR/admin/general/languages.json @@ -1,6 +1,6 @@ { - "language-settings": "Language Settings", + "language-settings": "تنظیمات زبان", "description": "The default language determines the language settings for all users who are visiting your forum.
Individual users can override the default language on their account settings page.", - "default-language": "Default Language", - "auto-detect": "Auto Detect Language Setting for Guests" + "default-language": "زبان پیش فرض", + "auto-detect": "شناسایی خودکار تنظیمات زبان برای مهمانان" } \ No newline at end of file diff --git a/public/language/fa-IR/admin/menu.json b/public/language/fa-IR/admin/menu.json index d42af99bce..204d8e24a9 100644 --- a/public/language/fa-IR/admin/menu.json +++ b/public/language/fa-IR/admin/menu.json @@ -1,10 +1,10 @@ { "section-general": "General", - "general/dashboard": "Dashboard", + "general/dashboard": "داشبورد", "general/homepage": "Home Page", "general/navigation": "Navigation", - "general/languages": "Languages", - "general/sounds": "Sounds", + "general/languages": "زبان ها", + "general/sounds": "صداها", "general/social": "Social", "section-manage": "Manage", @@ -13,12 +13,12 @@ "manage/users": "Users", "manage/registration": "Registration Queue", "manage/post-queue": "Post Queue", - "manage/groups": "Groups", - "manage/ip-blacklist": "IP Blacklist", + "manage/groups": "گروه ها", + "manage/ip-blacklist": "لیست سیاه IP", - "section-settings": "Settings", + "section-settings": "تنظیمات", "settings/general": "General", - "settings/reputation": "Reputation", + "settings/reputation": "اعتبار", "settings/email": "Email", "settings/user": "User", "settings/group": "Group", @@ -36,34 +36,34 @@ "settings.page-title": "%1 Settings", - "section-appearance": "Appearance", - "appearance/themes": "Themes", + "section-appearance": "ظاهر", + "appearance/themes": "پوسته ها", "appearance/skins": "Skins", "appearance/customise": "Custom HTML & CSS", "section-extend": "Extend", - "extend/plugins": "Plugins", - "extend/widgets": "Widgets", - "extend/rewards": "Rewards", + "extend/plugins": "پلاگین ها", + "extend/widgets": "ویجت ها", + "extend/rewards": "پاداش ها", "section-social-auth": "Social Authentication", - "section-plugins": "Plugins", + "section-plugins": "پلاگین ها", "extend/plugins.install": "Install Plugins", "section-advanced": "Advanced", "advanced/database": "Database", "advanced/events": "Events", "advanced/logs": "Logs", - "advanced/errors": "Errors", + "advanced/errors": "خطاها", "advanced/cache": "Cache", "development/logger": "Logger", "development/info": "Info", "reload-forum": "Reload Forum", - "restart-forum": "Restart Forum", - "logout": "Log out", - "view-forum": "View Forum", + "restart-forum": "راه اندازی مجدد انجمن", + "logout": "خروج", + "view-forum": "مشاهده انجمن", "search.placeholder": "Search for settings", "search.no-results": "No results...", diff --git a/public/language/fa-IR/admin/settings/chat.json b/public/language/fa-IR/admin/settings/chat.json index 0b22127341..6c827e42f5 100644 --- a/public/language/fa-IR/admin/settings/chat.json +++ b/public/language/fa-IR/admin/settings/chat.json @@ -1,7 +1,7 @@ { - "chat-settings": "Chat Settings", - "disable": "Disable chat", - "disable-editing": "Disable chat message editing/deletion", + "chat-settings": "تنظیمات گفتگو ها", + "disable": "غیرفعال کردن چت", + "disable-editing": "غیرفعال کردن ویرایش کردن / پاک کردن پیام های چت", "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", diff --git a/public/language/fa-IR/error.json b/public/language/fa-IR/error.json index 567037c821..f95d1a301b 100644 --- a/public/language/fa-IR/error.json +++ b/public/language/fa-IR/error.json @@ -1,6 +1,6 @@ { "invalid-data": "داده(های) نامعتبر", - "invalid-json": "Invalid JSON", + "invalid-json": "JSON نامعتبر", "not-logged-in": "وارد حساب کاربری نشده‌اید.", "account-locked": "حساب کاربری شما موقتاً مسدود شده است.", "search-requires-login": "استفاده از جستجو نیازمند ورود با نام‌کاربری و رمز‌عبور است. لطفا ابتدا وارد شوید.", @@ -11,7 +11,7 @@ "invalid-uid": "شناسه کاربر نامعتبر است.", "invalid-username": "نام کاربری نامعتبر است.", "invalid-email": "ایمیل نامعتبر است.", - "invalid-title": "Invalid title", + "invalid-title": "عنوان نامعتبر", "invalid-user-data": "داده‌های کاربر نامعتبر است.", "invalid-password": "کلمه عبور نامعتبر است.", "invalid-login-credentials": "Invalid login credentials", @@ -81,7 +81,7 @@ "cant-ban-other-admins": "شما نمی‌توانید دیگر مدیران را محروم کنید!", "cant-remove-last-admin": "شما تنها مدیر می باشید . شما باید قبل از عزل خود از مدیریت یک کاربر دیگر را مدیر کنید", "cant-delete-admin": "قبل از حذف این کاربر دسترسی های مدیریت را از وی بگیرید.", - "invalid-image": "Invalid image", + "invalid-image": "عکس نامعتبر", "invalid-image-type": "نوع تصویر نامعتبر است. نوعهای قابل قبول اینها هستند: %1", "invalid-image-extension": "پسوند عکس نامعتبر است", "invalid-file-type": "نوع پرونده نامعتبر است. نوعهای قابل قبول اینها هستند: %1", diff --git a/public/language/fa-IR/groups.json b/public/language/fa-IR/groups.json index c93032e9e5..49a126559c 100644 --- a/public/language/fa-IR/groups.json +++ b/public/language/fa-IR/groups.json @@ -27,7 +27,7 @@ "details.disableJoinRequests": "غیر فعال کردن درخواستهای عضویت", "details.grant": "اعطاء/خلع مالکیت", "details.kick": "بیرون انداختن", - "details.kick_confirm": "Are you sure you want to remove this member from the group?", + "details.kick_confirm": "آیا شما مطمئن هستید که می خواهید این عضو از گروه را حذف کنید؟", "details.owner_options": "مدیر گروه", "details.group_name": "نام گروه", "details.member_count": "تعداد اعضا", @@ -54,5 +54,5 @@ "upload-group-cover": "آپلود کاور گروه", "bulk-invite-instructions": "برای دعوت به این گروه فهرستی از نام‌کاربری که با کاما جدا کنید را وارد کنید", "bulk-invite": "میزان دعوت", - "remove_group_cover_confirm": "Are you sure you want to remove the cover picture?" + "remove_group_cover_confirm": "آیا شما مطمئن هستید که می خواهید عکس کاور را حذف کنید؟" } \ No newline at end of file diff --git a/public/language/fa-IR/notifications.json b/public/language/fa-IR/notifications.json index 7c710b86d6..d8575dbb9c 100644 --- a/public/language/fa-IR/notifications.json +++ b/public/language/fa-IR/notifications.json @@ -10,10 +10,10 @@ "return_to": "بازگشت به %1", "new_notification": "آگاه‌سازی‌ تازه", "you_have_unread_notifications": "شما آگاه‌سازی‌‌های نخوانده دارید.", - "all": "All", - "topics": "Topics", - "replies": "Replies", - "chat": "Chats", + "all": "همه", + "topics": "موضوع ها", + "replies": "پاسخ ها", + "chat": "گفتگو ها", "follows": "Follows", "upvote": "Upvotes", "new-flags": "New Flags", diff --git a/public/language/fa-IR/user.json b/public/language/fa-IR/user.json index d54f3ad029..d5ac7faaf5 100644 --- a/public/language/fa-IR/user.json +++ b/public/language/fa-IR/user.json @@ -25,7 +25,7 @@ "reputation": "اعتبار", "bookmarks": "نشانک‌ها", "watched": "پیگیری شده", - "ignored": "Ignored", + "ignored": "نادیده گرفته شده", "followers": "دنبال‌کننده‌ها", "following": "دنبال‌شونده‌ها", "aboutme": "درباره ی من", @@ -34,7 +34,7 @@ "chat": "چت", "chat_with": "ادامه چت با %1", "new_chat_with": "شروع چت جدید با %1", - "flag-profile": "Flag Profile", + "flag-profile": "گزارش نمایه", "follow": "دنبال کن", "unfollow": "دنبال نکن", "more": "بیشتر", @@ -61,12 +61,12 @@ "username_taken_workaround": "نام کاربری درخواستی شما در حال حاضر گرفته شده است، بنابراین ما آن را کمی تغییر داده‌ایم. شما هم‌اکنون با نام %1", "search.keep-typing": "输入更多以查看结果...", diff --git a/public/language/zh-CN/admin/settings/pagination.json b/public/language/zh-CN/admin/settings/pagination.json index c558a13a07..09574f358e 100644 --- a/public/language/zh-CN/admin/settings/pagination.json +++ b/public/language/zh-CN/admin/settings/pagination.json @@ -3,9 +3,9 @@ "enable": "在主题和帖子使用分页替代无限滚动浏览。", "topics": "话题分页", "posts-per-page": "每页帖子数", - "max-posts-per-page": "Maximum posts per page", + "max-posts-per-page": "每页最多帖子数", "categories": "版块分页", "topics-per-page": "每页主题数", - "max-topics-per-page": "Maximum topics per page", + "max-topics-per-page": "每页最多主题数", "initial-num-load": "最初加载未读,最新,热门的话题" } \ No newline at end of file diff --git a/public/language/zh-CN/error.json b/public/language/zh-CN/error.json index 09dbf22e9a..90827ce8f4 100644 --- a/public/language/zh-CN/error.json +++ b/public/language/zh-CN/error.json @@ -11,7 +11,7 @@ "invalid-uid": "无效用户 ID", "invalid-username": "无效用户名", "invalid-email": "无效的电子邮箱", - "invalid-title": "Invalid title", + "invalid-title": "无效的标题", "invalid-user-data": "无效用户数据", "invalid-password": "无效密码", "invalid-login-credentials": "无效登录凭证", @@ -81,7 +81,7 @@ "cant-ban-other-admins": "您不能封禁其他管理员!", "cant-remove-last-admin": "您是唯一的管理员。在删除您的管理员权限前,请添加另一个管理员。", "cant-delete-admin": "在删除之前请你先把管理员的权限从这个账号移除。", - "invalid-image": "Invalid image", + "invalid-image": "无效的图片", "invalid-image-type": "无效的图像类型。允许的类型有:%1", "invalid-image-extension": "无效的图像扩展", "invalid-file-type": "无效文件格式,允许的格式有:%1", diff --git a/public/language/zh-CN/flags.json b/public/language/zh-CN/flags.json index 591b9ec247..f36901a230 100644 --- a/public/language/zh-CN/flags.json +++ b/public/language/zh-CN/flags.json @@ -54,11 +54,11 @@ "modal-body": "请选择或者输入您举报 %1%2 的原因以便版主进行审核。", "modal-reason-spam": "垃圾信息", "modal-reason-offensive": "人身攻击", - "modal-reason-other": "Other (specify below)", + "modal-reason-other": "其他(请在下方指定)", "modal-reason-custom": "举报此内容的理由……", "modal-submit": "提交举报", "modal-submit-success": "已举报此内容。", - "modal-submit-confirm": "Confirm Submission", - "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": "确认提交", + "modal-submit-confirm-text": "你已经指定了一个自定义原因。 您希望通过快速报告提交吗?", + "modal-submit-confirm-text-help": "提交快速报告将覆盖任何已定义的自定义原因。" } \ No newline at end of file diff --git a/public/language/zh-CN/pages.json b/public/language/zh-CN/pages.json index 3264b8ae08..f6dffdf534 100644 --- a/public/language/zh-CN/pages.json +++ b/public/language/zh-CN/pages.json @@ -44,7 +44,7 @@ "account/bookmarks": "%1 收藏的帖子", "account/settings": "用户设置", "account/watched": "主题已被 %1 关注", - "account/ignored": "Topics ignored by %1", + "account/ignored": "主题已被 %1 忽略", "account/upvoted": "帖子被 %1 顶过", "account/downvoted": "帖子被 %1 踩过", "account/best": "%1 发布的最佳帖子", diff --git a/public/language/zh-CN/unread.json b/public/language/zh-CN/unread.json index 0eacca6dd3..54932aef1d 100644 --- a/public/language/zh-CN/unread.json +++ b/public/language/zh-CN/unread.json @@ -10,6 +10,6 @@ "all-topics": "全部主题", "new-topics": "新建主题", "watched-topics": "看过的主题", - "unreplied-topics": "Unreplied Topics", - "multiple-categories-selected": "Multiple Selected" + "unreplied-topics": "未回复主题", + "multiple-categories-selected": "多选" } \ No newline at end of file diff --git a/public/language/zh-CN/user.json b/public/language/zh-CN/user.json index 6b2464e5fb..c6aa9f9d89 100644 --- a/public/language/zh-CN/user.json +++ b/public/language/zh-CN/user.json @@ -25,7 +25,7 @@ "reputation": "声望", "bookmarks": "书签", "watched": "已关注", - "ignored": "Ignored", + "ignored": "忽略", "followers": "粉丝", "following": "关注", "aboutme": "关于我", @@ -87,7 +87,7 @@ "has_no_posts": "此用户从未发言。", "has_no_topics": "此用户还未发布任何主题。", "has_no_watched_topics": "此用户还未关注任何主题。", - "has_no_ignored_topics": "This user hasn't ignored any topics yet.", + "has_no_ignored_topics": "此用户尚未忽略任何主题。", "has_no_upvoted_posts": "此用户还未顶过任何帖子。", "has_no_downvoted_posts": "此用户还未踩过任何帖子。", "has_no_voted_posts": "这个用户还未评价任何帖子", @@ -96,7 +96,7 @@ "paginate_description": "使用分页式版块浏览", "topics_per_page": "每页主题数", "posts_per_page": "每页帖子数", - "max_items_per_page": "Maximum %1", + "max_items_per_page": "最大值 %1", "notification_sounds": "收到通知时播放提示音", "notifications_and_sounds": "通知 & 提示音", "incoming-message-sound": "消息到达提示音", From fae8ee83e84de43a94c4444682354a0ee612b5e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Sun, 5 Nov 2017 09:54:55 -0500 Subject: [PATCH 42/44] closes #6039 --- src/meta/errors.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/meta/errors.js b/src/meta/errors.js index 38e206e501..6eb0d9a309 100644 --- a/src/meta/errors.js +++ b/src/meta/errors.js @@ -38,6 +38,7 @@ Errors.log404 = function (route, callback) { if (!route) { return setImmediate(callback); } + route = route.slice(0, 512); route = route.replace(/\/$/, ''); // remove trailing slashes analytics.increment('errors:404'); counters[route] = counters[route] || 0; From 43370c1ced568f21879e5bf4c866bed3a5f83a42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Sun, 5 Nov 2017 10:11:18 -0500 Subject: [PATCH 43/44] up composer-default --- package.default.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.default.json b/package.default.json index c7ee5cc1db..d654a4aecf 100644 --- a/package.default.json +++ b/package.default.json @@ -57,7 +57,7 @@ "morgan": "^1.9.0", "mousetrap": "^1.6.1", "nconf": "^0.8.5", - "nodebb-plugin-composer-default": "6.0.4", + "nodebb-plugin-composer-default": "6.0.5", "nodebb-plugin-dbsearch": "2.0.8", "nodebb-plugin-emoji-extended": "1.1.1", "nodebb-plugin-emoji-one": "1.2.1", From 0316f51cdb95e324b8d19986855f49dd43f49ff2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Sun, 5 Nov 2017 10:16:02 -0500 Subject: [PATCH 44/44] show values if test fails --- test/flags.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/flags.js b/test/flags.js index 062c2d5c9a..bead3bed0c 100644 --- a/test/flags.js +++ b/test/flags.js @@ -442,7 +442,7 @@ describe('Flags', function () { it('should retrieve a list of notes, from newest to oldest', function (done) { Flags.getNotes(1, function (err, notes) { assert.ifError(err); - assert(notes[0].datetime > notes[1].datetime); + assert(notes[0].datetime > notes[1].datetime, notes[0].datetime + '-' + notes[1].datetime); assert.strictEqual('this is the second note', notes[0].content); done(); });