H*dVBeah9Rt+`O(td5TLo^35Q=lP5K
zzKW-sWy@Obdrv*R3OV^x(KGk8t>~NcSb=YgErrfmZ!OMTbexxSsAXYy##D?7-17|f
zv%hxbpNw5$w>Fz!z4B;B6j*0F9GzS99skYK!Y1eQ$`T9vi}j)S_xia{@z?Q%j*jqi>#MLQ>yr6Z
z^tVmB9QEFjMO*83vyjsCsrhwpe6!T7R}1dilA|HVSH?QeTHsM|#2NDamhpMk)_-$s
zx7ek`mivxx`Q&_Rxp!N>Us$L`g-=_L%)!MI|LdD^YAx%3;(d$$dG;1P_tyWtva^Ln>))emp6|W#iWyqk|DL&uQG36(=-$%4
zw~t%e-~XLD{=e;h|8f6Ytr@HLv-`aowcz{SJO9@{|M&Uxe+`K?d)g3aL!b?THU!!b
jXhWb4fi?u%5NJc74S_ZU+7M_%pbddG1lka2L*U;5LICc(
literal 0
HcmV?d00001
diff --git a/test/uploads.js b/test/uploads.js
index a4fe95c5df..6e20fcffcb 100644
--- a/test/uploads.js
+++ b/test/uploads.js
@@ -173,6 +173,23 @@ describe('Upload Controllers', function () {
});
});
+ it('should fail to upload invalid file type', function (done) {
+ helpers.uploadFile(nconf.get('url') + '/api/admin/category/uploadpicture', path.join(__dirname, '../test/files/503.html'), { params: JSON.stringify({ cid: cid }) }, jar, csrf_token, function (err, res, body) {
+ assert.ifError(err);
+ console.log(body);
+ assert.equal(body.error, '[[error:invalid-image-type, image/png, image/jpeg, image/pjpeg, image/jpg, image/gif, image/svg+xml]]');
+ done();
+ });
+ });
+
+ it('should fail to upload category image with invalid json params', function (done) {
+ helpers.uploadFile(nconf.get('url') + '/api/admin/category/uploadpicture', path.join(__dirname, '../test/files/test.png'), { params: 'invalid json' }, jar, csrf_token, function (err, res, body) {
+ assert.ifError(err);
+ assert.equal(body.error, 'Unexpected token i in JSON at position 0');
+ done();
+ });
+ });
+
it('should upload category image', function (done) {
helpers.uploadFile(nconf.get('url') + '/api/admin/category/uploadpicture', path.join(__dirname, '../test/files/test.png'), { params: JSON.stringify({ cid: cid }) }, jar, csrf_token, function (err, res, body) {
assert.ifError(err);
@@ -183,6 +200,26 @@ describe('Upload Controllers', function () {
});
});
+
+ it('should fail to upload invalid sound file', function (done) {
+ helpers.uploadFile(nconf.get('url') + '/api/admin/upload/sound', path.join(__dirname, '../test/files/test.png'), { }, jar, csrf_token, function (err, res, body) {
+ assert.ifError(err);
+ assert.equal(res.statusCode, 500);
+ assert.equal(body.error, '[[error:invalid-data]]');
+ done();
+ });
+ });
+
+ it('should upload sound file', function (done) {
+ helpers.uploadFile(nconf.get('url') + '/api/admin/upload/sound', path.join(__dirname, '../test/files/test.wav'), { }, jar, csrf_token, function (err, res, body) {
+ assert.ifError(err);
+ assert.equal(res.statusCode, 200);
+ assert(body);
+ console.log(body);
+ done();
+ });
+ });
+
it('should upload favicon', function (done) {
helpers.uploadFile(nconf.get('url') + '/api/admin/uploadfavicon', path.join(__dirname, '../test/files/favicon.ico'), {}, jar, csrf_token, function (err, res, body) {
assert.ifError(err);
From 90018a7aabbbd8c851b6fe0789469d32ca9e2743 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?=
Date: Wed, 10 May 2017 15:35:14 -0400
Subject: [PATCH 046/263] fix lint
---
src/controllers/admin/uploads.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/controllers/admin/uploads.js b/src/controllers/admin/uploads.js
index 1eeaba8041..4e9cac610e 100644
--- a/src/controllers/admin/uploads.js
+++ b/src/controllers/admin/uploads.js
@@ -163,4 +163,4 @@ function deleteTempFile(path) {
winston.error(err);
}
});
-}
\ No newline at end of file
+}
From 873801e9f316856b1745a0b797a914835625e747 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?=
Date: Wed, 10 May 2017 15:51:19 -0400
Subject: [PATCH 047/263] fix test on nodev4 remove console.logs
---
public/language/en-GB/error.json | 1 +
src/controllers/admin/uploads.js | 2 +-
test/uploads.js | 4 +---
3 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/public/language/en-GB/error.json b/public/language/en-GB/error.json
index 89222f622f..8d106b6a79 100644
--- a/public/language/en-GB/error.json
+++ b/public/language/en-GB/error.json
@@ -1,5 +1,6 @@
{
"invalid-data": "Invalid Data",
+ "invalid-json": "Invalid JSON",
"not-logged-in": "You don't seem to be logged in.",
"account-locked": "Your account has been locked temporarily",
diff --git a/src/controllers/admin/uploads.js b/src/controllers/admin/uploads.js
index 4e9cac610e..b23f67ea0a 100644
--- a/src/controllers/admin/uploads.js
+++ b/src/controllers/admin/uploads.js
@@ -24,7 +24,7 @@ uploadsController.uploadCategoryPicture = function (req, res, next) {
params = JSON.parse(req.body.params);
} catch (e) {
deleteTempFile(uploadedFile.path);
- return next(e);
+ return next(new Error('[[error:invalid-json]]'));
}
if (validateUpload(req, res, next, uploadedFile, allowedImageTypes)) {
diff --git a/test/uploads.js b/test/uploads.js
index 6e20fcffcb..57b7a67ed0 100644
--- a/test/uploads.js
+++ b/test/uploads.js
@@ -176,7 +176,6 @@ describe('Upload Controllers', function () {
it('should fail to upload invalid file type', function (done) {
helpers.uploadFile(nconf.get('url') + '/api/admin/category/uploadpicture', path.join(__dirname, '../test/files/503.html'), { params: JSON.stringify({ cid: cid }) }, jar, csrf_token, function (err, res, body) {
assert.ifError(err);
- console.log(body);
assert.equal(body.error, '[[error:invalid-image-type, image/png, image/jpeg, image/pjpeg, image/jpg, image/gif, image/svg+xml]]');
done();
});
@@ -185,7 +184,7 @@ describe('Upload Controllers', function () {
it('should fail to upload category image with invalid json params', function (done) {
helpers.uploadFile(nconf.get('url') + '/api/admin/category/uploadpicture', path.join(__dirname, '../test/files/test.png'), { params: 'invalid json' }, jar, csrf_token, function (err, res, body) {
assert.ifError(err);
- assert.equal(body.error, 'Unexpected token i in JSON at position 0');
+ assert.equal(body.error, '[[error:invalid-json]]');
done();
});
});
@@ -215,7 +214,6 @@ describe('Upload Controllers', function () {
assert.ifError(err);
assert.equal(res.statusCode, 200);
assert(body);
- console.log(body);
done();
});
});
From 73f31640d787fb2400134e61ba608f65c58a5bb8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?=
Date: Wed, 10 May 2017 16:27:44 -0400
Subject: [PATCH 048/263] more tests
---
src/controllers/admin/blacklist.js | 25 +++++++++++++------------
src/controllers/globalmods.js | 24 ++++++++++++++----------
test/controllers-admin.js | 17 +++++++++++++++++
test/uploads.js | 18 ++++++++++++++++++
4 files changed, 62 insertions(+), 22 deletions(-)
diff --git a/src/controllers/admin/blacklist.js b/src/controllers/admin/blacklist.js
index 7ce4edda49..fb92f377b5 100644
--- a/src/controllers/admin/blacklist.js
+++ b/src/controllers/admin/blacklist.js
@@ -1,19 +1,20 @@
'use strict';
+var async = require('async');
var meta = require('../../meta');
-var blacklistController = {};
+var blacklistController = module.exports;
blacklistController.get = function (req, res, next) {
- meta.blacklist.get(function (err, rules) {
- if (err) {
- return next(err);
- }
- res.render('admin/manage/ip-blacklist', {
- rules: rules,
- title: '[[pages:ip-blacklist]]',
- });
- });
+ async.waterfall([
+ function (next) {
+ meta.blacklist.get(next);
+ },
+ function (rules) {
+ res.render('admin/manage/ip-blacklist', {
+ rules: rules,
+ title: '[[pages:ip-blacklist]]',
+ });
+ },
+ ], next);
};
-
-module.exports = blacklistController;
diff --git a/src/controllers/globalmods.js b/src/controllers/globalmods.js
index 793c33653e..1cae97a4e2 100644
--- a/src/controllers/globalmods.js
+++ b/src/controllers/globalmods.js
@@ -1,18 +1,22 @@
'use strict';
+var async = require('async');
+
var user = require('../user');
var adminBlacklistController = require('./admin/blacklist');
-var globalModsController = {};
+var globalModsController = module.exports;
globalModsController.ipBlacklist = function (req, res, next) {
- user.isAdminOrGlobalMod(req.uid, function (err, isAdminOrGlobalMod) {
- if (err || !isAdminOrGlobalMod) {
- return next(err);
- }
-
- adminBlacklistController.get(req, res, next);
- });
+ async.waterfall([
+ function (next) {
+ user.isAdminOrGlobalMod(req.uid, next);
+ },
+ function (isAdminOrGlobalMod, next) {
+ if (!isAdminOrGlobalMod) {
+ return next();
+ }
+ adminBlacklistController.get(req, res, next);
+ },
+ ], next);
};
-
-module.exports = globalModsController;
diff --git a/test/controllers-admin.js b/test/controllers-admin.js
index 086d54e7a8..83d3b94fad 100644
--- a/test/controllers-admin.js
+++ b/test/controllers-admin.js
@@ -414,6 +414,23 @@ describe('Admin Controllers', function () {
});
});
+ it('/ip-blacklist should 404 for regular user', function (done) {
+ request(nconf.get('url') + '/api/ip-blacklist', { json: true }, function (err, res, body) {
+ assert.ifError(err);
+ assert(body);
+ assert.equal(res.statusCode, 404);
+ done();
+ });
+ });
+
+ it('should load /ip-blacklist', function (done) {
+ request(nconf.get('url') + '/api/ip-blacklist', { jar: jar, json: true }, function (err, res, body) {
+ assert.ifError(err);
+ assert(body);
+ done();
+ });
+ });
+
it('should load /admin/appearance/themes', function (done) {
request(nconf.get('url') + '/api/admin/appearance/themes', { jar: jar, json: true }, function (err, res, body) {
assert.ifError(err);
diff --git a/test/uploads.js b/test/uploads.js
index 57b7a67ed0..5acc480e4c 100644
--- a/test/uploads.js
+++ b/test/uploads.js
@@ -218,6 +218,24 @@ describe('Upload Controllers', function () {
});
});
+ it('should upload default avatar', function (done) {
+ helpers.uploadFile(nconf.get('url') + '/api/admin/uploadDefaultAvatar', path.join(__dirname, '../test/files/test.png'), { }, jar, csrf_token, function (err, res, body) {
+ assert.ifError(err);
+ assert.equal(res.statusCode, 200);
+ assert.equal(body[0].url, nconf.get('relative_path') + '/assets/uploads/system/avatar-default.png');
+ done();
+ });
+ });
+
+ it('should upload og image', function (done) {
+ helpers.uploadFile(nconf.get('url') + '/api/admin/uploadOgImage', path.join(__dirname, '../test/files/test.png'), { }, jar, csrf_token, function (err, res, body) {
+ assert.ifError(err);
+ assert.equal(res.statusCode, 200);
+ assert.equal(body[0].url, nconf.get('relative_path') + '/assets/uploads/system/og-image.png');
+ done();
+ });
+ });
+
it('should upload favicon', function (done) {
helpers.uploadFile(nconf.get('url') + '/api/admin/uploadfavicon', path.join(__dirname, '../test/files/favicon.ico'), {}, jar, csrf_token, function (err, res, body) {
assert.ifError(err);
From bd6aca7d9473f37adeadc7df0fd5be6b5358e872 Mon Sep 17 00:00:00 2001
From: Peter Jaszkowiak
Date: Wed, 10 May 2017 15:05:54 -0600
Subject: [PATCH 049/263] More friendly error message if module loading fails
---
nodebb | 30 ++++++++++++++++++++++++------
1 file changed, 24 insertions(+), 6 deletions(-)
diff --git a/nodebb b/nodebb
index 50bcc65fee..2b71185d4e 100755
--- a/nodebb
+++ b/nodebb
@@ -23,12 +23,30 @@ try {
}
}
-require('colors');
-var args = require('minimist')(process.argv.slice(2));
-var request = require('request');
-var semver = require('semver');
-var prompt = require('prompt');
-var async = require('async');
+var minimist;
+var request;
+var semver;
+var prompt;
+var async;
+
+try {
+ require('colors');
+ minimist = require('minimist');
+ request = require('request');
+ semver = require('semver');
+ prompt = require('prompt');
+ async = require('async');
+} catch (e) {
+ process.stdout.write(
+ '\x1b[31mNodeBB could not be initialised because there was an error while loading dependencies.\n' +
+ 'Please run "\x1b[33mnpm install --production\x1b[31m" and try again.\x1b[0m\n\n' +
+ 'For more information, please see: https://docs.nodebb.org/en/latest/installing/os.html\n\n'
+ );
+
+ throw e;
+}
+
+var args = minimist(process.argv.slice(2));
var loaderPath = path.join(__dirname, 'loader.js');
var appPath = path.join(__dirname, 'app.js');
From 608a7d120c3af6004524a049948b447f520e4b44 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?=
Date: Wed, 10 May 2017 21:02:36 -0400
Subject: [PATCH 050/263] error handler tests
---
src/controllers/errors.js | 4 +-
src/middleware/index.js | 4 +-
test/controllers.js | 137 ++++++++++++++++++++++++++++++++++++++
3 files changed, 141 insertions(+), 4 deletions(-)
diff --git a/src/controllers/errors.js b/src/controllers/errors.js
index 0e61b557cc..99614f9e87 100644
--- a/src/controllers/errors.js
+++ b/src/controllers/errors.js
@@ -16,14 +16,14 @@ exports.handleURIErrors = function (err, req, res, next) {
res.redirect(nconf.get('relative_path') + cidMatch[0]);
} else {
winston.warn('[controller] Bad request: ' + req.path);
- if (res.locals.isAPI) {
+ if (req.path.startsWith(nconf.get('relative_path') + '/api')) {
res.status(400).json({
error: '[[global:400.title]]',
});
} else {
var middleware = require('../middleware');
middleware.buildHeader(req, res, function () {
- res.render('400', { error: validator.escape(String(err.message)) });
+ res.status(400).render('400', { error: validator.escape(String(err.message)) });
});
}
}
diff --git a/src/middleware/index.js b/src/middleware/index.js
index de0bd6797e..d4cdb0bfd2 100644
--- a/src/middleware/index.js
+++ b/src/middleware/index.js
@@ -122,9 +122,9 @@ middleware.pageView = function (req, res, next) {
middleware.pluginHooks = function (req, res, next) {
async.each(plugins.loadedHooks['filter:router.page'] || [], function (hookObj, next) {
hookObj.method(req, res, next);
- }, function () {
+ }, function (err) {
// If it got here, then none of the subscribed hooks did anything, or there were no hooks
- next();
+ next(err);
});
};
diff --git a/test/controllers.js b/test/controllers.js
index 3e1000e39f..5c0f143758 100644
--- a/test/controllers.js
+++ b/test/controllers.js
@@ -1069,6 +1069,143 @@ describe('Controllers', function () {
});
});
+ describe('handle errors', function () {
+ var plugins = require('../src/plugins');
+ after(function (done) {
+ plugins.loadedHooks['filter:router.page'] = undefined;
+ done();
+ });
+
+ it('should handle topic malformed uri', function (done) {
+ request(nconf.get('url') + '/topic/1/a%AFc', function (err, res, body) {
+ assert.ifError(err);
+ assert(body);
+ done();
+ });
+ });
+
+ it('should handle category malformed uri', function (done) {
+ request(nconf.get('url') + '/category/1/a%AFc', function (err, res, body) {
+ assert.ifError(err);
+ assert(body);
+ done();
+ });
+ });
+
+ it('should handle malformed uri ', function (done) {
+ request(nconf.get('url') + '/user/a%AFc', function (err, res, body) {
+ assert.ifError(err);
+ assert(body);
+ assert.equal(res.statusCode, 400);
+ done();
+ });
+ });
+
+ it('should handle malformed uri in api', function (done) {
+ request(nconf.get('url') + '/api/user/a%AFc', { json: true }, function (err, res, body) {
+ assert.ifError(err);
+ assert.equal(res.statusCode, 400);
+ assert.equal(body.error, '[[global:400.title]]');
+ done();
+ });
+ });
+
+ it('should handle CSRF error', function (done) {
+ plugins.loadedHooks['filter:router.page'] = plugins.loadedHooks['filter:router.page'] || [];
+ plugins.loadedHooks['filter:router.page'].push({
+ method: function (req, res, next) {
+ var err = new Error('csrf-error');
+ err.code = 'EBADCSRFTOKEN';
+ next(err);
+ },
+ });
+
+ request(nconf.get('url') + '/users', { }, function (err, res, body) {
+ plugins.loadedHooks['filter:router.page'] = [];
+ assert.ifError(err);
+ assert.equal(res.statusCode, 403);
+ done();
+ });
+ });
+
+ it('should handle black-list error', function (done) {
+ plugins.loadedHooks['filter:router.page'] = plugins.loadedHooks['filter:router.page'] || [];
+ plugins.loadedHooks['filter:router.page'].push({
+ method: function (req, res, next) {
+ var err = new Error('blacklist error message');
+ err.code = 'blacklisted-ip';
+ next(err);
+ },
+ });
+
+ request(nconf.get('url') + '/users', { }, function (err, res, body) {
+ plugins.loadedHooks['filter:router.page'] = [];
+ assert.ifError(err);
+ assert.equal(res.statusCode, 403);
+ assert.equal(body, 'blacklist error message');
+ done();
+ });
+ });
+
+ it('should handle page redirect through error', function (done) {
+ plugins.loadedHooks['filter:router.page'] = plugins.loadedHooks['filter:router.page'] || [];
+ plugins.loadedHooks['filter:router.page'].push({
+ method: function (req, res, next) {
+ var err = new Error('redirect');
+ err.status = 302;
+ err.path = '/popular';
+ plugins.loadedHooks['filter:router.page'] = [];
+ next(err);
+ },
+ });
+
+ request(nconf.get('url') + '/users', { }, function (err, res, body) {
+ assert.ifError(err);
+ assert.equal(res.statusCode, 200);
+ assert(body);
+ done();
+ });
+ });
+
+ it('should handle api page redirect through error', function (done) {
+ plugins.loadedHooks['filter:router.page'] = plugins.loadedHooks['filter:router.page'] || [];
+ plugins.loadedHooks['filter:router.page'].push({
+ method: function (req, res, next) {
+ var err = new Error('redirect');
+ err.status = 308;
+ err.path = '/api/popular';
+ plugins.loadedHooks['filter:router.page'] = [];
+ next(err);
+ },
+ });
+
+ request(nconf.get('url') + '/api/users', { json: true }, function (err, res, body) {
+ assert.ifError(err);
+ assert.equal(res.statusCode, 308);
+ assert(body, '/api/popular');
+ done();
+ });
+ });
+
+ it('should handle error page', function (done) {
+ plugins.loadedHooks['filter:router.page'] = plugins.loadedHooks['filter:router.page'] || [];
+ plugins.loadedHooks['filter:router.page'].push({
+ method: function (req, res, next) {
+ var err = new Error('regular error');
+ next(err);
+ },
+ });
+
+ request(nconf.get('url') + '/users', function (err, res, body) {
+ plugins.loadedHooks['filter:router.page'] = [];
+ assert.ifError(err);
+ assert.equal(res.statusCode, 500);
+ assert(body);
+ done();
+ });
+ });
+ });
+
after(function (done) {
var analytics = require('../src/analytics');
From e252c5195d6f6006006efa530327896e883e8ace Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?=
Date: Wed, 10 May 2017 21:46:11 -0400
Subject: [PATCH 051/263] coverPhoto tests
---
src/coverPhoto.js | 5 ++---
test/coverPhoto.js | 24 ++++++++++++++++++++++++
2 files changed, 26 insertions(+), 3 deletions(-)
create mode 100644 test/coverPhoto.js
diff --git a/src/coverPhoto.js b/src/coverPhoto.js
index 024ae48f20..59fc897ac4 100644
--- a/src/coverPhoto.js
+++ b/src/coverPhoto.js
@@ -1,9 +1,10 @@
'use strict';
-var coverPhoto = {};
+
var meta = require('./meta');
var nconf = require('nconf');
+var coverPhoto = module.exports;
coverPhoto.getDefaultGroupCover = function (groupName) {
return getCover('groups', groupName);
@@ -28,5 +29,3 @@ function getCover(type, id) {
return nconf.get('relative_path') + '/assets/images/cover-default.png';
}
-
-module.exports = coverPhoto;
diff --git a/test/coverPhoto.js b/test/coverPhoto.js
new file mode 100644
index 0000000000..cb80e72938
--- /dev/null
+++ b/test/coverPhoto.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var assert = require('assert');
+var async = require('async');
+
+var db = require('./mocks/databasemock');
+var coverPhoto = require('../src/coverPhoto');
+var meta = require('../src/meta');
+
+describe('coverPhoto', function () {
+ it('should get default group cover', function (done) {
+ meta.config['groups:defaultCovers'] = 'image1.png,image2.png';
+ var result = coverPhoto.getDefaultGroupCover('registered-users');
+ assert.equal(result, 'image2.png');
+ done();
+ });
+
+ it('should get default default profile cover', function (done) {
+ meta.config['profile:defaultCovers'] = ' image1.png ,image2.png ';
+ var result = coverPhoto.getDefaultProfileCover(1);
+ assert.equal(result, 'image2.png');
+ done();
+ });
+});
From 052afb10f7be5c4b80d63a6f430e361c16de74f1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?=
Date: Wed, 10 May 2017 22:05:23 -0400
Subject: [PATCH 052/263] show output if upload fails
---
test/helpers/index.js | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/test/helpers/index.js b/test/helpers/index.js
index 2c37f85500..2b999246f7 100644
--- a/test/helpers/index.js
+++ b/test/helpers/index.js
@@ -104,7 +104,10 @@ helpers.uploadFile = function (uploadEndPoint, filePath, body, jar, csrf_token,
if (err) {
return callback(err);
}
- callback(err, res, body);
+ if (res.statusCode !== 200) {
+ console.log(body);
+ }
+ callback(null, res, body);
});
};
From 544faa7861952ba59a8a4b2ebf511531d3c3c21a Mon Sep 17 00:00:00 2001
From: Julian Lam
Date: Thu, 11 May 2017 09:34:16 -0400
Subject: [PATCH 053/263] Adding Croatian to languages, closes #5668. Hvala ti!
---
.tx/config | 65 +++++++++
public/language/hr/admin/admin.json | 7 +
public/language/hr/admin/advanced/cache.json | 11 ++
.../language/hr/admin/advanced/database.json | 36 +++++
public/language/hr/admin/advanced/errors.json | 14 ++
public/language/hr/admin/advanced/events.json | 6 +
public/language/hr/admin/advanced/logs.json | 7 +
.../hr/admin/appearance/customise.json | 9 ++
.../language/hr/admin/appearance/skins.json | 9 ++
.../language/hr/admin/appearance/themes.json | 11 ++
.../language/hr/admin/development/info.json | 16 +++
.../language/hr/admin/development/logger.json | 12 ++
public/language/hr/admin/extend/plugins.json | 47 ++++++
public/language/hr/admin/extend/rewards.json | 17 +++
public/language/hr/admin/extend/widgets.json | 19 +++
.../language/hr/admin/general/dashboard.json | 64 +++++++++
.../language/hr/admin/general/homepage.json | 7 +
.../language/hr/admin/general/languages.json | 5 +
.../language/hr/admin/general/navigation.json | 27 ++++
public/language/hr/admin/general/social.json | 5 +
public/language/hr/admin/general/sounds.json | 9 ++
.../language/hr/admin/manage/categories.json | 68 +++++++++
public/language/hr/admin/manage/groups.json | 35 +++++
.../hr/admin/manage/ip-blacklist.json | 15 ++
.../hr/admin/manage/registration.json | 20 +++
public/language/hr/admin/manage/tags.json | 18 +++
public/language/hr/admin/manage/users.json | 91 ++++++++++++
public/language/hr/admin/menu.json | 74 ++++++++++
.../language/hr/admin/settings/advanced.json | 19 +++
public/language/hr/admin/settings/chat.json | 9 ++
.../language/hr/admin/settings/cookies.json | 11 ++
public/language/hr/admin/settings/email.json | 25 ++++
.../language/hr/admin/settings/general.json | 32 +++++
public/language/hr/admin/settings/group.json | 12 ++
public/language/hr/admin/settings/guest.json | 8 ++
.../hr/admin/settings/notifications.json | 5 +
.../hr/admin/settings/pagination.json | 9 ++
public/language/hr/admin/settings/post.json | 46 ++++++
.../hr/admin/settings/reputation.json | 9 ++
.../language/hr/admin/settings/sockets.json | 6 +
public/language/hr/admin/settings/tags.json | 12 ++
.../language/hr/admin/settings/uploads.json | 28 ++++
public/language/hr/admin/settings/user.json | 60 ++++++++
.../hr/admin/settings/web-crawler.json | 10 ++
public/language/hr/category.json | 20 +++
public/language/hr/email.json | 40 ++++++
public/language/hr/error.json | 132 +++++++++++++++++
public/language/hr/flags.json | 60 ++++++++
public/language/hr/global.json | 107 ++++++++++++++
public/language/hr/groups.json | 58 ++++++++
public/language/hr/language.json | 5 +
public/language/hr/login.json | 12 ++
public/language/hr/modules.json | 49 +++++++
public/language/hr/notifications.json | 48 +++++++
public/language/hr/pages.json | 52 +++++++
public/language/hr/recent.json | 19 +++
public/language/hr/register.json | 23 +++
public/language/hr/reset_password.json | 17 +++
public/language/hr/search.json | 42 ++++++
public/language/hr/success.json | 6 +
public/language/hr/tags.json | 7 +
public/language/hr/topic.json | 119 +++++++++++++++
public/language/hr/unread.json | 13 ++
public/language/hr/uploads.json | 6 +
public/language/hr/user.json | 136 ++++++++++++++++++
public/language/hr/users.json | 21 +++
66 files changed, 2017 insertions(+)
create mode 100644 public/language/hr/admin/admin.json
create mode 100644 public/language/hr/admin/advanced/cache.json
create mode 100644 public/language/hr/admin/advanced/database.json
create mode 100644 public/language/hr/admin/advanced/errors.json
create mode 100644 public/language/hr/admin/advanced/events.json
create mode 100644 public/language/hr/admin/advanced/logs.json
create mode 100644 public/language/hr/admin/appearance/customise.json
create mode 100644 public/language/hr/admin/appearance/skins.json
create mode 100644 public/language/hr/admin/appearance/themes.json
create mode 100644 public/language/hr/admin/development/info.json
create mode 100644 public/language/hr/admin/development/logger.json
create mode 100644 public/language/hr/admin/extend/plugins.json
create mode 100644 public/language/hr/admin/extend/rewards.json
create mode 100644 public/language/hr/admin/extend/widgets.json
create mode 100644 public/language/hr/admin/general/dashboard.json
create mode 100644 public/language/hr/admin/general/homepage.json
create mode 100644 public/language/hr/admin/general/languages.json
create mode 100644 public/language/hr/admin/general/navigation.json
create mode 100644 public/language/hr/admin/general/social.json
create mode 100644 public/language/hr/admin/general/sounds.json
create mode 100644 public/language/hr/admin/manage/categories.json
create mode 100644 public/language/hr/admin/manage/groups.json
create mode 100644 public/language/hr/admin/manage/ip-blacklist.json
create mode 100644 public/language/hr/admin/manage/registration.json
create mode 100644 public/language/hr/admin/manage/tags.json
create mode 100644 public/language/hr/admin/manage/users.json
create mode 100644 public/language/hr/admin/menu.json
create mode 100644 public/language/hr/admin/settings/advanced.json
create mode 100644 public/language/hr/admin/settings/chat.json
create mode 100644 public/language/hr/admin/settings/cookies.json
create mode 100644 public/language/hr/admin/settings/email.json
create mode 100644 public/language/hr/admin/settings/general.json
create mode 100644 public/language/hr/admin/settings/group.json
create mode 100644 public/language/hr/admin/settings/guest.json
create mode 100644 public/language/hr/admin/settings/notifications.json
create mode 100644 public/language/hr/admin/settings/pagination.json
create mode 100644 public/language/hr/admin/settings/post.json
create mode 100644 public/language/hr/admin/settings/reputation.json
create mode 100644 public/language/hr/admin/settings/sockets.json
create mode 100644 public/language/hr/admin/settings/tags.json
create mode 100644 public/language/hr/admin/settings/uploads.json
create mode 100644 public/language/hr/admin/settings/user.json
create mode 100644 public/language/hr/admin/settings/web-crawler.json
create mode 100644 public/language/hr/category.json
create mode 100644 public/language/hr/email.json
create mode 100644 public/language/hr/error.json
create mode 100644 public/language/hr/flags.json
create mode 100644 public/language/hr/global.json
create mode 100644 public/language/hr/groups.json
create mode 100644 public/language/hr/language.json
create mode 100644 public/language/hr/login.json
create mode 100644 public/language/hr/modules.json
create mode 100644 public/language/hr/notifications.json
create mode 100644 public/language/hr/pages.json
create mode 100644 public/language/hr/recent.json
create mode 100644 public/language/hr/register.json
create mode 100644 public/language/hr/reset_password.json
create mode 100644 public/language/hr/search.json
create mode 100644 public/language/hr/success.json
create mode 100644 public/language/hr/tags.json
create mode 100644 public/language/hr/topic.json
create mode 100644 public/language/hr/unread.json
create mode 100644 public/language/hr/uploads.json
create mode 100644 public/language/hr/user.json
create mode 100644 public/language/hr/users.json
diff --git a/.tx/config b/.tx/config
index d88ed808e1..f2e0db3200 100644
--- a/.tx/config
+++ b/.tx/config
@@ -21,6 +21,7 @@ trans.fi = public/language/fi/category.json
trans.fr = public/language/fr/category.json
trans.gl = public/language/gl/category.json
trans.he = public/language/he/category.json
+trans.hr = public/language/hr/category.json
trans.hu = public/language/hu/category.json
trans.id = public/language/id/category.json
trans.it = public/language/it/category.json
@@ -69,6 +70,7 @@ trans.fi = public/language/fi/login.json
trans.fr = public/language/fr/login.json
trans.gl = public/language/gl/login.json
trans.he = public/language/he/login.json
+trans.hr = public/language/hr/login.json
trans.hu = public/language/hu/login.json
trans.id = public/language/id/login.json
trans.it = public/language/it/login.json
@@ -117,6 +119,7 @@ trans.fi = public/language/fi/recent.json
trans.fr = public/language/fr/recent.json
trans.gl = public/language/gl/recent.json
trans.he = public/language/he/recent.json
+trans.hr = public/language/hr/recent.json
trans.hu = public/language/hu/recent.json
trans.id = public/language/id/recent.json
trans.it = public/language/it/recent.json
@@ -165,6 +168,7 @@ trans.fi = public/language/fi/unread.json
trans.fr = public/language/fr/unread.json
trans.gl = public/language/gl/unread.json
trans.he = public/language/he/unread.json
+trans.hr = public/language/hr/unread.json
trans.hu = public/language/hu/unread.json
trans.id = public/language/id/unread.json
trans.it = public/language/it/unread.json
@@ -213,6 +217,7 @@ trans.fi = public/language/fi/modules.json
trans.fr = public/language/fr/modules.json
trans.gl = public/language/gl/modules.json
trans.he = public/language/he/modules.json
+trans.hr = public/language/hr/modules.json
trans.hu = public/language/hu/modules.json
trans.id = public/language/id/modules.json
trans.it = public/language/it/modules.json
@@ -261,6 +266,7 @@ trans.fi = public/language/fi/register.json
trans.fr = public/language/fr/register.json
trans.gl = public/language/gl/register.json
trans.he = public/language/he/register.json
+trans.hr = public/language/hr/register.json
trans.hu = public/language/hu/register.json
trans.id = public/language/id/register.json
trans.it = public/language/it/register.json
@@ -309,6 +315,7 @@ trans.fi = public/language/fi/user.json
trans.fr = public/language/fr/user.json
trans.gl = public/language/gl/user.json
trans.he = public/language/he/user.json
+trans.hr = public/language/hr/user.json
trans.hu = public/language/hu/user.json
trans.id = public/language/id/user.json
trans.it = public/language/it/user.json
@@ -357,6 +364,7 @@ trans.fi = public/language/fi/global.json
trans.fr = public/language/fr/global.json
trans.gl = public/language/gl/global.json
trans.he = public/language/he/global.json
+trans.hr = public/language/hr/global.json
trans.hu = public/language/hu/global.json
trans.id = public/language/id/global.json
trans.it = public/language/it/global.json
@@ -405,6 +413,7 @@ trans.fi = public/language/fi/notifications.json
trans.fr = public/language/fr/notifications.json
trans.gl = public/language/gl/notifications.json
trans.he = public/language/he/notifications.json
+trans.hr = public/language/hr/notifications.json
trans.hu = public/language/hu/notifications.json
trans.id = public/language/id/notifications.json
trans.it = public/language/it/notifications.json
@@ -453,6 +462,7 @@ trans.fi = public/language/fi/reset_password.json
trans.fr = public/language/fr/reset_password.json
trans.gl = public/language/gl/reset_password.json
trans.he = public/language/he/reset_password.json
+trans.hr = public/language/hr/reset_password.json
trans.hu = public/language/hu/reset_password.json
trans.id = public/language/id/reset_password.json
trans.it = public/language/it/reset_password.json
@@ -501,6 +511,7 @@ trans.fi = public/language/fi/users.json
trans.fr = public/language/fr/users.json
trans.gl = public/language/gl/users.json
trans.he = public/language/he/users.json
+trans.hr = public/language/hr/users.json
trans.hu = public/language/hu/users.json
trans.id = public/language/id/users.json
trans.it = public/language/it/users.json
@@ -549,6 +560,7 @@ trans.fi = public/language/fi/language.json
trans.fr = public/language/fr/language.json
trans.gl = public/language/gl/language.json
trans.he = public/language/he/language.json
+trans.hr = public/language/hr/language.json
trans.hu = public/language/hu/language.json
trans.id = public/language/id/language.json
trans.it = public/language/it/language.json
@@ -597,6 +609,7 @@ trans.fi = public/language/fi/pages.json
trans.fr = public/language/fr/pages.json
trans.gl = public/language/gl/pages.json
trans.he = public/language/he/pages.json
+trans.hr = public/language/hr/pages.json
trans.hu = public/language/hu/pages.json
trans.id = public/language/id/pages.json
trans.it = public/language/it/pages.json
@@ -645,6 +658,7 @@ trans.fi = public/language/fi/topic.json
trans.fr = public/language/fr/topic.json
trans.gl = public/language/gl/topic.json
trans.he = public/language/he/topic.json
+trans.hr = public/language/hr/topic.json
trans.hu = public/language/hu/topic.json
trans.id = public/language/id/topic.json
trans.it = public/language/it/topic.json
@@ -693,6 +707,7 @@ trans.fi = public/language/fi/success.json
trans.fr = public/language/fr/success.json
trans.gl = public/language/gl/success.json
trans.he = public/language/he/success.json
+trans.hr = public/language/hr/success.json
trans.hu = public/language/hu/success.json
trans.id = public/language/id/success.json
trans.it = public/language/it/success.json
@@ -741,6 +756,7 @@ trans.fi = public/language/fi/error.json
trans.fr = public/language/fr/error.json
trans.gl = public/language/gl/error.json
trans.he = public/language/he/error.json
+trans.hr = public/language/hr/error.json
trans.hu = public/language/hu/error.json
trans.id = public/language/id/error.json
trans.it = public/language/it/error.json
@@ -789,6 +805,7 @@ trans.fi = public/language/fi/flags.json
trans.fr = public/language/fr/flags.json
trans.gl = public/language/gl/flags.json
trans.he = public/language/he/flags.json
+trans.hr = public/language/hr/flags.json
trans.hu = public/language/hu/flags.json
trans.id = public/language/id/flags.json
trans.it = public/language/it/flags.json
@@ -836,6 +853,7 @@ trans.fi = public/language/fi/tags.json
trans.fr = public/language/fr/tags.json
trans.gl = public/language/gl/tags.json
trans.he = public/language/he/tags.json
+trans.hr = public/language/hr/tags.json
trans.hu = public/language/hu/tags.json
trans.id = public/language/id/tags.json
trans.it = public/language/it/tags.json
@@ -884,6 +902,7 @@ trans.fi = public/language/fi/email.json
trans.fr = public/language/fr/email.json
trans.gl = public/language/gl/email.json
trans.he = public/language/he/email.json
+trans.hr = public/language/hr/email.json
trans.hu = public/language/hu/email.json
trans.id = public/language/id/email.json
trans.it = public/language/it/email.json
@@ -932,6 +951,7 @@ trans.fi = public/language/fi/search.json
trans.fr = public/language/fr/search.json
trans.gl = public/language/gl/search.json
trans.he = public/language/he/search.json
+trans.hr = public/language/hr/search.json
trans.hu = public/language/hu/search.json
trans.id = public/language/id/search.json
trans.it = public/language/it/search.json
@@ -980,6 +1000,7 @@ trans.fi = public/language/fi/groups.json
trans.fr = public/language/fr/groups.json
trans.gl = public/language/gl/groups.json
trans.he = public/language/he/groups.json
+trans.hr = public/language/hr/groups.json
trans.hu = public/language/hu/groups.json
trans.id = public/language/id/groups.json
trans.it = public/language/it/groups.json
@@ -1028,6 +1049,7 @@ trans.fi = public/language/fi/uploads.json
trans.fr = public/language/fr/uploads.json
trans.gl = public/language/gl/uploads.json
trans.he = public/language/he/uploads.json
+trans.hr = public/language/hr/uploads.json
trans.hu = public/language/hu/uploads.json
trans.id = public/language/id/uploads.json
trans.it = public/language/it/uploads.json
@@ -1076,6 +1098,7 @@ trans.fi = public/language/fi/admin/admin.json
trans.fr = public/language/fr/admin/admin.json
trans.gl = public/language/gl/admin/admin.json
trans.he = public/language/he/admin/admin.json
+trans.hr = public/language/hr/admin/admin.json
trans.hu = public/language/hu/admin/admin.json
trans.id = public/language/id/admin/admin.json
trans.it = public/language/it/admin/admin.json
@@ -1124,6 +1147,7 @@ trans.fi = public/language/fi/admin/menu.json
trans.fr = public/language/fr/admin/menu.json
trans.gl = public/language/gl/admin/menu.json
trans.he = public/language/he/admin/menu.json
+trans.hr = public/language/hr/admin/menu.json
trans.hu = public/language/hu/admin/menu.json
trans.id = public/language/id/admin/menu.json
trans.it = public/language/it/admin/menu.json
@@ -1172,6 +1196,7 @@ trans.fi = public/language/fi/admin/advanced/cache.json
trans.fr = public/language/fr/admin/advanced/cache.json
trans.gl = public/language/gl/admin/advanced/cache.json
trans.he = public/language/he/admin/advanced/cache.json
+trans.hr = public/language/hr/admin/advanced/cache.json
trans.hu = public/language/hu/admin/advanced/cache.json
trans.id = public/language/id/admin/advanced/cache.json
trans.it = public/language/it/admin/advanced/cache.json
@@ -1220,6 +1245,7 @@ trans.fi = public/language/fi/admin/advanced/database.json
trans.fr = public/language/fr/admin/advanced/database.json
trans.gl = public/language/gl/admin/advanced/database.json
trans.he = public/language/he/admin/advanced/database.json
+trans.hr = public/language/hr/admin/advanced/database.json
trans.hu = public/language/hu/admin/advanced/database.json
trans.id = public/language/id/admin/advanced/database.json
trans.it = public/language/it/admin/advanced/database.json
@@ -1268,6 +1294,7 @@ trans.fi = public/language/fi/admin/advanced/errors.json
trans.fr = public/language/fr/admin/advanced/errors.json
trans.gl = public/language/gl/admin/advanced/errors.json
trans.he = public/language/he/admin/advanced/errors.json
+trans.hr = public/language/hr/admin/advanced/errors.json
trans.hu = public/language/hu/admin/advanced/errors.json
trans.id = public/language/id/admin/advanced/errors.json
trans.it = public/language/it/admin/advanced/errors.json
@@ -1316,6 +1343,7 @@ trans.fi = public/language/fi/admin/advanced/events.json
trans.fr = public/language/fr/admin/advanced/events.json
trans.gl = public/language/gl/admin/advanced/events.json
trans.he = public/language/he/admin/advanced/events.json
+trans.hr = public/language/hr/admin/advanced/events.json
trans.hu = public/language/hu/admin/advanced/events.json
trans.id = public/language/id/admin/advanced/events.json
trans.it = public/language/it/admin/advanced/events.json
@@ -1364,6 +1392,7 @@ trans.fi = public/language/fi/admin/advanced/logs.json
trans.fr = public/language/fr/admin/advanced/logs.json
trans.gl = public/language/gl/admin/advanced/logs.json
trans.he = public/language/he/admin/advanced/logs.json
+trans.hr = public/language/hr/admin/advanced/logs.json
trans.hu = public/language/hu/admin/advanced/logs.json
trans.id = public/language/id/admin/advanced/logs.json
trans.it = public/language/it/admin/advanced/logs.json
@@ -1412,6 +1441,7 @@ trans.fi = public/language/fi/admin/appearance/customise.json
trans.fr = public/language/fr/admin/appearance/customise.json
trans.gl = public/language/gl/admin/appearance/customise.json
trans.he = public/language/he/admin/appearance/customise.json
+trans.hr = public/language/hr/admin/appearance/customise.json
trans.hu = public/language/hu/admin/appearance/customise.json
trans.id = public/language/id/admin/appearance/customise.json
trans.it = public/language/it/admin/appearance/customise.json
@@ -1460,6 +1490,7 @@ trans.fi = public/language/fi/admin/appearance/skins.json
trans.fr = public/language/fr/admin/appearance/skins.json
trans.gl = public/language/gl/admin/appearance/skins.json
trans.he = public/language/he/admin/appearance/skins.json
+trans.hr = public/language/hr/admin/appearance/skins.json
trans.hu = public/language/hu/admin/appearance/skins.json
trans.id = public/language/id/admin/appearance/skins.json
trans.it = public/language/it/admin/appearance/skins.json
@@ -1508,6 +1539,7 @@ trans.fi = public/language/fi/admin/appearance/themes.json
trans.fr = public/language/fr/admin/appearance/themes.json
trans.gl = public/language/gl/admin/appearance/themes.json
trans.he = public/language/he/admin/appearance/themes.json
+trans.hr = public/language/hr/admin/appearance/themes.json
trans.hu = public/language/hu/admin/appearance/themes.json
trans.id = public/language/id/admin/appearance/themes.json
trans.it = public/language/it/admin/appearance/themes.json
@@ -1556,6 +1588,7 @@ trans.fi = public/language/fi/admin/development/info.json
trans.fr = public/language/fr/admin/development/info.json
trans.gl = public/language/gl/admin/development/info.json
trans.he = public/language/he/admin/development/info.json
+trans.hr = public/language/hr/admin/development/info.json
trans.hu = public/language/hu/admin/development/info.json
trans.id = public/language/id/admin/development/info.json
trans.it = public/language/it/admin/development/info.json
@@ -1604,6 +1637,7 @@ trans.fi = public/language/fi/admin/development/logger.json
trans.fr = public/language/fr/admin/development/logger.json
trans.gl = public/language/gl/admin/development/logger.json
trans.he = public/language/he/admin/development/logger.json
+trans.hr = public/language/hr/admin/development/logger.json
trans.hu = public/language/hu/admin/development/logger.json
trans.id = public/language/id/admin/development/logger.json
trans.it = public/language/it/admin/development/logger.json
@@ -1652,6 +1686,7 @@ trans.fi = public/language/fi/admin/extend/plugins.json
trans.fr = public/language/fr/admin/extend/plugins.json
trans.gl = public/language/gl/admin/extend/plugins.json
trans.he = public/language/he/admin/extend/plugins.json
+trans.hr = public/language/hr/admin/extend/plugins.json
trans.hu = public/language/hu/admin/extend/plugins.json
trans.id = public/language/id/admin/extend/plugins.json
trans.it = public/language/it/admin/extend/plugins.json
@@ -1700,6 +1735,7 @@ trans.fi = public/language/fi/admin/extend/rewards.json
trans.fr = public/language/fr/admin/extend/rewards.json
trans.gl = public/language/gl/admin/extend/rewards.json
trans.he = public/language/he/admin/extend/rewards.json
+trans.hr = public/language/hr/admin/extend/rewards.json
trans.hu = public/language/hu/admin/extend/rewards.json
trans.id = public/language/id/admin/extend/rewards.json
trans.it = public/language/it/admin/extend/rewards.json
@@ -1748,6 +1784,7 @@ trans.fi = public/language/fi/admin/extend/widgets.json
trans.fr = public/language/fr/admin/extend/widgets.json
trans.gl = public/language/gl/admin/extend/widgets.json
trans.he = public/language/he/admin/extend/widgets.json
+trans.hr = public/language/hr/admin/extend/widgets.json
trans.hu = public/language/hu/admin/extend/widgets.json
trans.id = public/language/id/admin/extend/widgets.json
trans.it = public/language/it/admin/extend/widgets.json
@@ -1796,6 +1833,7 @@ trans.fi = public/language/fi/admin/general/dashboard.json
trans.fr = public/language/fr/admin/general/dashboard.json
trans.gl = public/language/gl/admin/general/dashboard.json
trans.he = public/language/he/admin/general/dashboard.json
+trans.hr = public/language/hr/admin/general/dashboard.json
trans.hu = public/language/hu/admin/general/dashboard.json
trans.id = public/language/id/admin/general/dashboard.json
trans.it = public/language/it/admin/general/dashboard.json
@@ -1844,6 +1882,7 @@ trans.fi = public/language/fi/admin/general/homepage.json
trans.fr = public/language/fr/admin/general/homepage.json
trans.gl = public/language/gl/admin/general/homepage.json
trans.he = public/language/he/admin/general/homepage.json
+trans.hr = public/language/hr/admin/general/homepage.json
trans.hu = public/language/hu/admin/general/homepage.json
trans.id = public/language/id/admin/general/homepage.json
trans.it = public/language/it/admin/general/homepage.json
@@ -1892,6 +1931,7 @@ trans.fi = public/language/fi/admin/general/languages.json
trans.fr = public/language/fr/admin/general/languages.json
trans.gl = public/language/gl/admin/general/languages.json
trans.he = public/language/he/admin/general/languages.json
+trans.hr = public/language/hr/admin/general/languages.json
trans.hu = public/language/hu/admin/general/languages.json
trans.id = public/language/id/admin/general/languages.json
trans.it = public/language/it/admin/general/languages.json
@@ -1940,6 +1980,7 @@ trans.fi = public/language/fi/admin/general/navigation.json
trans.fr = public/language/fr/admin/general/navigation.json
trans.gl = public/language/gl/admin/general/navigation.json
trans.he = public/language/he/admin/general/navigation.json
+trans.hr = public/language/hr/admin/general/navigation.json
trans.hu = public/language/hu/admin/general/navigation.json
trans.id = public/language/id/admin/general/navigation.json
trans.it = public/language/it/admin/general/navigation.json
@@ -1988,6 +2029,7 @@ trans.fi = public/language/fi/admin/general/social.json
trans.fr = public/language/fr/admin/general/social.json
trans.gl = public/language/gl/admin/general/social.json
trans.he = public/language/he/admin/general/social.json
+trans.hr = public/language/hr/admin/general/social.json
trans.hu = public/language/hu/admin/general/social.json
trans.id = public/language/id/admin/general/social.json
trans.it = public/language/it/admin/general/social.json
@@ -2036,6 +2078,7 @@ trans.fi = public/language/fi/admin/general/sounds.json
trans.fr = public/language/fr/admin/general/sounds.json
trans.gl = public/language/gl/admin/general/sounds.json
trans.he = public/language/he/admin/general/sounds.json
+trans.hr = public/language/hr/admin/general/sounds.json
trans.hu = public/language/hu/admin/general/sounds.json
trans.id = public/language/id/admin/general/sounds.json
trans.it = public/language/it/admin/general/sounds.json
@@ -2084,6 +2127,7 @@ trans.fi = public/language/fi/admin/manage/categories.json
trans.fr = public/language/fr/admin/manage/categories.json
trans.gl = public/language/gl/admin/manage/categories.json
trans.he = public/language/he/admin/manage/categories.json
+trans.hr = public/language/hr/admin/manage/categories.json
trans.hu = public/language/hu/admin/manage/categories.json
trans.id = public/language/id/admin/manage/categories.json
trans.it = public/language/it/admin/manage/categories.json
@@ -2132,6 +2176,7 @@ trans.fi = public/language/fi/admin/manage/groups.json
trans.fr = public/language/fr/admin/manage/groups.json
trans.gl = public/language/gl/admin/manage/groups.json
trans.he = public/language/he/admin/manage/groups.json
+trans.hr = public/language/hr/admin/manage/groups.json
trans.hu = public/language/hu/admin/manage/groups.json
trans.id = public/language/id/admin/manage/groups.json
trans.it = public/language/it/admin/manage/groups.json
@@ -2180,6 +2225,7 @@ trans.fi = public/language/fi/admin/manage/ip-blacklist.json
trans.fr = public/language/fr/admin/manage/ip-blacklist.json
trans.gl = public/language/gl/admin/manage/ip-blacklist.json
trans.he = public/language/he/admin/manage/ip-blacklist.json
+trans.hr = public/language/hr/admin/manage/ip-blacklist.json
trans.hu = public/language/hu/admin/manage/ip-blacklist.json
trans.id = public/language/id/admin/manage/ip-blacklist.json
trans.it = public/language/it/admin/manage/ip-blacklist.json
@@ -2228,6 +2274,7 @@ trans.fi = public/language/fi/admin/manage/registration.json
trans.fr = public/language/fr/admin/manage/registration.json
trans.gl = public/language/gl/admin/manage/registration.json
trans.he = public/language/he/admin/manage/registration.json
+trans.hr = public/language/hr/admin/manage/registration.json
trans.hu = public/language/hu/admin/manage/registration.json
trans.id = public/language/id/admin/manage/registration.json
trans.it = public/language/it/admin/manage/registration.json
@@ -2276,6 +2323,7 @@ trans.fi = public/language/fi/admin/manage/tags.json
trans.fr = public/language/fr/admin/manage/tags.json
trans.gl = public/language/gl/admin/manage/tags.json
trans.he = public/language/he/admin/manage/tags.json
+trans.hr = public/language/hr/admin/manage/tags.json
trans.hu = public/language/hu/admin/manage/tags.json
trans.id = public/language/id/admin/manage/tags.json
trans.it = public/language/it/admin/manage/tags.json
@@ -2324,6 +2372,7 @@ trans.fi = public/language/fi/admin/manage/users.json
trans.fr = public/language/fr/admin/manage/users.json
trans.gl = public/language/gl/admin/manage/users.json
trans.he = public/language/he/admin/manage/users.json
+trans.hr = public/language/hr/admin/manage/users.json
trans.hu = public/language/hu/admin/manage/users.json
trans.id = public/language/id/admin/manage/users.json
trans.it = public/language/it/admin/manage/users.json
@@ -2372,6 +2421,7 @@ trans.fi = public/language/fi/admin/settings/advanced.json
trans.fr = public/language/fr/admin/settings/advanced.json
trans.gl = public/language/gl/admin/settings/advanced.json
trans.he = public/language/he/admin/settings/advanced.json
+trans.hr = public/language/hr/admin/settings/advanced.json
trans.hu = public/language/hu/admin/settings/advanced.json
trans.id = public/language/id/admin/settings/advanced.json
trans.it = public/language/it/admin/settings/advanced.json
@@ -2420,6 +2470,7 @@ trans.fi = public/language/fi/admin/settings/cookies.json
trans.fr = public/language/fr/admin/settings/cookies.json
trans.gl = public/language/gl/admin/settings/cookies.json
trans.he = public/language/he/admin/settings/cookies.json
+trans.hr = public/language/hr/admin/settings/cookies.json
trans.hu = public/language/hu/admin/settings/cookies.json
trans.id = public/language/id/admin/settings/cookies.json
trans.it = public/language/it/admin/settings/cookies.json
@@ -2468,6 +2519,7 @@ trans.fi = public/language/fi/admin/settings/general.json
trans.fr = public/language/fr/admin/settings/general.json
trans.gl = public/language/gl/admin/settings/general.json
trans.he = public/language/he/admin/settings/general.json
+trans.hr = public/language/hr/admin/settings/general.json
trans.hu = public/language/hu/admin/settings/general.json
trans.id = public/language/id/admin/settings/general.json
trans.it = public/language/it/admin/settings/general.json
@@ -2516,6 +2568,7 @@ trans.fi = public/language/fi/admin/settings/guest.json
trans.fr = public/language/fr/admin/settings/guest.json
trans.gl = public/language/gl/admin/settings/guest.json
trans.he = public/language/he/admin/settings/guest.json
+trans.hr = public/language/hr/admin/settings/guest.json
trans.hu = public/language/hu/admin/settings/guest.json
trans.id = public/language/id/admin/settings/guest.json
trans.it = public/language/it/admin/settings/guest.json
@@ -2564,6 +2617,7 @@ trans.fi = public/language/fi/admin/settings/pagination.json
trans.fr = public/language/fr/admin/settings/pagination.json
trans.gl = public/language/gl/admin/settings/pagination.json
trans.he = public/language/he/admin/settings/pagination.json
+trans.hr = public/language/hr/admin/settings/pagination.json
trans.hu = public/language/hu/admin/settings/pagination.json
trans.id = public/language/id/admin/settings/pagination.json
trans.it = public/language/it/admin/settings/pagination.json
@@ -2612,6 +2666,7 @@ trans.fi = public/language/fi/admin/settings/reputation.json
trans.fr = public/language/fr/admin/settings/reputation.json
trans.gl = public/language/gl/admin/settings/reputation.json
trans.he = public/language/he/admin/settings/reputation.json
+trans.hr = public/language/hr/admin/settings/reputation.json
trans.hu = public/language/hu/admin/settings/reputation.json
trans.id = public/language/id/admin/settings/reputation.json
trans.it = public/language/it/admin/settings/reputation.json
@@ -2660,6 +2715,7 @@ trans.fi = public/language/fi/admin/settings/tags.json
trans.fr = public/language/fr/admin/settings/tags.json
trans.gl = public/language/gl/admin/settings/tags.json
trans.he = public/language/he/admin/settings/tags.json
+trans.hr = public/language/hr/admin/settings/tags.json
trans.hu = public/language/hu/admin/settings/tags.json
trans.id = public/language/id/admin/settings/tags.json
trans.it = public/language/it/admin/settings/tags.json
@@ -2708,6 +2764,7 @@ trans.fi = public/language/fi/admin/settings/user.json
trans.fr = public/language/fr/admin/settings/user.json
trans.gl = public/language/gl/admin/settings/user.json
trans.he = public/language/he/admin/settings/user.json
+trans.hr = public/language/hr/admin/settings/user.json
trans.hu = public/language/hu/admin/settings/user.json
trans.id = public/language/id/admin/settings/user.json
trans.it = public/language/it/admin/settings/user.json
@@ -2756,6 +2813,7 @@ trans.fi = public/language/fi/admin/settings/chat.json
trans.fr = public/language/fr/admin/settings/chat.json
trans.gl = public/language/gl/admin/settings/chat.json
trans.he = public/language/he/admin/settings/chat.json
+trans.hr = public/language/hr/admin/settings/chat.json
trans.hu = public/language/hu/admin/settings/chat.json
trans.id = public/language/id/admin/settings/chat.json
trans.it = public/language/it/admin/settings/chat.json
@@ -2804,6 +2862,7 @@ trans.fi = public/language/fi/admin/settings/email.json
trans.fr = public/language/fr/admin/settings/email.json
trans.gl = public/language/gl/admin/settings/email.json
trans.he = public/language/he/admin/settings/email.json
+trans.hr = public/language/hr/admin/settings/email.json
trans.hu = public/language/hu/admin/settings/email.json
trans.id = public/language/id/admin/settings/email.json
trans.it = public/language/it/admin/settings/email.json
@@ -2852,6 +2911,7 @@ trans.fi = public/language/fi/admin/settings/group.json
trans.fr = public/language/fr/admin/settings/group.json
trans.gl = public/language/gl/admin/settings/group.json
trans.he = public/language/he/admin/settings/group.json
+trans.hr = public/language/hr/admin/settings/group.json
trans.hu = public/language/hu/admin/settings/group.json
trans.id = public/language/id/admin/settings/group.json
trans.it = public/language/it/admin/settings/group.json
@@ -2900,6 +2960,7 @@ trans.fi = public/language/fi/admin/settings/notifications.json
trans.fr = public/language/fr/admin/settings/notifications.json
trans.gl = public/language/gl/admin/settings/notifications.json
trans.he = public/language/he/admin/settings/notifications.json
+trans.hr = public/language/hr/admin/settings/notifications.json
trans.hu = public/language/hu/admin/settings/notifications.json
trans.id = public/language/id/admin/settings/notifications.json
trans.it = public/language/it/admin/settings/notifications.json
@@ -2948,6 +3009,7 @@ trans.fi = public/language/fi/admin/settings/post.json
trans.fr = public/language/fr/admin/settings/post.json
trans.gl = public/language/gl/admin/settings/post.json
trans.he = public/language/he/admin/settings/post.json
+trans.hr = public/language/hr/admin/settings/post.json
trans.hu = public/language/hu/admin/settings/post.json
trans.id = public/language/id/admin/settings/post.json
trans.it = public/language/it/admin/settings/post.json
@@ -2996,6 +3058,7 @@ trans.fi = public/language/fi/admin/settings/sockets.json
trans.fr = public/language/fr/admin/settings/sockets.json
trans.gl = public/language/gl/admin/settings/sockets.json
trans.he = public/language/he/admin/settings/sockets.json
+trans.hr = public/language/hr/admin/settings/sockets.json
trans.hu = public/language/hu/admin/settings/sockets.json
trans.id = public/language/id/admin/settings/sockets.json
trans.it = public/language/it/admin/settings/sockets.json
@@ -3044,6 +3107,7 @@ trans.fi = public/language/fi/admin/settings/uploads.json
trans.fr = public/language/fr/admin/settings/uploads.json
trans.gl = public/language/gl/admin/settings/uploads.json
trans.he = public/language/he/admin/settings/uploads.json
+trans.hr = public/language/hr/admin/settings/uploads.json
trans.hu = public/language/hu/admin/settings/uploads.json
trans.id = public/language/id/admin/settings/uploads.json
trans.it = public/language/it/admin/settings/uploads.json
@@ -3092,6 +3156,7 @@ trans.fi = public/language/fi/admin/settings/web-crawler.json
trans.fr = public/language/fr/admin/settings/web-crawler.json
trans.gl = public/language/gl/admin/settings/web-crawler.json
trans.he = public/language/he/admin/settings/web-crawler.json
+trans.hr = public/language/hr/admin/settings/web-crawler.json
trans.hu = public/language/hu/admin/settings/web-crawler.json
trans.id = public/language/id/admin/settings/web-crawler.json
trans.it = public/language/it/admin/settings/web-crawler.json
diff --git a/public/language/hr/admin/admin.json b/public/language/hr/admin/admin.json
new file mode 100644
index 0000000000..fef743caf9
--- /dev/null
+++ b/public/language/hr/admin/admin.json
@@ -0,0 +1,7 @@
+{
+ "alert.confirm-reload": "Sigurni ste da želite ponovno pokrenuti NodeBB?",
+ "alert.confirm-restart": "Sigurni ste da želite ponovno pokrenuti NodeBB?",
+
+ "acp-title": "%1 | NodeBB Administratorska kontrolna ploča",
+ "settings-header-contents": "Sadržaj"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/advanced/cache.json b/public/language/hr/admin/advanced/cache.json
new file mode 100644
index 0000000000..937db239bf
--- /dev/null
+++ b/public/language/hr/admin/advanced/cache.json
@@ -0,0 +1,11 @@
+{
+ "post-cache": "Objava predmemorija",
+ "posts-in-cache": "Objave u predmemoriji",
+ "average-post-size": "Prosječna veličina objave",
+ "length-to-max": "Dužina / Maksimum",
+ "percent-full": "%1% Puno",
+ "post-cache-size": "Veličina predmemorije objave",
+ "items-in-cache": "Artikli u predmemoriji",
+ "control-panel": "Kontrolna ploča",
+ "update-settings": "Obnovi postavke predmemorije"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/advanced/database.json b/public/language/hr/admin/advanced/database.json
new file mode 100644
index 0000000000..e79a4b6192
--- /dev/null
+++ b/public/language/hr/admin/advanced/database.json
@@ -0,0 +1,36 @@
+{
+ "x-b": "%1 b",
+ "x-mb": "%1 mb",
+ "x-gb": "%1 gb",
+ "uptime-seconds": "Na mreži u sekundama",
+ "uptime-days": "Na mreži u danima",
+
+ "mongo": "Mongo",
+ "mongo.version": "Verzija MongoDB",
+ "mongo.storage-engine": "Način pohrane",
+ "mongo.collections": "Kolekcije",
+ "mongo.objects": "Objekti",
+ "mongo.avg-object-size": "Avg. Object Size",
+ "mongo.data-size": "Veličina datoteke",
+ "mongo.storage-size": "Veličina pohrane",
+ "mongo.index-size": "Veličina indexa",
+ "mongo.file-size": "Veličina datoteke",
+ "mongo.resident-memory": "Rezidentna memorija",
+ "mongo.virtual-memory": "Virtualna memorija",
+ "mongo.mapped-memory": "Mapirana memorija",
+ "mongo.raw-info": "MongoDB sirove informacije",
+
+ "redis": "Redis",
+ "redis.version": "Redis verzija",
+ "redis.connected-clients": "Spojeni klijenti",
+ "redis.connected-slaves": "Povezani robovi",
+ "redis.blocked-clients": "Blokirani klijenti",
+ "redis.used-memory": "Iskorištena memorija",
+ "redis.memory-frag-ratio": "Omjer fragmentiranja memorije",
+ "redis.total-connections-recieved": "Ukupno primljeni veza",
+ "redis.total-commands-processed": "Ukupne prcesirane komande",
+ "redis.iops": "Instante operacije po sekundi",
+ "redis.keyspace-hits": "Keyspace Hits",
+ "redis.keyspace-misses": "Keyspace Misses",
+ "redis.raw-info": "Redis sirova informacija"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/advanced/errors.json b/public/language/hr/admin/advanced/errors.json
new file mode 100644
index 0000000000..04e9e32776
--- /dev/null
+++ b/public/language/hr/admin/advanced/errors.json
@@ -0,0 +1,14 @@
+{
+ "figure-x": "Figura %1",
+ "error-events-per-day": "%1
događaja po danu",
+ "error.404": "404 Nije pronađeno",
+ "error.503": "503 Usluga nedostupna",
+ "manage-error-log": "Upravljaj dnevnikom grešaka",
+ "export-error-log": "Izvedi dnevnik grešaka (CSV)",
+ "clear-error-log": "Očisti dnevnik grešaka",
+ "route": "Putanja",
+ "count": "Zbroj",
+ "no-routes-not-found": "Huura! Nema 404 grešaka!",
+ "clear404-confirm": "Sigurni ste da želite očistiti 404 greše iz dnevnika?",
+ "clear404-success": "\"404 Nije pronađen\" greške očišćene"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/advanced/events.json b/public/language/hr/admin/advanced/events.json
new file mode 100644
index 0000000000..a113f933e4
--- /dev/null
+++ b/public/language/hr/admin/advanced/events.json
@@ -0,0 +1,6 @@
+{
+ "events": "Događanja",
+ "no-events": "Nema događaja",
+ "control-panel": "Kontrolna ploča događanja",
+ "delete-events": "Obriši događanja"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/advanced/logs.json b/public/language/hr/admin/advanced/logs.json
new file mode 100644
index 0000000000..8d87365ce6
--- /dev/null
+++ b/public/language/hr/admin/advanced/logs.json
@@ -0,0 +1,7 @@
+{
+ "logs": "Dnevnik",
+ "control-panel": "Dnevnik kontrolne ploče",
+ "reload": "Učitaj dnevnik ponovno",
+ "clear": "Očisti dnevnik ",
+ "clear-success": "Dnevnik čist!"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/appearance/customise.json b/public/language/hr/admin/appearance/customise.json
new file mode 100644
index 0000000000..0809a8e20c
--- /dev/null
+++ b/public/language/hr/admin/appearance/customise.json
@@ -0,0 +1,9 @@
+{
+ "custom-css": "CSS po narudžbi",
+ "custom-css.description": "Unesi CSS deklaracije koje će biti upisane poslije svih stilova.",
+ "custom-css.enable": "Omogući dodatni CSS",
+
+ "custom-header": "Uobičajno zaglavlje",
+ "custom-header.description": "Unesite Vaš HTML ovdje(npr. JavaScript Meta Tags itd.)koji će biti dodani <head>
sekciji marže Vašeg foruma.",
+ "custom-header.enable": "Omogući uobičajeno zaglavlje"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/appearance/skins.json b/public/language/hr/admin/appearance/skins.json
new file mode 100644
index 0000000000..1b68ae2ecd
--- /dev/null
+++ b/public/language/hr/admin/appearance/skins.json
@@ -0,0 +1,9 @@
+{
+ "loading": "Učitavam Izgled ...",
+ "homepage": "Naslovnica",
+ "select-skin": "Odaberi izgled",
+ "current-skin": "Trenutni izgled",
+ "skin-updated": "Izgled promijenjen",
+ "applied-success": "%1 izgled je primjenjen",
+ "revert-success": "Izgled povraćen na osnovne boje"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/appearance/themes.json b/public/language/hr/admin/appearance/themes.json
new file mode 100644
index 0000000000..593a589aca
--- /dev/null
+++ b/public/language/hr/admin/appearance/themes.json
@@ -0,0 +1,11 @@
+{
+ "checking-for-installed": "Provjeravam instalirane teme ...",
+ "homepage": "Naslovnica",
+ "select-theme": "Odaberi temu",
+ "current-theme": "Trenutna tema",
+ "no-themes": "Nisu pronađene instalirane teme",
+ "revert-confirm": "Sigurni ste da želite povratiti zadani NodeBB izgled ?",
+ "theme-changed": "Tema promijenjena",
+ "revert-success": "Uspješno ste vratili vaš NodeBB u početno zadanu temu.",
+ "restart-to-activate": "Ponovno pokrenite NodeBB da bi aktivirali izgled"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/development/info.json b/public/language/hr/admin/development/info.json
new file mode 100644
index 0000000000..0d7b3eae8e
--- /dev/null
+++ b/public/language/hr/admin/development/info.json
@@ -0,0 +1,16 @@
+{
+ "you-are-on": "Info - Vi ste %1:%2",
+ "host": "Domaćin",
+ "pid": "pid",
+ "nodejs": "nodejs",
+ "online": "Na mreži",
+ "git": "git",
+ "load": "učitaj",
+ "uptime": "uptime",
+
+ "registered": "Registriran",
+ "sockets": "Sockets",
+ "guests": "Gosti",
+
+ "info": "Info"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/development/logger.json b/public/language/hr/admin/development/logger.json
new file mode 100644
index 0000000000..e4c9b130f6
--- /dev/null
+++ b/public/language/hr/admin/development/logger.json
@@ -0,0 +1,12 @@
+{
+ "logger-settings": "Postavke dnevnika",
+ "description": "By enabling the check boxes, you will receive logs to your terminal. If you specify a path, logs will then be saved to a file instead. HTTP logging is useful for collecting statistics about who, when, and what people access on your forum. In addition to logging HTTP requests, we can also log socket.io events. Socket.io logging, in combination with redis-cli monitor, can be very helpful for learning NodeBB's internals.",
+ "explanation": "Jednostavno potvrdite ili onemogućite postavke prijave da upalite ili ugasite prijave na brzinu.Ponovno pokretanje nije potrebno.",
+ "enable-http": "Dozvoli HTTP dnevnik",
+ "enable-socket": "Omogući socket.io dnevnik događanja ",
+ "file-path": "Putanja da datoteke dnevnika",
+ "file-path-placeholder": "/path/to/log/file.log ::: Ostavite prazno kako bi ste se mogli ulogirati u vaš terminal",
+
+ "control-panel": "Kontrolna ploča dnevnika",
+ "update-settings": "Obnovi postavke dnevnika "
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/extend/plugins.json b/public/language/hr/admin/extend/plugins.json
new file mode 100644
index 0000000000..31dc0981d0
--- /dev/null
+++ b/public/language/hr/admin/extend/plugins.json
@@ -0,0 +1,47 @@
+{
+ "installed": "Instalirano",
+ "active": "Aktivno",
+ "inactive": "Neaktivan",
+ "out-of-date": "Izvan datuma",
+ "none-found": "Dodatci nisu pronađeni.",
+ "none-active": "Nema aktivnih dodataka",
+ "find-plugins": "Pronađi dodatke",
+
+ "plugin-search": "Pretraga dodataka",
+ "plugin-search-placeholder": "Pretraži za dodatak ...",
+ "reorder-plugins": "Promjenite redosljed dodataka",
+ "order-active": "Posloži aktivne dodatke",
+ "dev-interested": "Interesira vas pisanje dodataka za NodeBB?",
+ "docs-info": "Punu dokumentaciju u vezi autorstva dodatka mogu biti nađeni na target=\"_blank\" href=\"https://docs.nodebb.org/en/latest/plugins/create.html\">NodeBB Docs Portal.",
+
+ "order.description": "Određeni dodatci rade idealno kada su pokrenuti prije/poslije drugih dodataka.",
+ "order.explanation": "Dodatci se učitavaju u slijedu zadanom ovdje,od vrha prema dnu.",
+
+ "plugin-item.themes": "Predlošci",
+ "plugin-item.deactivate": "Deaktiviraj",
+ "plugin-item.activate": "Aktiviraj",
+ "plugin-item.install": "Instaliraj",
+ "plugin-item.uninstall": "Deinstaliraj",
+ "plugin-item.settings": "Postavke",
+ "plugin-item.installed": "Instalirano",
+ "plugin-item.latest": "Najnovije",
+ "plugin-item.upgrade": "Nadogradnja",
+ "plugin-item.more-info": "Za više informacija:",
+ "plugin-item.unknown": "Nepoznato",
+ "plugin-item.unknown-explanation": "Stanje ovog dodatka se nemože utvrditi, vjerovatno zbog greške u konfiguraciji.",
+
+ "alert.enabled": "Dodatak omogućen",
+ "alert.disabled": "Dodatak onemogućen",
+ "alert.upgraded": "Dodatak nadograđen",
+ "alert.installed": "Dodatak instaliran",
+ "alert.uninstalled": "Dodatak deinstaliran",
+ "alert.activate-success": "Pokrenite NodeBB za aktivaciju dodataka",
+ "alert.deactivate-success": "Dodatak uspjepno deaktiviran",
+ "alert.upgrade-success": "Ponovno pokrenite NodeBB da bi potpuno nadogradili dodatke",
+ "alert.install-success": "Dodatak instaliran, aktivirajte ga.",
+ "alert.uninstall-success": "Dodatak je uspješno deaktiviran i deinstaliran.",
+ "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 nemože uspostaviti komunikaciju sa upraviteljem paketa, nadogradnja se ne preporučuje u ovom trenutku.
",
+ "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?
"
+}
diff --git a/public/language/hr/admin/extend/rewards.json b/public/language/hr/admin/extend/rewards.json
new file mode 100644
index 0000000000..5e20c3872f
--- /dev/null
+++ b/public/language/hr/admin/extend/rewards.json
@@ -0,0 +1,17 @@
+{
+ "rewards": "Nagrade",
+ "condition-if-users": "Ako korisnici",
+ "condition-is": "ls:",
+ "condition-then": "Tada:",
+ "max-claims": "Koliko puta nagrada može biti osvojena.",
+ "zero-infinite": "Upišite 0 za beskonačno",
+ "delete": "Obriši",
+ "enable": "Omogući",
+ "disable": "onemogući",
+ "control-panel": "Kontrola nagrada",
+ "new-reward": "Nova nagrada",
+
+ "alert.delete-success": "Uspješno obrisana nagrada",
+ "alert.no-inputs-found": "Ilegalna nagrada - nije pronađen unos!",
+ "alert.save-success": "Uspješno spremljene nagrade"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/extend/widgets.json b/public/language/hr/admin/extend/widgets.json
new file mode 100644
index 0000000000..72362aafa0
--- /dev/null
+++ b/public/language/hr/admin/extend/widgets.json
@@ -0,0 +1,19 @@
+{
+ "available": "Dostupni dodatci",
+ "explanation": "Select a widget from the dropdown menu and then drag and drop it into a template's widget area on the left.",
+ "none-installed": "No widgets found! Activate the essential widgets plugin in the plugins control panel.",
+ "containers.available": "Dostupni kontejneri",
+ "containers.explanation": "Povucite i ispustite na vrhu bilo kojeg aktivnog widgeta",
+ "containers.none": "Ništa",
+ "container.well": "`",
+ "container.jumbotron": "Jumbotron",
+ "container.panel": "Ploča",
+ "container.panel-header": "Ploča zaglavlja",
+ "container.panel-body": "Tijelo ploče",
+ "container.alert": "Upozorenje",
+
+ "alert.confirm-delete": "Sigurni ste da želite obrisati ovaj widget?",
+ "alert.updated": "Widgeti ažurirani",
+ "alert.update-success": "Uspješno promijenjeni widgeti"
+
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/general/dashboard.json b/public/language/hr/admin/general/dashboard.json
new file mode 100644
index 0000000000..6cbb1de650
--- /dev/null
+++ b/public/language/hr/admin/general/dashboard.json
@@ -0,0 +1,64 @@
+{
+ "forum-traffic": "Promet foruma",
+ "page-views": "Broj pogleda",
+ "unique-visitors": "Jedinstveni posjetitelji",
+ "users": "Korisnici",
+ "posts": "Objave",
+ "topics": "Teme",
+ "page-views-last-month": "Broj pregleda prošli mjesec",
+ "page-views-this-month": "Pregleda ovaj mjesec",
+ "page-views-last-day": "Pogleda u zadnja 24 sata",
+
+ "stats.day": "Dan",
+ "stats.week": "Tjedan",
+ "stats.month": "Mjesec",
+ "stats.all": "Sve vrijeme",
+
+ "updates": "Nadogradnje",
+ "running-version": "Ovo je verzija NodeBB v%1.",
+ "keep-updated": "Uvijek se pobrinite da je Vaš NodeBB na najnovijoj verziji za najnovije sigurnosne mjere i popravke grešaka.",
+ "up-to-date": "Vaš NodeBB je na najnovijoj verziji
",
+ "upgrade-available": "Izašla je (v%1) nova verzija NodeBB.Razmotrite nadogradnju Vašeg foruma.
",
+ "prerelease-upgrade-available": "Ovo je zastarjela verzija NodeBB. Nova verzija (v%1) je izašla.Razmotrite nadogradnju Vašeg NodeBB.
\n",
+ "prerelease-warning": "Ovo je pre-release verzija NodeBB. Nenamjerne greške su moguće.
",
+ "running-in-development": "Forum je u razvojnom stanju. Forum bi mogao biti otvoren za napade; Molimo kontaktirajte vašeg sistemskog administratora",
+
+ "notices": "Obavijest",
+ "restart-not-required": "Restart nije potreban",
+ "restart-required": "Potrebno je ponovno pokretanje",
+ "search-plugin-installed": "Dodatak pretrage instaliran",
+ "search-plugin-not-installed": "Dodatak pretrage nije instaliran",
+ "search-plugin-tooltip": "Instalirajte dodatak za pretragu sa stranice za upravljanje dodatcima da aktivirate mogućnost pretrage foruma.",
+
+ "control-panel": "Kontrola sistema",
+ "reload": "Ponovno učitaj",
+ "restart": "Pokreni ponovno",
+ "restart-warning": "Ponovno pokretanje NodeBB će odbaciti sve uspostavljene veze na par sekundi.",
+ "maintenance-mode": "Održavanje",
+ "maintenance-mode-title": "Postavite mod za održavanje foruma",
+ "realtime-chart-updates": "Ažuriranja u stvarnom vremenu",
+
+ "active-users": "Aktivni korisnici",
+ "active-users.users": "Korisnici",
+ "active-users.guests": "Gosti",
+ "active-users.total": "Ukupno",
+ "active-users.connections": "Veze",
+
+ "anonymous-registered-users": "Anonimni vs Registrirani korisnici",
+ "anonymous": "Anomiman",
+ "registered": "Registriran",
+
+ "user-presence": "Korisnik prisutan",
+ "on-categories": "Na listi kategorija",
+ "reading-posts": "Čita objave",
+ "browsing-topics": "Pretražuj teme",
+ "recent": "Nedavno",
+ "unread": "Nepročitano",
+
+ "high-presence-topics": "Teme visoke prisutnosti",
+
+ "graphs.page-views": "Pregled stranica",
+ "graphs.unique-visitors": "Jedninstveni posjetitelji",
+ "graphs.registered-users": "Registrirani korisnici",
+ "graphs.anonymous-users": "Anonimni korisnici"
+}
diff --git a/public/language/hr/admin/general/homepage.json b/public/language/hr/admin/general/homepage.json
new file mode 100644
index 0000000000..a42652183e
--- /dev/null
+++ b/public/language/hr/admin/general/homepage.json
@@ -0,0 +1,7 @@
+{
+ "home-page": "Naslovnica",
+ "description": "Izaberi koja stranica će se prikazivati kada korisnici navigiraju u root URL Vašeg foruma",
+ "home-page-route": "Putanja naslovnice",
+ "custom-route": "Uobičajna putanja",
+ "allow-user-home-pages": "Dozvoli korisničke naslovnice"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/general/languages.json b/public/language/hr/admin/general/languages.json
new file mode 100644
index 0000000000..fc0d958019
--- /dev/null
+++ b/public/language/hr/admin/general/languages.json
@@ -0,0 +1,5 @@
+{
+ "language-settings": "Postavke jezika",
+ "description": "Zadani jezik odlučuje o postavkama jezika za sve korisnike foruma.
.Korisnici mogu sami odabrati jezik na stranici postavki jezika.",
+ "default-language": "Zadani jezik"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/general/navigation.json b/public/language/hr/admin/general/navigation.json
new file mode 100644
index 0000000000..c49c255bb6
--- /dev/null
+++ b/public/language/hr/admin/general/navigation.json
@@ -0,0 +1,27 @@
+{
+ "icon": "Ikona:",
+ "change-icon": "promjena",
+ "route": "Putanja:",
+ "tooltip": "Napomena:",
+ "text": "Tekst:",
+ "text-class": "Text Class: opcija",
+ "id": "ID: opcionalno",
+
+ "properties": "Postavke",
+ "only-admins": "Prikaži samo administratorima",
+ "only-global-mods-and-admins": "Prikazuj samo globalnim moderatorima i administratorima",
+ "only-logged-in": "Prikaži samo prijavljenim korisnicima",
+ "open-new-window": "Otvori u novom prozoru",
+
+ "installed-plugins-required": "Potrebni su instalirani dodatci:",
+ "search-plugin": "Dodatak pretrage",
+
+ "btn.delete": "Obriši",
+ "btn.disable": "Onemogući",
+ "btn.enable": "Omogući",
+
+ "available-menu-items": "Dostupni artikli menija",
+ "custom-route": "Uobičajna putanja",
+ "core": "jezgra",
+ "plugin": "dodatak"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/general/social.json b/public/language/hr/admin/general/social.json
new file mode 100644
index 0000000000..b6f1c3ee29
--- /dev/null
+++ b/public/language/hr/admin/general/social.json
@@ -0,0 +1,5 @@
+{
+ "post-sharing": "Dijeljenje objave",
+ "info-plugins-additional": "Dodaci mogu dodati dodatne mreže za dijeljenje objava.",
+ "save-success": "Uspješno spremljene mreže za razmjenu objava!"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/general/sounds.json b/public/language/hr/admin/general/sounds.json
new file mode 100644
index 0000000000..21bf8e26ff
--- /dev/null
+++ b/public/language/hr/admin/general/sounds.json
@@ -0,0 +1,9 @@
+{
+ "notifications": "Obavijesti",
+ "chat-messages": "Poruke",
+ "play-sound": "Pokreni",
+ "incoming-message": "Dolazna poruka",
+ "outgoing-message": "Odlazna poruka",
+ "upload-new-sound": "Učitaj novi zvuk",
+ "saved": "Postavke spremljene"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/manage/categories.json b/public/language/hr/admin/manage/categories.json
new file mode 100644
index 0000000000..f87dfb28f8
--- /dev/null
+++ b/public/language/hr/admin/manage/categories.json
@@ -0,0 +1,68 @@
+{
+ "settings": "Postavke kategorije",
+ "privileges": "Privilegije",
+
+ "name": "Ime kategorije",
+ "description": "Opis kategorije",
+ "bg-color": "Pozadniska boja",
+ "text-color": "Boja teksta",
+ "bg-image-size": "Veličina pozadinske slike",
+ "custom-class": "Obična klasa",
+ "num-recent-replies": "# nedavnih objava",
+ "ext-link": "Vanjska poveznica",
+ "upload-image": "Učitaj sliku",
+ "delete-image": "Ukloni",
+ "category-image": "Slika kategorije",
+ "parent-category": "Roditeljska kategorija",
+ "optional-parent-category": "(Opcionalno) Roditeljska kategorija",
+ "parent-category-none": "(Ništa)",
+ "copy-settings": "Kopiraj postavke iz ",
+ "optional-clone-settings": "(Opcionalno) Kloniraj postavke iz kategorije",
+ "purge": "Odbaci kategoriju",
+
+ "enable": "Omogući",
+ "disable": "Onemogući",
+ "edit": "Uredi",
+
+ "select-category": "Odabri kategoriju",
+ "set-parent-category": "Postavi roditeljsku kategoriju ",
+
+ "privileges.description": "Možete konfigurirati pristup kontrolnim privilegijama u ovoj kategoriji unutar ove sekcije.Privilegije mogu biti dane bazirane na korisnicima ili grupama.Možete dodati nove korisnike u ovu tabelu pretragom u polju ispod.",
+ "privileges.warning": "Note: Privilege settings take effect immediately. It is not necessary to save the category after adjusting these settings.",
+ "privileges.section-viewing": "Privilegije pogleda",
+ "privileges.section-posting": "Privilegije objave",
+ "privileges.section-moderation": "Dozvole moderiranja",
+ "privileges.section-user": "Korisnik",
+ "privileges.search-user": "Dodaj korisnika",
+ "privileges.no-users": "U ovoj kategoriji nema privilegije za korisnika.",
+ "privileges.section-group": "Grupa",
+ "privileges.group-private": "Ova grupa je privatna",
+ "privileges.search-group": "Dodaj grupu",
+ "privileges.copy-to-children": "Kopiraj u dijete",
+ "privileges.copy-from-category": "Kopiraj iz kategorije",
+ "privileges.inherit": "If the registered-users
group is granted a specific privilege, all other groups receive an implicit privilege, even if they are not explicitly defined/checked. This implicit privilege is shown to you because all users are part of the registered-users
user group, and so, privileges for additional groups need not be explicitly granted.",
+
+ "analytics.back": "Povratak na listu kategorija",
+ "analytics.title": "Analitika za \"%1\" kategoriju",
+ "analytics.pageviews-hourly": "Figure 1 – Hourly page views for this category",
+ "analytics.pageviews-daily": "Oblik 2 – Pregledi po danu za ovu kategoriju",
+ "analytics.topics-daily": "Oblik 3 – Dnevne teme kreirane u ovoj kategoriji",
+ "analytics.posts-daily": "Oblik 4 – Dnevne objave u ovoj kategoriji",
+
+ "alert.created": "Kreirano",
+ "alert.create-success": "Kategorija uspješno kreirana!",
+ "alert.none-active": "Nemate aktivnih kategorija.",
+ "alert.create": "Napravi kategoriju",
+ "alert.confirm-moderate": "Are you sure you wish to grant the moderation privilege to this user group? This group is public, and any users can join at will.",
+ "alert.confirm-purge": "Do you really want to purge this category \"%1\"?
Warning! All topics and posts in this category will be purged!
Purging a category will remove all topics and posts, and delete the category from the database. If you want to remove a category temporarily, you'll want to \"disable\" the category instead.
",
+ "alert.purge-success": "Kategorija odbačena!",
+ "alert.copy-success": "Postavke kopirane!",
+ "alert.set-parent-category": "Postavi roditeljsku kategoriju",
+ "alert.updated": "Promijenjene kategorije",
+ "alert.updated-success": "ID kategorije %1 uspješno promijenjen",
+ "alert.upload-image": "Učitaj sliku kategorije",
+ "alert.find-user": "Pronađi korisnika",
+ "alert.user-search": "Pretraži korisnika ovdje ...",
+ "alert.find-group": "Pronađi grupu",
+ "alert.group-search": "Pretraži grupu ovdje ..."
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/manage/groups.json b/public/language/hr/admin/manage/groups.json
new file mode 100644
index 0000000000..a6056842bd
--- /dev/null
+++ b/public/language/hr/admin/manage/groups.json
@@ -0,0 +1,35 @@
+{
+ "name": "Ime grupe",
+ "description": "Opis grupe",
+ "member-count": "Broj članova",
+ "system": "Sistemska grupa",
+ "edit": "Uredi",
+ "search-placeholder": "Pretraga",
+ "create": "Kreiraj grupu",
+ "description-placeholder": "Kratki opis grupe",
+ "create-button": "Napravi",
+
+ "alerts.create-failure": "Uh-OhNastao je problem sa stvaranjem Vaše grupe.Molimo probajte ponovo kasnije!
",
+ "alerts.confirm-delete": "Sigurni ste da želite obrisati ovu grupu?",
+
+ "edit.name": "Ime",
+ "edit.description": "Opis",
+ "edit.user-title": "Naslov članova",
+ "edit.icon": "Ikona grupe",
+ "edit.label-color": "Boja oznake grupe",
+ "edit.show-badge": "Prikaži beđ",
+ "edit.private-details": "Ako je omogućeno, pridruživanje grupi zahtjeva dozvolu vlasnika grupe.",
+ "edit.private-override": "Upozorenje:Privatne grupe su onemogućene na sistemskoj razini,koje onemogućavaju ovu opciju",
+ "edit.disable-requests": "Onemogući zahtjeve za priključenje",
+ "edit.hidden": "Skriveno",
+ "edit.hidden-details": "Ako je uključeno,ova grupa neće biti prikazana u listi grupa i korisnici će morati biti pozvani ručno",
+ "edit.add-user": "Dodaj korisnika u grupu",
+ "edit.add-user-search": "Pretraži korisnike",
+ "edit.members": "Lista članova",
+ "control-panel": "Kontrolna ploča grupa",
+ "revert": "Povrati",
+
+ "edit.no-users-found": "Korisnik nije pronađen",
+ "edit.confirm-remove-user": "Sigurni ste da želite ukloniti ovog korisnika?",
+ "edit.save-success": "Promjene spremljene!"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/manage/ip-blacklist.json b/public/language/hr/admin/manage/ip-blacklist.json
new file mode 100644
index 0000000000..374b5029d5
--- /dev/null
+++ b/public/language/hr/admin/manage/ip-blacklist.json
@@ -0,0 +1,15 @@
+{
+ "lead": "Upišite IP za blokiranje ovdje.",
+ "description": "Blokiranje korisničkog računa neki put nije dovoljno za odbiti nepoželjno osobu.U tom slučaju najbolji način da se zaštiti forum je onemogućavanje spajanja na forum sa određene IP adrese ili spektrom IP adresa.",
+ "active-rules": "Aktivna pravila",
+ "validate": "Potvrdite blokade ",
+ "apply": "Primjeni blokade",
+ "hints": "Sintaktički savjeti",
+ "hint-1": "Odredite jednu IP adresu po liniji. Možete dodati IP blokove dokle god su upisani u CIDR formatu (npr. 192.168.100.0/22
).",
+ "hint-2": "Možete dodati komentare tako da u početku reda upišete simbol ljestvi code>#",
+
+ "validate.x-valid": "%1 od %2 pravila valjano.",
+ "validate.x-invalid": "Sljedeća %1 pravila su nevažeća:",
+
+ "alerts.applied-success": "Blokiranje omogućeno"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/manage/registration.json b/public/language/hr/admin/manage/registration.json
new file mode 100644
index 0000000000..aba7529be9
--- /dev/null
+++ b/public/language/hr/admin/manage/registration.json
@@ -0,0 +1,20 @@
+{
+ "queue": "Na čekanju",
+ "description": "Nema korisnika na čekanju za registraciju.
Za pokretanje ove mogućnosti odite na Settings → User → User Registration i postavite tip registracije u \"Admin Approval\".",
+
+ "list.name": "Ime",
+ "list.email": "Email",
+ "list.ip": "IP",
+ "list.time": "Vrijeme",
+ "list.username-spam": "Učestalost %1 Pojavljivanje %2 Samouvjerenost %3",
+ "list.email-spam": "Učestalost %1 Pojavljivanje %2",
+ "list.ip-spam": "Učestalost: %1 Pojavljivanje: %2",
+
+ "invitations": "Pozivnice",
+ "invitations.description": "Ispod je potpuni popis poslanih pozivnica.Koristite ctrl + f za pretragu liste po emailu ili korisničkom imenu.
Korisničko ime će biti prikazano na desno od emaila za korisnike koji su iskoristili svoje pozivnice.",
+ "invitations.inviter-username": "Korisničko ime pozivatelja",
+ "invitations.invitee-email": "Email adresa pozivatelja",
+ "invitations.invitee-username": "Korisničko ime pozivatelja (ako je registriran)",
+
+ "invitations.confirm-delete": "Sigurni ste da želite obrisati ovu pozivnicu?"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/manage/tags.json b/public/language/hr/admin/manage/tags.json
new file mode 100644
index 0000000000..9976f4d310
--- /dev/null
+++ b/public/language/hr/admin/manage/tags.json
@@ -0,0 +1,18 @@
+{
+ "none": "Vaš forum nema tema sa oznakama",
+ "bg-color": "Pozadinska boja",
+ "text-color": "Boja teksta",
+ "create-modify": "Napravi i uredi oznake",
+ "description": "Odaberite oznake klikom ili povlačenjem, koristite SHIFT za višestruki odabir.",
+ "create": "Napravi oznaku",
+ "modify": "Uredi oznake",
+ "delete": "Obriši odabrane oznake",
+ "search": "Pretraži za oznake ...",
+ "settings": "Kliknite ovdje za posjetu postavki oznaka",
+ "name": "Ime oznake",
+
+ "alerts.editing-multiple": "Uređivanje više oznaka",
+ "alerts.editing-x": "Uredi \"%1\" oznake",
+ "alerts.confirm-delete": "Želite li obrisati odabrane oznake?",
+ "alerts.update-success": "Oznake promijenjene!"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/manage/users.json b/public/language/hr/admin/manage/users.json
new file mode 100644
index 0000000000..67d5981583
--- /dev/null
+++ b/public/language/hr/admin/manage/users.json
@@ -0,0 +1,91 @@
+{
+ "users": "Korisnici",
+ "edit": "Uredi",
+ "make-admin": "Dodaj administratora",
+ "remove-admin": "Makni administratora",
+ "validate-email": "Potvrdite email",
+ "send-validation-email": "Pošalji email potvrde",
+ "password-reset-email": "Poslan email zahtjev za resetiranje lozinke",
+ "ban": "Blokiraj korisnika",
+ "temp-ban": "Blokiraj korisnika privremeno",
+ "unban": "Odblokiraj korisnika",
+ "reset-lockout": "Resetiraj zaključavanje",
+ "reset-flags": "Resetiraj zastave",
+ "delete": "Obriši korisnika",
+ "purge": "Obriši korisnike i sadržaj",
+ "download-csv": "Preuzmi CSV",
+ "invite": "Pozivnica",
+ "new": "Novi korisnik",
+
+ "pills.latest": "Posljednji korisnici",
+ "pills.unvalidated": "Nije potvrđen",
+ "pills.no-posts": "Nema objava",
+ "pills.top-posters": "Najviše objava",
+ "pills.top-rep": "Najviše reputacije",
+ "pills.inactive": "Neaktivan",
+ "pills.flagged": "Najviše zastava",
+ "pills.banned": "Blokirani",
+ "pills.search": "Pretraga korisnika",
+
+ "search.username": "Po korisničkom imenu",
+ "search.username-placeholder": "Unesite korisničko ime za pretragu",
+ "search.email": "Sa email-om",
+ "search.email-placeholder": "Unesite email za pretragu",
+ "search.ip": "Po IP adresi",
+ "search.ip-placeholder": "Unesite IP adresu za pretragu",
+ "search.not-found": "Korisnik nije pronađen!",
+
+ "inactive.3-months": "3 mjeseca",
+ "inactive.6-months": "6 mjeseci",
+ "inactive.12-months": "12 mjeseci",
+
+ "users.uid": "uid",
+ "users.username": "korisničko ime",
+ "users.email": "email",
+ "users.postcount": "postcount",
+ "users.reputation": "reputacija",
+ "users.flags": "flags",
+ "users.joined": "joined",
+ "users.last-online": "Zadnji online",
+ "users.banned": "blokiran",
+
+ "create.username": "Korisničko ime",
+ "create.email": "Email",
+ "create.email-placeholder": "Email korisnika",
+ "create.password": "Lozinka",
+ "create.password-confirm": "Potvdri lozinku",
+
+ "temp-ban.length": "Dužina blokade",
+ "temp-ban.reason": "Razlog (Opcionalno)",
+ "temp-ban.hours": "Sati",
+ "temp-ban.days": "Dani",
+ "temp-ban.explanation": "Unesite dužinu trajana blokade. Ukoliko je vrijeme 0 smatra se permanentnom blokadom.",
+
+ "alerts.confirm-ban": "Sigurni ste da želite blokirati ovo korisnika trajno?",
+ "alerts.confirm-ban-multi": "Sigurni ste da želite blokirati korisnika permanentno?",
+ "alerts.ban-success": "Korisnik blokiran!",
+ "alerts.button-ban-x": "Blokiraj %1 korisnika",
+ "alerts.unban-success": "Korisnik odblokiran!",
+ "alerts.lockout-reset-success": "Zaključavanje resetirano!",
+ "alerts.flag-reset-success": "Flags(s) reset!",
+ "alerts.no-remove-yourself-admin": "Nemoguće je maknuti samog sebe iz administracije!",
+ "alerts.make-admin-success": "Korisnik je sada administrator.",
+ "alerts.confirm-remove-admin": "Sigurni ste da želite ukloniti administratora?",
+ "alerts.remove-admin-success": "Korisnik više nije administrator!",
+ "alerts.confirm-validate-email": "Želite li potvrditi email ovih korisnika?",
+ "alerts.validate-email-success": "Email potvrđen",
+ "alerts.password-reset-confirm": "Želite li poslati email za reset lozinke korisniku ?",
+ "alerts.confirm-delete": "Warning!
Do you really want to delete user(s)?
This action is not reversable! Only the user account will be deleted, their posts and topics will remain.",
+ "alerts.delete-success": "Korisnici obrisani!",
+ "alerts.confirm-purge": "Warning!
Do you really want to delete user(s) and their content?
This action is not reversable! All user data and content will be erased!",
+ "alerts.create": "Napravi korisnika",
+ "alerts.button-create": "Napravi",
+ "alerts.button-cancel": "Odustani",
+ "alerts.error-passwords-different": "Lozinke se moraju podudarati!",
+ "alerts.error-x": "Greška%1
",
+ "alerts.create-success": "Korisnik kreiran!",
+
+ "alerts.prompt-email": "Email:",
+ "alerts.email-sent-to": "Email pozivnica je poslana %1",
+ "alerts.x-users-found": "%1 korisnik pronađen! Vrijeme pretrage: %2 ms"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/menu.json b/public/language/hr/admin/menu.json
new file mode 100644
index 0000000000..088c6a06ef
--- /dev/null
+++ b/public/language/hr/admin/menu.json
@@ -0,0 +1,74 @@
+{
+ "section-general": "Glavno",
+ "general/dashboard": "Glavna ploča",
+ "general/homepage": "Naslovnica",
+ "general/navigation": "Navigacija",
+ "general/languages": "Jezici",
+ "general/sounds": "Zvukovi",
+ "general/social": "Socijalno",
+
+ "section-manage": "Upravljanje",
+ "manage/categories": "Kategorije",
+ "manage/tags": "Oznake",
+ "manage/users": "Korisnici",
+ "manage/registration": "Lista zahtjeva za registraciju",
+ "manage/groups": "Grupe",
+ "manage/ip-blacklist": "IP blokade",
+
+ "section-settings": "Postavke",
+ "settings/general": "Generalno",
+ "settings/reputation": "Reputacija",
+ "settings/email": "Email",
+ "settings/user": "Korisnik",
+ "settings/group": "Grupa",
+ "settings/guest": "Gosti",
+ "settings/uploads": "Slanje",
+ "settings/post": "Objave",
+ "settings/chat": "Razgovor",
+ "settings/pagination": "Numeriranje",
+ "settings/tags": "Oznake",
+ "settings/notifications": "Obavijesti",
+ "settings/cookies": "Kolačići",
+ "settings/web-crawler": "Web puzač",
+ "settings/sockets": "Utičnice",
+ "settings/advanced": "Napredno",
+
+ "settings.page-title": "%1 Postavke",
+
+ "section-appearance": "Izgled",
+ "appearance/themes": "Predlošci",
+ "appearance/skins": "Izgled",
+ "appearance/customise": "Uobičajni HTML i CSS",
+
+ "section-extend": "Proširi",
+ "extend/plugins": "Dodatci",
+ "extend/widgets": "Widgeti",
+ "extend/rewards": "Nagrade",
+
+ "section-social-auth": "Socijalna provjera autentičnosti",
+
+ "section-plugins": "Dodatci",
+ "extend/plugins.install": "Instaliraj dodatke",
+
+ "section-advanced": "Napredno",
+ "advanced/database": "Baza podataka",
+ "advanced/events": "Događanja",
+ "advanced/logs": "Dnevnik",
+ "advanced/errors": "Greške",
+ "advanced/cache": "Cache",
+ "development/logger": "Dnevnik",
+ "development/info": "Info",
+
+ "reload-forum": "Ponovno učitaj forum",
+ "restart-forum": "ponovno pokreni forum",
+ "logout": "Odjava",
+ "view-forum": "Pogledaj forum",
+
+ "search.placeholder": "Pretraga...",
+ "search.no-results": "Nema rezultata ...",
+ "search.search-forum": "Pretraži forum za ",
+ "search.keep-typing": "Upiši više da vidiš rezultate ...",
+ "search.start-typing": "Počni pisati da bi vidio rezultate...",
+
+ "connection-lost": "Veza sa %1 je prekinuta, pokušavam se spojiti ..."
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/settings/advanced.json b/public/language/hr/admin/settings/advanced.json
new file mode 100644
index 0000000000..3bd50b1a1e
--- /dev/null
+++ b/public/language/hr/admin/settings/advanced.json
@@ -0,0 +1,19 @@
+{
+ "maintenance-mode": "Održavanje u toku",
+ "maintenance-mode.help": "Kada je forum u stanju održavanja,svi zahtjevi će biti preusmjereni statičnoj stranici.Administratori su izuzeti od ovog preusmjerenja i mogu normalno koristiti stranicu.",
+ "maintenance-mode.message": "Poruka održavanja",
+ "headers": "Zaglavlje",
+ "headers.allow-from": "Izaberi ALLOW-FROM da bi ste postavili NodeBB u iFrame.",
+ "headers.powered-by": "Uredi \"Powered by\" zaglavlje koje šalje NodeBB",
+ "headers.acao": "Pristup-Kontrola-Dozvoli-Izvor",
+ "headers.acao-help": "Za zabranu pristupa svim stranicama ostavi prazno",
+ "headers.acam": "Access-Control-Allow-Methods",
+ "headers.acah": "Access-Control-Allow-Headers",
+ "traffic-management": "Upravljanje prometom",
+ "traffic.help": "NodeBB koristi modul koji automatski odbija zahtjeve u situacijama visokog prometa.Možete ove postavke izmjeniti ovdje,iako su već zadane postavke dobra početna točka.",
+ "traffic.enable": "Omogući upravljanje prometom",
+ "traffic.event-lag": "Event Loop Lag Threshold (in milliseconds)",
+ "traffic.event-lag-help": "Smanjivanje ove vrijednosti smanjuje vrijeme čekanja za učitavanje stranica,ali će također pokazivati poruku \"prekomjerno opterećenje\" više korisnika(u takvim slučajevima potrebno je ponovo pokretanje).",
+ "traffic.lag-check-interval": "Provjeri interval (u milisekundama)",
+ "traffic.lag-check-interval-help": "Smanjivanje ove vrijednosti uzrokuje da NodeBB postane osjetljivji na oscilacije u prometu,takodjer može uzrokovati da provjere postanu preosjetljive(Biti će potrebno ponovno pokretanje)."
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/settings/chat.json b/public/language/hr/admin/settings/chat.json
new file mode 100644
index 0000000000..2ec0c9147e
--- /dev/null
+++ b/public/language/hr/admin/settings/chat.json
@@ -0,0 +1,9 @@
+{
+ "chat-settings": "Postavke razgovora",
+ "disable": "Onemogući razgovor",
+ "disable-editing": "Onemogući uređivanje/brisanje poruka razgovora",
+ "disable-editing-help": "Administratori i moderatori su izuzeti od ovih restrikcija",
+ "max-length": "Maksimalna dužina poruka u razgovoru",
+ "max-room-size": "Maksimalan broj korisnika u sobama za razgovor",
+ "delay": "Vrijeme između poruka razgovora u milisekundama"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/settings/cookies.json b/public/language/hr/admin/settings/cookies.json
new file mode 100644
index 0000000000..b38e7b223a
--- /dev/null
+++ b/public/language/hr/admin/settings/cookies.json
@@ -0,0 +1,11 @@
+{
+ "eu-consent": "Suglasnost EU",
+ "consent.enabled": "Omogućeno",
+ "consent.message": "Poruka obavijesti",
+ "consent.acceptance": "Poruka prihvaćanja",
+ "consent.link-text": "Odrednice Poveznice Tekst",
+ "consent.blank-localised-default": "Pusti prazno za zadanu NodeBB lokalizaciju",
+ "settings": "Postavke",
+ "cookie-domain": "Sesija kolačić domene",
+ "blank-default": "Ostavi prazno za osnovno"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/settings/email.json b/public/language/hr/admin/settings/email.json
new file mode 100644
index 0000000000..67ef2941c5
--- /dev/null
+++ b/public/language/hr/admin/settings/email.json
@@ -0,0 +1,25 @@
+{
+ "email-settings": "Postavke emaila",
+ "address": "Email adresa",
+ "address-help": "Sljedeća email adresa je adresa koju će primatelj vidjeti u \"Od\" i \"Odgovori na\" poljima.",
+ "from": "Od imena",
+ "from-help": "Ime prikazano u dolaznom emailu.",
+ "gmail-routing": "Gmail putanja",
+ "gmail-routing-help1": "Postoje prijave da je Gmail Routing onemogućen na računima sa povišenom sigurnosti. U tom slučaju morati ćete konfigurirati vaš GMail račun da dozvoljava manje sigurne aplikacije.",
+ "gmail-routing-help2": "Za više informacija o ovom rješenju href=\"https://nodemailer.com/using-gmail/\"> molimo pročitajte NodeMailer članak o tom problemu .Alternativa je korištenje email dodatak treće strane poput SendGrid,MailGun itd. Pretražite moguće email dodatke ovdje.",
+ "gmail-transport": "Prosljedite email kroz Gmail/Google Apps račun",
+ "gmail-transport.username": "Korisničko ime",
+ "gmail-transport.username-help": "Unesite punu email adresu ovdje,naročito ako koristite domenu upravljanu preko Google Appsa.",
+ "gmail-transport.password": "Lozinka",
+ "template": "Uredi predložak emaila",
+ "template.select": "Odaberi predložak emaila",
+ "template.revert": "Povrati na original ",
+ "testing": "Testiranje emaila",
+ "testing.select": "Odaberi email predložak ",
+ "testing.send": "Pošalji testni email",
+ "testing.send-help": "Ovaj test mail će biti poslan svim trenutačno prijavljenim korisnicima na njihovu email adresu.",
+ "subscriptions": "Email pretplate",
+ "subscriptions.disable": "Onemogući obavijesti emailom za pretplatnika ",
+ "subscriptions.hour": "Pregled Sati.",
+ "subscriptions.hour-help": "Unesite broj koji pretstavlja vrijeme kada će se poslati pregled mailom (npr. 0
za ponoć, 17
za 5 popodne).Imajte na umu da to vrijeme predstavlja vrijeme servera te ne mora predstavljati vrijeme na Vašem sistemu. Vrijeme servera je:
Sljedeći pregled će biti poslan ."
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/settings/general.json b/public/language/hr/admin/settings/general.json
new file mode 100644
index 0000000000..37c16a92b5
--- /dev/null
+++ b/public/language/hr/admin/settings/general.json
@@ -0,0 +1,32 @@
+{
+ "site-settings": "Postavke stranice",
+ "title": "Naslov stranice",
+ "title.name": "Ime Vaše zajednice",
+ "title.show-in-header": "Prikaži naslov stranice u zaglavlju",
+ "browser-title": "Naslov pretraživača",
+ "browser-title-help": "Ako naslov pretraživača nije postavljen, koristit će se naziv foruma",
+ "title-layout": "Raspored naslova",
+ "title-layout-help": "Definiraj kako će naslov pretraživača biti strukturiran npr.: {pageTitle} | {browserTitle}",
+ "description.placeholder": "Kratak opis zajednice",
+ "description": "Opis foruma",
+ "keywords": "Ključne riječi",
+ "keywords-placeholder": "Ključne riječi koje opisuju Vašu zajednicu, odvojeni zarezom",
+ "logo": "Logo foruma",
+ "logo.image": "Slika",
+ "logo.image-placeholder": "Putanja logotipa za zaglavlje foruma",
+ "logo.upload": "Učitaj",
+ "logo.url": "URL",
+ "logo.url-placeholder": "URL loga stranice",
+ "logo.url-help": "U slučaju klika na logo,pošalji korisnike na ovu adresu.U slučaju praznog polja,korisnik će biti poslan na index foruma.",
+ "logo.alt-text": "Alt tekst",
+ "log.alt-text-placeholder": "Alternativni tekst za dostupnost",
+ "favicon": "Favicon",
+ "favicon.upload": "Učitaj",
+ "touch-icon": "Naslovnica/Touch ikona",
+ "touch-icon.upload": "Učitaj",
+ "touch-icon.help": "Recommended size and format: 192x192, PNG format only. If no touch icon is specified, NodeBB will fall back to using the favicon.",
+ "outgoing-links": "Odlazne poveznice",
+ "outgoing-links.warning-page": "Koristi upozorenje za odlazne poveznice",
+ "search-default-sort-by": "Pretraži zadani poredak",
+ "outgoing-links.whitelist": "Domene za koje se ne koristi odlazno upozorenje"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/settings/group.json b/public/language/hr/admin/settings/group.json
new file mode 100644
index 0000000000..c621da8cb1
--- /dev/null
+++ b/public/language/hr/admin/settings/group.json
@@ -0,0 +1,12 @@
+{
+ "general": "Glavno",
+ "private-groups": "Privatne grupe",
+ "private-groups.help": "Ako je uključeno,ulazak u grupe zahtjevati će odobrenje vlasnika grupe (Default: enabled)",
+ "private-groups.warning": "Pazi! Ako je ova opcija isključena,a imate privatne grupe,automatski će postati javne.",
+ "allow-creation": "Dozvoli kreiranje grupe",
+ "allow-creation-help": "Ako je uključeno,korisnicima će biti omogućeno stvaranje grupa (Default: disabled)",
+ "max-name-length": "Maksimalna dužina imena grupe",
+ "cover-image": "Slika grupe",
+ "default-cover": " ",
+ "default-cover-help": "Dodaj slike sa zarezima između za grupe koje nemaju učitanu naslovnu sliku"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/settings/guest.json b/public/language/hr/admin/settings/guest.json
new file mode 100644
index 0000000000..8cc284acb4
--- /dev/null
+++ b/public/language/hr/admin/settings/guest.json
@@ -0,0 +1,8 @@
+{
+ "handles": "Upravljanje gostima",
+ "handles.enabled": "Dozvoli upravljanje gostima",
+ "handles.enabled-help": "Ova opcija omogućava gostima da izaberi ime za svaku objavu koju naprave.Ako je onemogućena gosti će se zvati \"gost\".",
+ "privileges": "Privilegije gosta",
+ "privileges.can-search": "Dozvoli gostima pretragu bez prijave",
+ "privileges.can-search-users": "Dopusti gostima pretragu korisnika bez prijave"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/settings/notifications.json b/public/language/hr/admin/settings/notifications.json
new file mode 100644
index 0000000000..1d1c969f34
--- /dev/null
+++ b/public/language/hr/admin/settings/notifications.json
@@ -0,0 +1,5 @@
+{
+ "notifications": "Obavijesti",
+ "welcome-notification": "Obavijest dobrodošlice",
+ "welcome-notification-link": "Poveznica objave dobrodošlice"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/settings/pagination.json b/public/language/hr/admin/settings/pagination.json
new file mode 100644
index 0000000000..3a38d2bfe9
--- /dev/null
+++ b/public/language/hr/admin/settings/pagination.json
@@ -0,0 +1,9 @@
+{
+ "pagination": "Postavke numeriranja",
+ "enable": "Numeriraj teme i objave umjesto beskrajnog skrolanja.",
+ "topics": "Numeriranje tema",
+ "posts-per-page": "Objava po stranici ",
+ "categories": "Numeriranje kategorija",
+ "topics-per-page": "Tema po stranici",
+ "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/admin/settings/post.json b/public/language/hr/admin/settings/post.json
new file mode 100644
index 0000000000..e97f8d77e8
--- /dev/null
+++ b/public/language/hr/admin/settings/post.json
@@ -0,0 +1,46 @@
+{
+ "sorting": "Redosljed objava",
+ "sorting.post-default": "Zadano sortiranje objava",
+ "sorting.oldest-to-newest": "Starije prema Novijem",
+ "sorting.newest-to-oldest": "Novije prema Starijem",
+ "sorting.most-votes": "Najviše glasova",
+ "sorting.topic-default": "Uobičajeno sortiranje tema",
+ "restrictions": "Restrikcije objave",
+ "restrictions.seconds-between": "Sekunde između objava",
+ "restrictions.seconds-between-new": "Sekunde prije objave za nove korisnike",
+ "restrictions.rep-threshold": "Prag reputacije prije nego je ova restrikcija maknuta.",
+ "restrictions.seconds-defore-new": "Sekunde prije novi korisnik može objavljivati",
+ "restrictions.seconds-edit-after": "Broj sekundi koje su korisnicima dozvoljene za mijenjanje objava nakon objavljivanja(u slučaju 0 ova postavka je ugašena).",
+ "restrictions.seconds-delete-after": "Broj sekundi koji korisnik ima za obrisati objavu nakon objavljivanja(u slučaju 0 ova postavka je ugašena).",
+ "restrictions.replies-no-delete": "Broj odgovora nakon što je korisniku zabranjeno brisati njegovu temu(u slučaju 0 ova postavka je ugašena).",
+ "restrictions.min-title-length": "Minimalna dužina naslova",
+ "restrictions.max-title-length": "Maksimalna dužina naslova",
+ "restrictions.min-post-length": "Minimalna dužina objave",
+ "restrictions.max-post-length": "Maksimalna dužina objave",
+ "restrictions.days-until-stale": "Dani do kad se tema smatra neaktivnom",
+ "restrictions.stale-help": "Ako je tema smatran neaktivnim,upozorenje će biti prikazano svim korisnicima koji pokušaju odgovoriti na temu",
+ "timestamp": "Vremenska oznaka",
+ "timestamp.cut-off": "Datum prekida (u danima)",
+ "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30
, or one month). Set to 0 to always display dates, leave blank to always display relative times.",
+ "teaser": "Zadirkivač objava",
+ "teaser.last-post": "Last – Show the latest post, including the original post, if no replies",
+ "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies",
+ "teaser.first": "Prvi",
+ "unread": "Nepročitane postavke",
+ "unread.cutoff": "Nepročitano dani prekinutosti",
+ "unread.min-track-last": "Minimalni broj objava u temi prije praćenja zadnje pročitanog",
+ "recent": "Nedavne postavke",
+ "recent.categoryFilter.disable": "onemogući filtriranje tema u ignoriranim kategorijama na stranici /nedavno",
+ "signature": "Postavke potpisa",
+ "signature.disable": "Onemogući potpise",
+ "signature.no-links": "Onemogući odlazne poveznice u potpisima ",
+ "signature.no-images": "Onemogući slike u potpisima",
+ "signature.max-length": "Minimalna dužina potpisa",
+ "composer": "Postavke Composer-a",
+ "composer-help": "The following settings govern the functionality and/or appearance of the post composer shown\n\t\t\t\tto users when they create new topics, or reply to existing topics.",
+ "composer.show-help": "Prikaži \"Pomoć\"",
+ "composer.enable-plugin-help": "Dozvoli dodatcima da dodaju sadržaj u \"Pomoć\"",
+ "composer.custom-help": "Tekst \"Pomoć\"",
+ "ip-tracking": "IP praćenje",
+ "ip-tracking.each-post": "Prati IP adresu za svaku objavu"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/settings/reputation.json b/public/language/hr/admin/settings/reputation.json
new file mode 100644
index 0000000000..71e4fab8b6
--- /dev/null
+++ b/public/language/hr/admin/settings/reputation.json
@@ -0,0 +1,9 @@
+{
+ "reputation": "Postavke reputacije",
+ "disable": "Onemogući reputacije",
+ "disable-down-voting": "Onemogući oduzimanje glasova",
+ "votes-are-public": "Svi glasovi su javni",
+ "thresholds": "Prag aktivnosti",
+ "min-rep-downvote": "Minimalna reputacija za glasanje protiv",
+ "min-rep-flag": "Minimalna reputacija za označavanje objava"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/settings/sockets.json b/public/language/hr/admin/settings/sockets.json
new file mode 100644
index 0000000000..7528fef036
--- /dev/null
+++ b/public/language/hr/admin/settings/sockets.json
@@ -0,0 +1,6 @@
+{
+ "reconnection": "Postavke ponovnog spajanja",
+ "max-attempts": "Max pokušaji spajanja",
+ "default-placeholder": "Zadano: %1",
+ "delay": "Stanka u ponovnom spajanju"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/settings/tags.json b/public/language/hr/admin/settings/tags.json
new file mode 100644
index 0000000000..ea7284a928
--- /dev/null
+++ b/public/language/hr/admin/settings/tags.json
@@ -0,0 +1,12 @@
+{
+ "tag": "Postavke oznaka",
+ "min-per-topic": "Najmanje oznaka za temu",
+ "max-per-topic": "Maksimalno oznaka po temi",
+ "min-length": "Minimalna dužina oznake",
+ "max-length": "Maksimalna dužina oznaka",
+ "goto-manage": "Klikni ovdje za upravljanje oznakama.",
+ "privacy": "Privatnost",
+ "list-private": "Postavi listu oznaka privatno",
+ "related-topics": "Slične teme",
+ "max-related-topics": "Maksimalni broj povezanih tema za prikaz(ako je podržano unutar predloška)"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/settings/uploads.json b/public/language/hr/admin/settings/uploads.json
new file mode 100644
index 0000000000..ced5c66195
--- /dev/null
+++ b/public/language/hr/admin/settings/uploads.json
@@ -0,0 +1,28 @@
+{
+ "posts": "Objave",
+ "allow-files": "Dozvoli korisnicima učitavanje regularnih datoteka",
+ "private": "Učini datoteke privatnim",
+ "max-image-width": "Promjeni veličinu slike na zadanu širinu (u pikselima)",
+ "max-image-width-help": "(u pixelima,zadano:760 pixela,upiši 0 za onemogućiti opciju)",
+ "max-file-size": "Maksimalna veličina datoteka (in KiB)",
+ "max-file-size-help": "u kilobajtima,zadano:2048 kiB",
+ "allow-topic-thumbnails": "Dozvoli korisnicima da učitaju sliku teme",
+ "topic-thumb-size": "Veličina slike teme",
+ "allowed-file-extensions": "Dozvoljene ekstenzije datoteka",
+ "allowed-file-extensions-help": "Unesite popis dozvoljenih ekstenzija datoteka sa zarezima između (npr. pdf,xls,doc
).Prazan popis znači da su sve ekstenzije dozvoljene.",
+ "profile-avatars": "Avatar profila",
+ "allow-profile-image-uploads": "Dozvoli korisnicima da učitaju sliku profila",
+ "convert-profile-image-png": "Konvertiraj profilne slike u PNG",
+ "default-avatar": "Zadani osnovni avatar",
+ "upload": "Učitaj",
+ "profile-image-dimension": "Dimenzije slike profila",
+ "profile-image-dimension-help": "(u pikselima, zadano: 128 piksela)",
+ "max-profile-image-size": "Maksimalna veličina profilne slike",
+ "max-profile-image-size-help": "(u kilobajtima, početna postavka: 256 KiB)",
+ "max-cover-image-size": "Maksimalna veličina slike za naslovnicu",
+ "max-cover-image-size-help": "(in kilobytes, default: 2,048 KiB)",
+ "keep-all-user-images": "Zadrži stare verzije avatara i slike profila na serveru",
+ "profile-covers": "Slika profila",
+ "default-covers": "Osnovne slike naslovnica",
+ "default-covers-help": "Add comma-separated default cover images for accounts that don't have an uploaded cover image"
+}
diff --git a/public/language/hr/admin/settings/user.json b/public/language/hr/admin/settings/user.json
new file mode 100644
index 0000000000..7a012120b0
--- /dev/null
+++ b/public/language/hr/admin/settings/user.json
@@ -0,0 +1,60 @@
+{
+ "authentication": "Autentifikacija",
+ "allow-local-login": "Dozvoli lokalnu prijavu",
+ "require-email-confirmation": "Zahtjeva potvrdu email-om",
+ "email-confirm-interval": "Korisnik ne može ponovno poslati potvrdni email do ",
+ "email-confirm-email2": "prošlo je minuta",
+ "allow-login-with": "Dozvoli prijavu sa",
+ "allow-login-with.username-email": "Korisničko ime ili Email",
+ "allow-login-with.username": "Korisničko ime",
+ "allow-login-with.email": "Samo email",
+ "account-settings": "Postavke računa",
+ "disable-username-changes": "onemogući promjenu korisničkog imena",
+ "disable-email-changes": "Onemogući promjenu emaila",
+ "disable-password-changes": "Onemogući promjenu lozinke",
+ "allow-account-deletion": "Dozvoli brisanje računa korisnicima",
+ "user-info-private": "Postavi korisničke informacije privatne",
+ "themes": "Predlošci",
+ "disable-user-skins": "Onemogući korisnicima odabir predloška",
+ "account-protection": "Zaštita računa",
+ "login-attempts": "Pokušaji prijave po satu",
+ "login-attempts-help": "U slučaju pokušaja prijave na račun user's u tolikoj količini da prelazi ovaj prag,račun će biti zaključan na pre-konfigurirano vrijeme",
+ "lockout-duration": "Broj minuta u slučaju zaključavanja računa",
+ "login-days": "Dani za zapamtiti sesiju korisničke prijave",
+ "password-expiry-days": "Forsiraj reset lozinke nakon broja dana",
+ "registration": "Korisnička registracija",
+ "registration-type": "Tip registracije",
+ "registration-type.normal": "Nromalno",
+ "registration-type.admin-approval": "Administratorsko dopuštenje",
+ "registration-type.admin-approval-ip": "Administratorska dozovola za IP",
+ "registration-type.invite-only": "Samo uz pozivnicu",
+ "registration-type.admin-invite-only": "Samo uz pozivnicu administratora",
+ "registration-type.disabled": "Bez registracije",
+ "registration-type.help": "Normal - Users can register from the /register page.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
",
+ "registration.max-invites": "Maksimalan broj pozivnica po korisniku",
+ "max-invites": "Maksimalan broj pozivnica po korisniku",
+ "max-invites-help": "0 bez restrikcija. Administrator ima neograničeno pozivnica
Primjenjivo samo za \"poziv na forum\"",
+ "min-username-length": "Minimalna dužina korisničkog imena",
+ "max-username-length": "Maksimalna dužina korisničkog imena",
+ "min-password-length": "Minimalna dužina lozinke",
+ "min-password-strength": "Minimalna snaga lozinke",
+ "max-about-me-length": "Maksimalna dužina \"O meni\"",
+ "terms-of-use": "Pravila korištenja foruma (ostavi prazno za isključeno)",
+ "user-search": "Korisnička pretraga",
+ "user-search-results-per-page": "Broj rezultata za prikaz",
+ "default-user-settings": "Osnovne korisničke postavke",
+ "show-email": "Prikaži email",
+ "show-fullname": "Prikaži puno ime",
+ "restrict-chat": "Dozvoli poruke samo od ljudi koje praim",
+ "outgoing-new-tab": "Otvori odlazne poveznive u novom prozoru ",
+ "topic-search": "Dopusti pretragu po temama",
+ "digest-freq": "Pretplatite se na pregled",
+ "digest-freq.off": "Isključi",
+ "digest-freq.daily": "Dnevno",
+ "digest-freq.weekly": "Tjedno",
+ "digest-freq.monthly": "Mjesečno",
+ "email-chat-notifs": "Pošalji email ukoliko stigne nova poruka dok nisam na mreži",
+ "email-post-notif": "Pošalji email pri odgovoru u teme na koje pratim",
+ "follow-created-topics": "Prati teme koje kreiram",
+ "follow-replied-topics": "Prati teme na koje odgovorim"
+}
\ No newline at end of file
diff --git a/public/language/hr/admin/settings/web-crawler.json b/public/language/hr/admin/settings/web-crawler.json
new file mode 100644
index 0000000000..1bcfcd2409
--- /dev/null
+++ b/public/language/hr/admin/settings/web-crawler.json
@@ -0,0 +1,10 @@
+{
+ "crawlability-settings": "Postavke pretraživanja",
+ "robots-txt": "Obični Robots.txt ostavi prazno za osnovno",
+ "sitemap-feed-settings": "Sitemap i postavke feeda",
+ "disable-rss-feeds": "Onemogući RSS",
+ "disable-sitemap-xml": "Onemogući Sitemap.xml",
+ "sitemap-topics": "Broj tema za prikaz u mapi foruma",
+ "clear-sitemap-cache": "Očisti mapu foruma iz predmemorije",
+ "view-sitemap": "Pogledaj mapu foruma"
+}
\ No newline at end of file
diff --git a/public/language/hr/category.json b/public/language/hr/category.json
new file mode 100644
index 0000000000..c4eb7644fa
--- /dev/null
+++ b/public/language/hr/category.json
@@ -0,0 +1,20 @@
+{
+ "category": "Kategorija",
+ "subcategories": "Podkategorije",
+ "new_topic_button": "Nova Tema",
+ "guest-login-post": "Prijavi se za objavu",
+ "no_topics": "Nema tema u ovoj kategoriji.
Zašto ne probate napisati novu?",
+ "browsing": "pregledavanje",
+ "no_replies": "Nema odgovora",
+ "no_new_posts": "Nema novih tema.",
+ "share_this_category": "Podijeli ovu kategoriju",
+ "watch": "Prati",
+ "ignore": "Ignoriraj",
+ "watching": "Pratim",
+ "ignoring": "Ignoriram",
+ "watching.description": "Prikaži nepročitane teme",
+ "ignoring.description": "Ne prikazuj nepročitane teme",
+ "watch.message": "Sada pratite nove objave iz ove kategorije i svih potkategorija",
+ "ignore.message": "Sada ignorirate nove objave iz ove kategorije i svih potkategorija",
+ "watched-categories": "Praćene Kategorije"
+}
\ No newline at end of file
diff --git a/public/language/hr/email.json b/public/language/hr/email.json
new file mode 100644
index 0000000000..cdf26cd74f
--- /dev/null
+++ b/public/language/hr/email.json
@@ -0,0 +1,40 @@
+{
+ "password-reset-requested": "Zatraženo ponovno kreiranje lozinke - %1!",
+ "welcome-to": "Dobrodošli na %1",
+ "invite": "Poziv s %1",
+ "greeting_no_name": "Zdravo",
+ "greeting_with_name": "Zdravo %1",
+ "welcome.text1": "Zahvaljujemo na registraciji na %1!",
+ "welcome.text2": "Da bi u potpunosti aktivirali Vaš račun, moramo provjeriti da li ste Vi pravi vlasnik email adrese sa kojom ste se registrirali.",
+ "welcome.text3": "Administrator je prihvatio vaš zahtjev za registraciju. Možete se prijaviti koristeći svoje korisničko ime i lozinku.",
+ "welcome.cta": "Kliknite ovdje da bi potvrdili email adresu",
+ "invitation.text1": "%1 vas je pozvao da se pridružite %2",
+ "invitation.ctr": "Kliknite ovdje kako biste stvorili korisnički račun.",
+ "reset.text1": "Dobili smo zahtjev za ponovnim kreiranjem lozinke, vjerojatno jer ste ju zaboravili. Ako niste, molimo vas da ignorirate ovaj email.",
+ "reset.text2": "Da bi nastavili sa ponovnim kreiranjem lozinke, kliknite na ovaj link:",
+ "reset.cta": "Kliknite ovdje kako biste postavili novu lozinku.",
+ "reset.notify.subject": "Lozinka uspješno promijenjena.",
+ "reset.notify.text1": "Obavještavamo vas da vam je lozinka na %1 uspješno promijenjena.",
+ "reset.notify.text2": "Ako niste ovo odobrili, molimo vas obavijestite administratora.",
+ "digest.notifications": "Imate nepročitane obavijesti s %1:",
+ "digest.latest_topics": "Posljednje teme s %1",
+ "digest.cta": "Kliknite ovdje kako biste posjetili %1",
+ "digest.unsub.info": "Ovaj pregled je poslan zbog Vaših postavki pretplata.",
+ "digest.no_topics": "Nije bilo aktivnih tema u posljednjih %1",
+ "digest.day": "Dan",
+ "digest.week": "Tjedan",
+ "digest.month": "Mjesec",
+ "digest.subject": "Pregled za %1",
+ "notif.chat.subject": "Nova poruka od %1",
+ "notif.chat.cta": "Klikni ovdje za nastavak razgovora ",
+ "notif.chat.unsub.info": "Ova obavijest razgovora Vam je poslana na temelju vaših postavki pretplate.",
+ "notif.post.cta": "Pročitaj temu",
+ "notif.post.unsub.info": "Ova objava Vam je poslana na temelju vaših postavki pretplate.",
+ "test.text1": "Ovo je test email za provjeru Vaše konfiguracije.",
+ "unsub.cta": "Klikni ovdje za promjenu postavki",
+ "banned.subject": "Blokirani se na %1",
+ "banned.text1": "Korisnik %2 je blokirao %1.",
+ "banned.text2": "Blok će trajati do %1.",
+ "banned.text3": "Blokirani ste zbog:",
+ "closing": "Hvala!"
+}
\ No newline at end of file
diff --git a/public/language/hr/error.json b/public/language/hr/error.json
new file mode 100644
index 0000000000..1a7b56feeb
--- /dev/null
+++ b/public/language/hr/error.json
@@ -0,0 +1,132 @@
+{
+ "invalid-data": "Nevažeći podaci",
+ "not-logged-in": "Izgleda da niste prijavljeni",
+ "account-locked": "Vaš račun je privremeno blokiran",
+ "search-requires-login": "Pretraga zahtijeva prijavu - prijavite se ili se registrirajte.",
+ "invalid-cid": "Netočan ID kategorije",
+ "invalid-tid": "Netočan ID teme",
+ "invalid-pid": "Netočan ID objave",
+ "invalid-uid": "Netočan ID korisnika",
+ "invalid-username": "Netočno korisničko ime",
+ "invalid-email": "Netočan email",
+ "invalid-title": "Netočan naslov!",
+ "invalid-user-data": "Netočni korisnički podatci",
+ "invalid-password": "Netočna lozinka",
+ "invalid-username-or-password": "Upišite oboje, korisničko ime i lozinku",
+ "invalid-search-term": "Netočan upit pretraživanja",
+ "csrf-invalid": "Nismo Vas uspijeli prijaviti, najvjerovatnije zbog istekle sesije. Molimo pokušajte ponovno",
+ "invalid-pagination-value": "Netočno numeriranje stranica, mora biti %1 ili %2",
+ "username-taken": "Korisničko ime je zauzeto",
+ "email-taken": "Email je zauzet",
+ "email-not-confirmed": "Vaš email još nije potvrđen, kliknite ovdje da bi potvrdili svoj email.",
+ "email-not-confirmed-chat": "Nemožete razgovarati dok Vaš email nije potvrđen, kliknite ovdje da bi potvrdili svoj email.",
+ "email-not-confirmed-email-sent": "Vaš email još nije potvrđen, provjerite svoj sandučić za potvrdni email.",
+ "no-email-to-confirm": "Ovaj forum zahtijeva potvrdu emaila, kliknite ovdje da bi potvrdili svoj email.",
+ "email-confirm-failed": "Nismo u mogućnosti potvrditi Vaš email, pokušajte ponovno kasnije.",
+ "confirm-email-already-sent": "Potvrdni email je poslan, počekajte %1 minuta za ponovni pokušaj.",
+ "sendmail-not-found": "Sendmail nije pronađen, provjerite da li je instaliran?",
+ "username-too-short": "Korisničko ime prekratko",
+ "username-too-long": "Korisničko ime predugo",
+ "password-too-long": "Lozinka je preduga",
+ "user-banned": "Korisnik blokiran",
+ "user-banned-reason": "Ovaj račun je blokiran (Razlog: %1)",
+ "user-banned-reason-until": "Ovaj račun je blokiran do %1 (Razlog: %2)",
+ "user-too-new": "Pričekajte %1 sekundi prije prve objave",
+ "blacklisted-ip": "Vaša IP adresa je blokirana. Ako mislite da je ovo greška, kontaktirajte administratora.",
+ "ban-expiry-missing": "Postavite datum isteka blokade",
+ "no-category": "Kategorija ne postoji",
+ "no-topic": "Tema ne postoji",
+ "no-post": "Objava ne postoji",
+ "no-group": "Grupa ne postoji",
+ "no-user": "Korisnik ne postoji",
+ "no-teaser": "Zadirkivač ne postoji",
+ "no-privileges": "Nemate privilegije za ovu radnju.",
+ "category-disabled": "Kategorija onemogućena",
+ "topic-locked": "Tema zaključana",
+ "post-edit-duration-expired": "Dozvoljeno vam je uređivanje %1 sekundi nakon objave",
+ "post-edit-duration-expired-minutes": "Dozvoljeno vam je uređivanje %1 minuta nakon objave",
+ "post-edit-duration-expired-minutes-seconds": "Dozvoljeno vam je uređivanje %1 minuta %2 sekunde nakon objave",
+ "post-edit-duration-expired-hours": "Dozvoljeno vam je uređivanje %1 sat nakon objave",
+ "post-edit-duration-expired-hours-minutes": "Dozvoljeno vam je uređivanje %1 sat %2 minute nakon objave",
+ "post-edit-duration-expired-days": "Dozvoljeno vam je uređivanje %1 dan nakon objave",
+ "post-edit-duration-expired-days-hours": "Dozvoljeno vam je uređivanje %1 dan %2 sata nakon objave",
+ "post-delete-duration-expired": "Dozvoljeno vam je brisanje %1 sekundi nakon objave",
+ "post-delete-duration-expired-minutes": "Dozvoljeno vam je brisanje %1 minute nakon objave",
+ "post-delete-duration-expired-minutes-seconds": "Dozvoljeno vam je brisanje %1 minute %2 sekunde nakon objave",
+ "post-delete-duration-expired-hours": "Dozvoljeno vam je brisanje %1 sat nakon objave",
+ "post-delete-duration-expired-hours-minutes": "Dozvoljeno vam je brisanje %1 sat i %2 minute nakon objave",
+ "post-delete-duration-expired-days": "Dozvoljeno vam je brisanje %1 dan nakon objave",
+ "post-delete-duration-expired-days-hours": "Dozvoljeno vam je brisanje %1 dan %2 sata nakon objave",
+ "cant-delete-topic-has-reply": "Nemožete obrisati temu nakon odgovora",
+ "cant-delete-topic-has-replies": "Nemožete obrisati temu nakon %1 odgovora",
+ "content-too-short": "Unesite dužu objavu. Objava mora sadržavati bar %1 znaka. ",
+ "content-too-long": "Unestie kraću objavu. Objave ne mogu biti duže od %1 znaka.",
+ "title-too-short": "Unesite duži naslov, minimalno %1 znakova.",
+ "title-too-long": "Unesite kraći naslov, maksimalno %1 znakova.",
+ "category-not-selected": "Kategorija nije odabrana.",
+ "too-many-posts": "Možete objavljivati svakih %1 skeundi, pričekajte prije ponovne objave",
+ "too-many-posts-newbie": "Kao novi korisnik možete objaviti svakih %1 sekundi dok ne steknete %2 reputaciju - pričekajte prije ponovne objave",
+ "tag-too-short": "Unesite dužu oznaku. Oznake moraju sadržavati minimalno %1 znakova",
+ "tag-too-long": "Unesite kraću oznaku. Oznake moraju sadržavati maksimalno %1 znakova",
+ "not-enough-tags": "Nema dovoljno oznaka. Teme moraju imate bar %1 oznaku",
+ "too-many-tags": "Previše oznaka. Teme ne mogu imati više od %1 oznaka",
+ "still-uploading": "Pričekajte da se prijenos završi.",
+ "file-too-big": "Maksimalna veličina datoteke je %1 kB - učitajte manju datoteku",
+ "guest-upload-disabled": "Učitavanje datoteka za goste je isključeno",
+ "already-bookmarked": "Već ste zabilježili ovu objavu",
+ "already-unbookmarked": "Već ste odbilježili ovu objavu",
+ "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-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",
+ "group-name-too-short": "Prekratko ime grupe",
+ "group-name-too-long": "Predugo ime Grupe",
+ "group-already-exists": "Grupa postoji",
+ "group-name-change-not-allowed": "Promjena imena grupe nije dozvoljena",
+ "group-already-member": "Već ste član ove grupe",
+ "group-not-member": "Niste član ove grupe",
+ "group-needs-owner": "Ova grupa zahtjeva bar jednog vlasnika",
+ "group-already-invited": "Ovaj korisnik je već pozvan",
+ "group-already-requested": "Vaš zahtjev za članstvom je već podnesen",
+ "post-already-deleted": "Ova objava je već obrisana",
+ "post-already-restored": "Ova objava je povraćena",
+ "topic-already-deleted": "Ova tema je već obrisana",
+ "topic-already-restored": "Ova tema je povraćena",
+ "cant-purge-main-post": "Nemožete odbaciti glavnu objavu, obrišite temu za brisanje",
+ "topic-thumbnails-are-disabled": "Slike tema su onemogućene",
+ "invalid-file": "Pogrešna datoteka",
+ "uploads-are-disabled": "Pohrana je onemogućena",
+ "signature-too-long": "Vaš potpis neže biti duži od %1 znaka",
+ "about-me-too-long": "O vama nemože biti duže od %1 znaka",
+ "cant-chat-with-yourself": "Nemoguće je razgovarati sam sa sobom!",
+ "chat-restricted": "Korisnik je ograničio razgovore. Mora vas pratiti prije nego možete razgovarati",
+ "chat-disabled": "Razgovor onemogućen",
+ "too-many-messages": "Poslali ste previše poruka, pričekajte.",
+ "invalid-chat-message": "Netočna poruka.",
+ "chat-message-too-long": "Poruka je preduga.Mora imati manje od %1 znakova",
+ "cant-edit-chat-message": "Nemate dopuštenje uređivati ovu poruku",
+ "cant-remove-last-user": "Ne možete obrisati zadnjeg korisnika",
+ "cant-delete-chat-message": "Nije dozvoljeno brisanje ove poruke",
+ "already-voting-for-this-post": "Već ste glasali za ovu objavu",
+ "reputation-system-disabled": "Sistem reputacije onemogućen.",
+ "downvoting-disabled": "Oduzimanje glasova je onemogućeno",
+ "not-enough-reputation-to-downvote": "Nemate dovoljno reputacije da bi ste glasali",
+ "not-enough-reputation-to-flag": "Nemate dovoljno reputacije da bi stavili zastavicu na ovu objavu",
+ "already-flagged": "Već ste označili zastavicom ovu objavu",
+ "reload-failed": "Problem kod ponovnog podizanja: \"%1\" will continue to serve the existing client-side assets.",
+ "registration-error": "Greška prilikom registracije",
+ "parse-error": "Došlo je do pogreške u komunikaciji sa serverom",
+ "wrong-login-type-email": "Upišite Vaš email za prijavu",
+ "wrong-login-type-username": "Upišite Vaše korisničko ime za prijavu",
+ "invite-maximum-met": "Pozvali ste maksimalan broj ljudi (%1 od %2).",
+ "no-session-found": "Nije pronađena sesija prijave!",
+ "not-in-room": "Korisnik nije u sobi",
+ "no-users-in-room": "Nema korisnika u sobi",
+ "cant-kick-self": "Ne možete sebe izbaciti iz grupe",
+ "no-users-selected": "Korisnici nisu odabrani",
+ "invalid-home-page-route": "Netočna putanja naslovnice",
+ "invalid-session": "Pogreška sesije",
+ "invalid-session-text": "Vaša sesija nije više aktivna ili se više ne poklapa sa serverom. Molimo osvježite stranicu."
+}
\ No newline at end of file
diff --git a/public/language/hr/flags.json b/public/language/hr/flags.json
new file mode 100644
index 0000000000..f86d22916c
--- /dev/null
+++ b/public/language/hr/flags.json
@@ -0,0 +1,60 @@
+{
+ "state": "Stanje",
+ "reporter": "Reporter",
+ "reported-at": "Prijavljeno u",
+ "description": "Opis",
+ "no-flags": "Huura! Nema pronađenih zastavica.",
+ "assignee": "Dodijeljeni",
+ "update": "Nadogradnja",
+ "updated": "Nadograđeno",
+ "target-purged": "Sadržaj koji je označen zastavom je odbačen i više nije dostupan.",
+
+ "quick-filters": "Brzi filteri",
+ "filter-active": "Postoje jedan ili više filtera aktivnih u popisu zastava",
+ "filter-reset": "Ukloni filtere",
+ "filters": "Opcije filtera",
+ "filter-reporterId": "Reporter UID",
+ "filter-targetUid": "Flagged UID",
+ "filter-type": "Vrsta zastave",
+ "filter-type-all": "Sav sadržaj",
+ "filter-type-post": "Objave",
+ "filter-state": "Stanje",
+ "filter-assignee": "Asignee UID",
+ "filter-cid": "Kategorija",
+ "filter-quick-mine": "Dodijeljeno meni",
+ "filter-cid-all": "Sve kategorije",
+ "apply-filters": "Primjeni filtere",
+
+ "quick-links": "Brze poveznice",
+ "flagged-user": "Označeni korisnici",
+ "view-profile": "Pogledaj profil",
+ "start-new-chat": "Pokreni novi razgovor",
+ "go-to-target": "Pogledaj metu zastave",
+
+ "user-view": "Pogledaj profil",
+ "user-edit": "Uredi profil",
+
+ "notes": "Bilješke zastave",
+ "add-note": "Dodaj bilješku",
+ "no-notes": "Nema podijeljenih bilješki",
+
+ "history": "Povijest zastava",
+ "back": "Nazad na popis zastava",
+ "no-history": "Nema povijesti zastava.",
+
+ "state-all": "Sva stanja",
+ "state-open": "Novo/Otvori",
+ "state-wip": "Rad u tijeku",
+ "state-resolved": "Riješeno",
+ "state-rejected": "Odbijeno",
+ "no-assignee": "Nije dodijeljeno",
+ "note-added": "Bilješka dodana",
+
+ "modal-title": "Prijavi neprimjereni sadržaj",
+ "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-custom": "Razlog prijavljivanja ovog sadržaja",
+ "modal-submit": "Podnesi izvještaj",
+ "modal-submit-success": "Ovaj sadržaj je označen zastavom u svrhu moderiranja,"
+}
\ No newline at end of file
diff --git a/public/language/hr/global.json b/public/language/hr/global.json
new file mode 100644
index 0000000000..8d02d5bc58
--- /dev/null
+++ b/public/language/hr/global.json
@@ -0,0 +1,107 @@
+{
+ "home": "Naslovna",
+ "search": "Pretraga",
+ "buttons.close": "Zatvori",
+ "403.title": "Pristup onemogućen",
+ "403.message": "Nemate pristup ovoj stranici .",
+ "403.login": "Pokušajte se prijaviti?",
+ "404.title": "Nije pronadjeno",
+ "404.message": "Ova stranica ne postoji. Vrati se na početnu.",
+ "500.title": "Interna greška.",
+ "500.message": "Ups! Čini se da nešto nije u redu.",
+ "400.title": "Krivi zahtjev.",
+ "400.message": "Izgleda da ovaj link nije ispravan, molimo provjerite i ponovo pokušajte. Ili se vratite na početnu stranicu.",
+ "register": "Registracija",
+ "login": "Prijava",
+ "please_log_in": "Molimo prijavite se.",
+ "logout": "Odjava",
+ "posting_restriction_info": "Objave su trenutačno omogućene samo registriranim korisnicima,kliknite ovdje za prijavu.",
+ "welcome_back": "Dobrodošli natrag",
+ "you_have_successfully_logged_in": "Uspješno ste se prijavili",
+ "save_changes": "Spremi promjene",
+ "save": "Spremi",
+ "close": "Zatvori",
+ "pagination": "Stranice",
+ "pagination.out_of": "%1 od %2",
+ "pagination.enter_index": "Unesi index",
+ "header.admin": "Admin",
+ "header.categories": "Kategorije",
+ "header.recent": "Posljednje",
+ "header.unread": "Nepročitano",
+ "header.tags": "Tagovi",
+ "header.popular": "Popularno",
+ "header.users": "Korisnici",
+ "header.groups": "Grupe",
+ "header.chats": "Razgovori",
+ "header.notifications": "Obavijesti",
+ "header.search": "Pretraga",
+ "header.profile": "Profil",
+ "header.navigation": "Navigacija",
+ "notifications.loading": "Učitavanje obavijesti",
+ "chats.loading": "Učitavam razgovore",
+ "motd.welcome": "Dobrodošli na Silicon Island Rijeka 2020 forum.",
+ "previouspage": "Prethodna stranica",
+ "nextpage": "Sljedeća stranica",
+ "alert.success": "Uspjeh!",
+ "alert.error": "Greška",
+ "alert.banned": "Blokiran",
+ "alert.banned.message": "Upravo ste banirani, sada ćete biti odjavljeni",
+ "alert.unfollow": "Više ne pratite %1",
+ "alert.follow": "Sada pratite %1",
+ "online": "Na mreži",
+ "users": "Korisnici",
+ "topics": "Teme",
+ "posts": "Objave",
+ "best": "Najbolje",
+ "upvoters": "Pozitivni glasači",
+ "upvoted": "Glasova za",
+ "downvoters": "Glasači protiv",
+ "downvoted": "Glasova protiv",
+ "views": "Pregleda",
+ "reputation": "Reputacija",
+ "read_more": "pročitaj više",
+ "more": "Više",
+ "posted_ago_by_guest": "postao gost prije %1",
+ "posted_ago_by": "postao %2 prije %1 ",
+ "posted_ago": "Objavljeno prije %1",
+ "posted_in": "Objavljeno u %1",
+ "posted_in_by": "Objavljeno u %1 od &2",
+ "posted_in_ago": "Objavljeno u %1 %2",
+ "posted_in_ago_by": "Objavljeno u %1 &2 od %3",
+ "user_posted_ago": "%1 je objavio %2",
+ "guest_posted_ago": "Gost je objavio %1",
+ "last_edited_by": "Zadnji put uređeno &1",
+ "norecentposts": "Nema nedavnih objava",
+ "norecenttopics": "Nema nedavnih tema",
+ "recentposts": "Posljednji postovi",
+ "recentips": "Posljednje prijavljeni IPovi",
+ "moderator_tools": "Moderatorski alati",
+ "away": "Odustan",
+ "dnd": "Ne smetaj",
+ "invisible": "Nevidljiv",
+ "offline": "Odjavljen",
+ "email": "Email",
+ "language": "Jezik",
+ "guest": "Gost",
+ "guests": "Gosti",
+ "updated.title": "Forum je nadograđen",
+ "updated.message": "Ovaj forum je upravo nadograđen na posljednju verziju. Klikni ovdje za ponovno učitavanje stranice.",
+ "privacy": "Privatnost",
+ "follow": "Prati",
+ "unfollow": "Prestani pratiti",
+ "delete_all": "Obriši sve",
+ "map": "Mapa",
+ "sessions": "Prijavljene sesije",
+ "ip_address": "IP adresa",
+ "enter_page_number": "Unesi broj stranice",
+ "upload_file": "Učitaj datoteku",
+ "upload": "Učitavanje",
+ "allowed-file-types": "Dozvoljeni tipovi datoteke su %1",
+ "unsaved-changes": "Imate nespremljenih promjena. Jeste li sigurni da želite napustiti stranicu?",
+ "reconnecting-message": "Izgleda da je veza na %1 prekinuta, molimo pričekajte dok se pokušamo ponovo spojiti.",
+ "play": "Pokreni",
+ "cookies.message": "Ova stranica koristi kolačiće kako bi osigurala najbolje korisničko iskustvo.",
+ "cookies.accept": "Shvaćam!",
+ "cookies.learn_more": "Saznaj više",
+ "edited": "Uređeno"
+}
\ No newline at end of file
diff --git a/public/language/hr/groups.json b/public/language/hr/groups.json
new file mode 100644
index 0000000000..a27c0cc6c9
--- /dev/null
+++ b/public/language/hr/groups.json
@@ -0,0 +1,58 @@
+{
+ "groups": "Grupe",
+ "view_group": "Pogledaj grupu",
+ "owner": "Vlasnik grupe",
+ "new_group": "Napravi novu grupu",
+ "no_groups_found": "Nema grupa za pregled",
+ "pending.accept": "Prihvaćam",
+ "pending.reject": "Odbij",
+ "pending.accept_all": "Prihvati sve",
+ "pending.reject_all": "Odbij sve",
+ "pending.none": "Trenutno nema korisnika na čekanju",
+ "invited.none": "Trenutno nema pozvanih članova",
+ "invited.uninvite": "Povuci pozivnicu",
+ "invited.search": "Pretraži korisnike za poziv u grupu",
+ "invited.notification_title": "Pozvani ste da se pridružite%1",
+ "request.notification_title": "Zahtjev za pristup grupi od %1",
+ "request.notification_text": "%1 je poslao zahtjev da postane član %2",
+ "cover-save": "Spremi",
+ "cover-saving": "Spremanje",
+ "details.title": "Detalji Grupe",
+ "details.members": "Popis članova",
+ "details.pending": "Korisnici na čekanju",
+ "details.invited": "Pozvani korisnici",
+ "details.has_no_posts": "Članovi ove grupe nisu objavljivali.",
+ "details.latest_posts": "Zadnje objave",
+ "details.private": "Privatno",
+ "details.disableJoinRequests": "Onemogući zahtjeve za pristup",
+ "details.grant": "Dozvoli/Ukini vlasništvo",
+ "details.kick": "Izbaci",
+ "details.kick_confirm": "Jeste li sigurni da želite izbaciti ovog člana iz grupe?",
+ "details.owner_options": "\"Administracija grupe",
+ "details.group_name": "Ime grupe",
+ "details.member_count": "Broj članova",
+ "details.creation_date": "Kreirano",
+ "details.description": "Opis",
+ "details.badge_preview": "Prikaz značke",
+ "details.change_icon": "Promjeni ikonu",
+ "details.change_colour": "Promjeni boju",
+ "details.badge_text": "Tekst značke",
+ "details.userTitleEnabled": "Pokaži značku",
+ "details.private_help": "Ako je uključeno, ulazak korisnika u grupu zahtjeva odobrenje vlasnika grupe",
+ "details.hidden": "Sakriveno",
+ "details.hidden_help": "Ako je uključeno, ova grupa neće biti na popisu grupa i korisnici će morati biti pozvani ručno",
+ "details.delete_group": "Obriši ovu grupu",
+ "details.private_system_help": "Privatne grupe su isključene na sistemskoj razini",
+ "event.updated": "Detalji grupe su promjenjeni",
+ "event.deleted": "Grupa \\\"%1\\\" je obrisana",
+ "membership.accept-invitation": "Prihvati pozivnicu",
+ "membership.invitation-pending": "Pozivnica na čekanju",
+ "membership.join-group": "Priključi se u grupu",
+ "membership.leave-group": "Izađi iz grupe",
+ "membership.reject": "Odbij",
+ "new-group.group_name": "Ime grupe:",
+ "upload-group-cover": "Promjeni naslovnicu grupe",
+ "bulk-invite-instructions": "Unesi popis korisnika sa zarezima između korisničkih imena za poziv u ovu grupu",
+ "bulk-invite": "Masovni poziv",
+ "remove_group_cover_confirm": "Jeste li sigurni da želite obrisati sliku naslovnice?"
+}
\ No newline at end of file
diff --git a/public/language/hr/language.json b/public/language/hr/language.json
new file mode 100644
index 0000000000..bdc95e799c
--- /dev/null
+++ b/public/language/hr/language.json
@@ -0,0 +1,5 @@
+{
+ "name": "Hrvatski",
+ "code": "hr",
+ "dir": "ltr"
+}
\ No newline at end of file
diff --git a/public/language/hr/login.json b/public/language/hr/login.json
new file mode 100644
index 0000000000..53c6fe313b
--- /dev/null
+++ b/public/language/hr/login.json
@@ -0,0 +1,12 @@
+{
+ "username-email": "Korisničko ime / Email",
+ "username": "Korisničko ime",
+ "email": "Email",
+ "remember_me": "Zapamti me?",
+ "forgot_password": "Zaboravljena lozinka?",
+ "alternative_logins": "Alternativne prijave",
+ "failed_login_attempt": "Neuspješna prijava",
+ "login_successful": "Uspješno ste prijavljeni!",
+ "dont_have_account": "Nemate korisnički račun?",
+ "logged-out-due-to-inactivity": "Odjavljeni ste iz administratorske kontrolne ploče zbog neaktivnosti."
+}
\ No newline at end of file
diff --git a/public/language/hr/modules.json b/public/language/hr/modules.json
new file mode 100644
index 0000000000..90a85d3450
--- /dev/null
+++ b/public/language/hr/modules.json
@@ -0,0 +1,49 @@
+{
+ "chat.chatting_with": "Razgovaraj sa ",
+ "chat.placeholder": "Upišite poruku ovdje, ENTER za slanje",
+ "chat.send": "Pošalji",
+ "chat.no_active": "Nemate aktivnih razgovora.",
+ "chat.user_typing": "%1 piše poruku ...",
+ "chat.user_has_messaged_you": "%1 vam je poslao poruku.",
+ "chat.see_all": "Pogledaj sve razgovore",
+ "chat.mark_all_read": "Označi sve razgovore kao pročitane",
+ "chat.no-messages": "Odaberite primatelja da vidite povijest razgovora",
+ "chat.no-users-in-room": "Nema korisnika u ovoj sobi",
+ "chat.recent-chats": "Nedavni razgovori",
+ "chat.contacts": "Kontakti",
+ "chat.message-history": "Povijest razgovora",
+ "chat.pop-out": "Pop out razgovor",
+ "chat.minimize": "Smanji",
+ "chat.maximize": "Povećaj",
+ "chat.seven_days": "7 Dana",
+ "chat.thirty_days": "30 Dana",
+ "chat.three_months": "3 Mjeseca",
+ "chat.delete_message_confirm": "Sigurni ste da želite izbrisati ovu poruku?",
+ "chat.add-users-to-room": "Dodaj korisnike u sobu",
+ "chat.confirm-chat-with-dnd-user": "Korisnik ne želi biti ometan. Jeste li sigurno da mu želite poslati poruku?",
+ "composer.compose": "Sastavi",
+ "composer.show_preview": "Prikaz",
+ "composer.hide_preview": "Sakrij prikaz",
+ "composer.user_said_in": "%1 je rekao u %2:",
+ "composer.user_said": "%1 je rekao:",
+ "composer.discard": "Sigurni ste da želite odbaciti ovu objavu?",
+ "composer.submit_and_lock": "Objavi i zaključaj",
+ "composer.toggle_dropdown": "Promjeni padajuće",
+ "composer.uploading": "Šaljem %1",
+ "composer.formatting.bold": "Bold",
+ "composer.formatting.italic": "Italic",
+ "composer.formatting.list": "Popis",
+ "composer.formatting.strikethrough": "Precrtano",
+ "composer.formatting.link": "Poveznica",
+ "composer.formatting.picture": "Slika",
+ "composer.upload-picture": "Učitaj sliku",
+ "composer.upload-file": "Učitaj datoteku",
+ "composer.zen_mode": "Zen",
+ "composer.select_category": "Odaberi kategoriju",
+ "bootbox.ok": "OK",
+ "bootbox.cancel": "Odbaci",
+ "bootbox.confirm": "Potvrdi",
+ "cover.dragging_title": "Pozicija naslovne slike",
+ "cover.dragging_message": "Povucite sliku na željenu poziciju i spremite \\\"Save\\\"",
+ "cover.saved": "Spremljeno"
+}
\ No newline at end of file
diff --git a/public/language/hr/notifications.json b/public/language/hr/notifications.json
new file mode 100644
index 0000000000..ba6c3cd24e
--- /dev/null
+++ b/public/language/hr/notifications.json
@@ -0,0 +1,48 @@
+{
+ "title": "Obavijesti",
+ "no_notifs": "Nema novih obavijesti",
+ "see_all": "Pogledaj sve obavijesti",
+ "mark_all_read": "Označi sve obavijesti kao pročitane",
+ "back_to_home": "Povratak na %1",
+ "outgoing_link": "Odlazna poveznica",
+ "outgoing_link_message": "Napuštate %1",
+ "continue_to": "Nastavite na %1",
+ "return_to": "Vratite se na %1",
+ "new_notification": "Nova obavijest",
+ "you_have_unread_notifications": "Nepročitane obavijesti.",
+ "all": "Sve",
+ "topics": "Teme",
+ "replies": "Odgovori",
+ "chat": "Razgovori",
+ "follows": "Pratitelji",
+ "upvote": "Glasači za",
+ "new-flags": "Nove zastave",
+ "my-flags": "Zastave označene na mene",
+ "bans": "Blokirani",
+ "new_message_from": "Poruka od %1",
+ "upvoted_your_post_in": "%1 je glasao za u %2.",
+ "upvoted_your_post_in_dual": "%1 i %2 Glasalo je za Vašu objavu in %3.",
+ "upvoted_your_post_in_multiple": "%1 i %2 ostalih glasalo je za Vašu objavu %3.",
+ "moved_your_post": "%1 je premjestio Vašu objavu u %2",
+ "moved_your_topic": "%1 je premjestio %2",
+ "user_flagged_post_in": "%1 je označio objavu u %2",
+ "user_flagged_post_in_dual": "%1 i %2 označio objavu u %3",
+ "user_flagged_post_in_multiple": "%1 i %2 ostalih označio objavu u %3",
+ "user_flagged_user": "%1 označio je profil (%2)",
+ "user_flagged_user_dual": "%1 i %2su označili profil (%3)",
+ "user_flagged_user_multiple": "%1 i %2 ostalih su označili korisnički profil (%3)",
+ "user_posted_to": "%1 i %2 su odgovorili na: %3",
+ "user_posted_to_dual": "%1 i %2 ostalih su odgovorili na objavu u: %3",
+ "user_posted_to_multiple": "%1 i %2 drugih su odgovorili na: %3",
+ "user_posted_topic": "%1 je otvorio novu temu: %2",
+ "user_started_following_you": "%1 Vas sada prati.",
+ "user_started_following_you_dual": "%1 i %2 vas sada prate.",
+ "user_started_following_you_multiple": "%1 i %2 ostalih vas sada prate.",
+ "new_register": "%1 je poslao zahtjev za registraciju.",
+ "new_register_multiple": "%1 registracija čeka odobrenje.",
+ "flag_assigned_to_you": "Zastava%1 je dodijeljena vama.",
+ "email-confirmed": "Email potvrđen",
+ "email-confirmed-message": "Hvala na potvrdi emaila. Vaš račun je sada aktivan.",
+ "email-confirm-error-message": "Nastao je problem pri potvrdi Vaše email adrese. Provjerite kod ili zatražite novi.",
+ "email-confirm-sent": "Provjera korisničkog emaila poslana."
+}
\ No newline at end of file
diff --git a/public/language/hr/pages.json b/public/language/hr/pages.json
new file mode 100644
index 0000000000..76cd7ae518
--- /dev/null
+++ b/public/language/hr/pages.json
@@ -0,0 +1,52 @@
+{
+ "home": "Naslovna",
+ "unread": "Nepročitane teme",
+ "popular-day": "Popularne teme danas",
+ "popular-week": "Popularne teme ovaj tjedan",
+ "popular-month": "Popularne teme ovaj mjesec",
+ "popular-alltime": "Najpopularnije teme ",
+ "recent": "Nedavne teme",
+ "flagged-content": "Označene objave",
+ "ip-blacklist": "IP crna lista",
+ "users/online": "Online korisnici",
+ "users/latest": "Posljednji korisnici",
+ "users/sort-posts": "Korisnici s najviše objava",
+ "users/sort-reputation": "Korisnici s najvećom reputacijom",
+ "users/banned": "Blokirani korisnici",
+ "users/most-flags": "Najviše označeni korisnici",
+ "users/search": "Pretraga korisnika",
+ "notifications": "Obavijesti",
+ "tags": "Oznake",
+ "tag": "Teme označene pod \\\"%1\\\"",
+ "register": "Registrirajte se",
+ "registration-complete": "Registracija uspješna",
+ "login": "Prijavite se na Vaš račun",
+ "reset": "Promijenite lozinku",
+ "categories": "Kategorije",
+ "groups": "Grupe",
+ "group": "%1 grupa",
+ "chats": "Razgovori",
+ "chat": "Razgovor s %1",
+ "flags": "Zastave",
+ "flag-details": "Detalji zastave %1",
+ "account/edit": "Uređivanje \\\"%1\\\"",
+ "account/edit/password": "Uređivanje lozinke \\\"%1\\",
+ "account/edit/username": "Uređivanje korisnika \\\"%1\\\"",
+ "account/edit/email": "Uređivanje email \\\"%1\\\"",
+ "account/info": "Informacija o računu",
+ "account/following": "Ljudi %1 prati",
+ "account/followers": "Ljudi koji prate %1",
+ "account/posts": "Objavio %1",
+ "account/topics": "Teme od %1",
+ "account/groups": "%1 grupe",
+ "account/bookmarks": "%1 zabilježene objave",
+ "account/settings": "Korisničke postavke",
+ "account/watched": "Teme prati %1",
+ "account/upvoted": "%1 glasao za",
+ "account/downvoted": "%1 glasao protiv",
+ "account/best": "Najbolje objave od %1",
+ "confirm": "Email potvrđen!",
+ "maintenance.text": "%1 Održavanje u toku. Posjetite nas uskoro.",
+ "maintenance.messageIntro": "Poruka administratora:",
+ "throttled.text": "%1: Preopterećenje sustava. Pričekajte nekoliko trenutaka."
+}
\ No newline at end of file
diff --git a/public/language/hr/recent.json b/public/language/hr/recent.json
new file mode 100644
index 0000000000..ac247883e2
--- /dev/null
+++ b/public/language/hr/recent.json
@@ -0,0 +1,19 @@
+{
+ "title": "Nedavno",
+ "day": "Dan",
+ "week": "Tjedan",
+ "month": "Mjesec",
+ "year": "Godina",
+ "alltime": "Sve vrijeme",
+ "no_recent_topics": "Nema nedavnih tema.",
+ "no_popular_topics": "Nema popularnih tema.",
+ "there-is-a-new-topic": "Nova tema.",
+ "there-is-a-new-topic-and-a-new-post": "Nova tema i nova objava.",
+ "there-is-a-new-topic-and-new-posts": "Nova tema i %1 nova objava",
+ "there-are-new-topics": "%1 nova tema",
+ "there-are-new-topics-and-a-new-post": "%1 nova tema i nova objava",
+ "there-are-new-topics-and-new-posts": "%1 nova tema i %2 nova objava",
+ "there-is-a-new-post": "Nova objava.",
+ "there-are-new-posts": "%1 nova objava.",
+ "click-here-to-reload": "Klikni ovdje za ponovno učitavanje."
+}
\ No newline at end of file
diff --git a/public/language/hr/register.json b/public/language/hr/register.json
new file mode 100644
index 0000000000..a518352cf3
--- /dev/null
+++ b/public/language/hr/register.json
@@ -0,0 +1,23 @@
+{
+ "register": "Registracija",
+ "cancel_registration": "Obustavi registraciju",
+ "help.email": "Vaš email će biti skriven od javnosti.",
+ "help.username_restrictions": "Unikatno korisničko ime između %1 i %2 znaka. Ostali Vas mogu spomenuti sa @username.",
+ "help.minimum_password_length": "Dužina lozinke mora biti %1 znakova.",
+ "email_address": "Email adresa",
+ "email_address_placeholder": "Unesite email adresu",
+ "username": "Korisničko ime",
+ "username_placeholder": "Unesite korisničko ime",
+ "password": "Lozinka",
+ "password_placeholder": "Unesite lozinku",
+ "confirm_password": "Potvrdite lozinku",
+ "confirm_password_placeholder": "Potvrdite lozinku",
+ "register_now_button": "Registrirajte se",
+ "alternative_registration": "Alternativna registracija:",
+ "terms_of_use": "Uvjeti korištenja",
+ "agree_to_terms_of_use": "Prihvaćam uvjete korištenja",
+ "terms_of_use_error": "Morate prihvatiti uvjete korištenja",
+ "registration-added-to-queue": "Vaša registracija je dodana u listu zahtjeva za registraciju. Biti ćete obaviješteni kad Vas administrator prihvati.",
+ "interstitial.intro": "Treba nam još par dodatnih informacija prije nego kreirate novi račun.",
+ "interstitial.errors-found": "Nismo uspijeli dovršiti registraciju:"
+}
\ No newline at end of file
diff --git a/public/language/hr/reset_password.json b/public/language/hr/reset_password.json
new file mode 100644
index 0000000000..a815beb932
--- /dev/null
+++ b/public/language/hr/reset_password.json
@@ -0,0 +1,17 @@
+{
+ "reset_password": "Resetiranje lozinke",
+ "update_password": "Promjeni lozinku",
+ "password_changed.title": "Lozinka promijenjena",
+ "password_changed.message": "Lozink uspješno promijenjena, prijavite se ponovno!.",
+ "wrong_reset_code.title": "Netočan kod za resetiranje",
+ "wrong_reset_code.message": "Netočan kod za resetiranje. Probaj ponovno ili zatraži novi kod.",
+ "new_password": "Nova lozinka",
+ "repeat_password": "Potvrdi lozinku",
+ "enter_email": "Unesite Vašu email adresu i poslati ćemo Vam email sa uputstvima kako resetirati lozinku.",
+ "enter_email_address": "Unesite email adresu",
+ "password_reset_sent": "Poslan je zahtjev za resetiranje lozinke",
+ "invalid_email": "Netočan email / email ne postoji!",
+ "password_too_short": "Lozinka koju ste unijeli je prekratka, izaberite drugu lozinku.",
+ "passwords_do_not_match": "Lozinke se ne podudaraju!",
+ "password_expired": "Vaša lozinka je istekla, izaberite novu lozinku"
+}
\ No newline at end of file
diff --git a/public/language/hr/search.json b/public/language/hr/search.json
new file mode 100644
index 0000000000..a2e5fddedd
--- /dev/null
+++ b/public/language/hr/search.json
@@ -0,0 +1,42 @@
+{
+ "results_matching": "%1 rezultat odgovara \"%2\", (%3 sekunde)",
+ "no-matches": "Nema rezultata",
+ "advanced-search": "Napredna pretraga",
+ "in": "U",
+ "titles": "Naslovi",
+ "titles-posts": "Naslovi i objave",
+ "posted-by": "Objavio",
+ "in-categories": "U kategoriji",
+ "search-child-categories": "Pretraži podkategorije",
+ "has-tags": "Ima oznake",
+ "reply-count": "Broj odgovora",
+ "at-least": "Najmanje",
+ "at-most": "Najviše",
+ "relevance": "Relevantno",
+ "post-time": "Vrijeme objave",
+ "newer-than": "Novije od",
+ "older-than": "Starije od",
+ "any-date": "Bilo kada",
+ "yesterday": "Jučer",
+ "one-week": "Tjedan",
+ "two-weeks": "Dva tjedna",
+ "one-month": "Mjesec",
+ "three-months": "Tri mjeseca",
+ "six-months": "Šest mjeseci",
+ "one-year": "Godina",
+ "sort-by": "Sortiraj po",
+ "last-reply-time": "Vrijeme zadnje odgovora",
+ "topic-title": "Naslov teme",
+ "number-of-replies": "Broj odgovora",
+ "number-of-views": "Broj pogleda",
+ "topic-start-date": "Početak teme",
+ "username": "Korisničko ime",
+ "category": "Kategorija",
+ "descending": "U silaznom redu",
+ "ascending": "Po uzlaznom redu",
+ "save-preferences": "Spremi postavke",
+ "clear-preferences": "Očisti postavke",
+ "search-preferences-saved": "Postavke pretraživanja spremljene",
+ "search-preferences-cleared": "Postavke pretraživanja očišćene ",
+ "show-results-as": "Prikaži rezultate kao"
+}
\ No newline at end of file
diff --git a/public/language/hr/success.json b/public/language/hr/success.json
new file mode 100644
index 0000000000..55b303fba9
--- /dev/null
+++ b/public/language/hr/success.json
@@ -0,0 +1,6 @@
+{
+ "success": "Uspijeh",
+ "topic-post": "Uspješna objava",
+ "authentication-successful": "Autentifikacija uspješna",
+ "settings-saved": "Postavke spremljene!"
+}
\ No newline at end of file
diff --git a/public/language/hr/tags.json b/public/language/hr/tags.json
new file mode 100644
index 0000000000..ba0b9b5495
--- /dev/null
+++ b/public/language/hr/tags.json
@@ -0,0 +1,7 @@
+{
+ "no_tag_topics": "Nema tema sa ovom oznakom",
+ "tags": "Oznake",
+ "enter_tags_here": "Unesite oznake, između %1 i %2 znaka.",
+ "enter_tags_here_short": "Unestie oznake ...",
+ "no_tags": "Još nema oznaka."
+}
\ No newline at end of file
diff --git a/public/language/hr/topic.json b/public/language/hr/topic.json
new file mode 100644
index 0000000000..45b25f3e6c
--- /dev/null
+++ b/public/language/hr/topic.json
@@ -0,0 +1,119 @@
+{
+ "topic": "Tema",
+ "topic_id": "ID Teme",
+ "topic_id_placeholder": "Unesite ID teme",
+ "no_topics_found": "Tema nije pronađena!",
+ "no_posts_found": "Objave nisu pronađene!",
+ "post_is_deleted": "Ova objava je obrisana!",
+ "topic_is_deleted": "Ova tema je obrisana!",
+ "profile": "Profil",
+ "posted_by": "Objavio %1",
+ "posted_by_guest": "Objavio gost",
+ "chat": "Razgovor",
+ "notify_me": "Budi obavješten o novim odgovorima na ovu temu",
+ "quote": "Citat",
+ "reply": "Odgovor",
+ "replies_to_this_post": "%1 je odgovorio",
+ "last_reply_time": "Zadnji odgovor",
+ "reply-as-topic": "Odgovori kao temu",
+ "guest-login-reply": "Prijavi se za objavu",
+ "edit": "Uredi",
+ "delete": "Obriši",
+ "purge": "Očisti sve",
+ "restore": "Obnovi",
+ "move": "Premjesti",
+ "fork": "Dupliraj",
+ "link": "Poveznica",
+ "share": "Podijeli",
+ "tools": "Alati",
+ "locked": "Zaključano",
+ "pinned": "Zakačeno",
+ "moved": "Premješteno",
+ "bookmark_instructions": "Klikni ovdje za povratak na zadnji pročitani post.",
+ "flag_title": "Označi ovaj post za zastavom za moderaciju",
+ "deleted_message": "Ova tema je obrisana. Samo korisnici sa privilegijom upravljanja tema je mogu vidjeti.",
+ "following_topic.message": "Od sada ćete primati obavijesti kada netko objavi objavu u ovoj temi.",
+ "not_following_topic.message": "Od sada ćete vidjeti ovu temu u popisu nepročitanih tema,ali nećete dobivati obavijesti kada netko objavi objavu u temi.",
+ "ignoring_topic.message": "Od sada više nećete vidjeti ovu temu u popisu nepročitanih tema.Bit će te obaviješteni kada ste spomenuti ili je netko glasao za vašu objavu.",
+ "login_to_subscribe": "Registriraj se ili prijavi kako bi se mogao pretplatit na ovu temu.",
+ "markAsUnreadForAll.success": "Tema označena kao nepročitana za sve.",
+ "mark_unread": "Označi kao nepročitano",
+ "mark_unread.success": "Tema označena kao nepročitana",
+ "watch": "Prati",
+ "unwatch": "Prestani pratiti",
+ "watch.title": "Budi obaviješten o novim objavama u ovoj temi",
+ "unwatch.title": "Prestani pratiti ovu temu",
+ "share_this_post": "Podijeli ovu objavu",
+ "watching": "Prati",
+ "not-watching": "Ne pratiš",
+ "ignoring": "Ignoriraš",
+ "watching.description": "Obavijesti me o novim odgovorima .
Prikaži temu u nepročitanim ako kategorija nije ignorirana.",
+ "ignoring.description": "Nemoj slati obavijesti o novim odgovorima.
Ne prikazuj temu u nepročitanom.",
+ "thread_tools.title": "Alati teme",
+ "thread_tools.markAsUnreadForAll": "Označi kao nepročitano za sve",
+ "thread_tools.pin": "Zakači temu",
+ "thread_tools.unpin": "Otkači temu",
+ "thread_tools.lock": "Zaključaj temu",
+ "thread_tools.unlock": "Odključaj temu",
+ "thread_tools.move": "Premjesti temu",
+ "thread_tools.move_all": "Premjesti sve",
+ "thread_tools.fork": "Dupliraj temu",
+ "thread_tools.delete": "Obriši temu",
+ "thread_tools.delete-posts": "Obriši objavu",
+ "thread_tools.delete_confirm": "Sigurni ste da želite obrisati ovu temu?",
+ "thread_tools.restore": "Povrati temu",
+ "thread_tools.restore_confirm": "Sigurni ste da želite povratiti ovu temu?",
+ "thread_tools.purge": "Odbaci temu",
+ "thread_tools.purge_confirm": "Sigurni ste da želite odbaciti ovu temu?",
+ "topic_move_success": "Tema je uspješno pomaknuta u %1",
+ "post_delete_confirm": "Sigurni ste da želite obrisati ovu objavu?",
+ "post_restore_confirm": "Sigurni ste da želite povratiti ovu objavu?",
+ "post_purge_confirm": "Sigurni ste da želite odbaciti ovu objavu?",
+ "load_categories": "Učitavam kategorije",
+ "disabled_categories_note": "Onemogućene kategorije su izbljeđene",
+ "confirm_move": "Pomakni",
+ "confirm_fork": "Dupliraj",
+ "bookmark": "Zabilježi",
+ "bookmarks": "Zabilješke",
+ "bookmarks.has_no_bookmarks": "Nemate zabiježenih objava.",
+ "loading_more_posts": "Učitavam više objava",
+ "move_topic": "Pomakni temu",
+ "move_topics": "Pomakni teme",
+ "move_post": "Pomakni objavu",
+ "post_moved": "Objava pomaknuta!",
+ "fork_topic": "Dupliraj temu",
+ "topic_will_be_moved_to": "Ova tem će biti pomaknuta u kategoriju",
+ "fork_topic_instruction": "Označi objave koje želite duplirati",
+ "fork_no_pids": "Objave nisu odabrane!",
+ "fork_pid_count": "%1 objava odabrana",
+ "fork_success": "Uspješno duplirana tema. Kliknite ovdje za dupliranu temu.",
+ "delete_posts_instruction": "Označite objave koje želite obrisati/odbaciti",
+ "composer.title_placeholder": "Unesite naslov teme ovdje ...",
+ "composer.handle_placeholder": "Ime",
+ "composer.discard": "Odbaci",
+ "composer.submit": "Podnesi",
+ "composer.replying_to": "Odgovori na %1",
+ "composer.new_topic": "Nova tema",
+ "composer.uploading": "slanje...",
+ "composer.thumb_url_label": "Zaljepite URL slike za temu",
+ "composer.thumb_title": "Dodajte slike ovoj temi",
+ "composer.thumb_url_placeholder": "http://example.com/thumb.png",
+ "composer.thumb_file_label": "Ili učitajte datoteku",
+ "composer.thumb_remove": "Očisti polja",
+ "composer.drag_and_drop_images": "Dovuci i pusti sliku ovdje",
+ "more_users_and_guests": "%1 korisnik i %2 gosta",
+ "more_users": "%1 korisnik",
+ "more_guests": "%1 gost",
+ "users_and_others": "%1 i %2 druga",
+ "sort_by": "Sortitaj po",
+ "oldest_to_newest": "Starije prema Novom",
+ "newest_to_oldest": "Novije prema Starom",
+ "most_votes": "Najviše glasova",
+ "most_posts": "Najviše objava",
+ "stale.title": "Otvori novu temu?",
+ "stale.warning": "Tema na koju odgovarate je stara. Želite li otvoriti novu temu i postaviti referencu u vašem odgovoru?",
+ "stale.create": "Otvori novu temu",
+ "stale.reply_anyway": "Odgovori na ovu temu svejedno",
+ "link_back": "Re: [%1](%2)"
+}
\ No newline at end of file
diff --git a/public/language/hr/unread.json b/public/language/hr/unread.json
new file mode 100644
index 0000000000..2d8bd2128a
--- /dev/null
+++ b/public/language/hr/unread.json
@@ -0,0 +1,13 @@
+{
+ "title": "Nepročitano",
+ "no_unread_topics": "Sve teme su pročitane",
+ "load_more": "Učitaj više",
+ "mark_as_read": "Označi kao pročitano",
+ "selected": "Odabrano",
+ "all": "Sve",
+ "all_categories": "Sve kategorije",
+ "topics_marked_as_read.success": "Teme označene kao pročitane!",
+ "all-topics": "Sve teme",
+ "new-topics": "Nove teme",
+ "watched-topics": "Praćene teme"
+}
\ No newline at end of file
diff --git a/public/language/hr/uploads.json b/public/language/hr/uploads.json
new file mode 100644
index 0000000000..6a3655ad9b
--- /dev/null
+++ b/public/language/hr/uploads.json
@@ -0,0 +1,6 @@
+{
+ "uploading-file": "Učitavam datoteku ...",
+ "select-file-to-upload": "Izaberite datoteku!",
+ "upload-success": "Prijenos datoteka uspješan!",
+ "maximum-file-size": "Maksimum %1 kb"
+}
\ No newline at end of file
diff --git a/public/language/hr/user.json b/public/language/hr/user.json
new file mode 100644
index 0000000000..20ad62ec30
--- /dev/null
+++ b/public/language/hr/user.json
@@ -0,0 +1,136 @@
+{
+ "banned": "Blokiran",
+ "offline": "Nije na mreži",
+ "username": "Korisničko ime",
+ "joindate": "Datum prijave",
+ "postcount": "Broj objava",
+ "email": "Email",
+ "confirm_email": "Potvrdi email",
+ "account_info": "Informacije o računu",
+ "ban_account": "Blokiraj račun",
+ "ban_account_confirm": "Da li zaista želite blokirati ovog korisnika",
+ "unban_account": "Odblokiraj račun",
+ "delete_account": "Obriši račun",
+ "delete_account_confirm": "Jeste li sigurni da želite obrisati vaš račun?
Ova radnja je nepovratna i nećete više moći pristupiti vašim podacima
Upišite svoje korisničko ime za potvrdu brisanja računa.",
+ "delete_this_account_confirm": "Jeste li sigurni da želite obrisati vaš račun?
Ova radnja je nepovratna i nećete više moći pristupiti vašim podacima
",
+ "account-deleted": "Račun obrisan",
+ "fullname": "Puno ime",
+ "website": "Web stranica",
+ "location": "Lokacija",
+ "age": "Dob",
+ "joined": "Priključio",
+ "lastonline": "Viđen na mreži",
+ "profile": "Profil",
+ "profile_views": "Pregled profila",
+ "reputation": "Reputacija",
+ "bookmarks": "Zabilješke",
+ "watched": "Gledano",
+ "followers": "Pratitelji",
+ "following": "Prati",
+ "aboutme": "O meni",
+ "signature": "Potpis",
+ "birthday": "Rođendan",
+ "chat": "Razgovor",
+ "chat_with": "Nastavi razgovor sa %1!",
+ "new_chat_with": "Pokreni novi razgovor sa %1",
+ "flag-profile": "Označi profil",
+ "follow": "Prati",
+ "unfollow": "Prestani pratiti",
+ "more": "Više",
+ "profile_update_success": "Profil je uspješno promijenjen!",
+ "change_picture": "Promjeni sliku",
+ "change_username": "Promjeni korisničko ime",
+ "change_email": "Promjeni email",
+ "edit": "Uredi",
+ "edit-profile": "Uredi profil",
+ "default_picture": "Zadana ikona",
+ "uploaded_picture": "Učitaj sliku",
+ "upload_new_picture": "Učitaj novu sliku",
+ "upload_new_picture_from_url": "Učitaj sliku iz URL",
+ "current_password": "Sadašnja lozinka",
+ "change_password": "Promjeni lozinku",
+ "change_password_error": "Netočna lozinka!",
+ "change_password_error_wrong_current": "Vaša trenutačna lozinka nije točna!",
+ "change_password_error_length": "Lozinka prekratka!",
+ "change_password_error_match": "Lozinke se moraju podudarati!",
+ "change_password_error_privileges": "Nemate pravo mijenjati ovu lozinku.",
+ "change_password_success": "Vaša lozinka je promijenjena!",
+ "confirm_password": "Potvrdi lozinku",
+ "password": "Lozinka",
+ "username_taken_workaround": "Korisničko ime koje ste izabrali je već zauzeto. Zbog toga smo ga malo promjenili. Sada je vaše korisničko ime%1",
+ "password_same_as_username": "Vaša lozinka je ista kao i vaše korisničko ime, molimo upišite drugu lozinku.",
+ "password_same_as_email": "Vaša lozinka je ista kao vaš email, molimo upišite drugu lozinku.",
+ "weak_password": "Slaba lozinka",
+ "upload_picture": "Učitaj sliku",
+ "upload_a_picture": "Učitaj sliku",
+ "remove_uploaded_picture": "Ukloni učitanu sliku",
+ "upload_cover_picture": "Učitaj naslovnu sliku",
+ "remove_cover_picture_confirm": "Jeste li sigurno da želite ukloniti naslovnu sliku",
+ "crop_picture": "Skratite sliku",
+ "upload_cropped_picture": "Skrati i učitaj",
+ "settings": "Postavke",
+ "show_email": "Prikaži email",
+ "show_fullname": "Prikaži puno ime",
+ "restrict_chats": "Dopusti poruke o korisnika koje pratim",
+ "digest_label": "Pretplati se na izvještaje",
+ "digest_description": "Pretplati se na email izvještaje od ovog foruma (nove obavjesti i teme) prema zadanom rasporedu",
+ "digest_off": "Isključi",
+ "digest_daily": "Dnevno",
+ "digest_weekly": "Tjedno",
+ "digest_monthly": "Mjesečno",
+ "send_chat_notifications": "Pošalji email ako stigne nova poruka i nisam na mreži",
+ "send_post_notifications": "Pošalji email kada se objavi odgovor na teme koje sam pretplaćen",
+ "settings-require-reload": "Neke promjene zahtjevaju osvježenje. Kliknite ovdje za osvježavanje stranice.",
+ "has_no_follower": "Ovaj korisnik nema pratitelja :(.",
+ "follows_no_one": "Ovaj korisnik nikog ne prati :(",
+ "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_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",
+ "email_hidden": "Email sakriven",
+ "hidden": "Sakriven",
+ "paginate_description": "Numeriraj teme i objave umjesto scrollanja",
+ "topics_per_page": "Teme po stranici",
+ "posts_per_page": "Objave po stranici",
+ "notification_sounds": "Sviraj zvuk kada primim obavijest",
+ "notifications_and_sounds": "Obavijesti i zvukovi",
+ "incoming-message-sound": "Zvuk nadolazećih poruka",
+ "outgoing-message-sound": "Zvuk odlazećih poruka",
+ "notification-sound": "Zvuk obavijesti",
+ "no-sound": "Bez zvuka",
+ "browsing": "Postavke pretraživanja",
+ "open_links_in_new_tab": "Otvori odlazne poveznice u novom tabu",
+ "enable_topic_searching": "Omogući pretragu unutar tema",
+ "topic_search_help": "Ako uključeno,pretraga unutar tema će zamijeniti pretragu ključnih riječi vašeg pretraživača kojemu je omogućeno pretraživanje samo onoga što je na ekranu,za razliku od ove opcije koja omogućava pretragu na cijeloj temi",
+ "delay_image_loading": "Odgodi učitavanje slika.",
+ "image_load_delay_help": "Ako omogućeno,slike u ovoj temi se neće učitavati dok nisu u potpunosti unutar ruba ekrana.",
+ "scroll_to_my_post": "Nakon objavljivanja,prikaži objavu",
+ "follow_topics_you_reply_to": "Prati teme na koje objavljuješ",
+ "follow_topics_you_create": "Prati teme koje si napravio",
+ "grouptitle": "Ime Grupe",
+ "no-group-title": "Nema imena grupe",
+ "select-skin": "Izaberi izgled",
+ "select-homepage": "Izaberi naslovnu",
+ "homepage": "Naslovna",
+ "homepage_description": "Izaberi stranicu ",
+ "custom_route": "Uobičajena putanja naslovnice",
+ "custom_route_help": "Izaberi ime putanje ovdje",
+ "sso.title": "Jednokratne usluge prijave",
+ "sso.associated": "Povezano sa",
+ "sso.not-associated": "Klikni ovdje za povezivanje sa",
+ "info.latest-flags": "Zadnja zastava",
+ "info.no-flags": "Nema objava sa zastavama",
+ "info.ban-history": "Povijest nedavno blokiranih",
+ "info.no-ban-history": "Ovaj korisnik nikad nije bio blokiran",
+ "info.banned-until": "Blokiran do %1!",
+ "info.banned-permanently": "Trajno blokiran",
+ "info.banned-reason-label": "Razlog",
+ "info.banned-no-reason": "Razlog nije dan.",
+ "info.username-history": "Povijest korisničkog imena",
+ "info.email-history": "Povijest emaila",
+ "info.moderation-note": "Poruka moderiranja",
+ "info.moderation-note.success": "Poruka moderiranja spremljena",
+ "info.moderation-note.add": "Dodaj bilješku"
+}
\ No newline at end of file
diff --git a/public/language/hr/users.json b/public/language/hr/users.json
new file mode 100644
index 0000000000..cafe2c0412
--- /dev/null
+++ b/public/language/hr/users.json
@@ -0,0 +1,21 @@
+{
+ "latest_users": "Posljednji korisnici",
+ "top_posters": "Najviše objava",
+ "most_reputation": "Najveća reputacija",
+ "most_flags": "Najviše zastava",
+ "search": "Pretraga",
+ "enter_username": "Unesi korisničko ime za pretragu",
+ "load_more": "Učitaj više",
+ "users-found-search-took": "%1user(s) pronađeni! Pretraga je trajala %2 sekundi.",
+ "filter-by": "Filtriraj po",
+ "online-only": "Samo na mreži",
+ "invite": "Pozovi",
+ "invitation-email-sent": "Pozivnica poslana %1",
+ "user_list": "Popis korisnika",
+ "recent_topics": "Zadnje teme",
+ "popular_topics": "Popularne teme",
+ "unread_topics": "Nepročitane teme",
+ "categories": "Kategorije",
+ "tags": "Tagovi",
+ "no-users-found": "Korisnici nisu pronađeni!"
+}
\ No newline at end of file
From 064a8aa6d73ac4e015871b9dece009f581c0deea Mon Sep 17 00:00:00 2001
From: Julian Lam
Date: Thu, 11 May 2017 11:41:28 -0400
Subject: [PATCH 054/263] Allowing custom date range to be supplied in
pageviews graph, closes #5541
---
.../en-GB/admin/general/dashboard.json | 11 +++-
public/less/admin/general/dashboard.less | 2 -
public/src/admin/general/dashboard.js | 66 +++++++++++++++++--
public/src/utils.js | 4 +-
src/socket.io/admin.js | 10 +--
src/views/admin/general/dashboard.tpl | 28 ++++----
.../admin/partials/pageviews-range-select.tpl | 20 ++++++
7 files changed, 115 insertions(+), 26 deletions(-)
create mode 100644 src/views/admin/partials/pageviews-range-select.tpl
diff --git a/public/language/en-GB/admin/general/dashboard.json b/public/language/en-GB/admin/general/dashboard.json
index 02046bd17a..437e8e2461 100644
--- a/public/language/en-GB/admin/general/dashboard.json
+++ b/public/language/en-GB/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-last-month": "Last Month",
+ "page-views-this-month": "This Month",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
diff --git a/public/less/admin/general/dashboard.less b/public/less/admin/general/dashboard.less
index 12e542e32a..6bbb49fc86 100644
--- a/public/less/admin/general/dashboard.less
+++ b/public/less/admin/general/dashboard.less
@@ -130,8 +130,6 @@
}
.pageview-stats {
- width:33%;
-
strong {
font-size: 22px;
}
diff --git a/public/src/admin/general/dashboard.js b/public/src/admin/general/dashboard.js
index 71ad4e3738..6b88483ac0 100644
--- a/public/src/admin/general/dashboard.js
+++ b/public/src/admin/general/dashboard.js
@@ -294,7 +294,7 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator'], function (s
$(window).on('resize', adjustPieCharts);
adjustPieCharts();
- $('[data-action="updateGraph"]').on('click', function () {
+ $('[data-action="updateGraph"]:not([data-units="custom"])').on('click', function () {
var until;
switch ($(this).attr('data-until')) {
case 'last-month':
@@ -305,6 +305,60 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator'], function (s
updateTrafficGraph($(this).attr('data-units'), until);
$('[data-action="updateGraph"]').removeClass('active');
$(this).addClass('active');
+
+ require(['translator'], function (translator) {
+ translator.translate('[[admin/general/dashboard:page-views-custom]]', function (translated) {
+ $('[data-action="updateGraph"][data-units="custom"]').text(translated);
+ });
+ });
+ });
+ $('[data-action="updateGraph"][data-units="custom"]').on('click', function () {
+ var targetEl = $(this);
+
+ templates.parse('admin/partials/pageviews-range-select', {}, function (html) {
+ var modal = bootbox.dialog({
+ title: '[[admin/general/dashboard:page-views-custom]]',
+ message: html,
+ buttons: {
+ submit: {
+ label: '[[global:search]]',
+ className: 'btn-primary',
+ callback: submit,
+ },
+ },
+ });
+
+ function submit() {
+ // NEED TO ADD VALIDATION HERE FOR YYYY-MM-DD
+ var formData = modal.find('form').serializeObject();
+ var validRegexp = /\d{4}-\d{2}-\d{2}/;
+
+ // Input validation
+ if (!formData.startRange && !formData.endRange) {
+ // No range? Assume last 30 days
+ updateTrafficGraph('days');
+ $('[data-action="updateGraph"]').removeClass('active');
+ $('[data-action="updateGraph"][data-units="days"]').addClass('active');
+ return;
+ } else if (!validRegexp.test(formData.startRange) || !validRegexp.test(formData.endRange)) {
+ // Invalid Input
+ modal.find('.alert-danger').removeClass('hidden');
+ return false;
+ }
+
+ var until = new Date(formData.endRange);
+ until.setDate(until.getDate() + 1);
+ until = until.getTime();
+ var amount = (until - new Date(formData.startRange).getTime()) / (1000 * 60 * 60 * 24);
+
+ updateTrafficGraph('days', until, amount);
+ $('[data-action="updateGraph"]').removeClass('active');
+ targetEl.addClass('active');
+
+ // Update "custom range" label
+ targetEl.html(formData.startRange + ' – ' + formData.endRange);
+ }
+ });
});
socket.emit('admin.rooms.getAll', Admin.updateRoomUsage);
@@ -325,7 +379,9 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator'], function (s
});
}
- function updateTrafficGraph(units, until) {
+ function updateTrafficGraph(units, until, amount) {
+ // until and amount are optional
+
if (!app.isFocused) {
return;
}
@@ -334,6 +390,7 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator'], function (s
graph: 'traffic',
units: units || 'hours',
until: until,
+ amount: amount,
}, function (err, data) {
if (err) {
return app.alertError(err.message);
@@ -345,7 +402,7 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator'], function (s
graphData.traffic = data;
if (units === 'days') {
- graphs.traffic.data.xLabels = utils.getDaysArray(until);
+ graphs.traffic.data.xLabels = utils.getDaysArray(until, amount);
} else {
graphs.traffic.data.xLabels = utils.getHoursArray();
@@ -364,6 +421,7 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator'], function (s
graphs.traffic.update();
currentGraph.units = units;
currentGraph.until = until;
+ currentGraph.amount = amount;
});
}
@@ -450,7 +508,7 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator'], function (s
}, realtime ? DEFAULTS.realtimeInterval : DEFAULTS.roomInterval);
intervals.graphs = setInterval(function () {
- updateTrafficGraph(currentGraph.units, currentGraph.until);
+ updateTrafficGraph(currentGraph.units, currentGraph.until, currentGraph.amount);
}, realtime ? DEFAULTS.realtimeInterval : DEFAULTS.graphInterval);
}
diff --git a/public/src/utils.js b/public/src/utils.js
index 7264bfcf8f..3a73c5fdd6 100644
--- a/public/src/utils.js
+++ b/public/src/utils.js
@@ -274,13 +274,13 @@
return labels.reverse();
},
- getDaysArray: function (from) {
+ getDaysArray: function (from, amount) {
var currentDay = new Date(from || Date.now()).getTime();
var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
var labels = [];
var tmpDate;
- for (var x = 29; x >= 0; x -= 1) {
+ for (var x = (amount || 30) - 1; x >= 0; x -= 1) {
tmpDate = new Date(currentDay - (1000 * 60 * 60 * 24 * x));
labels.push(months[tmpDate.getMonth()] + ' ' + tmpDate.getDate());
}
diff --git a/src/socket.io/admin.js b/src/socket.io/admin.js
index 1b4d9ebada..2cdaa0161b 100644
--- a/src/socket.io/admin.js
+++ b/src/socket.io/admin.js
@@ -211,10 +211,12 @@ SocketAdmin.analytics.get = function (socket, data, callback) {
}
// Default returns views from past 24 hours, by hour
- if (data.units === 'days') {
- data.amount = 30;
- } else {
- data.amount = 24;
+ if (!data.amount) {
+ if (data.units === 'days') {
+ data.amount = 30;
+ } else {
+ data.amount = 24;
+ }
}
if (data.graph === 'traffic') {
diff --git a/src/views/admin/general/dashboard.tpl b/src/views/admin/general/dashboard.tpl
index d904637fe4..884fe5f2a8 100644
--- a/src/views/admin/general/dashboard.tpl
+++ b/src/views/admin/general/dashboard.tpl
@@ -11,17 +11,23 @@
-
-
-
diff --git a/src/views/admin/partials/pageviews-range-select.tpl b/src/views/admin/partials/pageviews-range-select.tpl
new file mode 100644
index 0000000000..e63166d3a5
--- /dev/null
+++ b/src/views/admin/partials/pageviews-range-select.tpl
@@ -0,0 +1,20 @@
+
\ No newline at end of file
From 572d7a1e8cb711a5e9684347d8fe17b75de3ef02 Mon Sep 17 00:00:00 2001
From: Ben Lubar
Date: Thu, 11 May 2017 11:25:13 -0500
Subject: [PATCH 055/263] Fix uploads of files with no extension failing when
there is no restriction on file extensions.
---
src/controllers/uploads.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/controllers/uploads.js b/src/controllers/uploads.js
index 3ef09c89cc..39db4bc00b 100644
--- a/src/controllers/uploads.js
+++ b/src/controllers/uploads.js
@@ -211,7 +211,7 @@ uploadsController.uploadFile = function (uid, uploadedFile, callback) {
var allowed = file.allowedExtensions();
var extension = path.extname(uploadedFile.name).toLowerCase();
- if (!extension || extension === '.' || (allowed.length > 0 && allowed.indexOf(extension) === -1)) {
+ if (allowed.length > 0 && (!extension || extension === '.' || allowed.indexOf(extension) === -1)) {
return callback(new Error('[[error:invalid-file-type, ' + allowed.join(', ') + ']]'));
}
From d06b19a69a8896266a3346810f3fd0f57ec3cc00 Mon Sep 17 00:00:00 2001
From: psychobunny
Date: Thu, 11 May 2017 16:06:59 -0400
Subject: [PATCH 056/263] up vanilla
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index b4a6a96933..549303aebe 100644
--- a/package.json
+++ b/package.json
@@ -65,7 +65,7 @@
"nodebb-rewards-essentials": "0.0.9",
"nodebb-theme-lavender": "4.0.0",
"nodebb-theme-persona": "5.0.0",
- "nodebb-theme-vanilla": "6.0.0",
+ "nodebb-theme-vanilla": "6.0.1",
"nodebb-widget-essentials": "3.0.0",
"nodemailer": "2.6.4",
"nodemailer-sendmail-transport": "1.0.0",
From 51a85031f737ca2ac27d6fce8e3336a5a4bb35d5 Mon Sep 17 00:00:00 2001
From: Baris Usakli
Date: Thu, 11 May 2017 16:31:10 -0400
Subject: [PATCH 057/263] utils tests
---
package.json | 1 +
public/src/utils.js | 4 +-
test/utils.js | 199 ++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 201 insertions(+), 3 deletions(-)
diff --git a/package.json b/package.json
index 549303aebe..39e8f74fc7 100644
--- a/package.json
+++ b/package.json
@@ -108,6 +108,7 @@
"grunt": "~1.0.0",
"grunt-contrib-watch": "^1.0.0",
"istanbul": "^0.4.2",
+ "jsdom": "9.12.0",
"mocha": "~3.2.0",
"mocha-lcov-reporter": "^1.2.0",
"xmlhttprequest": "1.8.0",
diff --git a/public/src/utils.js b/public/src/utils.js
index 3a73c5fdd6..fe655c2e3b 100644
--- a/public/src/utils.js
+++ b/public/src/utils.js
@@ -346,9 +346,7 @@
},
urlToLocation: function (url) {
- var a = document.createElement('a');
- a.href = url;
- return a;
+ return $('')[0];
},
// return boolean if string 'true' or string 'false', or if a parsable string which is a number
diff --git a/test/utils.js b/test/utils.js
index 9c8c2bfb12..2366b57d06 100644
--- a/test/utils.js
+++ b/test/utils.js
@@ -2,10 +2,26 @@
var assert = require('assert');
+var jsdom = require('jsdom');
var utils = require('./../public/src/utils.js');
describe('Utility Methods', function () {
+ // https://gist.github.com/robballou/9ee108758dc5e0e2d028
+ // create some jsdom magic to allow jQuery to work
+ var doc = jsdom.jsdom('');
+ var window = doc.defaultView;
+ global.jQuery = require('jquery')(window);
+ global.$ = global.jQuery;
+ var $ = global.$;
+ global.window = doc.defaultView;
+
+ it('should preserve case if requested', function (done) {
+ var slug = utils.slugify('UPPER CASE', true);
+ assert.equal(slug, 'UPPER-CASE');
+ done();
+ });
+
describe('username validation', function () {
it('accepts latin-1 characters', function () {
var username = "John\"'-. Doeäâèéë1234";
@@ -120,6 +136,13 @@ describe('Utility Methods', function () {
done();
});
+ it('should make numbers human readable on elements', function (done) {
+ var el = $('');
+ utils.makeNumbersHumanReadable(el);
+ assert.equal(el.html(), '100.0k');
+ done();
+ });
+
it('should add commas to numbers', function (done) {
assert.equal(utils.addCommas('100'), '100');
done();
@@ -135,6 +158,166 @@ describe('Utility Methods', function () {
done();
});
+ it('should add commas to elements', function (done) {
+ var el = $('1000000
');
+ utils.addCommasToNumbers(el);
+ assert.equal(el.html(), '1,000,000');
+ done();
+ });
+
+ it('should return passed in value if invalid', function (done) {
+ var bigInt = -111111111111111111;
+ var result = utils.toISOString(bigInt);
+ assert.equal(bigInt, result);
+ done();
+ });
+
+ it('should return false if browser is not android', function (done) {
+ global.navigator = {
+ userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36',
+ };
+ assert.equal(utils.isAndroidBrowser(), false);
+ done();
+ });
+
+ it('should return true if browser is android', function (done) {
+ global.navigator = {
+ userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Android /58.0.3029.96 Safari/537.36',
+ };
+ assert.equal(utils.isAndroidBrowser(), true);
+ done();
+ });
+
+ it('should return false if not touch device', function (done) {
+ global.document = global.document || {};
+ global.document.documentElement = {};
+ assert(!utils.isTouchDevice());
+ done();
+ });
+
+ it('should return true if touch device', function (done) {
+ global.document.documentElement = {
+ ontouchstart: 1,
+ };
+ assert(utils.isTouchDevice());
+ done();
+ });
+
+ it('should check if element is in viewport', function (done) {
+ var el = $('some text
');
+ assert(utils.isElementInViewport(el));
+ done();
+ });
+
+ it('should get empty object for url params', function (done) {
+ var params = utils.params();
+ assert.equal(Object.keys(params), 0);
+ done();
+ });
+
+ it('should get url params', function (done) {
+ var params = utils.params({ url: 'http://nodebb.org?foo=1&bar=test&herp=2' });
+ assert.equal(params.foo, 1);
+ assert.equal(params.bar, 'test');
+ assert.equal(params.herp, 2);
+ done();
+ });
+
+ it('should get a single param', function (done) {
+ assert.equal(utils.param('somekey'), undefined);
+ done();
+ });
+
+
+ describe('toType', function () {
+ it('should return param as is if not string', function (done) {
+ assert.equal(123, utils.toType(123));
+ done();
+ });
+
+ it('should convert return string numbers as numbers', function (done) {
+ assert.equal(123, utils.toType('123'));
+ done();
+ });
+
+ it('should convert string "false" to boolean false', function (done) {
+ assert.strictEqual(false, utils.toType('false'));
+ done();
+ });
+
+ it('should convert string "true" to boolean true', function (done) {
+ assert.strictEqual(true, utils.toType('true'));
+ done();
+ });
+
+ it('should parse json', function (done) {
+ var data = utils.toType('{"a":"1"}');
+ assert.equal(data.a, '1');
+ done();
+ });
+
+ it('should return string as is if its not json,true,false or number', function (done) {
+ var regularStr = 'this is a regular string';
+ assert.equal(regularStr, utils.toType(regularStr));
+ done();
+ });
+ });
+
+ describe('utils.props', function () {
+ var data = {};
+
+ it('should set nested data', function (done) {
+ assert.equal(10, utils.props(data, 'a.b.c.d', 10));
+ done();
+ });
+
+ it('should return nested object', function (done) {
+ var obj = utils.props(data, 'a.b.c');
+ assert.equal(obj.d, 10);
+ done();
+ });
+
+ it('should returned undefined without throwing', function (done) {
+ assert.equal(utils.props(data, 'a.b.c.foo.bar'), undefined);
+ done();
+ });
+
+ it('should return undefined if second param is null', function (done) {
+ assert.equal(utils.props(undefined, null), undefined);
+ done();
+ });
+ });
+
+ describe('isInternalURI', function () {
+ var target = { host: '', protocol: 'https' };
+ var reference = { host: '', protocol: 'https' };
+
+ it('should return true if they match', function (done) {
+ assert(utils.isInternalURI(target, reference, ''));
+ done();
+ });
+
+ it('should return true if they match', function (done) {
+ target.host = 'nodebb.org';
+ reference.host = 'nodebb.org';
+ assert(utils.isInternalURI(target, reference, ''));
+ done();
+ });
+
+ it('should handle relative path', function (done) {
+ target.pathname = '/forum';
+ assert(utils.isInternalURI(target, reference, '/forum'));
+ done();
+ });
+
+ it('should return false if they do not match', function (done) {
+ target.pathname = '';
+ reference.host = 'designcreateplay.com';
+ assert(!utils.isInternalURI(target, reference));
+ done();
+ });
+ });
+
it('escape html', function (done) {
var escaped = utils.escapeHTML('&<>');
assert.equal(escaped, '&<>');
@@ -178,4 +361,20 @@ describe('Utility Methods', function () {
assert.strictEqual(utils.rtrim('\t thing \t'), '\t thing');
done();
});
+
+ it('should walk directory', function (done) {
+ utils.walk(__dirname, function (err, data) {
+ assert.ifError(err);
+ assert(Array.isArray(data));
+ done();
+ });
+ });
+
+ it('should profile function', function (done) {
+ var st = process.hrtime();
+ setTimeout(function () {
+ process.profile('it took', st);
+ done();
+ }, 500);
+ });
});
From 816809ce3c63ac021dcea502a228d59295857695 Mon Sep 17 00:00:00 2001
From: Julian Lam
Date: Thu, 11 May 2017 16:53:30 -0400
Subject: [PATCH 058/263] fixes #5606
---
.../en-GB/admin/general/dashboard.json | 4 +--
public/src/admin/general/dashboard.js | 21 +++++++---------
src/analytics.js | 25 ++++++++-----------
src/socket.io/admin.js | 4 +--
src/views/admin/general/dashboard.tpl | 8 +++---
5 files changed, 28 insertions(+), 34 deletions(-)
diff --git a/public/language/en-GB/admin/general/dashboard.json b/public/language/en-GB/admin/general/dashboard.json
index 437e8e2461..61f4421fb5 100644
--- a/public/language/en-GB/admin/general/dashboard.json
+++ b/public/language/en-GB/admin/general/dashboard.json
@@ -5,8 +5,8 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Last Month",
- "page-views-this-month": "This Month",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
"page-views-last-day": "Last 24 hours",
"page-views-custom": "Custom Date Range",
"page-views-custom-start": "Range Start",
diff --git a/public/src/admin/general/dashboard.js b/public/src/admin/general/dashboard.js
index 6b88483ac0..054ed54e51 100644
--- a/public/src/admin/general/dashboard.js
+++ b/public/src/admin/general/dashboard.js
@@ -295,14 +295,11 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator'], function (s
adjustPieCharts();
$('[data-action="updateGraph"]:not([data-units="custom"])').on('click', function () {
- var until;
- switch ($(this).attr('data-until')) {
- case 'last-month':
- var lastMonth = new Date();
- lastMonth.setDate(lastMonth.getDate() - 30);
- until = lastMonth.getTime();
- }
- updateTrafficGraph($(this).attr('data-units'), until);
+ var until = new Date();
+ var amount = $(this).attr('data-amount');
+ until.setHours(0, 0, 0, 0);
+ until = until.getTime();
+ updateTrafficGraph($(this).attr('data-units'), until, amount);
$('[data-action="updateGraph"]').removeClass('active');
$(this).addClass('active');
@@ -406,11 +403,11 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator'], function (s
} else {
graphs.traffic.data.xLabels = utils.getHoursArray();
- $('#pageViewsThisMonth').html(data.monthlyPageViews.thisMonth);
- $('#pageViewsLastMonth').html(data.monthlyPageViews.lastMonth);
+ $('#pageViewsThirty').html(data.summary.thirty);
+ $('#pageViewsSeven').html(data.summary.seven);
$('#pageViewsPastDay').html(data.pastDay);
- utils.addCommasToNumbers($('#pageViewsThisMonth'));
- utils.addCommasToNumbers($('#pageViewsLastMonth'));
+ utils.addCommasToNumbers($('#pageViewsThirty'));
+ utils.addCommasToNumbers($('#pageViewsSeven'));
utils.addCommasToNumbers($('#pageViewsPastDay'));
}
diff --git a/src/analytics.js b/src/analytics.js
index 8e9871580b..8a7392f3ca 100644
--- a/src/analytics.js
+++ b/src/analytics.js
@@ -168,21 +168,18 @@ Analytics.getUnwrittenPageviews = function () {
return pageViews;
};
-Analytics.getMonthlyPageViews = function (callback) {
- var thisMonth = new Date();
- var lastMonth = new Date();
- thisMonth.setMonth(thisMonth.getMonth(), 1);
- thisMonth.setHours(0, 0, 0, 0);
- lastMonth.setMonth(thisMonth.getMonth() - 1, 1);
- lastMonth.setHours(0, 0, 0, 0);
-
- var values = [thisMonth.getTime(), lastMonth.getTime()];
+Analytics.getSummary = function (callback) {
+ var today = new Date();
+ today.setHours(0, 0, 0, 0);
- db.sortedSetScores('analytics:pageviews:month', values, function (err, scores) {
- if (err) {
- return callback(err);
- }
- callback(null, { thisMonth: scores[0] || 0, lastMonth: scores[1] || 0 });
+ async.parallel({
+ seven: async.apply(Analytics.getDailyStatsForSet, 'analytics:pageviews', today, 7),
+ thirty: async.apply(Analytics.getDailyStatsForSet, 'analytics:pageviews', today, 30),
+ }, function (err, scores) {
+ callback(null, {
+ seven: scores.seven.reduce(function (sum, cur) { return sum += cur; }, 0),
+ thirty: scores.thirty.reduce(function (sum, cur) { return sum += cur; }, 0),
+ });
});
};
diff --git a/src/socket.io/admin.js b/src/socket.io/admin.js
index 2cdaa0161b..f1bc4f2871 100644
--- a/src/socket.io/admin.js
+++ b/src/socket.io/admin.js
@@ -235,8 +235,8 @@ SocketAdmin.analytics.get = function (socket, data, callback) {
analytics.getHourlyStatsForSet('analytics:pageviews', data.until || Date.now(), data.amount, next);
}
},
- monthlyPageViews: function (next) {
- analytics.getMonthlyPageViews(next);
+ summary: function (next) {
+ analytics.getSummary(next);
},
}, function (err, data) {
data.pastDay = data.pageviews.reduce(function (a, b) { return parseInt(a, 10) + parseInt(b, 10); });
diff --git a/src/views/admin/general/dashboard.tpl b/src/views/admin/general/dashboard.tpl
index 884fe5f2a8..46f7e236dd 100644
--- a/src/views/admin/general/dashboard.tpl
+++ b/src/views/admin/general/dashboard.tpl
@@ -13,12 +13,12 @@
0
From 0f05ae4ac1cba3952b03397c7f1baea64260a5cd Mon Sep 17 00:00:00 2001
From: Baris Usakli
Date: Thu, 11 May 2017 17:16:22 -0400
Subject: [PATCH 059/263] filterpidsbycid tests
---
src/posts/category.js | 47 ++++++++++++++++++++++++-------------------
test/posts.js | 28 ++++++++++++++++++++++++++
2 files changed, 54 insertions(+), 21 deletions(-)
diff --git a/src/posts/category.js b/src/posts/category.js
index cb9a2566c4..6efbf1ec7d 100644
--- a/src/posts/category.js
+++ b/src/posts/category.js
@@ -54,31 +54,36 @@ module.exports = function (Posts) {
Posts.filterPidsByCid = function (pids, cid, callback) {
if (!cid) {
- return callback(null, pids);
+ return setImmediate(callback, null, pids);
}
if (!Array.isArray(cid) || cid.length === 1) {
- // Single cid
- db.isSortedSetMembers('cid:' + parseInt(cid, 10) + ':pids', pids, function (err, isMembers) {
- if (err) {
- return callback(err);
- }
+ return filterPidsBySingleCid(pids, cid, callback);
+ }
+
+ async.waterfall([
+ function (next) {
+ async.map(cid, function (cid, next) {
+ Posts.filterPidsByCid(pids, cid, next);
+ }, next);
+ },
+ function (pidsArr, next) {
+ next(null, _.union.apply(_, pidsArr));
+ },
+ ], callback);
+ };
+
+ function filterPidsBySingleCid(pids, cid, callback) {
+ async.waterfall([
+ function (next) {
+ db.isSortedSetMembers('cid:' + parseInt(cid, 10) + ':pids', pids, next);
+ },
+ function (isMembers, next) {
pids = pids.filter(function (pid, index) {
return pid && isMembers[index];
});
- callback(null, pids);
- });
- } else {
- // Multiple cids
- async.map(cid, function (cid, next) {
- Posts.filterPidsByCid(pids, cid, next);
- }, function (err, pidsArr) {
- if (err) {
- return callback(err);
- }
-
- callback(null, _.union.apply(_, pidsArr));
- });
- }
- };
+ next(null, pids);
+ },
+ ], callback);
+ }
};
diff --git a/test/posts.js b/test/posts.js
index e3a0ff1294..74172d808d 100644
--- a/test/posts.js
+++ b/test/posts.js
@@ -714,6 +714,34 @@ describe('Post\'s', function () {
});
});
+
+ describe('filterPidsByCid', function () {
+ it('should return pids as is if cid is falsy', function (done) {
+ posts.filterPidsByCid([1, 2, 3], null, function (err, pids) {
+ assert.ifError(err);
+ assert.deepEqual([1, 2, 3], pids);
+ done();
+ });
+ });
+
+ it('should filter pids by single cid', function (done) {
+ posts.filterPidsByCid([postData.pid, 100, 101], cid, function (err, pids) {
+ assert.ifError(err);
+ assert.deepEqual([postData.pid], pids);
+ done();
+ });
+ });
+
+ it('should filter pids by multiple cids', function (done) {
+ posts.filterPidsByCid([postData.pid, 100, 101], [cid, 2, 3], function (err, pids) {
+ assert.ifError(err);
+ assert.deepEqual([postData.pid], pids);
+ done();
+ });
+ });
+ });
+
+
after(function (done) {
db.emptydb(done);
});
From e4adaa89597bdc168f9223e135be9eefebe18eee Mon Sep 17 00:00:00 2001
From: Julian Lam
Date: Thu, 11 May 2017 17:22:40 -0400
Subject: [PATCH 060/263] linting
---
src/analytics.js | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/src/analytics.js b/src/analytics.js
index 8a7392f3ca..711eadc865 100644
--- a/src/analytics.js
+++ b/src/analytics.js
@@ -176,9 +176,21 @@ Analytics.getSummary = function (callback) {
seven: async.apply(Analytics.getDailyStatsForSet, 'analytics:pageviews', today, 7),
thirty: async.apply(Analytics.getDailyStatsForSet, 'analytics:pageviews', today, 30),
}, function (err, scores) {
+ if (err) {
+ return callback(null, {
+ seven: 0,
+ thirty: 0,
+ });
+ }
callback(null, {
- seven: scores.seven.reduce(function (sum, cur) { return sum += cur; }, 0),
- thirty: scores.thirty.reduce(function (sum, cur) { return sum += cur; }, 0),
+ seven: scores.seven.reduce(function (sum, cur) {
+ sum += cur;
+ return sum;
+ }, 0),
+ thirty: scores.thirty.reduce(function (sum, cur) {
+ sum += cur;
+ return sum;
+ }, 0),
});
});
};
From 45949be029c544502ead91401cd7aee7c69cb87f Mon Sep 17 00:00:00 2001
From: "Misty (Bot)"
Date: Fri, 12 May 2017 09:24:49 +0000
Subject: [PATCH 061/263] Latest translations and fallbacks
---
public/language/ar/admin/general/dashboard.json | 11 ++++++++---
public/language/bg/admin/general/dashboard.json | 11 ++++++++---
public/language/bn/admin/general/dashboard.json | 11 ++++++++---
public/language/cs/admin/general/dashboard.json | 11 ++++++++---
public/language/da/admin/general/dashboard.json | 11 ++++++++---
public/language/de/admin/general/dashboard.json | 11 ++++++++---
public/language/el/admin/general/dashboard.json | 11 ++++++++---
public/language/en-US/admin/general/dashboard.json | 11 ++++++++---
.../language/en-x-pirate/admin/general/dashboard.json | 11 ++++++++---
public/language/es/admin/general/dashboard.json | 11 ++++++++---
public/language/et/admin/general/dashboard.json | 11 ++++++++---
public/language/fa-IR/admin/general/dashboard.json | 11 ++++++++---
public/language/fi/admin/general/dashboard.json | 11 ++++++++---
public/language/fr/admin/general/dashboard.json | 11 ++++++++---
public/language/gl/admin/general/dashboard.json | 11 ++++++++---
public/language/he/admin/general/dashboard.json | 11 ++++++++---
public/language/hr/admin/general/dashboard.json | 11 ++++++++---
public/language/hu/admin/general/dashboard.json | 11 ++++++++---
public/language/id/admin/general/dashboard.json | 11 ++++++++---
public/language/it/admin/general/dashboard.json | 11 ++++++++---
public/language/ja/admin/general/dashboard.json | 11 ++++++++---
public/language/ko/admin/general/dashboard.json | 11 ++++++++---
public/language/lt/admin/general/dashboard.json | 11 ++++++++---
public/language/ms/admin/general/dashboard.json | 11 ++++++++---
public/language/nb/admin/general/dashboard.json | 11 ++++++++---
public/language/nl/admin/general/dashboard.json | 11 ++++++++---
public/language/pl/admin/general/dashboard.json | 11 ++++++++---
public/language/pt-BR/admin/general/dashboard.json | 11 ++++++++---
public/language/pt-PT/admin/general/dashboard.json | 11 ++++++++---
public/language/ro/admin/general/dashboard.json | 11 ++++++++---
public/language/ru/admin/general/dashboard.json | 11 ++++++++---
public/language/rw/admin/general/dashboard.json | 11 ++++++++---
public/language/sc/admin/general/dashboard.json | 11 ++++++++---
public/language/sk/admin/general/dashboard.json | 11 ++++++++---
public/language/sl/admin/general/dashboard.json | 11 ++++++++---
public/language/sr/admin/general/dashboard.json | 11 ++++++++---
public/language/sv/admin/general/dashboard.json | 11 ++++++++---
public/language/th/admin/general/dashboard.json | 11 ++++++++---
public/language/tr/admin/general/dashboard.json | 11 ++++++++---
public/language/uk/admin/general/dashboard.json | 11 ++++++++---
public/language/vi/admin/general/dashboard.json | 11 ++++++++---
public/language/zh-CN/admin/general/dashboard.json | 11 ++++++++---
public/language/zh-TW/admin/general/dashboard.json | 11 ++++++++---
43 files changed, 344 insertions(+), 129 deletions(-)
diff --git a/public/language/ar/admin/general/dashboard.json b/public/language/ar/admin/general/dashboard.json
index 02046bd17a..61f4421fb5 100644
--- a/public/language/ar/admin/general/dashboard.json
+++ b/public/language/ar/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
diff --git a/public/language/bg/admin/general/dashboard.json b/public/language/bg/admin/general/dashboard.json
index 871f61f7b0..23335e4652 100644
--- a/public/language/bg/admin/general/dashboard.json
+++ b/public/language/bg/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Потребители",
"posts": "Публикации",
"topics": "Теми",
- "page-views-last-month": "Преглеждания на страниците през последния месец",
- "page-views-this-month": "Преглеждания на страниците този месец",
- "page-views-last-day": "Преглеждания на страниците през последните 24 часа",
+ "page-views-seven": "Последните 7 дни",
+ "page-views-thirty": "Последните 30 дни",
+ "page-views-last-day": "Последните 24 часа",
+ "page-views-custom": "Интервал по избор",
+ "page-views-custom-start": "Начална дата",
+ "page-views-custom-end": "Крайна дата",
+ "page-views-custom-help": "Въведете интервал от дати, за които искате да видите преглежданията на страниците. Ако не се появи календар за избор, можете да въведете датите във формат: ГГГГ-ММ-ДД
",
+ "page-views-custom-error": "Моля, въведете правилен интервал от дати във формата: ГГГГ-ММ-ДД
",
"stats.day": "Ден",
"stats.week": "Седмица",
diff --git a/public/language/bn/admin/general/dashboard.json b/public/language/bn/admin/general/dashboard.json
index 02046bd17a..61f4421fb5 100644
--- a/public/language/bn/admin/general/dashboard.json
+++ b/public/language/bn/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
diff --git a/public/language/cs/admin/general/dashboard.json b/public/language/cs/admin/general/dashboard.json
index fd3e417771..eb269bc916 100644
--- a/public/language/cs/admin/general/dashboard.json
+++ b/public/language/cs/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
diff --git a/public/language/da/admin/general/dashboard.json b/public/language/da/admin/general/dashboard.json
index 19c1bc9f75..07714e37e8 100644
--- a/public/language/da/admin/general/dashboard.json
+++ b/public/language/da/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Side Visninger Sidste Måned",
- "page-views-this-month": "Side Visninger Denne Måned",
- "page-views-last-day": "Side visninger i de sidste 24 timer",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Dag",
"stats.week": "Uge",
diff --git a/public/language/de/admin/general/dashboard.json b/public/language/de/admin/general/dashboard.json
index 29772ca3e6..79e3006735 100644
--- a/public/language/de/admin/general/dashboard.json
+++ b/public/language/de/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Benutzer",
"posts": "Beiträge",
"topics": "Themen",
- "page-views-last-month": "Aufrufe im letzten Monat",
- "page-views-this-month": "Aufrufe in diesem Monat",
- "page-views-last-day": "Aufrufe in den letzten 24 Stunden",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Diesen Tag",
"stats.week": "Diese Woche",
diff --git a/public/language/el/admin/general/dashboard.json b/public/language/el/admin/general/dashboard.json
index 02046bd17a..61f4421fb5 100644
--- a/public/language/el/admin/general/dashboard.json
+++ b/public/language/el/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
diff --git a/public/language/en-US/admin/general/dashboard.json b/public/language/en-US/admin/general/dashboard.json
index 02046bd17a..61f4421fb5 100644
--- a/public/language/en-US/admin/general/dashboard.json
+++ b/public/language/en-US/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
diff --git a/public/language/en-x-pirate/admin/general/dashboard.json b/public/language/en-x-pirate/admin/general/dashboard.json
index 02046bd17a..61f4421fb5 100644
--- a/public/language/en-x-pirate/admin/general/dashboard.json
+++ b/public/language/en-x-pirate/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
diff --git a/public/language/es/admin/general/dashboard.json b/public/language/es/admin/general/dashboard.json
index c68d48da21..28bb5a07eb 100644
--- a/public/language/es/admin/general/dashboard.json
+++ b/public/language/es/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Usuario",
"posts": "Publicación",
"topics": "Temas",
- "page-views-last-month": "Vistas de la Pagina del Mes Pasado",
- "page-views-this-month": "Vistas de la Pagina de este Mes.",
- "page-views-last-day": "Vistas de la Pagina en las ultimas 24 horas",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Día",
"stats.week": "Semana",
diff --git a/public/language/et/admin/general/dashboard.json b/public/language/et/admin/general/dashboard.json
index 02046bd17a..61f4421fb5 100644
--- a/public/language/et/admin/general/dashboard.json
+++ b/public/language/et/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
diff --git a/public/language/fa-IR/admin/general/dashboard.json b/public/language/fa-IR/admin/general/dashboard.json
index 02046bd17a..61f4421fb5 100644
--- a/public/language/fa-IR/admin/general/dashboard.json
+++ b/public/language/fa-IR/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
diff --git a/public/language/fi/admin/general/dashboard.json b/public/language/fi/admin/general/dashboard.json
index 02046bd17a..61f4421fb5 100644
--- a/public/language/fi/admin/general/dashboard.json
+++ b/public/language/fi/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
diff --git a/public/language/fr/admin/general/dashboard.json b/public/language/fr/admin/general/dashboard.json
index b89e291b74..74cab76cd7 100644
--- a/public/language/fr/admin/general/dashboard.json
+++ b/public/language/fr/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Utilisateurs",
"posts": "Messages",
"topics": "Sujets",
- "page-views-last-month": "Pages vues le mois dernier",
- "page-views-this-month": "Pages vues ce mois-ci",
- "page-views-last-day": "Pages vues ces dernières 24 heures",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Jour",
"stats.week": "Semaine",
diff --git a/public/language/gl/admin/general/dashboard.json b/public/language/gl/admin/general/dashboard.json
index 02046bd17a..61f4421fb5 100644
--- a/public/language/gl/admin/general/dashboard.json
+++ b/public/language/gl/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
diff --git a/public/language/he/admin/general/dashboard.json b/public/language/he/admin/general/dashboard.json
index d341cd9fcf..5c05b1aab7 100644
--- a/public/language/he/admin/general/dashboard.json
+++ b/public/language/he/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "יום",
"stats.week": "שבוע",
diff --git a/public/language/hr/admin/general/dashboard.json b/public/language/hr/admin/general/dashboard.json
index 6cbb1de650..d29ba8dd1e 100644
--- a/public/language/hr/admin/general/dashboard.json
+++ b/public/language/hr/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Korisnici",
"posts": "Objave",
"topics": "Teme",
- "page-views-last-month": "Broj pregleda prošli mjesec",
- "page-views-this-month": "Pregleda ovaj mjesec",
- "page-views-last-day": "Pogleda u zadnja 24 sata",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Dan",
"stats.week": "Tjedan",
diff --git a/public/language/hu/admin/general/dashboard.json b/public/language/hu/admin/general/dashboard.json
index 02046bd17a..61f4421fb5 100644
--- a/public/language/hu/admin/general/dashboard.json
+++ b/public/language/hu/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
diff --git a/public/language/id/admin/general/dashboard.json b/public/language/id/admin/general/dashboard.json
index 02046bd17a..61f4421fb5 100644
--- a/public/language/id/admin/general/dashboard.json
+++ b/public/language/id/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
diff --git a/public/language/it/admin/general/dashboard.json b/public/language/it/admin/general/dashboard.json
index 02046bd17a..61f4421fb5 100644
--- a/public/language/it/admin/general/dashboard.json
+++ b/public/language/it/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
diff --git a/public/language/ja/admin/general/dashboard.json b/public/language/ja/admin/general/dashboard.json
index 7dcb9e74ec..ed544afb51 100644
--- a/public/language/ja/admin/general/dashboard.json
+++ b/public/language/ja/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "ユーザー",
"posts": "投稿",
"topics": "スレッド",
- "page-views-last-month": "先月のページビュー数",
- "page-views-this-month": "今月のページビュー数",
- "page-views-last-day": "過去24時間のページビュー",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "日",
"stats.week": "週",
diff --git a/public/language/ko/admin/general/dashboard.json b/public/language/ko/admin/general/dashboard.json
index 02046bd17a..61f4421fb5 100644
--- a/public/language/ko/admin/general/dashboard.json
+++ b/public/language/ko/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
diff --git a/public/language/lt/admin/general/dashboard.json b/public/language/lt/admin/general/dashboard.json
index 02046bd17a..61f4421fb5 100644
--- a/public/language/lt/admin/general/dashboard.json
+++ b/public/language/lt/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
diff --git a/public/language/ms/admin/general/dashboard.json b/public/language/ms/admin/general/dashboard.json
index 02046bd17a..61f4421fb5 100644
--- a/public/language/ms/admin/general/dashboard.json
+++ b/public/language/ms/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
diff --git a/public/language/nb/admin/general/dashboard.json b/public/language/nb/admin/general/dashboard.json
index 02046bd17a..61f4421fb5 100644
--- a/public/language/nb/admin/general/dashboard.json
+++ b/public/language/nb/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
diff --git a/public/language/nl/admin/general/dashboard.json b/public/language/nl/admin/general/dashboard.json
index 02046bd17a..61f4421fb5 100644
--- a/public/language/nl/admin/general/dashboard.json
+++ b/public/language/nl/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
diff --git a/public/language/pl/admin/general/dashboard.json b/public/language/pl/admin/general/dashboard.json
index 1fc261cf9c..359d6eea49 100644
--- a/public/language/pl/admin/general/dashboard.json
+++ b/public/language/pl/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Wyświetlenia strony w ostatnim miesiącu",
- "page-views-this-month": "Wyświetlenia strony w tym miesiącu",
- "page-views-last-day": "Wyświetlenia strony z ostatnich 24 godzin",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Dzień",
"stats.week": "Tydzień",
diff --git a/public/language/pt-BR/admin/general/dashboard.json b/public/language/pt-BR/admin/general/dashboard.json
index 1722d960b0..c6621b2593 100644
--- a/public/language/pt-BR/admin/general/dashboard.json
+++ b/public/language/pt-BR/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Usuários",
"posts": "Posts",
"topics": "Tópicos",
- "page-views-last-month": "Visualizações de página no Último Mês",
- "page-views-this-month": "Visualizações de Página Este Mês",
- "page-views-last-day": "Visualizações de página nas últimas 24 horas",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Dia",
"stats.week": "Semana",
diff --git a/public/language/pt-PT/admin/general/dashboard.json b/public/language/pt-PT/admin/general/dashboard.json
index 02046bd17a..61f4421fb5 100644
--- a/public/language/pt-PT/admin/general/dashboard.json
+++ b/public/language/pt-PT/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
diff --git a/public/language/ro/admin/general/dashboard.json b/public/language/ro/admin/general/dashboard.json
index 02046bd17a..61f4421fb5 100644
--- a/public/language/ro/admin/general/dashboard.json
+++ b/public/language/ro/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
diff --git a/public/language/ru/admin/general/dashboard.json b/public/language/ru/admin/general/dashboard.json
index 02e228ba2e..31eae5031a 100644
--- a/public/language/ru/admin/general/dashboard.json
+++ b/public/language/ru/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Просмотров за прошлый месяц",
- "page-views-this-month": "Просмотров за этот месяц",
- "page-views-last-day": "Просмотров за 24 часа",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "День",
"stats.week": "Неделя",
diff --git a/public/language/rw/admin/general/dashboard.json b/public/language/rw/admin/general/dashboard.json
index 02046bd17a..61f4421fb5 100644
--- a/public/language/rw/admin/general/dashboard.json
+++ b/public/language/rw/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
diff --git a/public/language/sc/admin/general/dashboard.json b/public/language/sc/admin/general/dashboard.json
index 02046bd17a..61f4421fb5 100644
--- a/public/language/sc/admin/general/dashboard.json
+++ b/public/language/sc/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
diff --git a/public/language/sk/admin/general/dashboard.json b/public/language/sk/admin/general/dashboard.json
index 1ffb1c8f76..6ef0ee9fc2 100644
--- a/public/language/sk/admin/general/dashboard.json
+++ b/public/language/sk/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Užívatelia",
"posts": "Príspevky",
"topics": "Témy",
- "page-views-last-month": "Zobrazenia stránok za posledný mesiac",
- "page-views-this-month": "Zobrazenia stránok za tento mesiac",
- "page-views-last-day": "Zobrazenia stránok za posledných 24 hodín",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Deň",
"stats.week": "Týždeň",
diff --git a/public/language/sl/admin/general/dashboard.json b/public/language/sl/admin/general/dashboard.json
index 02046bd17a..61f4421fb5 100644
--- a/public/language/sl/admin/general/dashboard.json
+++ b/public/language/sl/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
diff --git a/public/language/sr/admin/general/dashboard.json b/public/language/sr/admin/general/dashboard.json
index 02046bd17a..61f4421fb5 100644
--- a/public/language/sr/admin/general/dashboard.json
+++ b/public/language/sr/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
diff --git a/public/language/sv/admin/general/dashboard.json b/public/language/sv/admin/general/dashboard.json
index 02046bd17a..61f4421fb5 100644
--- a/public/language/sv/admin/general/dashboard.json
+++ b/public/language/sv/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
diff --git a/public/language/th/admin/general/dashboard.json b/public/language/th/admin/general/dashboard.json
index 02046bd17a..61f4421fb5 100644
--- a/public/language/th/admin/general/dashboard.json
+++ b/public/language/th/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
diff --git a/public/language/tr/admin/general/dashboard.json b/public/language/tr/admin/general/dashboard.json
index fbc3d434d1..81f4fd76c6 100644
--- a/public/language/tr/admin/general/dashboard.json
+++ b/public/language/tr/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Kullanıcılar",
"posts": "İletiler",
"topics": "Başlıklar",
- "page-views-last-month": "Geçen ay sayfa görüntüleme",
- "page-views-this-month": "Bu ay sayfa görüntüleme",
- "page-views-last-day": "Son 24 saatteki sayfa görüntüleme",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Gün",
"stats.week": "Hafta",
diff --git a/public/language/uk/admin/general/dashboard.json b/public/language/uk/admin/general/dashboard.json
index a53c7f5ba9..61528f5fb0 100644
--- a/public/language/uk/admin/general/dashboard.json
+++ b/public/language/uk/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Користувачі",
"posts": "Пости",
"topics": "Теми",
- "page-views-last-month": "Переглядів останнього місяця",
- "page-views-this-month": "Переглядів цього місяця",
- "page-views-last-day": "Переглядів за останні 24 години",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "День",
"stats.week": "Тиждень",
diff --git a/public/language/vi/admin/general/dashboard.json b/public/language/vi/admin/general/dashboard.json
index 02046bd17a..61f4421fb5 100644
--- a/public/language/vi/admin/general/dashboard.json
+++ b/public/language/vi/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
diff --git a/public/language/zh-CN/admin/general/dashboard.json b/public/language/zh-CN/admin/general/dashboard.json
index 9a17c65e68..b99b3b2bcf 100644
--- a/public/language/zh-CN/admin/general/dashboard.json
+++ b/public/language/zh-CN/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "用户",
"posts": "发帖",
"topics": "主题",
- "page-views-last-month": "上个月 PV 数量",
- "page-views-this-month": "本月 PV 数量",
- "page-views-last-day": "过去24小时 PV 数量",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "日",
"stats.week": "周",
diff --git a/public/language/zh-TW/admin/general/dashboard.json b/public/language/zh-TW/admin/general/dashboard.json
index 02046bd17a..61f4421fb5 100644
--- a/public/language/zh-TW/admin/general/dashboard.json
+++ b/public/language/zh-TW/admin/general/dashboard.json
@@ -5,9 +5,14 @@
"users": "Users",
"posts": "Posts",
"topics": "Topics",
- "page-views-last-month": "Page views Last Month",
- "page-views-this-month": "Page views This Month",
- "page-views-last-day": "Page views in last 24 hours",
+ "page-views-seven": "Last 7 Days",
+ "page-views-thirty": "Last 30 Days",
+ "page-views-last-day": "Last 24 hours",
+ "page-views-custom": "Custom Date Range",
+ "page-views-custom-start": "Range Start",
+ "page-views-custom-end": "Range End",
+ "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD
",
+ "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD
",
"stats.day": "Day",
"stats.week": "Week",
From e938d75efc10546a440588d8ea0dcf62dc2073f9 Mon Sep 17 00:00:00 2001
From: Julian Lam
Date: Fri, 12 May 2017 09:56:19 -0400
Subject: [PATCH 062/263] closes #5676
---
src/controllers/authentication.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/controllers/authentication.js b/src/controllers/authentication.js
index 09cb5837b2..5ca9c421ad 100644
--- a/src/controllers/authentication.js
+++ b/src/controllers/authentication.js
@@ -52,7 +52,7 @@ authenticationController.register = function (req, res) {
}
if (userData.username.length > meta.config.maximumUsernameLength) {
- return next(new Error('[[error:username-too-long'));
+ return next(new Error('[[error:username-too-long]]'));
}
user.isPasswordValid(userData.password, next);
From 3fcc21852c5d32936a39ceacc36d886d94bc37d7 Mon Sep 17 00:00:00 2001
From: Julian Lam
Date: Fri, 12 May 2017 11:53:41 -0400
Subject: [PATCH 063/263] bump spam-be-gone
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index 39e8f74fc7..424eeeb0f3 100644
--- a/package.json
+++ b/package.json
@@ -61,7 +61,7 @@
"nodebb-plugin-markdown": "7.1.1",
"nodebb-plugin-mentions": "2.0.3",
"nodebb-plugin-soundpack-default": "1.0.0",
- "nodebb-plugin-spam-be-gone": "0.4.13",
+ "nodebb-plugin-spam-be-gone": "0.5.0",
"nodebb-rewards-essentials": "0.0.9",
"nodebb-theme-lavender": "4.0.0",
"nodebb-theme-persona": "5.0.0",
From 4c00a5ece6a0786fbca156380ed8a047d3a3841c Mon Sep 17 00:00:00 2001
From: Julian Lam
Date: Fri, 12 May 2017 12:14:19 -0400
Subject: [PATCH 064/263] fixing tests
---
test/socket.io.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/test/socket.io.js b/test/socket.io.js
index fc24d24e30..820a845c82 100644
--- a/test/socket.io.js
+++ b/test/socket.io.js
@@ -332,7 +332,7 @@ describe('socket.io', function () {
io.emit('admin.analytics.get', { graph: 'traffic', units: 'days' }, function (err, data) {
assert.ifError(err);
assert(data);
- assert(data.monthlyPageViews);
+ assert(data.summary);
done();
});
});
@@ -341,7 +341,7 @@ describe('socket.io', function () {
io.emit('admin.analytics.get', { graph: 'traffic', units: 'hours' }, function (err, data) {
assert.ifError(err);
assert(data);
- assert(data.monthlyPageViews);
+ assert(data.summary);
done();
});
});
From 70adcd64bcdd477ec91da93048e485fae62f5e31 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?=
Date: Fri, 12 May 2017 14:58:40 -0400
Subject: [PATCH 065/263] #5667
---
public/src/client/category.js | 2 +-
public/src/client/topic/posts.js | 2 +-
src/socket.io/topics/infinitescroll.js | 8 ++++----
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/public/src/client/category.js b/public/src/client/category.js
index 504f132697..4cdd18ca2b 100644
--- a/public/src/client/category.js
+++ b/public/src/client/category.js
@@ -345,7 +345,7 @@ define('forum/category', [
}
if (!topicSelect.getSelectedTids().length) {
- infinitescroll.removeExtra($('[component="category/topic"]'), direction, 60);
+ infinitescroll.removeExtra($('[component="category/topic"]'), direction, config.topicsPerPage * 3);
}
html.find('.timeago').timeago();
diff --git a/public/src/client/topic/posts.js b/public/src/client/topic/posts.js
index fb9074b3be..d768e2ebd7 100644
--- a/public/src/client/topic/posts.js
+++ b/public/src/client/topic/posts.js
@@ -192,7 +192,7 @@ define('forum/topic/posts', [
components.get('topic').append(html);
}
- infinitescroll.removeExtra($('[component="post"]'), direction, 40);
+ infinitescroll.removeExtra($('[component="post"]'), direction, config.postsPerPage * 2);
$(window).trigger('action:posts.loaded', { posts: data.posts });
diff --git a/src/socket.io/topics/infinitescroll.js b/src/socket.io/topics/infinitescroll.js
index f0f6cd2ba6..1d732de2a4 100644
--- a/src/socket.io/topics/infinitescroll.js
+++ b/src/socket.io/topics/infinitescroll.js
@@ -40,7 +40,7 @@ module.exports = function (SocketTopics) {
var reverse = data.topicPostSort === 'newest_to_oldest' || data.topicPostSort === 'most_votes';
var start = Math.max(0, parseInt(data.after, 10));
- var infScrollPostsPerPage = Math.max(0, Math.min(meta.config.postsPerPage || 20, parseInt(data.postsPerPage, 10) || meta.config.postsPerPage || 20) - 1);
+ var infScrollPostsPerPage = Math.max(0, Math.min(meta.config.postsPerPage || 20, parseInt(data.count, 10) || meta.config.postsPerPage || 20) - 1);
if (data.direction > 0) {
if (reverse) {
@@ -93,7 +93,7 @@ module.exports = function (SocketTopics) {
}
var start = parseInt(data.after, 10);
- var stop = start + Math.max(0, Math.min(meta.config.topicsPerPage || 20, parseInt(data.topicsPerPage, 10) || meta.config.topicsPerPage || 20) - 1);
+ var stop = start + Math.max(0, Math.min(meta.config.topicsPerPage || 20, parseInt(data.count, 10) || meta.config.topicsPerPage || 20) - 1);
topics.getUnreadTopics({ cid: data.cid, uid: socket.uid, start: start, stop: stop, filter: data.filter }, callback);
};
@@ -104,7 +104,7 @@ module.exports = function (SocketTopics) {
}
var start = parseInt(data.after, 10);
- var stop = start + Math.max(0, Math.min(meta.config.topicsPerPage || 20, parseInt(data.topicsPerPage, 10) || meta.config.topicsPerPage || 20) - 1);
+ var stop = start + Math.max(0, Math.min(meta.config.topicsPerPage || 20, parseInt(data.count, 10) || meta.config.topicsPerPage || 20) - 1);
topics.getRecentTopics(data.cid, socket.uid, start, stop, data.filter, callback);
};
@@ -115,7 +115,7 @@ module.exports = function (SocketTopics) {
}
var start = parseInt(data.after, 10);
- var stop = start + Math.max(0, Math.min(meta.config.topicsPerPage || 20, parseInt(data.topicsPerPage, 10) || meta.config.topicsPerPage || 20) - 1);
+ var stop = start + Math.max(0, Math.min(meta.config.topicsPerPage || 20, parseInt(data.count, 10) || meta.config.topicsPerPage || 20) - 1);
topics.getTopicsFromSet(data.set, socket.uid, start, stop, callback);
};
From 33f135c0916399067a87c7701a8e14180f1a5ed4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?=
Date: Fri, 12 May 2017 15:40:09 -0400
Subject: [PATCH 066/263] closes #5675
---
src/database/mongo.js | 12 +++---------
1 file changed, 3 insertions(+), 9 deletions(-)
diff --git a/src/database/mongo.js b/src/database/mongo.js
index 273ec18001..80500c94ac 100644
--- a/src/database/mongo.js
+++ b/src/database/mongo.js
@@ -55,6 +55,8 @@ mongoModule.init = function (callback) {
var usernamePassword = '';
if (nconf.get('mongo:username') && nconf.get('mongo:password')) {
usernamePassword = nconf.get('mongo:username') + ':' + encodeURIComponent(nconf.get('mongo:password')) + '@';
+ } else {
+ winston.warn('You have no mongo username/password setup!');
}
// Sensible defaults for Mongo, if not set
@@ -102,15 +104,7 @@ mongoModule.init = function (callback) {
require('./mongo/sets')(db, mongoModule);
require('./mongo/sorted')(db, mongoModule);
require('./mongo/list')(db, mongoModule);
-
- if (nconf.get('mongo:password') && nconf.get('mongo:username')) {
- db.authenticate(nconf.get('mongo:username'), nconf.get('mongo:password'), function (err) {
- callback(err);
- });
- } else {
- winston.warn('You have no mongo password setup!');
- callback();
- }
+ callback();
});
};
From 54a9e7eab97ebbcf959b41d23b03120f9bd301d7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?=
Date: Fri, 12 May 2017 15:53:07 -0400
Subject: [PATCH 067/263] #5674
---
src/database/mongo.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/database/mongo.js b/src/database/mongo.js
index 80500c94ac..fc37c7ae74 100644
--- a/src/database/mongo.js
+++ b/src/database/mongo.js
@@ -78,7 +78,7 @@ mongoModule.init = function (callback) {
servers.push(hosts[i] + ':' + ports[i]);
}
- var connString = 'mongodb://' + usernamePassword + servers.join() + '/' + nconf.get('mongo:database');
+ var connString = nconf.get('mongo:uri') || 'mongodb://' + usernamePassword + servers.join() + '/' + nconf.get('mongo:database');
var connOptions = {
poolSize: 10,
From 5e4b9479d4f34c3edfd83318144cbaf2fe434c11 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?=
Date: Fri, 12 May 2017 16:11:46 -0400
Subject: [PATCH 068/263] closes #5677
---
public/language/en-GB/admin/settings/user.json | 2 ++
src/user/invite.js | 4 ++--
src/views/admin/settings/user.tpl | 7 +++++++
3 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/public/language/en-GB/admin/settings/user.json b/public/language/en-GB/admin/settings/user.json
index b8f51c9288..fa8049c3a9 100644
--- a/public/language/en-GB/admin/settings/user.json
+++ b/public/language/en-GB/admin/settings/user.json
@@ -34,6 +34,8 @@
"registration.max-invites": "Maximum Invitations per User",
"max-invites": "Maximum Invitations per User",
"max-invites-help": "0 for no restriction. Admins get infinite invitations
Only applicable for \"Invite Only\"",
+ "invite-expiration": "Invite expiration",
+ "invite-expiration-help": "# of days invitations expire in.",
"min-username-length": "Minimum Username Length",
"max-username-length": "Maximum Username Length",
"min-password-length": "Minimum Password Length",
diff --git a/src/user/invite.js b/src/user/invite.js
index b7d62bdc7b..0a32c45031 100644
--- a/src/user/invite.js
+++ b/src/user/invite.js
@@ -50,7 +50,7 @@ module.exports = function (User) {
var token = utils.generateUUID();
var registerLink = nconf.get('url') + '/register?token=' + token + '&email=' + encodeURIComponent(email);
- var oneDay = 86400000;
+ var expireIn = (parseInt(meta.config.inviteExpiration, 10) || 1) * 86400000;
async.waterfall([
function (next) {
@@ -76,7 +76,7 @@ module.exports = function (User) {
db.set('invitation:email:' + email, token, next);
},
function (next) {
- db.pexpireAt('invitation:email:' + email, Date.now() + oneDay, next);
+ db.pexpireAt('invitation:email:' + email, Date.now() + expireIn, next);
},
function (next) {
User.getUserField(uid, 'username', next);
diff --git a/src/views/admin/settings/user.tpl b/src/views/admin/settings/user.tpl
index adaa4f8010..db7f078f29 100644
--- a/src/views/admin/settings/user.tpl
+++ b/src/views/admin/settings/user.tpl
@@ -155,6 +155,13 @@
[[admin/settings/user:max-invites-help]]
+